具有异步采集的时间关键型 QT、UART、ISAAC 和 dll 的 C++ 处理策略

Posted

技术标签:

【中文标题】具有异步采集的时间关键型 QT、UART、ISAAC 和 dll 的 C++ 处理策略【英文标题】:C++ Treading strategy for time critical QT, UART, ISAAC and dll with async acquisition 【发布时间】:2020-08-26 12:13:12 【问题描述】:

我正在开发使用以下 SDK 和“部件”的应用程序:

Qt 图形界面 UART 上的 Xbox one 控制器 一个 arduino 在 UART 上到期 ISAAC VO(https://docs.nvidia.com/isaac/isaac/packages/perception/doc/visual_odometry.html) 通过 dll 库 (https://www.phidgets.com/?&prodid=32) 访问的 IMU UVC V4L2 立体相机

IMU 似乎只能通过 phidget Spacial API 访问,该 API 会自动线程化应用程序(线程频率精度较差)。

因为我的 Qt GUI 有一个时间相关的绘图,所以我使用 QTimer 线程化了更新绘图函数。

这是我的梦想:

main loop() (30Hz)
//Get (Async)
getControllerInput();(60Hz UART)
getQtInput();(60Hz)
getArduinoInput();(12Hz UART so sometimes compute with old datas)
getIMUInput();(250Hz UART throug Spatial API )
getCameraInputFromIsaac();(60Hz)
//Process (Sync in some parts)
ProcessIMURectification();(250Hz)
ProcessDataForIsaac();(60Hz)
SendIMUToIsaac();(60Hz)
SendCameraToIsaac();(60Hz)
ComputeIsaac();(30Hz)
GetIsaacOutup();(30Hz)
ProcessDataForArduinoAndQT();(60Hz)
//Output (Async)
SendDataToArduino();(60Hz UART)
SendDataToQt();(60Hz)
 

有了所有这些线程,我只是不想选择错误的方法,我尝试了 std lib 线程,还看到了一些关于 Futures/Promises Vs 的帖子。插座,但我不知道女巫是最好的。

我的问题是:

有没有办法优先处理线程以避免 Qt GUI 女巫获取大量资源时对时间要求不高。

某些线程方法是否比其他方法更节省资源(我在 jetson nano 上运行,所以库存资源不多)

我是否应该线程化一个 CUDA 函数在 GPU 上进行计算以充分利用 jetson nano 的潜力

主要问题:考虑到所有这些,有没有比另一种更好的线程化方式?

谢谢谢谢谢谢!

【问题讨论】:

* 是的,有:QThread::currentThread()->setPriority(QThread::HighPriority); * 是的。我会选择 QThread 线程管理器。 * 由你决定。但是为什么不保持 GUI 线程干净。* 我会使用 QThread,因为它对资源的要求最低。顺便说一句,这是 Qt 而不是 QT。 每个问题一个问题。这不是设计圆桌会议。 是的,你是对的,我想我唯一的问题是:在这种情况下,哪种线程方法是最好的?,cuda 认为这里有点越界了。 【参考方案1】:

谢谢@Laszlo,是

mythread() 
if(lasttime-time()<1/frequency)
      pocess();
      lasttime=time();

else
      usleep((1/frequency) - (lasttime-time()) )

管理线程频率的最佳方法还是其他方法更好?

【讨论】:

知道了:Qt 线程具有我可以操纵的功能,再次感谢 :) 我将使用以下内容:QElapsedTimer 和 QThread::requestInterruption() 和 currentThread()->setPriority 和 QSemaphore 应该完成这项工作

以上是关于具有异步采集的时间关键型 QT、UART、ISAAC 和 dll 的 C++ 处理策略的主要内容,如果未能解决你的问题,请参考以下文章

振弦采集模块UART 通讯协议

UART 到 Qt 软件错误 - 为啥数据总是分裂?

振弦采集模块主动上传测量数据( UART)

开发过程中,调用别人开发的代码,用到啥关键字

串口的区别

ATMEGA32 UART 通信