跳到正文

Wiki

完整機械人與進階實例

約 5 分鐘閱讀

本文由簡體中文內容確定性轉換,並受版本化術語表保護。

單執行器跑通以後,才擴展為完整機械人。框架接口可以複用,設備層仍要按實際結構設計。

1.示例 1:從一個執行器擴展為雙關節

先把固定數組改成與 HardwareInfo 一致的預分配存儲,再驗證每個關節的名稱、方向、範圍和設備地址。完成所有反饋校驗後,再統一發布整組快照。

逻辑 joint1 → 设备地址 A → 参数、方向、零点 A
逻辑 joint2 → 设备地址 B → 参数、方向、零点 B

映射必須顯式存在,不能依賴串口先收到誰就把誰視為第一個關節。多設備反饋不同時到達時,快照還應記錄每個設備的時效和有效性。

1.1.什麼情況下使用一個 System

如果下位機一次收發整台機械人的關節數據,一個 System 通常更符合通信邊界。如果每個執行器獨立通信、獨立啓停,則需要結合 Actuator 的生命週期和故障隔離方式設計。

2.示例 2:從單輪擴展為差速底盤

沿用差速底盤物理仿真的控制器配置語義:左、右輪 velocity 命令,position/velocity 反饋,單位為輸出輪軸 rad 和 rad/s。

先分別驗證兩個輪子的正方向,再驗證同號命令對應前進;隨後標定輪半徑和有效輪距。真實底盤中,結構誤差和打滑可能讓理想模型參數不足以得到準確里程計。

open_loop: false 表示使用反饋計算里程計,但編碼器里程計仍可能漂移。後續定位融合屬於另一個學習階段,不在本教程中假裝已經完成。

3.官方進階實例閲讀地圖

實例 閲讀目標 應先具備什麼
example_4 / 5 集成與外部傳感器 狀態接口、Sensor 生命週期
example_6 / 14 獨立執行器與附加傳感器 組件邊界與數據對應關係
example_7 六自由度工程組織 軌跡控制與多關節配置
example_8 transmission 電機側與關節側變量及傳動換算
example_10 GPIO 自定義接口語義、廣播與控制
example_11 車輛轉向 車輛運動學和轉向控制器
example_12 控制器串聯 reference 接口與鏈式生命週期
example_13 一個管理器中的多機械人 名稱前綴、硬件生命週期
example_15 多個管理器 namespace、服務路徑和資源隔離

這些源碼隨 demos 倉庫一同下載,環境準備章節只選擇構建了基礎實例。學習表中的進階實例時,需要按需安裝依賴、構建對應包,並逐項檢查運行結果。

4.示例 3:只構建當前學習的進階實例

以傳動實例為例,在 source 系統 Humble 的新終端中執行:

cd ~/ros2_control_demos_ws
rosdep install --from-paths src \
  --ignore-src -r -y --rosdistro humble
colcon build --symlink-install --packages-up-to ros2_control_demo_example_8 \
  --cmake-args -DBUILD_TESTING=OFF
source install/setup.bash

接下來先查看包中實際安裝的 launch 文件,再選擇文件名:

ls $(ros2 pkg prefix ros2_control_demo_example_8)/share/ros2_control_demo_example_8/launch
# 选择上面实际存在的启动文件后,再使用 ros2 launch 包名 文件名 --show-args。

不要把某個其它發行版的命令直接搬過來。先閲讀當前固定提交中該實例的 doc/userdoc.rst,確認依賴與使用方法。

5.多機械人最常見的命名問題

Topic namespace、關節名稱前綴、TF frame 名稱、硬件組件名稱是不同維度。把節點放到 namespace 下面,不會自動給 URDF 中所有關節與 frame 改名。

6.對應底層源碼

閲讀 ros2_control_demos/example_8、ros2_control_demos/example_12、ros2_control_demos/example_15。把每個例子與已有工程比較,記錄“新增了哪一種接口或管理邊界”,再決定是否引入自己的項目。


返回 Humble 總覽 · 上一篇:單執行器實物接入 · 下一篇:綜合工程與系統排錯