ROS2——基础4(通信接口、参数说明、分布式通信)

目录

[1 通信接口](#1 通信接口)

[2 参数说明](#2 参数说明)

[2.1 定义](#2.1 定义)

[2.2 param参数指令](#2.2 param参数指令)

[2.3 创建参数示例](#2.3 创建参数示例)

[3 分布式通信](#3 分布式通信)

[3.1 定义及介绍](#3.1 定义及介绍)

[3.2 分布式网络分组举例](#3.2 分布式网络分组举例)

[3.3 ROS1/2分布式通讯对比](#3.3 ROS1/2分布式通讯对比)


1 通信接口

ROS三种常用通信机制为:话题、服务、动作,通过每一种通信定义的接口,各个节点相互联系。接口可以降低程序之间依赖,便于使用别人的代码。

PS.

(1)话题详见:https://blog.csdn.net/weixin_45728280/article/details/155324727?spm=1011.2415.3001.5331

(2)服务、动作详见:

https://blog.csdn.net/weixin_45728280/article/details/155356915?spm=1011.2415.3001.5331

(3)文件说明

|--------|------------------|
| 文件名 | 作用 |
| action | 存放动作通信的.action文件 |
| msg | 存放话题通信的.msg文件 |
| srv | 存放服务通信的.srv文件 |

2 参数说明

2.1 定义

类似C++中全局变量,便于在多个程序中共享某些数据,参数是ROS机器人系统中的全局字典,可以运行多个节点中共享数据。

2.2 param参数指令

|--------------------------------|----------|
| 指令 | 作用 |
| ros2 param list | 列出当前多个参数 |
| ros2 get param_key | 显示某个参数值 |
| ros2 set param_key param_value | 设置某个参数值 |
| ros2 param dump file_name | 保存参数到文件 |
| ros2 param load file_name | 从文件读取参数 |
| ros2 param delete param_key | 删除参数 |

2.3 创建参数示例

(1)创建param_demo功能包并进入-编写程序

复制代码
cd ros2_ws/src
ros2 pkg create param_demo --build-type ament_python --dependencies rclpy
cd param_demo_param_demo
gedit param_demo.py
python 复制代码
# 导入 rclpy 模块
import rclpy  
# 导入 Node 类 
from rclpy.node import Node 
# 导入 Parameter 类 
from rclpy.parameter import Parameter 

# 定义一个继承自 Node 类的 MinimalParam 类 
class MinimalParam(Node): 
  def __init__(self):
    # 调用父类构造函数初始化节点
    super().__init__('minimal_param_node')  
    # 声明一个名为'my_ parameter'的参数,并设置默认值为'ros2' 
    self.declare_parameter('my_parameter', 'ros2') 
    # 创建定时器,设置回调函数为 timer_callback,时间间隔为 1 秒 
    self.timer = self.create_timer(1, self.timer_callback) 
    
  def timer_callback(self): 
    # 获取参数'my_parameter'的值,并转换为字符串 
    my_param = self.get_parameter('my_parameter').get_parameter_value().string_value 
    # 打印带有参数值的 日志消息
    self.get_logger().info('Hello %s!' % my_param) 
    # 创建一个新的参数对象 
    my_new_param = Parameter( 
      # 参数名称为'my_parameter' 
      'my_parameter', 
      # 参数类型为字符串 
      rclpy.Parameter.Type.STRING, 
      # 参数值为'ros2' 
      'ros2' 
      )
    # 将新的参数对象放入列表中   
    all_new_parameters = [my_new_param] 
    # 设置节点的参数值为新的参数值
    self.set_parameters(all_new_parameters)
    
def main(): 
  # 初始化 ROS 节点
  rclpy.init()  
  # 创建 MinimalParam 对象 
  node = MinimalParam() 
  # 进入主循环
  rclpy.spin(node)  
  
if __name__ == '__main__': 
  main()

(2)赋予可执行权限

python 复制代码
chmod +x param_demo.py

(3)setup.py设置

python 复制代码
cd ..
gedit setup.py

(4)编译运行测试

python 复制代码
cd ~/ros2_ws
colcon build
source ./install/setup.bash
ros2 run param_demo param_demo

另启终端

python 复制代码
cd ~/ros2_ws
source ./install/setup.bash
ros2 param set minimal_param_node my_paramter world # world可以自定

3 分布式通信

3.1 定义及介绍

可以通过网络在不同主机之间实现数据交互。

ROS2是一个分布式通信架构,基于的中间件是DDS,处于同一个网络中通过DDS的域ID机制实现。流程为:启动节点设置域ID,不同节点同域ID则可以自由发现并通信;默认情况是域ID为0。

ROS2提供一个DOMAIN机制,类似于分组,同DOMAIN的终端可以通信,同网络下不同DOMAIN的域ID应不同,推荐0-101间选择,下面介绍如何分组。

3.2 分布式网络分组举例

(1)编辑./bashrc文件

python 复制代码
gedit ~/.bashrc

文末输入

python 复制代码
export ROS_DOMAIN_ID=25

(2)其他终端.bashrc文件中加入"export ROS_DOMIAN_ID=25"即可进行分布式通信。

3.3 ROS1/2分布式通讯对比

|------------------------------|---------------------------------------------------|
| ROS1 | ROS2 |
| 使用匿名TCP/IP通信 | 常用TCP、UDP、DDS |
| 采用发布/订阅模式,通过central master实现 | 引入discover、authentication、authorization机制的分布式服务发现 |
| 节点需要主动向master注册以获取对等节点信息 | 节点直接与对等节点通信 |
| 通信可靠性依赖中心节点master | 默认用ZeroMQ搭建通信中间件 ,实现去中心化 |
| | 支持点对点及组播通信,扩展性更好 |
| | 容错能力更强,部分节点掉线也可以保持通信 |

相关推荐
机器觉醒时代15 小时前
Helix 02 :移动+操作融合,解锁人形机器人全身控制的VLA模型
机器人·ai大模型·具身智能·人形机器人
具身智能之心18 小时前
智源x清华团队推出DKT:秒解透明物体的感知,机器人抓取任务上“质的提升”
具身智能·机器人抓取
曾小蛙21 小时前
【论文+VLA】2601.蚂蚁灵波开源LingBot-VLA能拿透明玻璃杯( LingBot-Depth感知增强)
具身智能·lingbot-vla·lingbot-depth
具身智能之心2 天前
ICLR 2026中稿工作VLASER: 究竟哪些多模态能力和数据对提升机器人的控制表现最关键?
具身智能·vlm·iclr 2026
亚鲁鲁2 天前
具身智能-机械臂项目实战
机械臂·具身智能·deepseek·物理ai
维度攻城狮2 天前
交互式机器人编程:使用Jupyter Notebook运行ROS2程序
jupyter·机器人·ros2
xixixi777772 天前
模型开源的核心目的与潜在隐患(附 AI 领域 / 具身智能专属视角)
人工智能·安全·ai·开源·大模型·具身智能·开源模型
传说故事3 天前
【论文自动阅读】RoboBrain:从抽象到具体的机器人操作统一大脑模型
人工智能·机器人·具身智能
传说故事3 天前
【论文自动阅读】ActiveVLA: 将主动感知注入VLA模型以实现精准三维机器人操控
人工智能·深度学习·机器人·具身智能·vla
Deepoch4 天前
Deepoc具身模型:驱动清洁机器人迈向“场景智能”新纪元
科技·机器人·开发板·具身智能·清洁机器人·deepoc