我试图用C ++编写一个程序,该程序使用OpenCV进行一些视频处理,然后使用视频中的信息使用PCAN-basic将消息发送到CAN总线上。 当CAN总线的代码自行运行时,消息上的计时相当不错,即我正在与之交谈的系统不会抱怨。但是,当引入程序的OpenCV部分时,循环时间会间歇性地增加到不可接受的值,这会引起问题。
我正在使用chrono :: high_resolution_clock比较开始时间和现在的时间。如果此比较> 10ms,则我正在发送CAN消息并重新启动时钟。
我尝试了以下方法:
将OpenCV更新到最新版本(希望它可以运行得更快/释放资源)
将CAN消息功能所在的线程的线程优先级设置为更高的优先级。设置为0,我认为这是最高优先级。
降低比较以在8ms时发出消息,这是一种解决方法,而不是解决方法。
//Every 10ms send a CAN signal
chrono::duration<double, milli>xyTimeDifference = timeNow - xyTimer;
xyTimerCompare = xyTimeDifference.count();
if (xyTimerCompare > 10)
{
if (xyTimerCompare > 16)
{
cout << "xyTimerComapare went over by: " << xyTimerCompare << endl;
}
result = CAN_Write(PCAN_USBBUS1, &joystickXY);
//Reset the timer
xyTimer = chrono::high_resolution_clock::now();
if (result != PCAN_ERROR_OK)
{
break;
}
}
是否有更好的方法来获得+/- 1ms以内的可靠信号?