主題總覽
#文件主要涵蓋了以下主題:
- ROS/ROS2 機器人開發框架: 介紹了 ROS/ROS2 的概念、架構、工具以及它們在機器人開發中的應用。
- Gazebo 模擬器: 介紹了 Gazebo 模擬器的使用,包括環境設定、模型建立、插件應用以及如何與 ROS/ROS2 整合進行機器人模擬。
- TurtleBot3 (TB3): 提到TB3是一款受歡迎的ROS平台,用於教學、研究和開發。文件涵蓋了TB3的設定、基本操作、SLAM、導航和模擬。
- 機器人定位、導航與 SLAM: 探討了機器人在環境中定位、建立地圖以及自主導航的相關理論和實踐方法。
- 機器人控制: 介紹了機器人的運動控制方法,包括速度控制、PID 控制以及如何將 ROS 控制訊號轉換為馬達控制訊號。
- 自動駕駛: 涵蓋了自動駕駛機器人的創建、感測器融合、卡爾曼濾波器以及數位孿生等概念。
- 人機互動(HRI): 介紹了人機互動的基礎知識,包括HRI系統的設計和評估。
#重要概念與事實
- ROS/ROS2 框架
- ROS 作為框架: 是一種分布式架構,可同時運行多個進程(節點),並提供它們相互通信的橋樑。
- 「框架,就是ROS給你定好了一套規範。ROS采用了一种分布式架构,可以同时运行多个进程,每个进程能单独设计,然后放在一起组合起来。」
- 節點 (Node): ROS 中的進程被稱為節點,每個節點負責特定的功能,例如機器人控制、感測器數據採集等。
- 「在ROS里,进程有个名字,叫做节点—node。请记住这个词,节点node。」
- ROS2 相較於 ROS1 的改進:
- 支援多平台 (Ubuntu, OS X, Windows)。
- 更廣泛運用 C++11/14 標準。
- 支援 Python 3。
- 使用中介軟體介面 (middleware interface) 來實現序列化、傳輸及發掘機制,例如 DDS。
- 支援獨立編譯,每個 package 單獨編譯。
- ament: ROS 2 使用 ament 作為其建構系統。
- ROS2 也支援其他編譯系統。目前除CMake外, 編譯工具也支援單純的Python package。
- Colcon: ROS 2 使用 colcon 進行編譯。
- 「在 ROS 2 的世界中,進行編譯的重要工具就是 colcon」
- ROS2 初學者課程: 介紹了 ROS2 的操作、生命週期節點、執行器和元件等進階概念,並提供了實踐專案。
- Action伺服器和客戶端: 提到生成並建立操作定義,寫一個完整的Action伺服器和客戶端。
- Gazebo 模擬器
- 無頭模式 (Headless Mode): 可以不含 Gazebo 圖形用戶界面運行,節省資源。
- 「您可能想在無頭模式(不含 Gazebo 圖形用户界面)下運行 Gazebo,因为它使用的资源较少,而且不依赖于您系统中支持 OpenGL 渲染的显卡。」
- 世界 (World) 設定: 可以在特定世界中運行模擬,例如有風的世界。
- 「通过将所需的世界与所需载具的名称连接,可以在特定世界中运行模拟。例如,要运行风世界的 x500 您可以指定载具」
- Plugin: 動態加載的程式碼塊,用於物理模擬、用戶指令和場景顯示。
- 「Plugin 是一個動態加載的程式碼塊(Dynamic load chunk of code),例:Physics plugin 對於動態模擬十分重要」
- Gazebo 與 ROS/ROS2 整合: 可以透過 gazebo_ros_pkgs 這個 package 來和 ROS 或 ROS2 進行話題與服務的傳遞。
- 「Gazebo雖然是獨立的機器人模擬軟體,非為ROS2而生,不過Gazebo能透過 Gazebo_ros_pkgs 這個package 來和ROS或ROS2的任何一個版本做話題與服務的傳遞。」
- URDF: 使用 URDF (Unified Robot Description Format) 描述機器人的物理屬性,並使用 Xacro 工具改進 URDF 檔案。
- ROS 控制 Gazebo 機器人:
- 在 Xacro 檔案中加入插件 libgazebo_ros_control.so。
- 建立 ros2_control.yaml 設定 PWM 速度控制。
- 啟動 Gazebo 和 ros2_control,並使用 cmd_vel 測試輪子轉速。
- Topics and Messages: 提到使用 gz topic 指令來發布 topic 訊息,以控制模擬介面中的模型車。
- Lights: Light tag 指定了世界的光源,光源的 type 可以是 point(點光源)、directional(方向光源)、spot(聚光燈)。
- TurtleBot3 (TB3)
- TB3 特點: 全世界最受歡迎的 ROS 平台,價格實惠、體積小、ROS 標準、可擴展性強。
- 「全世界最受歡迎的 ROS 平台」、「實惠的價格」、「體積小」、「ROS 標準」、「可擴展性」
- TB3 型號: 包括 Burger、Waffle 和 Waffle Pi。
- TB3 主要組件: 單板電腦 (SBC)、感測器、內嵌控制板 (OpenCR)、智能馬達。
- TB3 應用: 包括 SLAM、導航、自動駕駛和機器學習。
- TB3 改裝: 提供多種改裝方案,如小車、機器手臂、賽格威等。
- TB3 學習資源: 提供線上教學網站、Blockly、模擬課程和實體書。
- 機器人定位、導航與 SLAM
- 定位方法: 2D 和 3D 定位的理論基礎,使用 tf 包進行幀之間的轉換和定位。
- SLAM: 即時定位與地圖構建,使用 gmapping 包實現 SLAM 演算法。
- 分層導航: 使用 global planner 和 local planner 進行路徑規劃,使用 costmap 進行障礙物標定。
- AMCL: 使用 Adaptive Monte Carlo Localization 定位演算法,依據編碼器推斷出 odometry。
- Navigation 2 (Nav2): 最終了解 ROS2 的 Nav2 堆棧 – SLAM、地圖、導航、Gazebo 模擬、Python 程式碼 – 一步一步地.
- 機器人控制
- 速度控制: 使用 cmd_vel 控制機器人速度。
- PID 控制: 加入 PID 控制來平滑加速與減速。
- PWM 控制: 改變輸入電壓來影響馬達速度。
- ros2_control: 使用 ros2_control 讓 cmd_vel 控制馬達。
- 差動驅動 (DiffDrive): 使用 差動驅動 (DiffDrive) 控制。
- RPM 反饋: 要把 PWM 訊號轉成 RPM 反饋回 ROS 2。
- STM32 CAN Bus: 要讓 STM32 透過 CAN Bus 接收 cmd_vel。
- 自動駕駛
- 自動駕駛機器人: 創建真正的自動駕駛機器人,並在 Gazebo 中進行模擬。
- 感測器融合: 實施感測器融合演算法。
- 卡爾曼濾波器: 了解使用卡爾曼濾波器的機器人定位和傳感器融合。
- 數位孿生: 創建自動駕駛機器人的數位孿生。
- 自主導航挑戰賽: 參與 TurtleBot3 AutoRace 自動駕駛挑戰賽。
- 人機互動(HRI)
- HRI 基礎知識: 介紹了人機互動的基礎知識,包括HRI系統的設計和評估。
- HRI 應用: 將 HRI 系統用於人類和機器人可以互動和合作的應用,以提高生產力和效率。
#重要指令和工具
- 1>ros2 pkg create: 建立 ROS 2 專案。
- ros2 pkg create --build-type ament_cmake <project_name> (C++ 專案)
- ros2 pkg create --build-type ament_python <project_name> (Python 專案)
- 2>colcon build: 編譯 ROS 2 專案。
- colcon build --packages-select <certain project>: 指定要編譯某個專案。
- colcon build --symlink-install: 使用 symbolic link 連結到 src 資料夾。
- colcon build --parallel-workers n: 同時用 n 個 thread 進行編譯。
- colcon build --merge-install: 不再用資料夾來歸類 install 資料夾下的 component。
- colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release: 使用 release build。
- 3>ros2 run: 執行 ROS 2 節點。
- 4>ros2 launch: 執行 ROS 2 launch 檔案。
- 5>vcs import: 從 .repos 檔案下載程式碼。
- vcs import src < project.repos
- 6>gz topic: 發布 topic 訊息。
- gz topic -t "/cmd_vel" -m gz.msgs.Twist -p "linear: {x: 0.5}, angular: {z: 0.05}"
- 7>ros2 topic pub: 測試 cmd_vel。
#結論
提供的文件涵蓋了廣泛的機器人開發主題,從 ROS/ROS2 框架和 Gazebo 模擬器的基礎知識,到定位、導航、SLAM 和自動駕駛等進階概念。 這些資源對於想要學習機器人技術和使用 ROS/ROS2 開發機器人應用程式的學生、工程師和研究人員來說非常有價值。 同時也介紹了如何使用TB3這款平台來實作上述概念。
希望這份簡報文件對您有所幫助!