在ROS系统中需要写一个消息发布器和订阅器,在发布器中放入之前已经写好的识别绿色圆盘的程序,在运行时遇到以下报错:
报错
terminate called after throwing an instance of ‘std::runtime_error’
what(): Duration is out of dual 32-bit range
已放弃(核心已转储)
问题原因
我的问题在于:
double rate = capture.get(CAP_PROP_FPS);//获取视频文件的帧率
//double rate=10;
ros::Rate loop_rate(rate);
int delay = cvRound(1000.00 / rate);
猜测问题原因主要是:
在获取视频的频率时,存在rate是0的可能性,那么1000.0/rate接近于无穷大,则会出现上述报错。
解决方法
该段代码修改为:
//double rate = capture.get(CAP_PROP_FPS);//获取视频文件的帧率
double rate=10;
ros::Rate loop_rate(rate);
int delay = cvRound(1000.00 / rate);
再重新catkin_make,再运行发布器,成功。