Deterministic Execution of ROS~2 Applications via Lingua Franca
本文提出了一种将未经修改的 ROS 2 应用程序转换为 Lingua Franca 程序以强制执行确定性执行和时间可预测性的框架,从而消除了 ROS 2 回调顺序和消息交错中固有的非确定性。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下你正在经营一家繁忙的餐厅厨房。在一个标准的厨房里(这就像是 ROS 2,即用于构建机器人的软件),主厨大声喊出订单,而厨师们(机器人的不同部分)只要听到声音就会去接单。
问题在于:如果两个订单同时到达,厨师可能会先抓取“沙拉”订单,也可能先抓取“牛排”订单,这取决于谁离取票口更近,或者那天谁动作更快。有时牛排比沙拉先到,有时则相反。这就是非确定性(nondeterministic)。对于正在驾驶汽车的机器人来说,这是非常危险的:如果机器人同时接收到“停止”信号和“前进”信号,它必须知道每次都应该先处理哪一个。如果它猜错了,汽车可能会发生碰撞。
这篇论文的作者构建了一个交通控制器(称为 Lingua Franca,简称 LF),它可以坐落在你现有的机器人厨房之上,强制其遵循严格且不可更改的调度方案,而无需你重写食谱(代码)。
以下是他们实现这一目标的简单拆解:
1. 问题所在:“混乱的厨房”
在标准的 ROS 2 系统中,任务发生的顺序取决于物理层面的因素,例如:
- 计算机在某一秒钟的处理速度如何。
- 消息在网络中传输需要多久(就像服务员跑向厨房的时间)。
- 计算机的哪个线程先抓取到了这条消息。
正因如此,如果你用相同的输入运行两次同一个机器人程序,第二次运行时任务执行的顺序可能会与第一次不同。这使得证明机器人的安全性变得不可能,因为你无法精确预测它下一步会做什么。
2. 解决方案:“逻辑时钟”
作者引入了**逻辑时间(Logical Time)**的概念。想象一下,厨房里有一个神奇的时钟,它的滴答声不取决于墙上的秒针,而是基于食谱中的“步骤”。
- 第 1 步: 定时器响起。
- 第 2 步: 准备沙拉。
- 第 3 步: 烹饪牛排。
在这个系统中,烹饪牛排花费的“实际时间”并不重要。如果食谱规定“先准备沙拉,然后 烹饪牛排”,那么系统会等到沙拉准备好之后,才会开始“思考”牛排的事。它忽略了厨师在现实世界中的速度。这确保了无论硬件运行快慢,第 2 步永远发生在第 3 步之前。
3. 魔法技巧:“无需重写即可实现”
通常,为了获得这种完美的顺序,你必须扔掉旧的食谱,用另一种语言从头开始编写新的食谱。这既困难又昂贵。
作者创建了一个翻译工具。
- 你将现有的 ROS 2 机器人代码(“旧食谱”)交给它。
- 该工具会分析代码,弄清楚各个部分是如何连接的(谁在和谁说话),并自动在其周围构建一个“包装器(wrapper)”。
- 这个包装器会强制机器人根据严格的“逻辑时间”规则运行。
- 至关重要的是: 机器人内部的原有代码完全没有被触动。它完全按照原样运行,但其运行的顺序现在由这个新的包装器进行了完美控制。
4. 他们的发现(结果)
他们在两样东西上测试了这一点:
- 一个包含几个部分的简单模拟机器人。
- 一个真实的自动驾驶系统(称为 Autoware),该系统由 24 个不同的部分协同工作。
结果如下:
- 标准 ROS 2: 任务的顺序在每次运行测试时都会发生变化。有时机器人按一种顺序处理数据,有时又按另一种顺序。完成一项任务所需的时间波动巨大(有时是 5 毫秒,有时是 900 毫秒)。
- 他们的新系统(受 LF 控制): 任务的顺序每次运行都完全一致。完成任务所需的时间也是每次都完全相同。
他们还展示了你可以利用这个系统来“调优”机器人。你可以告诉系统:“我希望机器人具有极高的连贯性(即使这意味着要多等一会儿,也要始终先做 A 再做 B)”,或者“我希望机器人速度极快(即使顺序会略有变化)”。你可以通过调节这个“旋钮”来实现,而无需修改机器人的代码。
总结
可以把这篇论文看作是为一支混乱的管弦乐队发明了一位指挥家。乐手们(机器人代码)仍然按照原有的方式演奏各自的乐器,但现在有了指挥家(这个新框架)来告诉他们何时演奏每一个音符。这确保了每一次表演听起来都完全一样,从而使机器人变得安全、可预测且可靠,而且不需要重新教乐手如何阅读新的乐谱。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。