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搭建通信中间件 ,实现去中心化 |
| | 支持点对点及组播通信,扩展性更好 |
| | 容错能力更强,部分节点掉线也可以保持通信 |

相关推荐
人工智能培训1 天前
基于物理交互的具身智能决策框架设计
多模态学习·具身智能·企业ai转型·ai数字化转型
AI猫站长1 天前
快讯|清华&上海期智研究院开源Project-Instinct框架,攻克机器人“感知-运动”割裂核心难题;灵心巧手入选毕马威中国“第二届智能制造科技50”榜单
人工智能·机器人·苹果·具身智能·project·灵心巧手
曦云沐1 天前
一键部署ROS2开发环境!Docker run命令详解与实战
docker·容器·ros2
人工智能培训3 天前
具身智能如何在保证安全的前提下高效探索学习?
语言模型·llm·数据采集·模型量化·多模态学习·具身智能·环境感知
AI猫站长3 天前
快讯|灵心巧手旗下钢琴机器人将组建“机器人F4”登陆央视迎春
人工智能·机器人·具身智能·灵心巧手·央视
杀生丸学AI3 天前
【世界模型】AI世界模型的两次物理大考(测评)
人工智能·扩散模型·具身智能·视频生成·世界模型·自回归·空间智能
feasibility.4 天前
多模态模型Qwen3-VL在Llama-Factory中断LoRA微调训练+测试+导出+部署全流程--以具身智能数据集open-eqa为例
人工智能·python·大模型·nlp·llama·多模态·具身智能
传说故事4 天前
【论文阅读】PROGRESSLM: 迈向VLM的Progress推理
论文阅读·具身智能
传说故事4 天前
【论文自动阅读】未来光流预测提升机器人控制与视频生成
人工智能·机器人·具身智能
传说故事4 天前
【论文阅读】Being-H0.5:规模化以人为中心的机器人学习以实现跨具身化泛化
论文阅读·学习·机器人·具身智能