ROS 機器人開發
何時使用
當使用者請求涉及以下任一主題時使用本技能:
catkin_ws、colcon_ws、src/CMakeLists.txt、package.xml、setup.py- ROS 1 / ROS 2 套件新建、移植、建置、測試、除錯
launch/launch.py、參數 YAML、URDF/Xacro、RViz、TFtopic/service/action/msg/srv/QoS- 底盤、IMU、LiDAR、相機、定位、SLAM、Navigation2、
ros2_control - Gazebo / Ignition 模擬、感測器模擬、
ros_gz_bridge - Docker 容器化 ROS 開發、
docker-compose多節點編排 - Lifecycle 節點、
rclcpp_components元件化、行程內通訊 rosbag2錄製回放、mcap、離線診斷- SLAM 建圖(Cartographer、SLAM Toolbox、ORB-SLAM)
- DDS / QoS 配置、
ROS_DOMAIN_ID、RMW 選擇、多機網路 - 自訂
msg/srv/action介面定義與生成 - 多機器人系統、命名空間隔離、跨機通訊
- MoveIt 2 運動規劃、SRDF、運動學插件
- ROS 2 CI/CD(GitHub Actions、colcon test、ament_lint)
- Foxglove Studio / PlotJuggler 數據可視化與離線分析
- MCU / RTOS / UART / CAN /
micro-ROS協同開發
先做什麼
1. 先識別工作區
python scripts/detect_ros_workspace.py <workspace-path>
2. 再做一致性檢查
python scripts/check_ros_workspace_consistency.py <workspace-path>
3. 按問題載入最少必要文件
- ROS 1:
references/ros1-catkin.md - ROS 2:
references/ros2-colcon.md - 混合 / 遷移:
references/interop-and-migration.md - 模型 / TF:
references/robot-description-and-tf.md - 導航:
references/navigation2.md - 控制:
references/ros2-control.md - 嵌入式:
references/micro-ros-and-embedded.md - 模擬:
references/gazebo-simulation.md - Lifecycle / 元件:
references/lifecycle-and-components.md - DDS / QoS / 網路:
references/dds-qos-networking.md - 錄製回放 / 診斷:
references/rosbag-diagnostics.md - SLAM / 建圖:
references/slam-mapping.md - Docker:
references/docker-ros.md - 自訂介面:
references/custom-interfaces.md - 多機器人:
references/multi-robot.md - MoveIt 2:
references/moveit2.md - CI/CD:
references/ros2-cicd.md - 可視化:
references/foxglove-visualization.md - 排障:
references/debug-playbooks.md - 審查:
references/review-checklist.md
必須遵守的原則
- 先識別建置系統,再改程式碼
- 先修
package.xml/CMakeLists.txt一致性,再談重構 - 先看 TF、時間戳、frame、單位,再怪演算法
- 先證據鏈,再修改:建置輸出、topic、TF、參數、日誌必須可驗證
- ROS 1 → ROS 2 先橋接或分層,不要一口氣推倒重來
- MCU /
micro-ROS先判斷是否真的需要進入 ROS 圖
常見任務處理方式
新增或修復套件
- 先判定套件類型:
catkin、ament_cmake、ament_python - 先補依賴聲明,再補建置邏輯,再補安裝規則
- 自訂
msg/srv/action優先檢查生成順序和依賴閉環(詳見references/custom-interfaces.md)
建置失敗
- 先跑
rosdep - 再核對
package.xml與建置腳本 - 再看環境是否正確 source
- 再看系統依賴、ABI、發行版相容
運作正常但機器人表現不對
- 先看 launch、namespace、remap、參數
- 再看 topic 名稱、頻率、時間戳、單位、
frame_id - 再看 TF 是否單根、靜態 / 動態是否分清
- 最後再懷疑演算法本身
Nav2 / ros2_control
- Navigation2 優先排
/cmd_vel鏈路、定位品質、控制頻率和底盤單位 ros2_control優先排硬體介面類型、控制器 YAML、讀寫週期和 active 狀態
MCU / micro-ROS
- 先判斷 Linux 側橋接節點是否足夠
- 若 MCU 必須進入 ROS 2 圖,再考慮
micro-ROS - 嚴格檢查位元組序、校驗、超時、重連、時間源和斷線保護
反模式
- 同一個套件混寫
catkin與ament - 只改
CMakeLists.txt不改package.xml - 忽略 TF、時間戳、單位、座標軸定義
- 把驅動、協定、濾波、控制、診斷全塞進一個大節點
- 遷移 ROS 1 → ROS 2 時只做 API 替換,不做系統驗證
輸出要求
使用本技能處理任務時,優先輸出:
- 當前工作區和套件類型判斷
- 關鍵依據與假設
- 修改點與原因
- 最小建置 / 測試 / 運行命令
- 風險點與回歸檢查點