Wiki
Humble版本
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
本教程使用 Ubuntu 22.04 和 ROS 2 Humble,從環境準備開始,逐步學習 ros2_control 的配置、硬體介面、控制器、模擬與實物接入。
1.學習路線
运行官方 RRBot
→ 自己创建工作区与双关节工程
→ 模拟硬件 + RViz
→ 接口、生命周期、控制周期与轨迹
→ Fortress 机械臂与差速底盘物理仿真
→ 自定义控制器与框架源码
→ Asio 虚拟串口与模拟下位机
→ 根据实际设备完成实物适配
學習工作區從建立目錄、功能包和檔案開始,隨著各章的實踐逐步完善。
2.開始前需要什麼
具備基本 C++ 類、繼承、指標與 vector 知識;知道 ROS 2 包、Topic、引數與 launch 的基本用途。遇到 pluginlib、生命週期和 realtime buffer 時,教程會結合當前例項解釋。
開始學習時不需要真實機器人。使用 Ubuntu 22.04、ROS 2 Humble、模擬和虛擬序列埠即可完成從環境準備到虛擬序列埠與模擬下位機的主要實踐。軟體安裝與檢查方法見環境準備和模擬章節。從單執行器實物接入開始,根據實際裝置的型號與協議進行適配。
3.章節目錄
- 環境準備與原始碼地圖
- ros2_control整體工作過程
- 執行第一個RRBot例項
- 從零建立學習工作區
- URDF與控制介面
- YAML與launch啟動過程
- 從零編寫模擬硬體外掛
- 狀態介面與命令介面原始碼
- 硬體與控制器生命週期
- read-update-write控制週期
- 狀態廣播與機器人顯示
- 命令轉發與常用控制介面
- Joint-Trajectory-Controller
- 機械臂物理模擬
- DiffBot與差速底盤控制
- 差速底盤物理模擬
- 多介面與硬體型別
- 從零編寫控制器
- 管理器與資源管理原始碼
- 即時迴圈與非同步通訊
- 虛擬序列埠與模擬下位機
- 單執行器實物接入
- 完整機器人與進階例項
- 綜合工程與系統排錯
4.工作區與終端約定
| 路徑 | 用途 | 由誰建立 |
|---|---|---|
| ~/ros2_control_demos_ws | 官方例項 | 你在環境準備與原始碼地圖建立 |
| ~/ros2_control_humble_ws | 親手編寫的學習工程 | 你在從零建立學習工作區開始建立 |
| ~/ros2_control_humble_reference | 固定版本框架原始碼閱讀 | 你按環境準備與原始碼地圖下載 |
~ 指當前 Ubuntu 使用者的主目錄,例如 /home/你的用户名。所有命令預設在 Ubuntu 的 Bash 終端中執行。安裝軟體和修改系統配置時使用 sudo;建立工作區、編輯檔案、構建和執行程式時使用普通使用者。
每個新終端都要 source 系統 Humble 和當前使用的一個工作區。同一 ROS domain 中一次只執行本教程的一個機器人。Ubuntu 圖形桌面可執行 RViz 和 Gazebo 視窗;無圖形桌面時,可先按照各章的無介面方式執行並檢查 Topic、介面和反饋。
5.教程統一寫法
每個實踐例子解釋程式目標、檔案位置、完整必要程式碼、編譯執行、輸出與執行順序、函式引數與返回值、常見問題及原始碼入口。
自編 ROS 回撥優先用 std::bind。官方原始碼保留原寫法。程式碼以 C++17 為基礎,使用 Ubuntu 22.04 的常規開發工具即可構建,不要求編譯器具有某個特定補丁版本。示例輸出、預期現象和教學虛擬碼會分別說明。
6.各類運動環境
| 環境 | 反饋來自哪裡 | 能驗證什麼 |
|---|---|---|
| 模擬硬體 + RViz | C++ 內部教學模型 | 框架、介面、資料與顯示鏈路 |
| Gazebo Fortress | 模擬關節與物理引擎 | 模型、模擬後端、控制與反饋 |
| 虛擬序列埠 | 模擬下位機 | 收發、協議解析、執行緒交接與超時 |
| 實物 | 編碼器、驅動器和感測器 | 裝置行為、單位、模式、故障與停止 |
RViz 顯示運動不是物理模擬;輪子里程計不是世界位姿真值;虛擬序列埠成功不是實物已經驗證。
7.原始碼參考版本
下面的標籤和提交用於對應教程中的函式實現與配置,便於復現和閱讀原始碼。
| 倉庫 | 標籤或分支 | 固定提交 |
|---|---|---|
| ros2_control | 2.54.3 | 65d389596953cb4656c4216a3f0bc08a73230739 |
| ros2_controllers | 2.54.1 | 65db73628ebac1948833f0fbdc60973c74d6cd0e |
| ros2_control_demos | humble | c273b1316cce043c252c593dc6a232ea57174690 |
| realtime_tools | 2.15.1 | 681623c9682f1336a2a1eaf473621093c4231147 |
| control_msgs | 4.9.0 | 0a1d341f0960defc40a4b146b671dad74a429f4d |
| gz_ros2_control | 0.7.21 | 3f341cd49ed579cfb17422582eb14920c203f269 |
這些是教程採用的原始碼參考版本,不要求 Ubuntu 使用者的所有安裝包都具有完全相同的補丁版本。遇到 API 或引數差異時,先檢查已安裝的 Humble 包版本,再對照匹配的原始碼。官方 Humble 文件也會更新,閱讀時應區分發行版與原始碼提交。
8.各階段學習驗收
| 階段 | 應觀察和檢查的結果 |
|---|---|
| 環境與原始碼 | ROS_DISTRO 為 humble,依賴能找到,官方例項能夠構建 |
| GenericSystem 與生命週期 | 狀態對應目標,控制器與硬體可分別停用和啟用 |
| 官方 RRBot | 控制器 active,介面 claimed,反饋逐漸靠近位置目標 |
| 官方 DiffBot | 訊息型別與時間戳正確,兩輪反饋變化,理解命令積分里程計 |
| 自編 MiniSystem | 外掛能夠載入,狀態介面有效,位置逐漸收斂到目標 |
| 軌跡控制器 | 合理的目標被接受,按配置滿足容差後返回成功結果 |
| 自編 HoldController | 切換後能執行目標,非法輸入被拒絕 |
| Fortress 雙關節 | 模型生成、控制器啟用、關節反饋隨目標變化 |
| Fortress 差速底盤 | 輪子與車體運動,並能對照反饋里程計和世界位姿 |
| 虛擬序列埠 | 目標與反饋鏈路正常,停止下位機後能夠識別反饋超時 |
| 實物接入 | 根據具體裝置完成單位、方向、模式、故障與停機檢查 |
| 進階例項 | 按需選擇例項,分別確認依賴、介面與執行結果 |
驗收時使用關節名稱匹配反饋,並檢查狀態、方向、誤差與超時行為。示例輸出用於幫助理解,實際數值會隨執行時長、引數和排程情況變化。實物還需要依據實際協議和裝置完成獨立驗證。