gpt4 book ai didi

linux - 什么是同时具有实时循环和非实时功能的更好方法

转载 作者:IT王子 更新时间:2023-10-29 01:26:42 26 4
gpt4 key购买 nike

抱歉标题不好,我真的不知道如何简短地描述...

我的场景是,对于机器人应用,我们需要一个实时循环来每 1 毫秒控制一次电机。同时我们可能想做一些没有实时要求的事情,比如路径规划、图像处理、物体识别等。此外,一些非实时任务的结果会被发送到实时电机控制循环控制机器人。

对于实时部分,我使用带有 RT-Preempt 补丁的 Ubuntu。因此,我可以像示例代码一样在 while 循环中运行实时控制循环 here .

但是,我对非实时部分一无所知。以我的拙见,我会在同一进程中新建一个线程并在该线程中运行非实时任务。

由于我是实时编程的新手,我不知道我的设计会有什么问题。此外,我想知道是否有设计这种程序的范例?

---编辑---

有关我的申请的更多详细信息。

机器人,更具体的说,是机械臂。

对于实时部分,它计算正向运动学、逆向运动学和雅可比矩阵。然后使用简单的 PID Controller 计算正确的输出命令。最后,使用EtherCAT向每个电机发送电机指令。

对于非实时部分,例如可以从kinect中获取PointCloud流,做一些预处理,计算场景中物体的位姿,为机械臂确定一个好的抓取位姿,最后发送每个电机的目标到实时部分,以便机器人 ARM 实际移动到目标并捕获物体。整个过程可能需要 10 秒左右。但与此同时,实时循环应继续运行并发送适当的力命令或位置命令,使机器人 ARM 保持其原始姿势并静止不动。

至于这两个部分之间的通信,在大多数情况下,命令是由非实时部分通过新颖的算法生成的,并将其发送到实时部分以使机器人 ARM 移动。然而,有时非实时部分的算法需要知道,例如末端执行器的当前位姿。因此,非实时部分需要从驻留在实时部分的正向运动学中获取信息。

最佳答案

实时循环到底在做什么?我猜(因为你提到“每 1 毫秒做一些电机控制”)做一些非常短的计算,并向电机设备输出几个字节。

非实时部分在做什么?我想象一些用户界面???

什么样的机器人?

路径规划可能需要很强的实时性,尤其是当机器人快速移动时。巡航导弹或谷歌汽车与小型机器人不同robocup .在巡航导弹或谷歌汽车上失去几毫秒的通信可能会杀死人类,但在 Robocup 上是可以接受的 - 你只会输掉一场比赛,并且可能会轻微伤害你的机器人。

40米/秒(144公里/小时,略高于法国130公里/小时的高速公路限速),两毫秒就是8厘米,如果这8厘米是人肉,可能就意味着杀人.

这两个部分如何相互作用?实时部分是否向另一部分发送一些信息?

也许这两个部分可能是一些不同的进程(不是线程),并且有一些通信?也许使用带有信号量的共享内存进行同步。然后看sem_overview(7)shm_overview(7) .

请注意,在实时和“非实时”部分之间的接口(interface)处,非实时部分实际上也可能变为“实时”。

要点是定义两个(实时与非实时)部分之间的概念接口(interface),并决定您是否可以承受丢失一些数据和一些同步(两个部分之间的通信)的损失。

如果非实时部分的作用只是显示或设置速度(即一些低阈值和高阈值),您有时可能会丢失一些数据或同步。但问题在于细节(如果机器人是真正的自动驾驶汽车,就像谷歌汽车一样在高速公路上行驶,你可能不应该失去一些交流,然后两个部分都变成实时的!)。

关于linux - 什么是同时具有实时循环和非实时功能的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25187252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com