我正在为我们的机器人系统开发新的机器人控制软件,该软件必须从多个独立的传感器中读取值并相应地控制电动机。
该软件将在具有PREEMPT_RT Ubuntu的i5 PC上运行。每个传感器设备都带有一个SDK,我想在一个单独的线程中运行。一旦他们从传感器获得新值(一次从一个传感器获得多达50倍的新值),就应该在高级控制线程中更新这些值。更新速率取决于传感器,但将高达1 kHz。一旦“主传感器”获得新值并将其发送到控制线程,主传感器的线程应触发控制线程中的控制循环(使用非阻塞调用)。然后,控制线程应使用当前存储的传感器值为电动机计算新值,并将其传输到电动机。将触发控制回路的主要传感器也以1 kHz的速率获取新数据,因此通常必须执行控制线程。
我现在不确定该如何处理。您认为C ++ 11的线程功能已经可以解决此问题吗?还是应该使用类似pthreads或boost的东西? 主要要求是从一个线程向另一个线程发送数据(最多50个双精度)的超低延迟(约10 µs),以及在另一个线程中触发功能(非阻塞)的能力。
传感器线程将当前数据发送到控制线程后,它们应继续监视硬件以检查新的传感器值并检索它们。一些传感器线程对传感器数据执行额外的计算和过滤,这就是为什么我希望它们在额外的线程中运行,然后利用四核处理器的原因。