2025年2月6日 星期四

ROS/ROS2 機器人開發、模擬與實作簡介

 主題總覽

#文件主要涵蓋了以下主題:

  • ROS/ROS2 機器人開發框架: 介紹了 ROS/ROS2 的概念、架構、工具以及它們在機器人開發中的應用。
  • Gazebo 模擬器: 介紹了 Gazebo 模擬器的使用,包括環境設定、模型建立、插件應用以及如何與 ROS/ROS2 整合進行機器人模擬。
  • TurtleBot3 (TB3): 提到TB3是一款受歡迎的ROS平台,用於教學、研究和開發。文件涵蓋了TB3的設定、基本操作、SLAM、導航和模擬。
  • 機器人定位、導航與 SLAM: 探討了機器人在環境中定位、建立地圖以及自主導航的相關理論和實踐方法。
  • 機器人控制: 介紹了機器人的運動控制方法,包括速度控制、PID 控制以及如何將 ROS 控制訊號轉換為馬達控制訊號。
  • 自動駕駛: 涵蓋了自動駕駛機器人的創建、感測器融合、卡爾曼濾波器以及數位孿生等概念。
  • 人機互動(HRI): 介紹了人機互動的基礎知識,包括HRI系統的設計和評估。

#重要概念與事實

  1. 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伺服器和客戶端。
  1. 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(聚光燈)。
  1. TurtleBot3 (TB3)
  • TB3 特點: 全世界最受歡迎的 ROS 平台,價格實惠、體積小、ROS 標準、可擴展性強。
  • 「全世界最受歡迎的 ROS 平台」、「實惠的價格」、「體積小」、「ROS 標準」、「可擴展性」
  • TB3 型號: 包括 Burger、Waffle 和 Waffle Pi。
  • TB3 主要組件: 單板電腦 (SBC)、感測器、內嵌控制板 (OpenCR)、智能馬達。
  • TB3 應用: 包括 SLAM、導航、自動駕駛和機器學習。
  • TB3 改裝: 提供多種改裝方案,如小車、機器手臂、賽格威等。
  • TB3 學習資源: 提供線上教學網站、Blockly、模擬課程和實體書。
  1. 機器人定位、導航與 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 程式碼 – 一步一步地.
  1. 機器人控制
  • 速度控制: 使用 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。
  1. 自動駕駛
  • 自動駕駛機器人: 創建真正的自動駕駛機器人,並在 Gazebo 中進行模擬。
  • 感測器融合: 實施感測器融合演算法。
  • 卡爾曼濾波器: 了解使用卡爾曼濾波器的機器人定位和傳感器融合。
  • 數位孿生: 創建自動駕駛機器人的數位孿生。
  • 自主導航挑戰賽: 參與 TurtleBot3 AutoRace 自動駕駛挑戰賽。
  1. 人機互動(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這款平台來實作上述概念。

希望這份簡報文件對您有所幫助!

沒有留言:

張貼留言

ROS/ROS2 機器人開發、模擬與實作簡介

  主題總覽 #文件主要涵蓋了以下主題: ROS/ROS2 機器人開發框架 : 介紹了 ROS/ROS2 的概念、架構、工具以及它們在機器人開發中的應用。 Gazebo 模擬器 : 介紹了 Gazebo 模擬器的使用,包括環境設定、模型建立、插件應用以及如何與 ROS/ROS2 ...