通信管理

节点可以当做对数据加工处理的工厂,对数据进行加工处理,然后输出处理好的数据。

节点的数据来源一般是其他节点的输出,而节点的输出也可能作为后续节点的输入。

人脸识别节点功能中,通过订阅 /camera_raw 主题(topic)获取摄像头每一帧图像数据,然后分析是否存在人脸并与已识别过的进行比对,最后通过 face_recognition/image_jpeg 主题将结果以图像形式发布出来。当然,也可以发布文本形式的识别结果,一个节点订阅和发布主题数量没有限制。

通信方式

节点之间的通信方式有三种:主题(Topic)、服务(Service)、动作(Action)。

通信方式 主题 (Topic) 服务 (Service) 动作 (Action)
通信类型 异步通信 (Asynchronous) 同步通信 (Synchronous) 异步通信 (Asynchronous)
通信双方 发布者 (Publisher)
订阅者 (Subscriber)
服务端 (Server)
客户端 (Client)
动作服务端 (Action Server)
动作客户端 (Action Client)
数据流 单向(只问/只答)
发布者 → 网络 → 订阅者
双向 (一问一答)
客户端 → 请求 → 服务端
客户端 ← 响应 ← 服务端
双向 (一问多答)
1. 目标 (Client → Server)
2. 反馈 (Server → Client,持续、可选)
3. 结果 (Server → Client)
通信机制 基于发布-订阅模型,多对多通信。数据一旦发布,所有订阅者都会收到。 基于客户端-服务器 (C/S) 模型,一对多通信。客户端发送一个请求,服务端处理并返回一个响应。 基于客户端-服务器模型,但扩展为长时间运行、有进度反馈的任务。
适用范围 适用于持续不断的数据流,如传感器数据(激光雷达、摄像头图像)、机器人状态(里程计、关节角度)、控制指令(速度命令)。 适用于瞬时的、需要即时响应的请求/查询,如计算、开关功能、查询状态。例如:求解逆运动学、开关传感器、获取地图。 适用于执行时间较长、需要状态反馈和可管理的任务,如导航到目标点、执行复杂的抓取操作、长时间计算任务。
类比 电台广播 (Broadcast Radio):广播者发出信号,任何收听者都能收到,但广播者不知道谁在听。 函数调用或API请求:发送参数,等待并获取返回值。 下载文件 :你提交一个下载任务,可以定期传输数据和进度(已经传输10%等),最后收到成功或失败的结果,并且可以随时取消它。

通信列表

网页顶部直接点击“通信”页签,列出ROS系统中开启的全部通信方式,未启动节点不显示。

通过点击节点卡片进入页面,列出该节点使用的通信方式。

订阅主题和发布主题以ROS机器人视角来看。

订阅主题: 机器人订阅消息,网页就作为发布端负责发送数据;

发布主题: 机器人发布消息,网页就作为订阅端负责接收数据。

订阅主题

平台提供了订阅主题的示例程序(/hello_topic_listener),运行节点,然后点击节点卡片进入。

发送数据

向机器人发送数据,点击“发送”按钮,即可发送数据。为方便使用,对一些常用类型进行了封装。

字符串类型 std_msgs/msg/String: data字段为要发送的内容。

运动控制类型 geometry_msgs.msg.Twist :提供虚拟手柄发送数据,可自定义调整虚拟按键对应的数据。

点击虚拟手柄上的按钮,或对应的键盘快捷键,发送数据。

发布主题

平台提供了发布主题的示例程序(/hello_topic_speaker),运行节点,然后点击节点卡片进入。

接收数据

机器人发出数据,页面订阅接收数据,可通过日志查看。对一些常用类型进行封装,便于查看。

视频图像 sensor_msgs/msg/CompressedImage : 可实时查看视频流。

选择打开方式“图片”, 点击“订阅”。

服务

平台提供了服务的示例程序(/hello_service),运行节点,然后点击节点卡片进入。

填写要发送的数据后,点击“发送”按钮,在操作日志中可以看到发送成功,收到回应数据“Hello python!”

循环发送

可循环向机器人发送数据,设置发送间隔和次数。其中间隔单位毫秒(ms),次数为0表示无限循环发送。

循环发送时可点击“停止”按钮中止发送。