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 差速底盤 | 輪子與車體運動,並能對照反饋里程計和世界位姿 |
| 虛擬串口 | 目標與反饋鏈路正常,停止下位機後能夠識別反饋超時 |
| 實物接入 | 根據具體設備完成單位、方向、模式、故障與停機檢查 |
| 進階實例 | 按需選擇實例,分別確認依賴、接口與運行結果 |
驗收時使用關節名稱匹配反饋,並檢查狀態、方向、誤差與超時行為。示例輸出用於幫助理解,實際數值會隨執行時長、參數和調度情況變化。實物還需要依據實際協議和設備完成獨立驗證。