Troubleshooting
Systematic diagnosis of common errors and failures. Every KineticError
variant is listed with its message, common cause, and fix.
IK Failures
IKNotConverged
Message: IK did not converge after {iterations} iterations (residual: {residual})
Common causes:
- Target pose is at or near the workspace boundary
- Seed configuration is far from the solution
- Solver damping is too high (DLS)
Fix:
- Increase
num_restartsto 8 or higher - Provide a better seed via
IKConfig::with_seed(current_joints) - Lower DLS damping from 0.05 to 0.01
- Try
IKConfig::with_fallback()for position-only fallback - Verify the target is reachable by checking workspace bounds
NoIKSolution
Message: No valid IK solution found for target pose
Common causes:
- Target is physically outside the robot’s workspace
- Joint limits prevent reaching the target orientation
- Wrong kinematic chain (base_link or tip_link mismatch)
Fix:
- Verify the target is within the robot’s reachable workspace
- Check that
base_linkandtip_linkin the config match your URDF - Use
IKMode::PositionOnlyif orientation does not matter
SingularityLockup
Message: Singularity lockup: pseudoinverse failed {n} consecutive times
Common causes:
- Robot is at a singular configuration (e.g., arm fully extended)
- Servo mode is driving through a singularity
Fix:
- Move the robot away from the singular configuration manually
- In servo mode, increase
singularity_damping(e.g., 0.1) - Check
solution.condition_number– values above 100 indicate trouble
Planning Failures
PlanningTimeout
Message: Planning timed out after {elapsed} ({iterations} iterations)
Common causes:
- Environment is highly constrained (narrow passages)
- Timeout is too short for the problem complexity
- Start or goal is near an obstacle
Fix:
- Increase timeout:
PlannerConfig::offline()uses 500ms - Try EST or KPIECE for narrow passages
- Verify start and goal are not in collision before planning
- Reduce
collision_marginif the robot is being too conservative
StartInCollision
Message: Start configuration is in collision
Common causes:
- Robot’s current joint state touches a scene obstacle
- Self-collision due to tight collision model
- Wrong joint values (e.g., degrees instead of radians)
Fix:
- Check
planner.is_in_collision(&start)before planning - Verify joint values are in radians
- Add offending link pairs to
skip_pairsif they are false positives - Reduce
collision_margin
GoalInCollision / GoalUnreachable
GoalInCollision: Target joints collide with the scene. Verify the goal is collision-free and adjust if needed.
GoalUnreachable: Goal joints violate URDF limits or pose has no IK
solution. Check that values are within robot.joint_limits.
PlanningFailed
Message: Planning failed: {reason}
Common causes:
- No collision-free path exists between start and goal
- Planner exhausted all iterations without connecting trees
Fix:
- Increase iterations and timeout
- Try a different planner (EST, KPIECE for constrained spaces)
- Decompose the problem into intermediate waypoints
Collision Issues
CollisionDetected
Message: Collision detected at waypoint {index}
Common causes:
- Post-planning validation found a collision (shortcutting artifact)
- Scene changed between planning and validation
Fix:
- Replan with the current scene
- Increase
collision_marginto build in safety buffer - Disable shortcutting if it is creating invalid shortcuts
PlannerOutputInvalid
Message: Planner output invalid at waypoint {waypoint}: {reason}
Common causes:
- A waypoint violates joint limits (safety gate 1)
- End-effector position exceeds workspace bounds (safety gate 2)
Fix:
- If joint limits: check URDF limit accuracy
- If workspace bounds: widen bounds or remove
workspace_boundsconfig - This error indicates a planner bug – report it if reproducible
Trajectory Violations
TrajectoryLimitExceeded
Message: Trajectory limit exceeded at waypoint {index}: {detail}
Common causes:
- Velocity or acceleration exceeds robot limits
- Time parameterization produced infeasible timing
Fix:
- Use
trapezoidal_per_jointwhich respects per-joint limits - Lower
velocity_scalein the execution config - Increase the time parameterization’s speed limits
Robot Loading Errors
UrdfParse
Message: URDF parse error: {detail}
Common causes:
- Malformed XML in the URDF file
- Missing required tags (
joint,link,origin) - Encoding issues (non-UTF-8 characters)
Fix:
- Validate your URDF with
check_urdf(from ROS) or an XML validator - Ensure all joints have
type,parent,child,limittags
RobotConfigNotFound
Message: Robot config not found: {name}
Common causes:
- Typo in the robot name
- Config directory not in
robot_configs/ - Missing
kinetic.tomlin the config directory
Fix:
- Check spelling:
Robot::from_name("ur5e")(notUR5eorur-5e) - Verify
robot_configs/{name}/kinetic.tomlexists - Use
Robot::from_path()for custom locations
DimensionMismatch
Message: Dimension mismatch in {context}: expected {expected}, got {got}
Common causes:
- Wrong number of joint values for the robot
- Mixing full robot DOF with chain DOF
- Array indexing error in user code
Fix:
- Check
robot.dofandchain.dofand match your arrays accordingly - For mobile manipulators (Fetch, TIAGo), the chain DOF may be less than robot DOF
LinkNotFound / JointNotFound: Typo in link or joint name.
NamedConfigNotFound: Pose not in kinetic.toml [named_poses].
ChainExtraction: Links not connected by joints in the URDF.