ROS2 use_sim_time 使用问题

前言

在默认的情况下,use_sim_time 在 rclcpp 客户端下为 false,rclcpp 客户端库将使用计算机的系统时钟作为时间源。如果将 use_sim_time 设置为 true, 则 rclcpp 客户端库使用模拟时钟,这时可以使用仿真系统,或者回放记录的数据,方便应用层调试,增加代码开发的灵活性。

为了支持这一点,ROS设计了一个 /clock 话题,rclcpp 客户端库可以侦听用于发布“模拟时间”的 /clock的话题来获取系统的模拟时间。

为了使代码使用用 ROS2 模拟时间,所有代码都必须使用适当的 rclpp 客户端库时间 API 来访问时间和睡眠,不能够使用其它原生的获取时间的接口,否则在仿真时会出现获取时间错误的现象。


一、实际时间与仿真时间工作流程

如下图所示是 ROS2 采用系统时间或者仿真时间的工作流程,主要分两块:

  1. use_sim_timetrue 时,rclcpp 会获取系统时间交给应用层,这是程序运行的大部分情况
  2. use_sim_timefalse 时,意味者是在仿真,bag 回放场景下,这时,需要有仿真器或者 bag 向 /clock 话题发布时间数据,
    rclcpp 客户端会监听 /clock 话题的数据,并将拿到的时间交给应用层。

二、在使用 rosbag 情况下 use_sim_time 使用步骤

  1. 节点启动时,把 use_sim_time 置为 true
  2. ros2 bag play 后面加上 --clock 选项, 表示使用 rosbag 的时间作为系统时间,可以检查 /clock 的时间为 bag 时间

三、仿真情况下异常检查方法

  1. 如果应用节点获取到的时间为 0,检查 /clock 话题是否有数据
  2. 如果获取到的时间为现在的时间:
    • 检查一下 use_sim_time 的值是否为 true : ros2 param get /节点名字 use_sim_time
    • 检查自己应用层获取时间的 API 是否为 rclcpp 提供的。
  3. 如果发现时间获取错乱,检查一下 /clock 的发布者是不是有多个。
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰·点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值