ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2019-06-28 23:37:53  阅读:361  来源: 互联网

标签:ubuntu linux real-time robotics hard-real-time


抱歉标题不好,我真的不知道如何描述…

我的情况是,对于机器人应用程序,我们需要一个实时循环来每1ms控制一次电机.同时我们可能想要做一些没有实时要求的事情,例如路径规划,图像处理,对象识别等.此外,非实时任务的一些结果将被发送到实时电机控制循环来控制机器人.

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

但是,我不知道非实时部分.在我看来,我会在同一个进程中创建一个线程并在该线程中运行非实时任务.

由于我对实时编程很新,我不知道我的设计会出现什么问题.此外,我想知道是否有任何设计此类程序的范例?

– -编辑 – –

关于我的申请的更多细节.

更具体地说,机器人是机器人手臂.

对于实时部分,它计算正向运动学,反向运动学和雅可比.然后使用简单的PID控制器计算正确的输出命令.最后,使用EtherCAT将电机命令发送到每个电机.

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

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

解决方法:

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

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

什么样的机器人?

路径规划可能需要很强的实时性,特别是在机器人快速移动的情况下.巡航导弹或谷歌汽车与robocup的小型机器人不同.失去几毫秒的通信可能会在巡航导弹或谷歌汽车上杀死人类,但在机器人上可以接受 – 你只会丢失一个游戏,也许会伤害你的机器人.

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

两部分如何相互作用?实时部分是否向其他部分发送了一些信息?

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

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

重点是定义两个(实时与非实时)部分之间的概念界面,并决定是否能够承受丢失一些数据和一些同步(两部分之间的通信).

如果非实时部分的角色只是显示或设置速度(即某些低和高阈值),您可能有时会丢失一些数据或同步.但是细节就是邪恶(如果机器人是一辆真正的自动驾驶汽车,在Google Car的某些高速公路上行驶,你可能不应该失去一些交换,然后这两个部分都变成了实时!).

标签:ubuntu,linux,real-time,robotics,hard-real-time
来源: https://codeday.me/bug/20190628/1320767.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有