Wiki
綜合工程與系統排錯
約 4 分鐘閱讀
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
整理最終檔案與執行入口,按從配置到裝置反饋的順序排查問題。
1.最終工程結構
~/ros2_control_jazzy_ws/
├── src/
│ ├── jazzy_control_hardware/
│ │ ├── package.xml
│ │ ├── CMakeLists.txt
│ │ ├── hardware_plugins.xml
│ │ ├── include/jazzy_control_hardware/two_joint_system.hpp
│ │ ├── src/two_joint_system.cpp
│ │ ├── src/serial_system.cpp
│ │ ├── config/controllers.yaml
│ │ ├── config/diff_controllers.yaml
│ │ ├── launch/two_joint.launch.py
│ │ ├── launch/sim.launch.py
│ │ └── urdf/
│ │ ├── two_joint.urdf
│ │ ├── two_joint_gz.urdf.xacro
│ │ ├── diff_gz.urdf.xacro
│ │ └── two_joint_serial.urdf
│ └── jazzy_position_controller/
│ ├── package.xml
│ ├── CMakeLists.txt
│ ├── controller_plugins.xml
│ └── src/position_hold.cpp
├── tools/virtual_mcu.py
├── build/
├── install/
└── log/
目錄隨著章節逐步建立。完成虛擬序列埠與模擬下位機後,硬體包使用包含序列埠外掛的最終構建和註冊檔案。
2.示例 1:檢查安裝空間
source /opt/ros/jazzy/setup.bash
cd ~/ros2_control_jazzy_ws
colcon build --symlink-install --packages-select jazzy_control_hardware jazzy_position_controller
source install/setup.bash
ros2 pkg prefix jazzy_control_hardware
ros2 pkg prefix jazzy_position_controller
路徑應來自當前學習工作區。原始碼存在不代表正在執行的庫就是這份程式碼,尤其要檢查其它工作區是否覆蓋了包。
3.執行方式
| 後端 | 入口 | 前提 |
|---|---|---|
| 自編模擬硬體 | two_joint.launch.py 預設模型 | 從零編寫模擬硬體外掛 |
| Harmonic 機械臂 | sim.launch.py 預設模型 | Harmonic機械臂物理模擬 |
| Harmonic 底盤 | sim.launch.py 指定模型、配置和控制器 | Harmonic差速底盤模擬 |
| 虛擬序列埠 | two_joint.launch.py 指定序列埠模型 | socat 和模擬下位機先執行 |
| 實物 | 裝置專用模型與外掛 | 單執行器實物適配 |
一次只執行一個後端。不要在模擬外掛已經建立管理器後,再啟動同名獨立管理器。
4.示例 2:逐層收集證據
ros2 node list
ros2 control list_hardware_components
ros2 control list_hardware_interfaces
ros2 control list_controllers
ros2 topic info /joint_states -v
ros2 topic echo /joint_states --once
節點存在、元件 active、介面 claimed、反饋變化分別證明不同層次。實際機器人還需要核對真實運動與停止結果。
5.排錯表
| 現象 | 首先檢查 |
|---|---|
| 包找不到 | 構建、安裝路徑和 source 順序 |
| C++ 型別不存在 | 子包版本和實際標頭檔案路徑 |
| 共享庫符號找不到 | 庫與依賴是否來自一致版本環境 |
| 外掛載入失敗 | 匯出宏、XML、CMake 註冊、庫依賴 |
| spawner 一直等待 | 模型解析和管理器啟動日誌 |
| 控制器配置失敗 | --param-file、引數層級、介面組合 |
| 啟用資源衝突 | claimed 介面與當前 active 控制器 |
| 底盤不接收目標 | TwistStamped、Topic、時間戳和 /clock |
| RViz 不動 | JointState、TF、Fixed Frame、QoS |
| 模擬模型生成失敗 | 質量慣量、外掛路徑和轉換日誌 |
| 輪子轉但車不走 | 碰撞、接觸、摩擦和軸向 |
| 序列埠反饋過期 | 資料幀、通訊執行緒與裝置狀態 |
6.儲存自己的驗收記錄
記錄模型、原始碼版本、引數、完整目標、元件與控制器狀態、反饋和停止結果。使用自己的實驗結果,不把示例輸出當作固定時間的精確標準。
完成本套教程後,應能獨立建立硬體外掛與控制器,解釋從 Topic 到裝置再回到反饋的完整鏈路,並沿原始碼定位引數、介面、生命週期和通訊問題。
返回 Jazzy 總覽 · 上一篇:完整機器人與進階例項