๐งฏ Common Errors
This page catalogs the most frequent failures in the LIMO system, how to recognize them (by logs or symptoms), step-by-step fixes, and how to prevent them next time.
๐ชต Most Common Errors โ By Log Messageโ
- โ Nav2 server not ready!
- โ Goal rejected.
- YOLO: no frames / depth invalid
- [โ TF FAIL] Even 'now' failed
- MyCobot: connection / no motion
- No initial pose set
Where it appears: mission_manager.py
Why it happens: Nav2 is still starting when Mission Manager tries to send a goal.
Fix (step-by-step):
- Stop everything (
Ctrl+C). - Start Nav2 alone and wait for "Lifecycle nodes are active."
ros2 launch limo_bringup limo_nav2.launch.py map:=/path/to/map.yaml - If stable, re-run full launch. If using
full_system.launch.py, increase theTimerActiondelay for Mission Manager by +3โ5s.
Prevention:
- Keep Mission Manager start โฅ 10s after Nav2 (
TimerAction). - Avoid CPU spikes (close browsers/RViz while starting).
Where: mission_manager.py during navigate_to_pose
Causes: invalid frame, unreachable goal, AMCL not localized, or costmap thinks the goal is in an obstacle.
Fix:
- Confirm frames:
ros2 run tf2_tools view_frames.py && evince frames.pdf - Check goal is in map:
- RViz โ "2D Pose Estimate" โ confirm robot is roughly correct.
- Try a nearby reachable goal (clear of obstacles).
- Clear costmaps:
ros2 service call /global_costmap/clear_entirely_std_srvs/Empty {}
ros2 service call /local_costmap/clear_entirely_std_srvs/Empty {}
Prevention:
- Use valid map + correct origin/resolution in .yaml.
- Run
pose_setter.pyonly after Nav2 + map server are up.
Where: object_detector.py
Symptoms/logs: No /yolo/annotated, warnings like [SKIP] No valid depth at (cx,cy).
Fix:
- Verify topics exist:
ros2 topic list | grep -E "camera|image|depth" - Ensure depth encoding is
16UC1; reconfigure camera if needed. - Confirm intrinsics publishing:
ros2 topic echo /camera/color/camera_info -n1 - If depth alignment is off, re-seat camera or adjust static TF (cameraโbase_link).
Prevention:
- Keep camera TF fixed and correct (
static_transform_publisher). - Clean lens; avoid reflective floors (depth dropouts).
Where: object_detector.py (map transform)
Why: TF tree incomplete or wrong frame names; timestamp mismatch.
Fix:
- Inspect TF:
ros2 run tf2_tools view_frames.py && evince frames.pdf - Ensure
depth_msg.header.frame_idequals your camera link (e.g.,camera_link). - Start the
static_transform_publisherbefore YOLO node. - Retry with reduced transform timeout (already handled in code) after frames are steady.
Prevention:
- Launch the static TF node early (
TimerActionbefore detector).
Where: pick_node.py / drop_node.py
Symptoms: No movement, or socket error.
Fix:
- Ensure hotspot
MyCobotWiFi2.4G/ passmycobt123is ON. - Ping detected IP (from auto-scan) or fallback:
ping 192.168.137.75 - Run arm node directly with IP:
ros2 run mycobot_arm pick_node --ros-args -p m5_ip:=192.168.137.75 - Power-cycle the arm; re-run.
Prevention:
- Keep the arm on stable power; avoid sharing the 2.4GHz band with heavy traffic.
Where: Nav2/AMCL feels "lost"
Logs: Goals fail or robot spins in place.
Fix:
- Confirm
pose_setterlog:โ Initial pose published at (...) - In RViz, manually use "2D Pose Estimate" once, then retry goals.
Prevention:
- Delay
pose_setter.py~2โ3s after Nav2 + map server (already in launch).
๐งญ Most Common Errors โ By Symptomโ
- Robot doesn't move
- Robot drifts / wrong localization
- No detections
- Robot stops too far/close to object
- Arm misses object / bad grip
Likely causes: Nav2 not ready, invalid goal, emergency stop.
Checklist:
/navigate_to_poseexists?ros2 action list | grep navigate- Costmaps valid?
- Battery > 50%?
- Try a short 0.5m forward goal in free space.
Likely causes: bad map origin/resolution, initial pose error, wheel slip.
Fix:
- Re-publish initial pose (RViz).
- Verify map YAML resolution & origin.
- Remap space if environment changed substantially.
Likely causes: wrong model path, too-high confidence, poor lighting.
Fix:
- Confirm model path in
object_detector.py. - Lower
confto 0.4โ0.5. - Improve lighting; ensure object is within 0.3โ3.5m.
Likely causes: cameraโbase_link offset incorrect.
Fix:
- Adjust
CAMERA_TO_BASE_LINKin detector (e.g., 0.10โ0.18m). - Recalibrate static TF and re-test.
Likely causes: pose mismatch vs. gripper reach, wrong pickup pose.
Fix:
- Tweak pickup angles in
pick_node.py(pickup joints). - Ensure approach leaves clearance (no base collision).
- Slow joint speed a bit for accuracy (e.g., 30โ40).
๐งฐ StepโbyโStep Solutions (Triage Playbooks)โ
1) Nav2 Fail โ Fast Recoveryโ
Ctrl+Call nodes.- Start map + Nav2 only; wait stable.
- Publish initial pose (RViz or
pose_setter.py). - Send a tiny test goal near the robot.
- If OK, launch full stack.
2) YOLO/Depth Fail โ Fast Recoveryโ
- Check topics exist (
/camera/color/image_raw,/camera/depth/image_raw,/camera/color/camera_info). - Validate TF:
camera_linkโbase_linkexists. - Restart camera node; then restart detector.
- If still flaky, reduce
conf, verify exposure/lighting.
3) Arm Not Respondingโ
- Verify WiโFi connection; ping IP.
- Run
pick_nodestandalone withm5_ipparam. - Power-cycle arm; re-run launch.
๐ก Prevention Strategiesโ
- Staggered Launch: Use
TimerActiongaps (Camera โ Nav2 โ Pose Setter โ Mission Manager โ RQT). - Map Hygiene: Remap after hardware changes (camera height, LiDAR swap, furniture move).
- Stable TFs: Keep a single source of truth for
camera_linkโbase_link(staticpublisher), launched early. - Resource Headroom: Avoid starting RViz, Foxglove, and heavy terminals all at once on the robot; use a remote machine when possible.
- Battery & Space: >50% charge; ensure clear space for 270ยฐ scans and arm motions.
- Model Management: Store trained weights with versioned folders; update
object_detector.pypath intentionally.
๐งช Quick Health Commandsโ
# Topics & rates
ros2 topic list
ros2 topic hz /camera/color/image_raw
ros2 topic echo /amcl_pose -n1
# Actions & services
ros2 action list | grep navigate
ros2 service list | grep costmap
# TF sanity check
ros2 run tf2_tools view_frames.py
# Logs with highlighting
ros2 launch nav_handler full_system.launch.py | grep -E "WARN|ERROR|FAIL|โ|๐|โ|โ ๏ธ"
Keep a known-good mission.log from a successful run. Diff against it when things break to spot regressions fast.
Next: ๐งโ๐ป Developer's Corner