# Kinetica Workspace Reachability Map > Robot + plane → sampled 2-D reachability map coloured by manipulability, with collisions. Maps where a serial robot’s tool centre point can reach in a horizontal or vertical plane: seeded joint samples are mapped through forward kinematics onto a grid and every cell is coloured by the best manipulability (σmin/σmax) found there, so near-singular zones stand out. With obstacles, cells the robot reaches only in collision are shown separately. Returns an SVG map, the reachable area and the cell list. Part of usefulweb.app (https://usefulweb.app/). Part of [Kinetica](https://kinetica.usefulweb.app/) (ownerApp: kinetica). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://kineticaworkspacemap.usefulweb.app/ (interactive tool at https://kineticaworkspacemap.usefulweb.app/tool) - JSON API: POST https://kineticaworkspacemap.usefulweb.app/api/v1/calculate with a JSON object of inputs (schema: https://kineticaworkspacemap.usefulweb.app/api/v1/tool) - OpenAPI: https://kineticaworkspacemap.usefulweb.app/openapi.json - MCP (Streamable HTTP): https://kineticaworkspacemap.usefulweb.app/mcp - tool `kinetica_workspace_map` ## Inputs - robot (select): Robot - A library robot, or choose a custom DH table, URDF or Kinetica robot JSON. - convention (select): DH convention (custom table) - dh (table): DH table (custom) - One row per joint. Lengths in mm, angles in degrees. For revolute joints θ is the zero offset, for prismatic joints d is. - robotText (textarea): URDF or robot JSON - Used when Robot is “URDF” or “Kinetica robot JSON”. URDF subset: links with box/cylinder/sphere, revolute/continuous/prismatic/fixed joints. - tool (text): Tool offset (TCP) - x, y, z (mm), roll, pitch, yaw (deg) in the flange frame, e.g. “0, 0, 150, 0, 0, 0”. Empty = robot default. - plane (select): Plane - offset (number): Plane offset - Position of the plane along its normal in world coordinates. - cell (number): Cell size - Grid cell size; also the thickness of the slice. - samples (integer): Samples - seed (integer): Random seed - obstacles (table): Obstacles - Box: centre x, y, z and size sx, sy, sz. Sphere: centre and r. Capsule or cylinder: start x, y, z, end x2, y2, z2 (in the size columns) and r. All in mm, world frame. - margin (number): Safety margin - self (boolean): Exclude self-collisions ## Method - Joint configurations are drawn uniformly within the joint limits from a seeded mulberry32 generator and mapped to TCP positions by forward kinematics. A sample counts for the slice when the TCP lies within half a cell of the plane. - When joint 1 is revolute, each sample is also rotated about the fixed joint-1 axis onto the plane (A·cos δ + B·sin δ = C has up to two solutions); the rest of the arm turns rigidly with it, so manipulability is unchanged. Rotations that would leave joint 1’s limits are dropped. This puts almost every sample into the slice instead of a few percent. - Each grid cell stores the best σmin/σmax of the normalised Jacobian found there: green ≥ 0.1, light green 0.06–0.1, amber 0.03–0.06, red < 0.03 (near-singular, as in the forward-kinematics tool). With the reach-normalised Jacobian, 6-axis arms rarely exceed about 0.13, planar arms and gantries reach up to 1. - With obstacles, each sample is checked with the capsule/box collision model (plus self-collision when enabled); cells reached only in collision are grey and do not count as reachable area. - It is a Monte-Carlo map: an empty cell inside the envelope may still be reachable with more samples. Orientation is free (any tool orientation counts). ## Limits - Kinematic simulation for planning and teaching. It is not a certified safety function: verify every program on the real controller with reduced speed and the cell safety system active. Geometry is a simplified envelope of the real robot.