环境:ubuntu16.04 ros-kinetic gazebo7.16
来源:
gazebo仿真时,机器人有些部分出现异常移动,需要获取某些link受力情况信息.
这里是基于以下链接博客的urdf来演示,怎么编写urdf达到监听一个link的受力目的.https://blog.csdn.net/qq_45701501/article/details/107521623
注意:urdf使用时候,一定要去除中文注释
想要复现这个例子,可以保证上面环境一致,然后把链接里面的urdf左轮link替换成如下:
<!--left_wheel-->
<joint name="left_wheel_joint" type="continuous">
<parent link="base_link"/>
<child link="left_wheel"/>
<origin xyz="0 0.2 0"/>
<axis xyz="0 1 0" rpy="0 0 0" />
</joint>
<link name="left_wheel">
<visual>
<geometry>
<cylinder length="0.05" radius="0.1"/>
</geometry>
<origin rpy="1.5707 0 0" xyz="0 0 0"/>
</visual>
<collision>
<geometry>
<cylinder length="0.05" radius="0.1"/>
</geometry>
<origin rpy="1.5707 0 0" xyz="0 0 0"/>
</collision>
<inertial>
<mass value="3" />
<origin xyz="0 0 0" rpy="0 0 0"/>
<inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1" />
</inertial>
</link>
<gazebo reference="left_wheel_joint">//监听受力的轮子所链接的关节
<provideFeedback>true</provideFeedback>//反馈设置为true
</gazebo>
<gazebo>
<plugin name="ft_sensor" filename="libgazebo_ros_ft_sensor.so">//调用的gazebo插件
<updateRate>100</updateRate>//发送的受力情况的频率
<topicName>left_wheel_ft_sensor</topicName>//监听受力的topic
<jointName>left_wheel_joint</jointName>//监听的轮子的关节名称
</plugin>
</gazebo>
<gazebo reference="left_wheel">
<mu1 value="200.0"/>
<mu2 value="100.0"/>
<kp value="10000000.0" />
<kd value="1.0" />
<material>Gazebo/Grey</material>
</gazebo>
然后,在终端输入topic list
,我们可以发现列表多了一个topic:/left_wheel_ft_sensor
没错,这个topic就是发布left_wheel的实时受力情况
在另外一个终端输入
rostopic echo /left_wheel_ft_sensor
不断输出以下信息:
---
header:
seq: 285
stamp:
secs: 920
nsecs: 703000000
frame_id: "left_wheel"//表示下面显示的是left_wheel的受力(包括扭矩)情况
wrench:
force:
x: -0.853289591896
y: -0.450872302912
z: 29.5849143769
torque:
x: 1.042562162
y: -0.158177195047
z: 0.019169853653
---
总结上面,找到监听的link的joint,然后调用插件,定义topic,基本上就ok了.
对于动态或静态的链接的车轮都测试过了,都有力输出,那么,可以推广到任意链接的link,都可以使用该方法来获取目标link实时受力情况.
只需要在urdf里面添加这一小结插件就ok了.
希望这个分享可以帮助有需要的同学.
##########################
好记性不如烂笔头
'–20200730