You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ROS2 Humble中Ackermann Gazebo插件转向盘关节配置疑问

问题描述

我正在制作一款四轮阿克曼小车的URDF模型,打算使用ackermann gazebo插件,在GitHub上找到如下使用示例代码:

<gazebo>
    <plugin name="gazebo_ros_ackermann_drive" filename="libgazebo_ros_ackermann_drive.so">

  <ros>
    <namespace>ackermann</namespace>
    <remapping>cmd_vel:=cmd_vel</remapping>
    <remapping>odom:=odom</remapping>
    <remapping>distance:=distance</remapping>
  </ros>

  <update_rate>100.0</update_rate>

  <!-- wheels -->
  <front_left_joint>front_left_joint</front_left_joint>
  <front_right_joint>front_eight_joint</front_right_joint>
  <rear_left_joint>rear_left_joint</rear_left_joint>
  <rear_right_joint>rear_right_joint</rear_right_joint>
  <left_steering_joint>left_steering_joint</left_steering_joint>
  <right_steering_joint>right_steering_joint</right_steering_joint>
  <steering_wheel_joint>steering_joint</steering_wheel_joint>
  

  <!-- Max absolute steer angle for tyre in radians-->
  <!-- Any cmd_vel angular z greater than this would be capped -->
  <max_steer>0.6458</max_steer>

  <!-- Max absolute steering angle of steering wheel -->
  <max_steering_angle>7.85</max_steering_angle>

  <!-- Max absolute linear speed in m/s -->
  <max_speed>20</max_speed>

  <!-- PID tuning -->
  <left_steering_pid_gain>1500 0 1</left_steering_pid_gain>
  <left_steering_i_range>0 0</left_steering_i_range>
  <right_steering_pid_gain>1500 0 1</right_steering_pid_gain>
  <right_steering_i_range>0 0</right_steering_i_range>
  <linear_velocity_pid_gain>1000 0 1</linear_velocity_pid_gain>
  <linear_velocity_i_range>0 0</linear_velocity_i_range>

  <!-- output -->
  <publish_odom>true</publish_odom>
  <publish_odom_tf>true</publish_odom_tf>
  <publish_wheel_tf>true</publish_wheel_tf>
  <publish_distance>true</publish_distance>

  <odometry_frame>odom</odometry_frame>
  <robot_base_frame>base_footprint</robot_base_frame>

</plugin>
</gazebo>

我的问题集中在关节配置:我创建了4个连续关节用于车轮滚动,2个旋转关节实现前轮绕Z轴转向,对应插件配置中的前六个关节。请问:

  • steering_wheel_joint具体是什么?
  • 应安装在何处?
  • 如何与车体其他部件连接?

另外,移除该关节后没有报错,但Gazebo中所有车轮会移至车底中心;仅在Rviz中显示URDF模型时,模型显示正常。我的URDF结构包含base_link(车身)、4个车轮及base_footprint。

截图情况:

  • 仅启动Rviz时:模型显示正常,车轮处于车身下方对应位置
  • 启动Gazebo及插件时:所有车轮聚集到车底中心位置

解决方案

关于steering_wheel_joint的说明

  • 是什么:这是一个可选的辅助关节,用来模拟真实车辆的方向盘联动。插件会根据前轮的转向角度,按比例驱动这个关节转动,实现方向盘的可视化效果,不影响阿克曼转向的核心逻辑。
  • 安装位置:一般设置在车身的驾驶舱区域,比如base_link的上方或前部,对应真实车辆方向盘的实际位置。
  • 连接方式:需要先在URDF中创建steering_wheel连杆(即方向盘的3D模型),然后用一个旋转关节(类型为revolute)将其连接到base_link,关节轴设置为Z轴(与前轮转向关节的轴保持一致),这个关节就是插件配置里的steering_wheel_joint。

解决车轮移位问题

移除steering_wheel_joint后Gazebo中车轮移位,核心原因是插件配置里还保留了<steering_wheel_joint>steering_joint</steering_wheel_joint>这一行,但你的URDF中不存在该关节,导致插件初始化时出现约束异常,进而破坏了车轮的关节约束关系。

具体修复步骤:

  1. 若不需要方向盘可视化,直接删除插件配置中的<steering_wheel_joint>steering_joint</steering_wheel_joint>整行,而不是只删除URDF里的关节定义。
  2. 检查插件中的<front_right_joint>配置——示例代码里写的是front_eight_joint,这明显是笔误,需修改为你URDF中实际的右前轮滚动关节名称(比如front_right_joint),拼写错误也会引发关节约束异常。
  3. 确保插件中所有配置的关节名称,和URDF里的关节名称完全一致,包括大小写、拼写都不能出错。

内容的提问来源于stack exchange,提问作者Gaetano Pispisa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:17:33