【已解决】TF_REPEATED_DATA ignoring data with redundant timestamp for frame

目录

  • 1 问题背景
  • 2 问题探索
  • 3 问题解决
  • 4 告别Bug

1 问题背景

环境:Ubuntu20.04 ROS-noetic
现象:打开Rviz与Gazebo加载机器人模型时,终端不停刷新警告TF_REPEATED_DATA ignoring data with redundant timestamp for frame,且在未施加数据的情况下,Rviz中模型车轮有微小移动

2 问题探索

ROS的roswtf工具可以对系统进行安装检查和运行检查。安装完备的ROS系统在未启动roscore前输出以下信息。


现在在系统运行时使用roswtf工具得到以下信息


重点在于right_wheel_linkleft_wheel_link的TF变换有两个发布者:

  • /gazebo
  • /robot_state_publisher

产生了冲突

ERROR TF re-parenting contention:
 * reparenting of [right_wheel_link] to [base_footprint] by [/gazebo]
 * reparenting of [left_wheel_link] to [base_footprint] by [/gazebo]
 * reparenting of [left_wheel_link] to [base_link] by [/robot_state_publisher]
 * reparenting of [right_wheel_link] to [base_link] by [/robot_state_publisher]

3 问题解决

/robot_state_publisher发布right_wheel_linkleft_wheel_linkTF变换的方式是在launch文件中:

<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/>

/gazebo发布right_wheel_linkleft_wheel_linkTF变换的方式是在.xacro文件中:

<!-- 差速控制器 -->
<gazebo>
  <plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so">
      ...
      <publishWheelTF>true</publishWheelTF>
      <publishWheelJointState>true</publishWheelJointState>
      ...
  </plugin>
</gazebo> 

所谓joint_state_publisherrobot_state_publisher是ROS系统中更新机器人状态的两个节点:

  • joint_state_publisher:读取由robot_description定义的URDF文件内的参数,找到所有非固定(non-fixed)关节并将当前关节信息转化为sensor_msgs/JointState消息发布到话题joint_states
  • robot_state_publisher:可以理解为一个tf广播器,订阅话题joint_states,并根据消息内容计算更新当前机器人的运动学模型,通过tf广播器发布坐标系状态

如果不使用joint_state_publisherrobot_state_publisher,Rviz等组件就无法收到最新的机器人全体连杆TF树,因此考虑将差速控制器中的publishWheelTFpublishWheelJointState均设置为false,即可消除冲突

4 告别Bug

本文收录于《告别Bug》专栏,该专栏记录人工智能领域中各类Bug以备复查,文章形式为:问题背景 + 问题探索 + 问题解决,订阅专栏+关注博主后可通过下方名片联系我进入AI技术交流群帮忙解决问题


👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年7月28日
下一篇 2023年7月28日

相关推荐