我知道这个问题已经被问了太多遍了,但我仍然不清楚。我在网上阅读不是,但是有人说他们在具有严格实时约束的应用程序中在ROS下控制机器人。因此,因为我需要一些技术性的论据(而不是简单的“ ros并非实时”),所以我会更具体(假设在RTOS下有ROS):


我阅读了ROS为ROS主题使用基于TCP / IP的通信,并且我知道TCP / IP不可靠。那意味着我不能在实时循环中使用主题?例如,向我的系统发送一个控制信号,将其发布到一个主题,然后系统通过一个主题向我发送一些反馈?
如果我有RTOS(例如Linux + Xenomai),我可以建立一个实时控制循环使用ROS的机器人还是ROS会成为瓶颈?

以上也许天真或我缺乏一些知识,所以请赐教!硬实时系统(例如1KHz),可以保证我们不会错过任何事情的系统(如果控制环每隔1ms运行一次,则系统将发生故障)。

评论

几天后再提醒我,我会解释一下。

欢迎来到机器人技术杰森,但恐怕这样的复合问题确实不适用于堆栈交换站点。我们倾向于根据您所遇到的实际问题来提出实用且可回答的问题,因此,如果将其分为单独的问题,则更有可能获得全面的答案。看看“如何询问”和“游览”以获取有关堆栈交换如何工作的更多信息。

能否请您澄清一下“实时”的定义。我认为您的意思是控件的更新速度要快于25Hz。

@Shahbaz作为实时对象,我定义了一个以某种高频(例如200Hz +)更新控件的系统,但是最重要的是要保证每个控制周期都将以200Hz进行,并且不会因抖动。

@jason,实时与快速无关。您认为实时系统可以保证截止日期是正确的。我了解您正在寻找一种快速的系统,但我要向JamesR澄清,即使周期为一天,实时系统也可以针对任何速度进行设计!

#1 楼

ROS不是实时操作系统。 ROS的目的不像VXWorx(这是火星好奇号流动站使用的)。 ROS被开发为一个简单,通用,可重用的平台,供所有人贡献和使用。开发人员将能够添加自己的抽象模块,从而建立一个丰富的可重用代码社区。此处的关键是ROS旨在节省开发时间,而不是确保实时操作。这解决了您的第6点。

最简单的原因是ROS不是实时的:它所在的Linux版本不是实时的。

对于第1点, TCP / IP的不可靠性是一个好主意,但是,这本身并不意味着具有TCP / IP的系统不能成为实时系统。 “实时”仅表示始终保证2个:

1)保证一个任务有完成时间-绝对期限,

2)如果不能达到期限,将发出有关此失败的警告。

这也应解释第2点和第3点。
对于第5点:是的,这是有好处的,但是对于某些体系结构来说,要做到这一点,我们需要一个实时OS切片(也称为基本操作层),这可能会很麻烦对于某些项目。

希望对您有所帮助,
Ryan

评论


$ \ begingroup $
因此,如果我修补Linux内核(例如使用Xenomai),并且在ROS之下有一个RTOS,我将能够使用每个ROS功能(例如ROS主题)而不会造成瓶颈,从而打破了控制循环的实时性?
$ \ endgroup $
–杰森
2015年6月6日在17:03

$ \ begingroup $
@ jason,ROS本质上是非实时的。使它在实时系统上运行根本不是实时的。
$ \ endgroup $
– Shahbaz
2015年6月8日在8:35