← All work

A 6-DOF arm, sim to real

6-DOF cobot ROS 2 · MoveIt KDL inverse kinematics Joint · Cartesian · waypoint

My first internship, at NextUp Robotics (2024). The arm was supplied; my job was to bring it up in ROS 2, plan motion through MoveIt, and run the same trajectories in simulation and on the real arm.

On the real arm

A MoveIt-planned sequence on the real arm, using the same interfaces as in simulation. The clip is 2.5 s, played forward and back to loop.

What I built

  • Stood up the arm's URDF in ROS 2: robot model, joints and collision geometry.
  • Wrote three motion interfaces on the MoveGroup API: joint-space targets, Cartesian-pose goals, and waypoint trajectories.
  • Configured KDL inverse kinematics, with planning and collision checking through MoveIt.
  • Validated each interface in simulation, then ran the same commands on the real arm, PC-driven over the ROS 2 graph.

What actually broke

The trajectories worked in simulation and failed on the real arm. The URDF didn't match the robot.

MoveIt plans happily against a wrong model, and RViz shows a correct-looking path. Nothing errors; the arm just moves subtly wrong, or hits a joint limit early.

I fixed it by checking every link frame and joint definition against the physical arm.

In simulation

The same robot from the URDF and STL meshes, stepping through the eight Cartesian targets in my position_interface. The waypoints are mine; the path between them is solved by IK for the picture, not by MoveIt's planner.