Original: Your First C++ MoveIt Project
Open two terminals inside the devcontainer.
source /opt/ros/jazzy/setup.bash
ros2 launch moveit_resources_panda_moveit_config demo.launch.pyThis starts:
ros2_control_nodewith mock Panda hardware (no physical robot needed)- Controllers:
joint_state_broadcaster,panda_arm_controller,panda_hand_controller robot_state_publisher+ static TFworld -> panda_link0move_group— the MoveIt planning/execution action serverrviz2with the MotionPlanning GUI panel configured for grouppanda_arm
demo.launch.py pre-configures these, but verify under Displays > MotionPlanning if anything looks wrong:
| Field | Value | Note |
|---|---|---|
| Robot Description | robot_description |
Standard topic, same for any robot |
| Planning Scene Topic | /monitored_planning_scene |
Published by move_group |
| Planned Path > Trajectory Topic | /display_planned_path |
Published by move_group |
| Planning Group | panda_arm |
Panda-specific. Do NOT use manipulator — that is the Kinova Gen 3 group name |
source /opt/ros/jazzy/setup.bash
cd /workspace
colcon build --packages-select hello_moveit
source install/setup.bash
ros2 run hello_moveit hello_moveitThe node connects to the running move_group, plans to pose (x=0.28, y=-0.2, z=0.5), and executes. The trajectory plays back in RViz.
The official tutorial builds MoveIt from source. This table covers every step that differs when using binary packages instead.
| Step | Official tutorial (source) | This setup (binary) |
|---|---|---|
| Install MoveIt | vcs import + colcon build (~30 MoveIt repos) |
apt-get install of 16 packages in the Dockerfile (done for you in the container) |
| Launch the demo | ros2 launch moveit2_tutorials demo.launch.py |
ros2 launch moveit_resources_panda_moveit_config demo.launch.py |
| Build scope | colcon build --mixin release (MoveIt + your code) |
colcon build --packages-select hello_moveit (your code only) |
| Workspace sourcing | source ~/ws_moveit/install/setup.bash |
source /opt/ros/jazzy/setup.bash then source /workspace/install/setup.bash |
moveit2_tutorials only exists if you built it from source. moveit_resources_panda_moveit_config is the binary package that ships the same Panda demo launch file — same nodes, same controllers, same RViz config.
| Item | Why it's the same |
|---|---|
#include <moveit/move_group_interface/move_group_interface.hpp> |
Headers install to /opt/ros/jazzy/include/ regardless of source or binary |
CMakeLists.txt (find_package, ament_target_dependencies) |
Resolves via ament cmake configs installed to the same path either way |
package.xml (<depend>moveit_ros_planning_interface</depend>) |
This is the ament package name; the Debian package installs it transparently |
ros2 run hello_moveit hello_moveit |
Your package and executable names don't change |
All installed in .devcontainer/Dockerfile under the INSTALL_MOVEIT block:
| Package | Role |
|---|---|
ros-jazzy-moveit |
Meta package — pulls in the core MoveIt stack |
ros-jazzy-moveit-resources-panda-moveit-config |
Panda URDF, SRDF, MoveIt config, and demo.launch.py |
ros-jazzy-moveit-visual-tools |
Visual debugging markers in RViz |
ros-jazzy-rviz-visual-tools |
Base visual tools library |
ros-jazzy-moveit-task-constructor-core |
Task-level motion planning |
ros-jazzy-moveit-py |
Python bindings for MoveIt |
ros-jazzy-warehouse-ros-sqlite |
SQLite-backed scene persistence |
ros-jazzy-ros2-control |
Hardware abstraction layer |
ros-jazzy-controller-manager |
Controller lifecycle management |
ros-jazzy-joint-trajectory-controller |
Executes joint trajectories |
ros-jazzy-joint-state-broadcaster |
Publishes joint states |
ros-jazzy-joint-state-publisher |
Joint state publisher |
ros-jazzy-robot-state-publisher |
Publishes TF from URDF |
ros-jazzy-rviz2 |
3D visualization |
ros-jazzy-xacro |
URDF macro preprocessor |
ros-jazzy-joy |
Joystick input |
Note: The ros-jazzy-moveit meta package does NOT transitively pull moveit-task-constructor-core, moveit-py, moveit-resources-panda-moveit-config, warehouse-ros-sqlite, the ros2-control stack, xacro, or joy. All must be listed explicitly.
The Panda SRDF (from moveit-resources-panda-moveit-config) defines three groups:
| Group | Joints |
|---|---|
panda_arm |
7 arm joints (panda_joint1 through panda_joint7) |
hand |
2 finger joints |
panda_arm_hand |
All 9 joints |
Use panda_arm in your MoveGroupInterface for arm-only planning (this is what the tutorial and demo.launch.py default to).