MoveIt 2 Setup Assistant Tutorial: Custom 3-Joint Arm Troubleshooting Guide (ROS 2 Jazzy)

Hello ROS Community,

I want to share a comprehensive step-by-step video tutorial on configuring MoveIt 2 from scratch for a custom robotic manipulator on ROS 2 Jazzy and Ubuntu 24.04.

While most official tutorials use high-DOF industrial manipulators (like the Franka Emika Panda), building configurations for smaller or custom arms often introduces unique glitches that standard guides don’t cover (0:33). In this video, I take a 3-joint printed arm model (arduinobot) with a gripper (0:17), walk through the MoveIt Setup Assistant, generate the config package, and explicitly show how to fix the common runtime errors that pop up (18:28).

:television: Watch the Full Tutorial here: https://youtu.be/eWbAi8HUdE8
Environment & Setup

  • OS: Ubuntu 24.04 LTS
  • ROS 2 Version: Jazzy Jalisco
  • MoveIt Version: MoveIt 2.12
  • Middleware: Cyclone DDS (rmw_cyclonedds_cpp) (3:19)
  • Hardware: No physical hardware required (uses simulated/fake components in RViz) (7:51)

What This Video Covers (And the Errors Fixed)

Instead of just showing a flawless run, this video acts as a practical troubleshooting handbook. Here are the 5 major roadblocks we encounter and solve live:

  1. move_group Crash (Joint Limits Type Error): Fixing the expected double, got integer error inside joint_limits.yaml by ensuring type consistency and manually initializing acceleration properties (21:47).
  2. Action Execution Failure: Resolving trajectory failures by explicitly mapping the action_ns: follow_joint_trajectory namespace inside moveit_controllers.yaml (26:44).
  3. Start Point Deviation Abort: How to correctly configure and command execution directly from the current robot state to avoid state deviations (25:59).
  4. Broken Interactive Markers (3-DOF Limitation) (31:48): Standard KDL kinematics solver fails to compute position and orientation together for a 3-joint setup (0:43). We resolve this by forcing position_only_ik: true inside kinematics.yaml to unlock full marker functionality (34:23).

Pilz Industrial Motion Planner Acceleration Violations: Setting up the OMPL and Pilz planners (LIN, PTP, CIRC) (37:29). We fix joint acceleration violations under linear paths by dialing down the Acceleration Scaling factor to 0.3 (39:09).

:open_book: Video Timeline & Highlights

  • 0:00 - Intro & Overview of the 3-Joint arduinobot
  • 2:51 - Setting up Cyclone DDS Middleware
  • 7:09 - URDF Preparation (Stripping conflicting Gazebo/ros2_control tags)
  • 10:36 - Defining Planning Groups (Arm KDL Chain & Gripper)
  • 21:16 - [Error Fix 1] Repairing joint_limits.yaml formatting
  • 26:16 - [Error Fix 2] Structuring moveit_controllers.yaml action namespaces
  • 31:59 - [Error Fix 3] Fixing Interactive Markers via Position-Only IK
  • 37:00 - Switching to Pilz Industrial Planner for Linear (LIN) Motion

If you are currently struggling to port a low-degree-of-freedom manipulator or custom URDF into MoveIt 2 on Jazzy, I hope this deep dive saves you hours of debugging (0:33)!

I would love to hear feedback from the community regarding your experiences with Position-Only IK behaviors or configuring custom industrial motion planners on Jazzy!