Я пытаюсь написать программу на C ++, которая выполняет некоторую обработку видео с использованием OpenCV, а затем использует информацию из видео для отправки сообщения на шину CAN с использованием PCAN-basic.Когда код для шины CAN выполняется сам по себе, синхронизация сообщений довольно хорошая, то есть система, с которой я разговариваю, не жалуется.Однако, когда вводится часть программы OpenCV, время цикла периодически увеличивается до неприемлемого значения, что вызывает проблемы.
Я использую chrono :: high_resolution_clock, чтобы сравнить время начала и время сейчас.Если это сравнение> 10 мс, тогда я отправляю сообщение CAN и перезагружаю часы.
Я попробовал следующее:
Обновлен OpenCV до последней версии (в надежде, что он будет работать быстрее /высвободить ресурсы)
Установить приоритет потока, в котором находится функция сообщения CAN, чтобы иметь более высокий приоритет.Установите 0, что, я полагаю, является наивысшим приоритетом.
Понизил сравнение, чтобы отправить сообщение на 8 мс, это было задумано как обходной путь, а не как исправление.
//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;
}
}
Есть ли лучший способ получить надежный сигнал с точностью до +/- 1 мс?