介绍 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);

time 和 Timer相关推荐

  1. Timer定时器开发

    Timer定时器开发 定时器的作用是不占线程的等待一个确定时间,同样通过callback来通知定时器到期. 参考:https://github.com/sogou/workflow 定时器的创建 同样 ...

  2. Timer 的简单介绍

    1 Timer timer=new Timer(); (个人建议使用的时候不要直接就new一个,原因是,还没使用呢就先分配一个空间, 我们使用private Timer timer: 然后在使用前  ...

  3. nordic 51822 sdk. timer 的使用

    它的源代码和头文件分别为app_timer.c/app_timer.h.这是Nordic为我们提供的虚拟定时器,这个定时器不同于硬件上的TIMER,而是基于RTC1实现的一种虚拟定时器,其将定时功能作 ...

  4. Standup Timer的MVC模式及项目结构分析

    前言 学习android一段时间了,为了进一步了解android的应用是如何设计开发的,决定详细研究几个开源的android应用.从一些开源应用中吸收点东西,一边进行量的积累,一边探索android的 ...

  5. C# Timer使用方法示例

    实例化一个timer: // 每5分钟执行一次,每次执行的间隔毫秒时长 System.Timers.Timer timer = new System.Timers.Timer(5*60*1000); ...

  6. C#中Timer组件用法

    Timer组件是也是一个WinForm组件了,和其他的WinForm组件的最大区别是:Timer组件是不可见的,而其他大部分的组件都是都是可见的,可以设计的.Timer组件也被封装在名称空间Syste ...

  7. Android Timer的使用

    1:服务端使用PHP <?phpecho date('Y-m-d H:i:s'); ?> 2:activity_main.xml <RelativeLayout xmlns:andr ...

  8. Linux内核中关于定时器Timer的应用

    2019独角兽企业重金招聘Python工程师标准>>> 在Touchscreen驱动中 1 声明  Ad7877.c (\linux-2.6.30.4\drivers\input\t ...

  9. silverlight、wpf中 dispatcher和timer区别

    相同点:都是定时执行任务的计时器,都可以使用. 不同点:Timer运行在非UI 线程,如果Timer需要更新UI的时候,需要调用 Invoke或者 BeginInvoke DispatcherTime ...

  10. java timer cron_Java之旅--定时任务(Timer、Quartz、Spring、LinuxCron)

    在Java中,实现定时任务有多种方式.本文介绍4种.Timer和TimerTask.Spring.QuartZ.Linux Cron. 以上4种实现定时任务的方式.Timer是最简单的.不须要不论什么 ...

最新文章

  1. struts2.2.1关于sitemesh和freemarker整合的细节
  2. c语言双循环计算n的阶乘,用C语言用循环实现N的阶乘
  3. 01. Node js Hello world
  4. 怎么圆角变直角_衣柜设计个圆角有什么用?效果好看又实用,会这样装的都是老木工...
  5. web前端(12)—— 页面布局2
  6. Mysql报错130_mysql 突然报错,连接不上
  7. html是纯文本语言吗,记事本是纯文本文件吗
  8. 2021年品牌CDP与营销数字化转型报告:从自建数据资产到消费者深度运营
  9. 扩展欧几里得算法(双六游戏)
  10. win8 性能测试软件,win8系统优化软件评测
  11. 量子计算机epr,从EPR到量子信息[转] - 物理 - 小木虫 - 学术 科研 互动社区
  12. alios是安卓吗_鸿蒙OS系统被质疑,谷歌也有新布局!阿里云OS事件会再现吗?
  13. 2022 lineCTF WEB复现WriteUp
  14. Linux学习笔记(3)- 网络编程以及范例程序
  15. 温州大学c语言期末试卷,2016年温州大学物理与电子信息工程学院综合卷之C语言程序设计复试笔试最后押题五套卷...
  16. 【游戏技术】SourceMod 用法说明
  17. 艾赛克科技《RFID智能仓库管理系统》
  18. orange one plus 全志H6教程
  19. 2021年全球闪存峰会在杭州盛大开幕
  20. 2015年8月淡季成都到稻城亚丁自驾游自己的攻略

热门文章

  1. python网站安全(一): XSS注入
  2. 小学三年级计算机认识鼠标说课,认识鼠标说课稿.doc
  3. 中西合璧的2023级上海国家会计学院美国亚利桑那州立大学金融EMBA
  4. 终于搞懂HashMap的源码了!!!
  5. CoreIDRAW 软件的强大功能及适用性
  6. cocos creator基础-碰撞检测系统
  7. 景观概念家喻户晓 景观设计师考证需求井喷
  8. 【计算机网络】CSMA/CD协议
  9. WebComponent+WebGl的实时图像处理弹幕播放器
  10. 第2次作业:随随便便又是一个响响亮亮的标题!