如何改善不准确的ROS定时器

时间:2017-05-02 13:29:32

标签: timer ros

我在我的程序中使用ROS计时器,并绘制预期事件时间和实际事件时间之间的差异,如下所示:event.current_real - event.current_expected;。但是,我绘制数据并发现ROS计时器在所有情况下都不准确。在我的程序中,定时器周期设置为0.002秒,但最大误差(0.01152秒)可能大到5.7倍。情节显示为here

我从ROS维基知道ROS计时器并不打算准确无误并且是系统负载和其他因素。所以我想知道的是如何让它尽可能准确?是否有替代ROS计时器的替代方法?

我正在使用ROS Indigo和Ubuntu 14.04。源代码如下:

#include "ros/ros.h"
#include <fstream>

using namespace std;
std::ofstream time_file;

void callback1(const ros::TimerEvent& event)
{
    ros::Duration error_dur = event.current_real - event.current_expected;
    time_file<<error_dur.toSec()<<endl;
}

int main(int argc, char **argv)
{
    time_file.open("time_file.txt");
    time_file<<"error_dur"<<endl;
    ros::init(argc, argv, "talker");
    ros::NodeHandle n;

    ros::Timer timer1 = n.createTimer(ros::Duration(0.002), callback1);

    ros::spin();
    if(!ros::ok())
        time_file.close();

    return 0;
}

1 个答案:

答案 0 :(得分:0)

根据运行时上下文,ROS时间(费率,计时器等)基于:

  • 挂钟时间 OR
  • /clock主题的分析。

例如,允许在重放行李时根据模拟数据设置ROS :: Time。

缺点是此过程可能缺乏精确度(特别是在开始时,直到收到第一条/clock消息)。

因此,如果您仅将时间数据用于内部目的(例如,计算短持续时间),您可能决定使用系统调用/库来获得精确度,但是您需要检查它在模拟期间是否运行良好。

来源:http://wiki.ros.org/Clock