一、背景
在gazebo当中使用自己建模的urdf模型进行键盘控制的运动仿真,在能够显示出模型之后自己编写了一个launch文件进行启动,但是一直出现Waiting for subscriber to connect to /cmd_vel这个错误。
二、解决办法
如果urdf模型文件没问题就是没有添加启动插件
为了让 Gazebo 能够控制你的模型,需要在 URDF 中添加一个 Gazebo 插件。
我的是差速轮,在 URDF 文件末尾( </robot> 之前)添加以下内容就解决了
<gazebo>
<plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so">
<leftJoint>joint_wheel1</leftJoint>
<rightJoint>joint_wheel2</rightJoint>
<leftJoint>joint_wheel3</leftJoint>
<rightJoint>joint_wheel4</rightJoint>
<wheelSeparation>0.2</wheelSeparation> <!-- 轮子之间的距离,根据你的模型调整 -->
<wheelDiameter>0.1</wheelDiameter> <!-- 轮子直径,根据你的 STL 文件调整 -->
<robotBaseFrame>base_link</robotBaseFrame>
<publishWheelJointState>true</publishWheelJointState>
<commandTopic>cmd_vel</commandTopic>
<odometryTopic>odom</odometryTopic>
<odometryFrame>odom</odometryFrame>
<robotNamespace>/</robotNamespace>
<updateRate>100</updateRate>
</plugin>
</gazebo>
-
wheelSeparation 和 wheelDiameter 需要根据你的模型实际尺寸调整(从 URDF 的 origin 和 STL 文件推算)。
-
commandTopic 设置为 cmd_vel,这是接收速度命令的话题(类型geometry_msgs/Twist)。