ROS 2 实时控制:截止日期、抖动与ros2_control

实时机器人控制意味着所需的计算和输入输出在指定截止时间内完成,且抖动有界。这不仅仅是高平均帧率的意思。一个偶尔停顿几毫秒的1 kHz环路,可能比一个最坏时序仍符合被控对象要求的较慢控制环更难使用。

ROS 2 可以是实时系统的一部分,但确定性依赖于操作系统、内核、调度、 CPU和中断的配置、内存行为、驱动程序、中间件路径、控制器代码和硬件接口。非实时感知、日志和服务应穿越有界接口,而非在关键环路中执行。

请将本指南与机器人关节网络比较和电机驱动器架构指南配合使用。实时性声明必须在最坏可信负载和明确的故障响应条件下测量。

从截止日期和漏掉的后果开始

定义控制周期、允许的启动抖动、最差执行时间、 I/O时序和数据年龄限制。然后定义错过一次截止日期意味着什么:保留有界命令、降低性能、停止控制器或进入更安全状态。答案取决于被控对象的速度和危险程度。

软实时、强实时和硬实时描述了截止日期错过如何影响其实用性或可接受性;它们不是性能徽章。大多数通用机器人计算机需要系统特定的证据。保持与控制器配置的定时合同,这样后续的软件变更不会悄然使其失效。

TurtleBot3 汉堡展示机载电脑传感器、电机控制器及布线
一台机器人可以在更严格的运动控制任务之外运行感知和网络,但它们的调度和数据交换需要明确隔离。来源:Kuscu0,维基共享资源。许可:CC BY-SA 4.0。

硬件环路遵循读、更新和写入

ros2_control控制器管理器文档描述了管理控制器和硬件接口的组件,并讨论确定性。一个常见的循环读取硬件状态,更新控制器并以配置速率写入命令。

应在物理采样和命令实际应用的位置记录时间戳。软件函数的进入时间并不总是传感器采集时间。跟踪状态到达控制器时的数据年龄,以及命令到达驱动器时的年龄。控制环可能周期性执行,却一直在使用陈旧的网络数据。

循环阶段截止日期证据隐藏延迟检查
硬件读取捕获到可用时间设备或总线队列物理时间戳
控制器更新最坏执行时间分配或锁定跟踪执行时长
硬件写入命令应用时间网络排程驱动器时间戳
数据交换生产者-消费者年龄回调积压序列计数器
故障路径检测到安全状态服务或生命周期工作注入截止时间违约

调度策略需要CPU和中断设计

实时线程可以使用固定优先级调度策略并获得适当权限,但仅靠优先级并不等同于隔离。在考虑整个系统的情况下分配CPU亲和力和中断处理。高优先级线程如果等待低优先级锁,仍然可能错过截止日期。

测量网络、存储、GPU、摄像头和后台服务造成的干扰。避免使关键内核任务或安全任务得不到运行机会。记录调度器、优先级、CPU 亲和力、电源状态和固件,确保测试机器与部署机器具有可比性。

内存故障和分配会产生时序尾部

动态分配、页错误、内存回收和无界容器增长可能引入可变延迟。预配置缓冲区,适当锁定内存,预热相关代码和数据路径,保持消息大小有界。未经验证行为,勿在紧环中分配或释放内存。

内存准备无法解决缓存争用或设备DMA干扰。应对整个应用进行压力,并检查尾延迟。确认错误路径、参数变更和控制器转换在环路活跃时不会意外分配或阻塞。

阻塞式I/O和日志记录应放在控制环之外

文件写入、控制台输出、同步服务、 DNS、动态发现和等待一般回调在硬边界更新路径内不合适,除非有特定实现证明了边界。通过实时安全机制向低优先级消费者发送简洁诊断。

限制队列长度,并决定是丢弃新数据还是旧数据。无界日志可以将时序问题转移到内存增长。保留对丢失诊断的计数器,避免仅仅因为证据被丢弃而让系统显得健康。

五级 ROS 2 实时控制环设计
内核、调度、代码路径、驱动程序和硬件都共同促成了确定性。来源:物理人工智能实验室。

实时安全缓冲区分隔时序域

非实时规划器可以将命令或轨迹发布到无锁或有界的切换中,控制器读取最新的完整对象而无需等待生产者。状态可以通过另一个有界快照向外移动。所有权和生命周期必须明确。

验证命令序列、时间戳和超时。如果生产者停滞,内环不应无限重复旧的转矩命令。参数更新和模式切换也需要采用原子操作或分阶段应用,确保部分更新的配置不会到达执行器。

操作处于临界循环?首选模式失效策略
读取关节状态是的有界硬件接口检测陈旧样本
更新控制定律是的固定工作量与内存占用截止日期监控
写执行器命令是的有界接口本地超时
保存日志不通过有界队列交给工作线程丢弃并计数
服务或参数工作不分阶段更新后再切换拒绝无效转移

DDS 有用,但默认电机电流环路并不适用

DDS 和 ROS 2 通信可以支持可配置的服务质量和分布式应用,但内部的电流环路通常运行在驱动器或专用控制器内部。网络和执行路径必须在进入严格的关节控制截止时间内进行测量。

在时间证据合适的位置使用 ROS 2 进行编排、轨迹、状态及更高层。保持破坏性过流和快速保护本地化。中间件选择不能取代驱动器级确定性控制或硬件安全电路。

跟踪可揭示罕见的调度和回调延迟

ROS 2 文档提供用于分析执行过程的跟踪指南。以低且经过测定的开销,对控制器周期、回调、输入输出和截止时间监控进行插桩。将跟踪记录与驱动器和网络日志对齐。

收集长跑的直方图和最大值,而非短期平均值。重现CPU、网络、存储、热限速和图形负载。识别每个尾部之前发生的事件。单个最大值且无痕迹上下文难以修复,而一个没有最大值的百分位数可能隐藏危险的失误。

在某些系统中,实时内核是必要的,但不够

可抢占式实时内核可以降低调度延迟,但应用锁、驱动、固件、电源管理和无界代码依然存在。相反,一个动态较慢的被控对象可能在经过精心测量的非实时配置下达成截止日期。需求和证据决定。

验证BIOS、 CPU电源状态、散热行为和驱动版本。内核、中间件、控制器或硬件更新后重新测试。生产镜像和部署配置应与时序报告一起纳入版本管理。

压力测试必须涵盖错过截止期限与恢复

运行最大控制器数量、完整网络流量、传感器流、日志记录和真实应用负载。添加热浸、存储活动和错误处理。测量周期、执行时间、捕获到控制年龄、命令-应用年龄及连续未命中。

在支持的情况下注入过时状态、控制器错误、硬件超时和时钟变化。验证预期的停用、停止或降级模式。实时环路只有在其故障行为也有限制时才具有操作价值。

评估“ROS 2 实时控制:截止日期、抖动与ros2_control”时,还应保存模型版本、机器人配置、标定文件、测试日期和全部试验记录。把成功、失败、恢复与人工介入放在同一份数据中,才能区分模型能力、系统接口和现场流程造成的差异。

  • 明确周期、抖动和数据时效要求。
  • 保持读-更新-写路径有边界。
  • 预分配内存,并把非实时工作移出控制环。
  • 在满载生产负载下追踪尾部延迟。
  • 定义并测试过时数据和漏掉周期的行为。

常见问题

ROS 2本身是一个实时操作系统吗?

不是。 ROS 2 是可以在操作系统、调度、代码、驱动和硬件经过相应设计和测量时,能够参与实时系统的中间件和库。

DDS能让关节控制环具备确定性吗?

不是自动的。服务质量有助于通信语义,但端到端延迟、执行器调度和硬件应用时间仍需证据。

更高的控制频率总是更好吗?

不行。被控对象、传感器、执行器和计算资源必须留有足够裕量。更快且错过截止日期的循环表现可能更差。

Python 能运行硬实时电机循环吗?

典型的 Python 执行存在非确定性来源,通常保持在最紧密的循环之外;仅在可测需求和架构允许的情况下使用。

应该先测量什么时机?

测量从捕获到命令的完整链,包括周期、最差执行、抖动、状态年龄、命令-应用延迟和漏接周期恢复。

实时控制边界说明

ROS 2 和实时内核本身并不能保证确定性。在最坏情况下的负载和所有相关故障转移下,验证调度、内存、驱动程序、通信、控制器代码和硬件输入输出。