跳转至

5. ROS 2 程序怎样协作

第 4 章中,talker 持续发送消息,listener 持续接收消息。真实机器人还需要查询状态、提交耗时任务和保存运行配置。ROS 2 按照交互的时间特征和回应方式组织这些接口。

5.1 节点:把任务拆成独立程序

节点(Node)是 ROS 2 中承担一项明确工作的程序单元。雷达驱动节点负责读取扫描,定位节点负责估计位姿,底盘节点负责把速度目标交给控制板。

节点通过接口声明自己接收和产生的数据。一个进程可以承载一个或多个节点;阅读机器人软件时,先从节点的职责、名称和接口入手。

5.2 话题:持续发布的数据流

话题(Topic)用于传递连续产生的数据。发布者(Publisher)把消息写入话题,订阅者(Subscriber)按需读取。发布者和订阅者通过话题保持松耦合,适合处理持续产生的数据。

激光扫描、摄像头图像、车轮里程和速度目标都适合通过话题传递。第 4 章的 /chatter 就是一条话题。

5.3 服务:一次请求与一次响应

服务(Service)表示一次请求和一次响应。客户端提出问题,服务端处理后返回结果。读取某项状态、触发一次保存等操作,通常可以用服务表达。

服务调用适合处理时间较短、调用方需要明确结果的事务;持续传感器数据放在话题中传递。

5.4 动作:可以反馈和取消的耗时任务

动作(Action)表示一个需要持续运行的任务。客户端提交目标,执行端返回接受或拒绝状态,并在执行期间报告进度,最后给出结果;客户端还可以请求取消。

“移动到地图中的某个位置”是典型动作。机器人可能需要规划路线、绕开障碍并持续更新剩余距离,一次请求响应无法表达这个过程。

5.5 参数:节点自己的配置

参数(Parameter)保存节点的运行配置,例如速度上限、端口名称或功能开关。传感器数据仍通过话题传递。

修改参数前要确认名称、类型和生效时机。部分参数可以运行时调整,部分参数需要重新启动节点后才会采用。

5.6 从雷达到电机的数据链

把这些接口放回轮式机器人的软件链,可以看到它们的关系:

ROS 2 从雷达到电机的数据链

选择接口时,可以按下表判断:

需求特征 适合的接口 机器人中的例子
数据连续产生,接收方按需订阅 话题 雷达扫描、摄像头图像
一次请求,需要一次明确结果 服务 查询状态、保存地图
任务持续一段时间,需要进度或取消 动作 导航到目标位置
某个节点自己的运行配置 参数 底盘最大速度

雷达节点持续发布扫描消息,导航节点订阅后计算速度目标;导航任务通过动作提交并接收进度;底盘节点把速度消息交给执行层。控制板和传感器的具体接口属于第二篇的硬件内容。

5.7 本章小结与练习

节点是承担明确职责的程序单元。话题传递连续数据,服务处理一次请求与响应,动作表达带有进度和取消能力的耗时任务,参数保存节点配置。

练习:为以下需求选择接口,并写出选择依据:摄像头连续产生图像;保存一次当前地图;导航到房间门口并显示进度;降低底盘最大速度。依据应说明需求是连续数据、一次事务、耗时任务还是节点配置。

章节导航

上一章:第一次观察 ROS 2 · 返回本篇 · 下一章:主控、控制板与固件