第七天 ROS《 参数服务器与Launch文件》

一、实验目的

  1. 理解ROS参数服务器(Parameter Server)的作用及工作机制。
  2. 掌握rosparam命令的基本操作方法。
  3. 学会使用YAML文件管理系统配置参数。
  4. 掌握Launch文件的编写与使用方法。
  5. 能够通过Launch文件实现ROS系统的一键启动。

二、实验环境

  • 操作系统:Ubuntu 20.04
  • ROS版本:ROS Noetic
  • 编程语言:Python 3
  • 工具:终端(Terminal)
  • 功能包:turtlesim

三、实验原理

  1. 参数服务器用于存储系统运行参数,节点可以动态读取和修改这些参数,实现配置与运行的分离。
  2. YAML文件用于集中管理系统配置参数,便于复用和版本控制。
  3. Launch文件允许同时启动多个ROS节点、加载参数文件和设置运行环境,实现系统一键化启动,提高实验和开发效率。

四、实验内容

实验(一):参数服务器基本操作

第七天------任务1:参数服务器基本操作

ROS参数操作命令表格

命令 功能描述 使用示例
rosparam set 设置参数值 rosparam set /param_name value
rosparam get 获取参数值 rosparam get /param_name
rosparam load 从YAML文件加载参数到ROS参数服务器 rosparam load params.yaml
rosparam dump 将当前参数服务器的参数导出到YAML文件 rosparam dump params.yaml
rosparam delete 删除指定参数 rosparam delete /param_name
rosparam list 列出所有参数名 rosparam list

先打开roscore

bash 复制代码
rosparam set name huluwa

rosparam get name

rosparam delete name

#将参数写出到外部文件

rosparam dump yyy.yaml

rosparam load(先准备 yaml 文件)

#从外部文件加载参数

rosparam load xxx.yaml

实验(二):使用 YAML 文件管理 ROS 参数

第七天------任务2:使用YAML文件管理ROS参数

一、实验目的

  1. 理解YAML文件的作用和应用场景。
  2. 掌握YAML文件的基本语法规则。
  3. 学会使用YAML文件批量配置ROS参数。
  4. 掌握通过rosparam load命令加载参数的方法。
  5. 能够通过参数服务器读取并验证配置结果。
  6. 理解配置文件与程序代码分离的开发思想。
    二、实验背景

在实际机器人项目开发中,系统通常包含大量配置参数,例如:

  • 机器人名称
  • 最大运行速度
  • 激光雷达安装位置
  • 摄像头分辨率
  • PID控制器参数
  • 地图文件路径

如果这些参数直接写在程序代码中:

robot_name = "Robot01"

max_speed = 1.5

camera_width = 640

camera_height = 480

当参数发生变化时,需要修改代码并重新运行程序。

为了提高系统的可维护性,ROS提供了参数服务器(Parameter Server),而YAML文件则用于统一管理这些参数。

开发人员只需要修改配置文件,无需修改程序代码。

因此:

YAML = 参数配置文件

Parameter Server = 参数存储中心
三、认识 YAML 文件

1. YAML 是什么

YAML(YAML Ain't Markup Language)是一种专门用于数据配置的文本格式。

特点:

  • 可读性强
  • 结构清晰
  • 编写简单
  • 支持层级关系
  • 广泛应用于ROS系统

文件扩展名:

.yaml

或者

.yml

2. YAML 基本语法

1 )键值对

格式:

name: ZhangSan

age: 20

score: 95

含义:

|-------|----------|
| 参数名 | 参数值 |
| name | ZhangSan |
| age | 20 |
| score | 95 |

2 )层级结构

格式:

student:

name: ZhangSan

age: 20

score: 95

注意:

子级内容必须缩进。

推荐使用:

2个空格

4个空格

不要使用Tab键。

对应关系:

student

├─ name

├─ age

└─ score

3 )列表数据

格式:

courses:

  • ROS

  • Linux

  • Python

等价于:

courses0 = ROS

courses1 = Linux

courses2 = Python

4 )布尔值

enable_camera: true

enable_lidar: false

5 )浮点数

max_speed: 1.5

wheel_radius: 0.08

四、创建 YAML 配置文件

步骤 1 :创建配置目录

bash 复制代码
#进入工作空间:

cd ~/catkin_ws/src/my_pkg

#创建配置目录:

mkdir config

#查看目录:

my_pkg
├── launch
├── scripts
├── src
└── config

步骤 2 :创建 student.yaml 文件

bash 复制代码
#进入配置目录:

cd config

#创建文件:

gedit student.yaml

#输入以下内容:

student:
  name: ZhangSan
  age: 20
  score: 95

#保存退出。

步骤 3 :检查 YAML格式

bash 复制代码
#正确格式:

student:
  name: ZhangSan
  age: 20
  score: 95

#错误格式:

student:
name: ZhangSan
age: 20
score: 95

#原因:没有缩进。

#错误格式:

student:
name: ZhangSan

#原因:使用了Tab键。YAML要求使用空格缩进。

五、加载 YAML 参数到参数服务器

步骤 1 :启动 ROS Master

bash 复制代码
打开终端:

roscore

启动成功后保持窗口运行。

步骤 2 :加载配置文件

bash 复制代码
新开终端:

rosparam load student.yaml

执行成功后不会显示明显提示。

步骤 3 :查看全部参数

bash 复制代码
rosparam list

输出示例:

/student/age
/student/name
/student/score

说明参数已经进入参数服务器。

六、读取参数

bash 复制代码
读取姓名

rosparam get /student/name

结果:

ZhangSan

读取年龄

rosparam get /student/age

结果:

20

读取成绩

rosparam get /student/score

结果:

95

查看整个节点参数

rosparam get /student

结果:

age: 20
name: ZhangSan
score: 95

七、修改配置文件并重新加载

修改文件:

student:

name: LiSi

age: 22

score: 88

重新加载:

rosparam load student.yaml

查询:

rosparam get /student/name

结果:

LiSi

说明参数已更新。
八、机器人配置实例

实际机器人项目中的配置文件通常如下:

robot:

name: smart_robot

max_speed: 1.5

wheel_radius: 0.08

camera:

width: 640

height: 480

fps: 30

lidar:

range: 10

frequency: 15

加载后:

rosparam list

可看到:

/robot/name

/robot/max_speed

/robot/wheel_radius

/camera/width

/camera/height

/camera/fps

/lidar/range

/lidar/frequency

这就是大型ROS项目中常见的配置管理方式。

实验(三) :使用 Launch 文件启动 ROS 系统

第七天------任务3:使用 Launch 文件启动 ROS 系统

一、实验目的

  1. 理解 Launch 文件的作用和优势。
  2. 掌握 Launch 文件的基本语法和结构。
  3. 学会通过 Launch 文件启动单个节点和多个节点。
  4. 掌握在 Launch 文件中加载参数文件(YAML)。
  5. 理解节点命名、重映射话题、传递参数的方法。
  6. 能够使用 Launch 文件实现系统一键启动,提高开发效率。
    二、实验背景

在 ROS 系统开发中,如果每次都用 rosrun 单独启动节点,会有以下问题:

  • 多个节点需要多个终端窗口。
  • 参数加载和节点启动需要多条命令。
  • 系统启动容易出错,调试困难。

Launch 文件的优势:

  • 可以一次性启动多个节点。
  • 可以加载 YAML 参数文件。
  • 可以设置节点命名和话题重映射。

总结:Launch 文件 = ROS 系统启动脚本 + 参数加载器
三、认识 Launch 文件

1. 文件格式

  • 扩展名:.launch
  • 文件类型:XML

2. 基本结构

bash 复制代码
<launch>
    <node pkg="package_name" type="node_executable" name="node_name"/>
</launch>

说明:

|------------|--------|--------------|
| 标签 | 属性 | 说明 |
| <launch> | 无 | 根标签,包含所有启动内容 |
| <node> | pkg | 节点所在包名 |
| | type | 节点可执行文件名 |
| | name | 启动节点时使用的名称 |
| | output | 日志输出方式(可选) |

四、实验内容

实验 4.1 :启动单个节点

1.创建 launch 文件 launch/start_turtle.launch

bash 复制代码
<launch>
    <node pkg="turtlesim" type="turtlesim_node" name="turtle1" output="screen"/>
</launch>

说明:

pkg="turtlesim" 指定功能包。
type="turtlesim_node" 指定节点执行文件。
name="turtle1" 为节点自定义名称。
output="screen" 输出日志到终端。

2.运行:

bash 复制代码
roslaunch my_pkg start_turtle.launch
注意:这里用的命令是roslaunch

3.观察

  • 弹出 turtlesim 窗口
  • 终端显示节点启动日志
实验 4.2 :启动多个节点

1.创建 launch 文件 launch/multi_turtle.launch

bash 复制代码
<launch>
    <node pkg="turtlesim" type="turtlesim_node" name="turtle1" output="screen"/>
    <node pkg="turtlesim" type="turtlesim_node" name="turtle2" output="screen"/>
</launch>

2.运行:

bash 复制代码
roslaunch my_pkg multi_turtle.launch

3.观察

  • 出现两个 turtlesim 窗口
  • 两个节点可以独立运行
实验 4.3 :加载 YAML 参数文件

1.假设已经创建配置文件 config/student.yaml

bash 复制代码
student:
  name: ZhangSan
  age: 20
  score: 95

2.创建 launch 文件 launch/start_with_param.launch

bash 复制代码
<launch>
    <!-- 加载参数文件 -->
    <rosparam file="$(find my_pkg)/config/student.yaml" command="load"/>
    
    <!-- 启动节点 -->
    <node pkg="turtlesim" type="turtlesim_node" name="turtle1" output="screen"/>
</launch>

说明:

$(find my_pkg):自动查找工作空间中包路径
rosparam 标签加载 YAML 参数到参数服务器
节点可以通过参数服务器获取配置参数

3.运行:

bash 复制代码
roslaunch my_pkg start_with_param.launch

4.验证参数:

bash 复制代码
rosparam get /student/name
rosparam get /student/age
rosparam get /student/score

实验 4.4 :节点话题重映射

有时需要同一个节点发布到不同话题或订阅不同话题。

1.创建 launch 文件 launch/remap.launch

bash 复制代码
<launch>
    <node pkg="turtlesim" type="turtlesim_node" name="turtle1" output="screen">
        <remap from="turtle1/cmd_vel" to="turtle1/cmd_vel_custom"/>
    </node>
</launch>

2.运行:

bash 复制代码
roslaunch my_pkg remap.launch

说明:

原话题 turtle1/cmd_vel 被重映射为 turtle1/cmd_vel_custom
可以同时运行多个节点而不冲突

实验 4.5 :组合启动(综合实验)

1.创建 Launch 文件 launch/full_system.launch

bash 复制代码
<launch>
    <!-- 加载学生信息参数 -->
    <rosparam file="$(find my_pkg)/config/student.yaml" command="load"/>
    
    <!-- 启动两个turtlesim节点 -->
    <node pkg="turtlesim" type="turtlesim_node" name="turtle1" output="screen"/>
    <node pkg="turtlesim" type="turtlesim_node" name="turtle2" output="screen">
        <remap from="turtle1/cmd_vel" to="turtle2/cmd_vel"/>
    </node>
</launch>

2.运行:

bash 复制代码
roslaunch my_pkg full_system.launch

3.任务:

  1. 观察两个 turtlesim 节点运行

  2. 使用 rosparam get 验证 YAML 参数已加载

  3. 截图保存实验结果
    五、实验步骤总结

  4. 创建 launch 目录并进入:

mkdir launch

cd launch

  1. 创建并编辑 Launch 文件。
  2. 加载 YAML 参数文件(如果需要)。
  3. 启动节点并观察运行情况。
  4. 验证参数服务器参数。
  5. 记录实验结果与截图。

实验(四):参数服务器读取Python脚本参数

第七天------任务4:参数服务器读取Python脚本参数

1.编写脚本background.py

python 复制代码
#!/usr/bin/env python3
import rospy

if __name__ == "__main__":
    rospy.init_node("hehe")
    
    # 设置全局命名空间下的 turtlesim 背景色(RGB 均为 255,即白色)
    rospy.set_param("/turtlesim/background_r", 255)
    rospy.set_param("/turtlesim/background_g", 255)
    rospy.set_param("/turtlesim/background_b", 255)
    
    # 设置当前节点命名空间下的背景色(需配合 __ns 参数运行)
    rospy.set_param("background_r", 255)
    rospy.set_param("background_g", 255)
    rospy.set_param("background_b", 255)

2.编译运行

roscore

rosrun my_pkg name.py

rosparame get /background_r

rosparame get /turtlesim/background_r

相关推荐
snow@li2 小时前
CI/CD:深入理解 CI/CD(2026版)
运维·ci/cd
java_cj2 小时前
K8s入门第一课:从零理解Kubernetes核心概念与架构设计
运维·云原生·容器·架构·kubernetes
鼎讯信通2 小时前
一机多能,能源通信运维优选——鼎讯JM-Q150 实测解析
运维·能源·信息与通信·天馈线测试仪
半夜修仙2 小时前
4.RabbitMQ运维
linux·运维·服务器·分布式·rabbitmq·java-rabbitmq
AC赳赳老秦2 小时前
用 OpenClaw 整理学习笔记:自动提取视频课程内容、生成文字笔记、分类归档
大数据·运维·数据库·人工智能·学习·deepseek·openclaw
七夜zippoe2 小时前
OpenClaw 节点通知:推送消息到设备
运维·服务器·网络·ai·openclaw·nodes
网络与设备以及操作系统学习使用者2 小时前
三层交换机实现PC互通方案
运维·网络·学习·华为
Zhu7582 小时前
Docker环境部署Apache Hadoop3.1定制版
运维·docker·容器
小此方3 小时前
Re:Linux系统篇(二十九)文件篇·二:深度解析Linux文件描述符、dup2指针覆盖与内建命令重定向完全解析
linux·运维·驱动开发