2025年8月21日 星期四

ROS2_URDF 兩輪車AMR編譯與安裝問題

 ROS2_URDF 兩輪車AMR

1. 程式編譯與安裝問題

問題分析:

  • twowheel_bot 套件已找到,但其下的 libexec 資料夾不存在或為空。這通常意味著 simple_controller 節點程式碼尚未被正確編譯或安裝到 install 目錄中。

解決步驟:

  1. 檢查 CMakeLists.txt 確保 twowheel_bot 套件的 CMakeLists.txt 中,已正確使用 install(TARGETS ...) 指令來安裝 simple_controller 可執行文件。

  2. 檢查程式碼: 確保 simple_controller 的 C++ 或 Python 程式碼沒有編譯錯誤。

  3. 重新編譯: 執行 colcon build --packages-select twowheel_bot 來重新編譯您的套件。這會確保所有依賴和可執行文件都已正確生成。

  4. source 環境: 編譯完成後,務必重新 source 您的 install/setup.bash 文件。這是 ROS2 發現新節點和套件的必要步驟。


2. URDF 建模審查

雖然此問題與 URDF 無直接關係,但一個強健的 URDF 模型是整個專案的基石。

審查重點:

  • 連結 (Links) 與關節 (Joints) 確保您的 URDF 檔案中,所有 linkjoint 都已正確定義。特別是兩個驅動輪的 continuous 關節。

  • 慣量參數 (Inertia) 每個 linkinertia 參數都應合理設定。不正確的慣量會導致 Gazebo 模擬中機器人行為異常。

  • 傳動裝置 (Transmissions) 為了使用 ros2_controldiff_drive_controller,您必須在 URDF 中定義 transmission 標籤,將關節與控制器連接起來。


3. Gazebo 模擬環境與 URDF 整合

建議:

  • URDF 與 Gazebo 插件: 將 URDF 模型匯入 Gazebo 需要在 URDF 文件中加入 <gazebo> 標籤,並設定必要的插件。

    • 感測器插件:

      • IMU:libgazebo_ros_imu_sensor.so

      • LiDAR:libgazebo_ros_ray_sensor.so

      • Camera:libgazebo_ros_camera.so

    • 控制器插件:

      • 差動驅動器libgazebo_ros_diff_drive.so 或使用 ros2_control 框架搭配 diff_drive_controller


4. RVIZ 移動與 SLAM 視覺化

建議:

  • TF 樹 (Transform Frame) 正確的 TF 樹是所有 ROS2 導航與視覺化的基礎。確保您的 URDF 定義了一個從 base_link 到所有感測器和車輪的正確轉換關係。

  • 導航堆疊 (Navigation Stack) 整合 navigation2 框架,以便在 Gazebo 中進行自主導航。

  • SLAM 整合:

    • LiDAR SLAM: 整合 slam_toolbox

    • 視覺 SLAM (VSLAM): 考慮使用 ORB-SLAM3 等方案。

    • IMU 數據: 整合 IMU 數據到 SLAM 演算法中,可顯著提高定位精度,減少里程計漂移。


5. Python 與 ROS2 DDS

建議:

  • Python 節點: 您的 launch 文件使用 Python,表示您的控制器節點 simple_controller 可能是用 rclpy 撰寫。

  • DDS 通訊: 在您的 simple_controller 節點中,確保以正確的 QoS (Quality of Service) 設定發布(publish)和訂閱(subscribe)主題。

    • 控制指令: 對於 /cmd_vel 這樣的控制指令,通常使用 Reliable 策略以確保指令不會丟失。

    • 感測器數據: 對於 LiDAR 或影像數據,可以使用 BestEffort 策略來優先處理時效性,即使偶爾丟失數據也無妨。





沒有留言:

張貼留言