# Workspace Sampling Moro 0.5.0 provides numerical sampling of the reachable end-effector position workspace of a serial manipulator. The feature approximates $$ \mathcal W = \{p(q)\mid q\in\mathcal Q\} $$ by drawing joint configurations from a finite joint-space domain and evaluating forward kinematics. The result is a sampled point cloud, not an exact workspace boundary. ## Basic usage ```python from moro.workspace import sample_workspace workspace = sample_workspace( robot, samples=5000, seed=1, ) ``` The result contains: ```python workspace.points workspace.configurations workspace.joint_limits workspace.seed workspace.samples workspace.dof workspace.bounds ``` The public array shapes are: ```text workspace.points.shape == (N, 3) workspace.configurations.shape == (N, robot.dof) ``` Planar robots still use three Cartesian coordinates. ## Joint-space domain By default, sampling uses: ```python robot.joint_limits ``` You may override them for a single call: ```python workspace = sample_workspace( robot, samples=2000, joint_limits=[ (-1.0, 1.0), (-0.5, 0.5), ], ) ``` Explicit limits completely replace the robot limits for that sampling call and do not mutate the robot. Every interval must be finite and strictly ordered: $$ q_{i,\min}