第七天 ROS《 参数服务器与Launch文件》
2026/6/10 2:10:27 网站建设 项目流程

一、实验目的

  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

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

等价于:

courses[0] = ROS
courses[1] = Linux
courses[2] = Python

4)布尔值

enable_camera: true
enable_lidar: false

5)浮点数

max_speed: 1.5
wheel_radius: 0.08

四、创建YAML配置文件

步骤1:创建配置目录

#进入工作空间: cd ~/catkin_ws/src/my_pkg #创建配置目录: mkdir config #查看目录: my_pkg ├── launch ├── scripts ├── src └── config

步骤2:创建student.yaml文件

#进入配置目录: cd config #创建文件: gedit student.yaml #输入以下内容: student: name: ZhangSan age: 20 score: 95 #保存退出。

步骤3:检查YAML格式

#正确格式: student: name: ZhangSan age: 20 score: 95 #错误格式: student: name: ZhangSan age: 20 score: 95 #原因:没有缩进。 #错误格式: student: name: ZhangSan #原因:使用了Tab键。YAML要求使用空格缩进。

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

步骤1:启动ROS Master

打开终端: roscore 启动成功后保持窗口运行。

步骤2:加载配置文件

新开终端: rosparam load student.yaml 执行成功后不会显示明显提示。

步骤3:查看全部参数

rosparam list 输出示例: /student/age /student/name /student/score 说明参数已经进入参数服务器。

六、读取参数

读取姓名 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系统

一、实验目的

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

二、实验背景

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

Launch 文件的优势:

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

三、认识Launch文件

1.文件格式

2.基本结构

<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

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

2.运行:

roslaunch my_pkg start_turtle.launch 注意:这里用的命令是roslaunch

3.观察

实验4.2:启动多个节点

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

<launch> <node pkg="turtlesim" type="turtlesim_node" name="turtle1" output="screen"/> <node pkg="turtlesim" type="turtlesim_node" name="turtle2" output="screen"/> </launch>

2.运行:

roslaunch my_pkg multi_turtle.launch

3.观察

实验4.3:加载YAML参数文件

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

student: name: ZhangSan age: 20 score: 95

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

<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.运行:

roslaunch my_pkg start_with_param.launch

4.验证参数:

rosparam get /student/name rosparam get /student/age rosparam get /student/score

实验4.4:节点话题重映射

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

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

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

2.运行:

roslaunch my_pkg remap.launch 说明: 原话题 turtle1/cmd_vel 被重映射为 turtle1/cmd_vel_custom 可以同时运行多个节点而不冲突

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

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

<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.运行:

roslaunch my_pkg full_system.launch

3.任务:

  1. 观察两个 turtlesim 节点运行
  2. 使用rosparam get验证 YAML 参数已加载
  3. 截图保存实验结果

五、实验步骤总结

  1. 创建launch目录并进入:

mkdir launch
cd launch

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

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

1.编写脚本background.py

#!/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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询