跳到正文

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 總覽 · 上一篇:單執行器實物接入 · 下一篇:綜合工程與系統排錯