Getting Started
Prerequisites
System requirements
ROS 2 Jazzy Jalisco
Ubuntu 24.04 (Noble)
C++17 compiler (GCC 13+ or Clang 16+)
Python 3.12+
Dependencies (installed in the CI base image or via apt)
sudo apt-get install -y \
ros-jazzy-ros-base \
ros-jazzy-ros-gz-bridge \
libnlohmann-json3-dev \
liborocos-kdl-dev \
libeigen3-dev \
libfcl-dev \
libompl-dev \
libtrac-ik-dev
colcon mixins (one-time workspace setup)
sudo apt-get install python3-colcon-mixin python3-vcstool
colcon mixin add local file://$(pwd)/ci/colcon_mixins/index.yaml
colcon mixin update local
Building
All commands run from the workspace root (jazzy_sorting_ws/), not from within this package.
# Import dependency repos
vcs import src < src/deps/core_motion_planning/ci/deps.repos
# Build everything
colcon build --mixin dev
# Build only this stack (faster iteration)
colcon build --mixin dev --packages-select \
motion_planning_types \
core_robot \
core_arm_planning \
core_motion_planning \
motion_planning
# Source the install space
source install/setup.bash
Launching the Node
Use the provided launch file. arm_planning_config and motion_planning_config are required; OPW params and inverse dynamics config are optional but recommended.
ros2 launch motion_planning motion_planning.launch.py \
arm_planning_config:=/path/to/arm_planning_config.json \
motion_planning_config:=/path/to/motion_planning_config.json \
opw_params:=/path/to/opw_params.json \
inverse_dynamics_config:=/path/to/inverse_dynamics_config.json
Launch Arguments
Argument |
Required |
Description |
|---|---|---|
|
Yes |
Absolute path to the arm planning JSON config. Controls IK solver, path planner, parameterizer, and collision settings. |
|
Yes |
Absolute path to the motion planning JSON config. Controls server pool sizes and ROS 2 service settings. |
|
No ( |
Absolute path to OPW kinematics parameters. Enables the fast analytic OPW IK solver; falls back to TRAC-IK if omitted. |
|
No ( |
Absolute path to inverse dynamics config. Required only when using TOPPRA with torque constraints. |
Note
Omitting opw_params logs a warning and uses TRAC-IK for all inverse kinematics. OPW is 10-100× faster for supported 6-DOF industrial robots.
Quick Smoke Test
With the node running, verify it is alive:
source install/setup.bash
# Check node is up
ros2 node list | grep motion_planning
# List available services
ros2 service list | grep -E "compute|check|get"
# Call forward kinematics (MH50 robot joints at zero)
ros2 service call /compute_fk motion_planning_interfaces/srv/ComputeFK \
"{robot_state: {joint_state: {name: ['s_joint','l_joint','u_joint','r_joint','b_joint','t_joint'], position: [0.0,0.0,0.0,0.0,0.0,0.0]}}, root_frame: 'base_link', tip_frame: 'tool0'}"
A SUCCESS error code (value 1) confirms the node is functional.
Testing
source /opt/ros/jazzy/setup.bash && source install/setup.bash
# C++ gtests (unit + integration)
colcon test --packages-select core_arm_planning core_motion_planning \
--event-handlers console_direct+ --return-code-on-test-failure
# Python integration tests (requires running node + robot workcell)
colcon test --packages-select motion_planning \
--event-handlers console_direct+ --return-code-on-test-failure
# Python tests in parallel
colcon test --packages-select motion_planning --pytest-args "-n auto" \
--event-handlers console_direct+ --return-code-on-test-failure