介绍 ROS 中的时刻、时间间隔、定时器的定义和应用。

一、Time

1、时刻和间隔

ROS 中有 time 和 duration 两种类型,相应的有 ros::Time 和 ros::Duration 类。

  • time 表示的是时刻
  • duration 表示的是时间间隔

其统一表示形式为:

int32 sec
int32 nsec

ROS 可以给节点提供一个模拟始时钟。不同于平台时间,你可以利用 roscpp 的时间例程来得到当前的时间,此时间能够和模拟时间、wall-clock 时间进行无缝连接。

1.1 获得当前时间

ros::Time::now()
ros::Time begin = ros::Time::now();

时间计算起点

使用模拟时间时,当 /clock节点接受到第一条消息时,now() 返回时刻 0,此时客户端还不知道时钟时间。

1.2 创建时间和间隔

浮点数形式

ros::Time a_little_after_the_beginning(0.001);
ros::Duration five_seconds(5.0);

用两个整数表示

ros::Time a_little_after_the_beginning(0, 1000000);
ros::Duration five_seconds(5, 0);

1.3 时间与间隔的转化

double secs =ros::Time::now().toSec();ros::Duration d(0.5);
secs = d.toSec();

1.4 时间与间隔的四则运算

时间和时刻的四则运算实例如下:

ros::Duration two_hours = ros::Duration(60*60) + ros::Duration(60*60);
ros::Duration one_hour = ros::Duration(2*60*60) - ros::Duration(60*60);
ros::Time tomorrow = ros::Time::now() + ros::Duration(24*60*60);
ros::Duration negative_one_day = ros::Time::now() - tomorrow;

2、Sleeping and Rates

bool ros::Duration::sleep()

睡眠 0.5s:

ros::Duration(0.5).sleep(); // sleep for half a second

ros::Rate

频率 10Hz:

ros::Rate r(10); // 10 hz
while (ros::ok())
{... do some work ...r.sleep();
}

Rate 和 Timer 的作用一样,最好用 Timer 来定时。

3、Wall Time

在模拟时,如果想要进入实际运行 wall-clock time ,可以用 ros::WallTime, ros::WallDuration, 和ros::WallRate,类似于 ros::Time, ros::Duration, 和 ros::Rate

二、Timer

定时器不能代替实时线程/内核,它们仅对没有硬实时要求的事物有用。

1、定义定时器

方法: ros::NodeHandle::createTimer()

ros::Timer timer = nh.createTimer(ros::Duration(0.1), timerCallback);

完整定义:

 ros::Timer ros::NodeHandle::createTimer(ros::Duration period, <callback>, bool oneshot = false);

period:定时器回调函数之间的时间间隔

:定时器回调,函数、类方法或者函数子对象

oneshot:是否只定时一次。false,就是连续定时。

2、回调特征

void callback(const ros::TimerEvent&);
    struct TimerEvent{Time last_expected;                     ///< 上一回调函数应该发生的时刻Time last_real;                         ///< 上一回调函数实际发生的时刻Time current_expected;                  ///< 当前回调函数应该发生的时刻Time current_real;                      ///< 当前回调函数实际发生的时刻struct{WallDuration last_duration;           ///<包含上一回调的时间间隔(结束时间-开始时间),它始终在 `wall-clock time`} profile;};

3、回调类型

functions
class methods
functor objects (including boost::function)

3.1 Functions

void callback(const ros::TimerEvent& event)
{
...
}...
ros::Timer timer = nh.createTimer(ros::Duration(0.1), callback);

3.2 Class Methods

void Foo::callback(const ros::TimerEvent& event)
{
...
}...
Foo foo_object;
ros::Timer timer = nh.createTimer(ros::Duration(0.1), &Foo::callback, &foo_object);

3.3 Functor Objects

class Foo
{
public:void operator()(const ros::TimerEvent& event){...}
};...
ros::Timer timer = nh.createTimer(ros::Duration(0.1), Foo());

3.4 Wall-clock Timers

在仿真是利用 ROS Clock。

void callback(const ros::WallTimerEvent& event)
{...
}...
ros::WallTimer timer = nh.createWallTimer(ros::WallDuration(0.1), callback);

参考:

http://wiki.ros.org/roscpp/Overview/Time
http://wiki.ros.org/roscpp/Overview/Timers
http://wiki.ros.org/roscpp_tutorials/Tutorials/Timers

ROS学习(十三):time 和 Timer相关推荐

  1. ROS学习笔记(一)补充篇 参考创客制造

    我将ROS的CPP部分分成7个部分: 1.基础的node param 2.动态调节参数 3.关于TF变换 4.actionlib 5.插件技术 6.movebase 7.nodelet技术 前言 相比 ...

  2. ROS学习汇总(3D摄像头)

    1.ros-摄像头usb_cam以及rviz显示 https://developer.orbbec.com.cn/forum_plate_module_details.html?id=1461 2.R ...

  3. android音视频工程师,音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源)...

    ## 音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源) ## 视音频编辑器 ## 前言 有时候我们想对音视频进行加工处理,比如视频编辑.添加字幕.裁剪等功能处 ...

  4. ROS学习手记 - 2.1: Create and Build ROS Package 生成包(Python)

    ROS学习手记 - 2.1: Create and Build ROS Package 生成包(Python) ROS学习手记 - 2.1: Create and Build ROS Package ...

  5. ROS学习:创建机器人的urdf

    ROS学习之路08:创建机器人的urdf(xacro)模型并通过rviz可视化_Hi, Robotics-CSDN博客_urdf可视化 1 创建工作空间 mkdir -p ~/catkin_ws/sr ...

  6. ROS学习之日志消息

    ROS学习之日志消息 ROS日志系统的核心思想,就是使程序生成一些简短的文本字符流,这些字符流便是日志消息. 0.1严重级别 ROS中,日志消息分为五个不同的严重级别,也可简称为严重性或者级别.按照严 ...

  7. ROS学习总结一ROS组织框架与几个关键词

    本人一个ROS学习初学者,在经过三天的学习基础教程,对ROS有了一个基本的了解,在此,笔者就自己的学习的理解做一个总结,如有错误还请各位指出. 一.组织框架 catkin_ws() --build - ...

  8. ROS 学习笔记(三):自定义服务数据srv+server+client 示例运行

    ROS 学习笔记(三):自定义服务数据srv+Server+Client 示例运行 一.自定义服务数据: 1.向功能包添加自定义服务文件(AddTwoInts.srv) cd ~/catkin_ws/ ...

  9. ROS 学习笔记(二):自定义消息msg+Publisher+Subscriber 示例运行

    ROS 学习笔记(二):自定义消息msg+Publisher+Subscriber 示例运行 一.自定义消息: 1.新建msg文件夹,创建定义Person.msg 文件 mkdir -p ~/catk ...

  10. ROS 学习笔记(一):工作空间+功能包创建

    ROS 学习笔记(一):工作空间+功能包创建 一.创建工作空间(catkin_make编译): 1.创建工作空间 catkin_ws 创建空间.初始化(建立一个文件夹) cd ~ mkdir -p ~ ...

最新文章

  1. jQuery的显示和隐藏
  2. android获取文件夹里最新的文件夹,Android 获取已存在的文件所在目录下的所有文件为null。...
  3. 第一阶段SCRUM冲刺-05
  4. 不容错过!Greenplum的又一本好书
  5. 2021华为软件精英挑战赛总结
  6. jacob调用word宏
  7. phpstudy重置密码登录报错#1045
  8. 基于EMC的共模干扰与差模干扰以及抑制方法
  9. 实现顺序表各种基本运算的算法
  10. 奔腾处理器_编号和非编号的奔腾处理器之间有什么区别?
  11. 一文讲解灰光模块和彩光模块
  12. [Linux字符驱动] DIDO 74HC595实现遥控遥信功能
  13. scada系统集成_设计 SCADA 应用程序软件
  14. OA系统与MES系统的异同点
  15. 英飞凌——飞行时间的工作原理是什么
  16. 【视频分享】Java Spring 经典入门基础教程详解
  17. 小白聊智慧制造之十三:工业APP是释放工业大数据价值的方式
  18. wr742n虚拟服务器,TP-Link TL-WR742N路由器作为无线交换机的设置方法
  19. 图像处理之前景检测(五)之基于样本一致性背景检测(SACON)(主要为代码升级)
  20. 「网络安全」安全设备篇(1)——防火墙

热门文章

  1. 【学习笔记】MHP-VOS: Multiple Hypotheses Propagation for Video Object Segmentation
  2. 解决不同浏览器的css兼容问题
  3. fastjson将json字符串转为Map对象,拿走不谢
  4. bzoj1402 Ticket to Ride 斯坦纳树 + 状压dp
  5. 洛谷P2312解方程
  6. 友盟-上传开发发布证书
  7. 流程管理产品小故事汇总贴
  8. 锋利的JQuery —— DOM操作
  9. UITableView刷新单个cell或者单个Section
  10. MyEclipse 2013 新功能介绍