文章目录
第 11 课 参数的使用与编程方法
1.服务模型
&emap;&emsp在ROS master当中有一个参数服务器,它是一个全局字典,用来保存各个节点之间的配置参数的。例如里面有Parameter server保存我们的名字、半径和高度,是各个节点都可以全局访问的。
&emap;&emsp比如说我在Node A点里面来访问robot name,然后就会获取得到一个“my_rot”的值,它只要给我们的ROS master去发送一个查询的请求,然后就会返回“my_rot”的结果。NodeB、Node C和Node D也是一样。
&emap;&emspParameter server参数服务器模型如下图所示:
2.rosparam参数
2.1 rosparam详细参数
这里我们先来了解下rosparam参数,详细参数如下图:
2.2 运行海龟例程
这里以海龟案例为例,先运行海龟例程,步骤如下:
- 输入指令“roscore”,回车。
若已开启,则会出现以下提示:
- 输入指令“rosrun turtlesim turtlesim_node”,回车,打开小海龟的仿真器。
2.3 rosparam的使用
再打开一个终端, rosparam的使用,步骤如下:
- 输入指令“rosparam”,回车。
- 输入指令“rosparam list”,回车,查询海龟参数个数。
- 输入指令“rosparam get /turtlesim/background_b”,回车,获取“background_b”数值,其他数值获取方法类似。
- 输入指令“rosparam set /turtlesim/background_b 100”,回车,设置“background_b”数值,其他数值设置方法类似。
- 输入指令“rosparam get /turtlesim/background_b”,回车,看到数值改为100了。
- 输入指令“rosservice call clear “{}””,回车,发送请求,更改颜色。
- 输入指令“rosparam dump param.yaml”,回车,保存到文件。
- 文件打开在默认路径,我们保存在主文件路径,直接打开。
- 输入指令“vi param.yaml”,回车。按下“i”修改“param.yaml”。
- 可以将颜色都改为0,也就是黑色,修改完成,按下“Esc”,输入“:wq”保存并退出。
- 输入指令“rosparam load param.yaml”,回车,加载文件。
- 输入指令“rosparam get /turtlesim/background_b”,回车,检查加载效果。
- 输入指令“rosservice call clear “{}””,回车,发送请求,更改颜色,背景颜色为黑色。
- 输入指令“rosparam delete /turtlesim/background_g”,回车,删除g的颜色。
- 输入指令“rosparam list”,回车,查看效果。
- 输入指令“rosservice call clear “{}””,回车,重新刷新背景颜色,查看效果。
3.编程方法
创建功能包,步骤如下:
- 输入指令“cd catkin_ws/src/”,回车,进入工作空间。
输入指令“catkin_create_pkg parameter_hiwonder rospy std_msgs”,回车,创建功能包。
3.1 编写控制程序
- 打开Linux命令行终端。
- 输入进入功能包所在目录的指令“roscd parameter_hiwonder”,并按下回车。
- 输入指令“mkdir scripts”,并按下回车,新建用于存放Python脚本的文件夹“scripts”。
- 输入指令“cd scripts/”,并按下回车,进入用于存放Python脚本的文件夹“scripts”。
- 输入指令“vi parameter_config.py”编辑程序,复制下面程序。如需修改,再按下“i”即可修改。修改完成,按下“Esc”,输入“:wq”保存并退出。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 该脚本用于设置和读取turtlesim模拟器中的背景颜色参数
# 导入Python的sys模块
import sys
# 导入rospy,这是用于ROS节点编程的Python库
import rospy
# 导入std_srvs包中的Empty服务类型,这是ROS标准空服务,无需请求和响应数据
from std_srvs.srv import Empty
# 定义parameter_config函数,用于配置参数
def parameter_config():
# 初始化ROS节点,命名为'parameter_config',anonymous=True确保节点名在ROS系统中唯一
rospy.init_node('parameter_config', anonymous=True)
# 读取当前turtlesim节点的背景颜色参数(红、绿、蓝)
red = rospy.get_param('/turtlesim/background_r')
green = rospy.get_param('/turtlesim/background_g')
blue = rospy.get_param('/turtlesim/background_b')
# 将读取的背景颜色参数信息记录到ROS日志中
rospy.loginfo("Get Background Color[%d, %d, %d]", red, green, blue)
# 设置新的背景颜色参数,这里设置为全白(红、绿、蓝颜色值都是255)
rospy.set_param("/turtlesim/background_r", 255)
rospy.set_param("/turtlesim/background_g", 255)
rospy.set_param("/turtlesim/background_b", 255)
# 将新设置的背景颜色参数信息记录到ROS日志中
rospy.loginfo("Set Background Color[255, 255, 255]")
# 重新读取并记录新的背景颜色参数,以验证是否设置成功
red = rospy.get_param('/turtlesim/background_r')
green = rospy.get_param('/turtlesim/background_g')
blue = rospy.get_param('/turtlesim/background_b')
rospy.loginfo("Get Background Color[%d, %d, %d]", red, green, blue)
# 阻塞等待'/clear'服务变得可用
rospy.wait_for_service('/clear')
try:
# 创建一个服务客户端,连接到'/clear'服务
clear_background = rospy.ServiceProxy('/clear', Empty)
# 调用服务,这将清除turtlesim的背景
response = clear_background()
# 返回服务调用的响应
return response
except rospy.ServiceException:
# 如果服务调用失败,则什么也不做
pass
# 当脚本被当作主程序执行时,下述代码块将会被运行
if __name__ == "__main__":
# 调用parameter_config函数
parameter_config()
6) 输入指令“chmod +x parameter_config.py”回车,为保存的parameter_config.py赋予可执行权限
4.运行程序
- 输入指令“roscore”,并按下回车,启动节点管理器。
若已开启,则会出现以下提示:
- 输入指令“rosrun turtlesim turtlesim_node”,回车,打开小海龟的仿真器。
- 输入指令“rosrun parameter_hiwonder parameter_config.py”,并按下回车,运行程序,它将海龟的背景颜色改为白色,显示如下图:
- 如需停止程序,可按下快捷键“Ctrl+C”。