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

相关推荐
WWZZ20251 天前
快速上手大模型:深度学习12(目标检测、语义分割、序列模型)
深度学习·算法·目标检测·计算机视觉·机器人·大模型·具身智能
码河漫步1 天前
ros2 humble安装ignition gazebo
ros2·humble·ignition gazebo
bd_jc2 天前
ubuntu24.04 ros2 rosdep相关
ros2·ubuntu24.04
ModestCoder_3 天前
ROS Bag与导航数据集技术指南
开发语言·人工智能·自然语言处理·机器人·具身智能
m0_650108245 天前
PaLM-E:具身智能的多模态语言模型新范式
论文阅读·人工智能·机器人·具身智能·多模态大语言模型·palm-e·大模型驱动
WWZZ20255 天前
快速上手大模型:深度学习13(文本预处理、语言模型、RNN、GRU、LSTM、seq2seq)
人工智能·深度学习·算法·语言模型·自然语言处理·大模型·具身智能
ModestCoder_5 天前
PPO-clip算法在Gymnasium的Pendulum环境实现
人工智能·算法·机器人·具身智能
码河漫步5 天前
ros2 humble安装moveit2
ros2·moveit
WWZZ20256 天前
快速上手大模型:深度学习11(数据增强、微调、目标检测)
人工智能·深度学习·算法·目标检测·计算机视觉·大模型·具身智能