ROS1重温:仿真警告-TF_REPEATED_DATA ignoring data with redundant timestamp for frame r_drivel_wheel at…

ROS1重温:仿真警告-TF_REPEATED_DATA ignoring data with redundant timestamp for frame r_drivel_wheel at…

  • 缘来
  • 分析
    • 程序运行结果
    • 回看代码
    • 问题原因总结
  • 解决方法

缘来

  • 问题程序功能: 在仿真环境下,观测机器人运动时的传感器数据
  • 具体发生状况:
    • 首先启动了用于模拟机器人运动环境的 Gazebo launch文件
    • 紧接着启动了用于启动 rviz 文件来观测传感器数据的 launch 文件,这一 launch 文件启动之后,在该终端中一直报警告信息。(警告信息如下图所示)
      警告信息
警告信息样例:

[ WARN] [1677126755.840258548, 2528.881000000]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame r_drivel_wheel at time 2528.878000 according to authority unknown_publisher

分析

程序运行结果

  • 第一眼,从字面上看,是 TF 时间问题,时间戳不对齐
  • 细查代码,代码中不存在对 TF 时间上的修改
  • 观测 rviz ,看到左右轮所指向的父节点一直在 “base_link”“base_footprint” 之间跳动
    warn_gif
  • 运用 rqt_tf_treerosrun rqt_tf_tree rqt_tf_tree 查看 TF 关系 (需预先启动 Master 节点)
  • 通过查看 TF 树,发现左右两轮的父节点为 base_footprint,并非计划的 “base_liunk”
    TF 树片段
  • 从 TF 树中,可以看到 “base_link” 的发布方是 “/robot_state_publisher” ,而两个车轮的发布方来自 “/gazebo”

回看代码

  • “/robot_state_publisher” 来自于第二个 launch 文件,是机器人状态发布节点,即机器人的基本外观部件
<!-- 机器人状态发布节点 -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
  • “/gazebo” 则来自于 Gazebo 内部,因为为了使得机器人运动,加入了传动控制器仿真
  • 同时,从 xacro 仿真代码中,能够发现存在两处涉及到 车轮与其他部件构成关节 的片段
    • 一处来自于自定义编辑的机器人外观部件的仿真代码,此时已经定义好了左右车轮与底盘构成关节
      <!-- 驱动轮到底盘 -->
      <joint name="base_${name}_wheel_joint" type="continuous">
          <parent link="base_link" />
          <child link="${name}_drivel_wheel" />
          <!-- 此处已省略非必要代码 -->
      </joint>
      
    • 另一处来自机器人传动装置的仿真代码,标签<publishWheelTF><publishWheelJointState>的值为 true,此处又重新发布了一次关系
      <!-- 控制器 -->
      <gazebo>
          <plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so">
              <publishWheelTF>true</publishWheelTF>
              <publishWheelJointState>true</publishWheelJointState>
              <leftJoint>base_l_wheel_joint</leftJoint> <!-- 左轮 -->
              <rightJoint>base_r_wheel_joint</rightJoint> <!-- 右轮 -->
              <robotBaseFrame>base_footprint</robotBaseFrame> <!-- 根坐标系 -->
          	<!-- 此处已省略非必要代码 -->
          </plugin>
      </gazebo>
      

问题原因总结

  • 启动机器人仿真环境的代码中出现了: TF 发布关系冲突,冲突来自于 xacro 文件

解决方法

  • 将标签<publishWheelTF><publishWheelJointState>的值修改为 false
  • 重新启动模拟仿真环境,解决问题

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

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

(0)
乘风的头像乘风管理团队
上一篇 2023年11月13日
下一篇 2023年11月13日

相关推荐