我在我的程序中使用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;
}
答案 0 :(得分:0)
根据运行时上下文,ROS时间(费率,计时器等)基于:
/clock
主题的分析。例如,允许在重放行李时根据模拟数据设置ROS :: Time。
缺点是此过程可能缺乏精确度(特别是在开始时,直到收到第一条/clock
消息)。
因此,如果您仅将时间数据用于内部目的(例如,计算短持续时间),您可能决定使用系统调用/库来获得精确度,但是您需要检查它在模拟期间是否运行良好。