Robot Setup
URDF Requirements
The motion planning node reads the robot URDF from a WorkcellDescription ROS 2 service at startup. The URDF must satisfy these constraints:
Contains a valid KDL kinematic chain from
kinematics.chain_roottokinematics.chain_tip(both set inarm_planning_config.json).All joints in the chain have
<limit lower="..." upper="..." velocity="..." effort="..."/>tags.Collision geometries are present for all links that participate in self-collision checking (FCL mesh or primitive).
Joint names are consistent across the URDF, the joint limit service response, and all client requests.
Typical 6-DOF industrial robot layout
<link name="base_link"/>
<joint name="s_joint" type="revolute">
<parent link="base_link"/>
<child link="link_s"/>
<limit lower="-3.14" upper="3.14" velocity="2.18" effort="0"/>
</joint>
<!-- ... l_joint, u_joint, r_joint, b_joint, t_joint ... -->
<link name="tool0"/> <!-- chain_tip -->
arm_planning_config.json Reference
Controls the IK solver, OMPL path planner, time parameterizer, and collision manager for each server instance.
Full annotated example:
{
"kinematics": {
"chain_root": "base_link",
"chain_tip": "tool0"
},
"misc": {
"debug": false
},
"kinematics_solver": {
"trac_ik": {
"timeout": 0.02,
"epsilon": 1e-5
}
},
"path_planner": {
"ompl": {
"is_planning_offline": false,
"online_planning": {
"planner_name": "RRTConnect",
"longest_valid_segment": 0.01,
"max_time_allowed": 0.8,
"hybridize": false,
"max_num_threads": 6
},
"offline_planning": {
"planner_name": "RRTstar",
"longest_valid_segment": 0.001,
"max_time_allowed": 2.0,
"hybridize": true,
"max_num_threads": 6
},
"RRTConnect": {
"range": 0.0
}
}
},
"parameterizer": {
"toppra": {
"algorithm_discretization_num": 200,
"max_tries": 5,
"max_path_deviation": 5
},
"totg": {
"max_path_deviation": 5
},
"iptp": {
"max_iterations": 1000,
"max_time_change_per_iteration": 0.001
}
},
"collision_manager": {
"num_max_contacts": 1,
"enable_contact": false
},
"trajectory_filter": {
"smoothing_coef": [0.25, 0.5, 1.0, 0.5, 0.25]
},
"cartesian_planner": {
"use_diagonal": false
}
}
Field reference
kinematics
Field |
Type |
Description |
|---|---|---|
|
string |
URDF link name for the root of the KDL chain (e.g. |
|
string |
URDF link name for the tip of the KDL chain (e.g. |
misc
Field |
Type |
Description |
|---|---|---|
|
bool |
Enable verbose debug logging. Default |
kinematics_solver.trac_ik
Field |
Type |
Description |
|---|---|---|
|
number (> 0) |
IK solver timeout in seconds. Typical value: |
|
number (> 0) |
Cartesian precision tolerance for the IK solver. Typical value: |
path_planner.ompl
Field |
Type |
Description |
|---|---|---|
|
bool |
|
|
enum |
OMPL planner algorithm. One of: |
|
number (> 0) |
Maximum collision-check step size along the path in radians. Smaller = safer but slower. |
|
number (> 0) |
Planning timeout in seconds. Typical online value: |
|
bool |
Apply post-processing path smoothing after planning. |
|
int (≥ 1) |
Number of parallel OMPL planning threads per server. |
|
enum |
One of: |
|
number (≥ 0) |
RRTConnect range parameter. |
path_planner.astar (offline graph-based planner)
Field |
Type |
Description |
|---|---|---|
|
number |
Heuristic weight magnitude. |
|
number |
Position distance weighting in the heuristic. |
|
number |
Orientation distance weighting in the heuristic. |
|
int (≥ 1) |
Graph adjacency levels. |
|
string |
Absolute path to the offline graph data directory. |
|
int (≥ 1) |
Parallel search threads. |
path_planner.joint_coupling
Field |
Type |
Description |
|---|---|---|
|
number (> 0) |
Collision-check step size in radians for coupled joint motion. |
|
int (≥ 1) |
Parallel planning threads. |
parameterizer.toppra
Field |
Type |
Description |
|---|---|---|
|
int (≥ 2) |
Number of path discretization points. Higher = more accurate but slower. |
|
int (≥ 1) |
Maximum retry attempts if TOPPRA fails. |
|
number (> 0) |
Maximum allowed path deviation in degrees. |
parameterizer.totg
Field |
Type |
Description |
|---|---|---|
|
number (> 0) |
Maximum allowed path deviation in degrees. |
parameterizer.iptp
Field |
Type |
Description |
|---|---|---|
|
int (≥ 1) |
Maximum IPTP iterations. |
|
number (> 0) |
Maximum time delta allowed per iteration in seconds. |
collision_manager
Field |
Type |
Description |
|---|---|---|
|
int (≥ 0) |
Maximum contacts to report per collision check. |
|
bool |
Retrieve full contact information (positions, normals). Only needed if you call |
trajectory_filter
Field |
Type |
Description |
|---|---|---|
|
number[] |
Convolution kernel applied to joint trajectories after parameterization. Coefficients must sum to approximately 1.0. Example: |
cartesian_planner
Field |
Type |
Description |
|---|---|---|
|
bool |
Use diagonal Cartesian interpolation mode. |
motion_planning_config.json Reference
Controls the server pool and ROS 2 service layer. All fields are optional; defaults shown.
{
"collision_servers_num": 2,
"fk_servers_num": 2,
"ik_servers_num": 4,
"motion_servers_num": 4,
"parameterizer_servers_num": 2,
"qos_service_queue_depth": 10,
"workcell_service_timeout_sec": 10
}
Field |
Default |
Description |
|---|---|---|
|
1 |
CollisionServer pool size. Each instance handles one concurrent collision-check request. |
|
1 |
FKServer pool size. |
|
1 |
IKServer pool size. |
|
1 |
MotionServer pool size. Increase for parallel motion planning requests. |
|
1 |
ParameterizerServer pool size. |
|
10 |
ROS 2 service QoS queue depth. |
|
10 |
Seconds to wait for the |
OPW Kinematics Parameters Reference
OPW provides fast analytic IK for standard 6-DOF industrial robots. These parameters describe the Denavit-Hartenberg geometry of the robot. Values are in metres and radians.
{
"opw_kinematics": {
"a1": 0.075,
"a2": -0.042,
"b": 0.0,
"c1": 0.495,
"c2": 0.640,
"c3": 0.600,
"c4": 0.11,
"offsets": [0, 0, 0, 0, 0, 0],
"sign_corrections": [1, 1,-1, 1, 1, 1]
}
}
Field |
Type |
Description |
|---|---|---|
|
number |
Parallel shift between axes 1 & 2 (metres). Typically small. |
|
number |
Parallel shift between axes 2 & 3 (metres). Typically negative. |
|
number |
Wrist offset b (metres). |
|
number (> 0) |
Shoulder height — distance from base to axis 2 (metres). |
|
number (> 0) |
Upper arm length — distance between axes 2 & 3 (metres). |
|
number (> 0) |
Forearm length — distance between axes 3 & 4 (metres). |
|
number (> 0) |
Wrist length — distance from axis 4 to flange (metres). |
|
number[6] |
Per-joint angular offsets in radians. Applied on top of joint positions before OPW calculation. |
|
int[6] (±1) |
Per-joint sign corrections. Aligns OPW joint convention with the URDF joint direction. Each value must be |
Tip
OPW parameters for common Yaskawa / FANUC / KUKA / ABB robots are published in the opw_kinematics ROS package. Start there before deriving them from a URDF.
Inverse Dynamics Config Reference
Required only when using TOPPRA with torque constraints. Leave the path empty ("") in the launch file otherwise.
{
"inverse_dynamics_config_stamped": {
"use": true,
"inverse_dynamics_shared_lib": "/path/to/libmy_id_model.so",
"derived_model_scoped_class_name": "my_ns::MyIDModel",
"base_params": [1.0, 2.0, 3.0]
}
}
Field |
Required |
Description |
|---|---|---|
|
Yes |
|
|
If |
Absolute path to the |
|
If |
Fully-scoped class name to instantiate from the shared library (e.g. |
|
No |
Robot-specific dynamic model parameters passed to the constructor. |