ROS学习之 cpp时间

来源:互联网 发布:wps表格怎么恢复数据 编辑:程序博客网 时间:2024/04/29 20:19
wiki链接: http://wiki.ros.org/roscpp/Overview/Time

    1.时刻和时间间隔

        ROS有内建的时间和时间间隔原始类型,rsolib程序包提供了ros::Time和ros::Duration类
        time是一个具体的时刻(上午9:30)而duration是一段时间(5个小时)duration可以是负值.
        Time和duration有相同的表示。
            int32 sec
            int32 nsec
        ros可以为节点提供一个模拟的时钟。用户应该使用roscpp的时间函数获取当前时间。
        1)获取当前时间
        ros::Time::now() 返回一个ros::Time实例。
        
        2)创建Time和Duration实例
        通过给定具体的浮点数,来初始化实例对象:
            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);

        3)转化Time和Duration实例
        Time和Duration对象可以被转化成相应的浮点秒数:
            double secs =ros::Time::now().toSec();

            ros::Duration d(0.5);
            secs = d.toSec();
        4)Time和Duration计算
        与其它原始数据类型一样,可以对time和duration进行算术操作。
        几个小例子:
            1 hour + 1 hour = 2 hours (duration + duration = duration)
            2 hours - 1 hour = 1 hour (duration - duration = duration)
            Today + 1 day = tomorrow (time + duration = time)
            Today - tomorrow = -1 day (time - time = duration)
            Today + tomorrow = error (time + time is undefined)
        在ros代码中的表示:
            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.睡眠和比率

        bool ros::Duration::sleep()  睡眠一段具体的时间间隔

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

        ros::Rate roslib提供了ros::Rate类来保持一定的频率来控制循环
            ros::Rate r(10); // 10 hz
            while (ros::ok())
            {
              ... do some work ...
              r.sleep();
            }
        注:通常建议使用Timer来代替Rate

    3.壁钟时间

        如果在模拟时间中,想要获取实际的壁钟时间,roslib提供了Wall版本的time构造器。
        如:ros::WallTime  ros::WallDuration ros::WallRate
0 0
原创粉丝点击