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

**URL:** <https://discourse.openrobotics.org/t/moveit-2-setup-assistant-tutorial-custom-3-joint-arm-troubleshooting-guide-ros-2-jazzy/58541>\
**Category:** ROS General\
**Created:** [October 2, 2026, 4:09pm UTC](https://discourse.openrobotics.org/t/moveit-2-setup-assistant-tutorial-custom-3-joint-arm-troubleshooting-guide-ros-2-jazzy/58541 "2026-10-02T16:09:37Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Prasad\_Prabhu](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/prasad_prabhu/32/35323_2.png) [@Prasad\_Prabhu](https://discourse.openrobotics.org/u/Prasad_Prabhu)\
**Post date:** [October 2, 2026, 4:09pm UTC](https://discourse.openrobotics.org/t/moveit-2-setup-assistant-tutorial-custom-3-joint-arm-troubleshooting-guide-ros-2-jazzy/58541/1 "2026-10-02T16:09:37Z")

</div>

**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](https://www.youtube.com/watch?v=eWbAi8HUdE8&t=33s)). In this video, I take a 3-joint printed arm model (`arduinobot`) with a gripper ([0:17](https://www.youtube.com/watch?v=eWbAi8HUdE8&t=17s)), 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](https://www.youtube.com/watch?v=eWbAi8HUdE8&t=1108s)).

📺 **Watch the Full Tutorial here:** [https://youtu.be/eWbAi8HUdE8](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](https://www.youtube.com/watch?v=eWbAi8HUdE8&t=199s))
- **Hardware:** No physical hardware required (uses simulated/fake components in RViz) ([7:51](https://www.youtube.com/watch?v=eWbAi8HUdE8&t=471s))

**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](https://www.youtube.com/watch?v=eWbAi8HUdE8&t=1307s)).
2. **Action Execution Failure:** Resolving trajectory failures by explicitly mapping the `action_ns: follow_joint_trajectory` namespace inside `moveit_controllers.yaml` ([26:44](https://www.youtube.com/watch?v=eWbAi8HUdE8&t=1604s)).
3. **Start Point Deviation Abort:** How to correctly configure and command execution directly from the current robot state to avoid state deviations ([25:59](https://www.youtube.com/watch?v=eWbAi8HUdE8&t=1559s)).
4. **Broken Interactive Markers (3-DOF Limitation) ([31:48](https://www.youtube.com/watch?v=eWbAi8HUdE8&t=1908s)):** Standard KDL kinematics solver fails to compute position and orientation together for a 3-joint setup ([0:43](https://www.youtube.com/watch?v=eWbAi8HUdE8&t=43s)). We resolve this by forcing `position_only_ik: true` inside `kinematics.yaml` to unlock full marker functionality ([34:23](https://www.youtube.com/watch?v=eWbAi8HUdE8&t=2063s)).

**Pilz Industrial Motion Planner Acceleration Violations:** Setting up the **OMPL** and **Pilz planners** (LIN, PTP, CIRC) ([37:29](https://www.youtube.com/watch?v=eWbAi8HUdE8&t=2249s)). We fix joint acceleration violations under linear paths by dialing down the Acceleration Scaling factor to `0.3` ([39:09](https://www.youtube.com/watch?v=eWbAi8HUdE8&t=2349s)).

**📖 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](https://www.youtube.com/watch?v=eWbAi8HUdE8&t=33s))!

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!

* * *

* * *
