2025年6月25日 星期三

ROS2 ( RViz , NAV2 , 4Wheel_drive_control ) package

 要將你的四輪差速車模型(roscar4wheel)整合進 ROS 2 中並支援:

  1. ✅ RViz 顯示模型

  2. ✅ 透過 cmd_vel 控制

  3. ✅ 使用 Navigation2 自走規劃

  4. ✅ 四輪差速(4-wheel differential)控制

我將為你分成以下 5 步驟說明操作與建置內容:


✅ 1. 修改 URDF:加入差速移動插件(diff_drive_controller

你需要在 URDF 或 Xacro 中加入 controller plugin:

xml
<gazebo> <plugin name="diff_drive_controller" filename="libgazebo_ros_diff_drive.so"> <ros> <remapping>cmd_vel:=cmd_vel</remapping> <remapping>odom:=odom</remapping> </ros> <robotNamespace>/</robotNamespace> <updateRate>50</updateRate> <leftJoint>left_front_wheel_joint</leftJoint> <leftJoint>left_rear_wheel_joint</leftJoint> <rightJoint>right_front_wheel_joint</rightJoint> <rightJoint>right_rear_wheel_joint</rightJoint> <wheelSeparation>0.4</wheelSeparation> <!-- 根據實際距離 --> <wheelDiameter>0.15</wheelDiameter> <publishWheelTF>true</publishWheelTF> <publishOdom>true</publishOdom> <odometryTopic>odom</odometryTopic> </plugin> </gazebo>

記得在 URDF 中定義正確的 wheel joint 名稱(如 left_front_wheel_joint 等)。


✅ 2. 加入 Robot State Publisher + Joint State Broadcaster(RViz 顯示)

建立 robot.launch.py

python
from launch import LaunchDescription from launch_ros.actions import Node from ament_index_python.packages import get_package_share_directory import os def generate_launch_description(): pkg_path = get_package_share_directory('roscar4wheel') urdf_path = os.path.join(pkg_path, 'urdf', 'roscar.urdf') return LaunchDescription([ Node( package='robot_state_publisher', executable='robot_state_publisher', name='robot_state_publisher', output='screen', parameters=[{'use_sim_time': True}], arguments=[urdf_path] ), Node( package='joint_state_publisher_gui', executable='joint_state_publisher_gui', name='joint_state_publisher_gui', output='screen', parameters=[{'use_sim_time': True}] ), Node( package='rviz2', executable='rviz2', name='rviz2', arguments=[], output='screen' ) ])

✅ 3. 匯入 Nav2 套件(SLAM / 路徑規劃 / AMCL)

安裝 Navigation2(若尚未安裝):

bash
sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup

建立一個 nav2.launch.py

python
from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ Node( package='nav2_bringup', executable='bringup_launch.py', output='screen', parameters=[ {'use_sim_time': True} ] ) ])

✅ 4. 建立 ROS2 控制器設定檔(YAML)

config/roscar_controllers.yaml

yaml
controller_manager: ros__parameters: update_rate: 50 diff_drive_controller: type: diff_drive_controller/DiffDriveController left_wheel_names: ["left_front_wheel_joint", "left_rear_wheel_joint"] right_wheel_names: ["right_front_wheel_joint", "right_rear_wheel_joint"] publish_rate: 50.0 use_stamped_vel: false base_frame_id: base_link wheel_separation: 0.4 wheel_radius: 0.075 cmd_vel_timeout: 0.5

✅ 5. 測試操作步驟

bash
# 啟動 Gazebo + Robot ros2 launch roscar4wheel display.launch.py # 啟動 TF + RViz 顯示 ros2 launch roscar4wheel robot.launch.py # 手動控制車子 ros2 topic pub /cmd_vel geometry_msgs/Twist "{linear: {x: 0.1}, angular: {z: 0.5}}" # 啟動 Nav2 ros2 launch roscar4wheel nav2.launch.py

🧩 可選擴充(由我協助):

功能可提供支援內容
加入 slam_toolbox自建地圖用於 Nav2
加入 LIDAR 模型3D 模擬用於導航或觀察
RViz2 config (.rviz)預設設定 camera / laser / TF 顯示
完整一鍵啟動 launchros2 launch roscar4wheel bringup.launch.py

✅ 我可以幫你打包以上項目成一個完整的 ROS 2 roscar4wheel 擴充套件,包含:

  • 四輪差速控制

  • RViz 顯示與模擬

  • cmd_vel 控制

  • Nav2 範例設定

是否要我幫你自動建構 zip 檔案並補上這些?如果有 STL 輪子也可一併加上。



沒有留言:

張貼留言