参数模型
ROS Master
(Parameter Server)
/robot_name: "my_robot" ----{Node A Node B}
/robot_radius:0.4 ----{Node C}
/robot_height :0.5 ----{Node D}
参数服务器 Parameter Server 用于保存各个节点之间的数据参数
因此我们可以将Parameter Server理解为全局变量存储空间,只要在同一ros环境里面都可以通过参数服务器发送请求去查询相关的参数。
参数命令行使用(以小海龟为例)
YAML参数文件 (多参数文件) background_b : 255 background_b : 86 background_b : 69 rosdistro : ‘melodic‘ roslaunch: uris: {host_hcx_vpc__43763: ‘http://hcx-vpc :43763/‘} rosversion :‘1.14.3‘ run_id: 07708de-a38b-11e9-818b-000c29d22e4d
rosparam
*列出当前多个参数
$ rosparam list
*显示某个参数值
$ rosparam get param_key
*设置某个参数值
$ rosparam set param_key param_value
*保存参数到文件
$ rosparam dump fole_name
*从文件中读取参数
$ rosparam load file_name
*删除参数
$ rosparam detele param_key
以下以小海龟案例为例
显示小海龟运行中的参数列表
qqtsj ~ rosparam list /background_b /background_g /background_r /rosdistro /roslaunch/uris/host_qqtsj_nitro_an515_51__43045 /rosversion /run_id
显示小海龟中参数的值
qqtsj ~ rosparam get /background_r 69 qqtsj ~ rosparam get /background_g 86 qqtsj ~ rosparam get /background_b 255
设置某个参数的值
qqtsj ~ rosparam set /background_b 255 qqtsj ~ rosparam set /background_r 255 qqtsj ~ rosparam set /background_g 255 qqtsj ~ rosparam get /background_b 255 qqtsj ~ rosparam get /background_g 255 qqtsj ~ rosservice call /clear "{}"
通过设置参数的值去改变小海龟的运动背景颜色
命令为:rosservice call /clear "{}"
通过发送一个空的请求去刷新新设置参数的值,从而改变小海龟。
*保存参数到文件中
将参数保存到YAML参数文件中,如下
$ rosparaam dump param.yaml
我这里的路径为主目录路径的param.yaml文件中
*从文件中读取参数
首先在参数文件中修改参数的值,保存在文件中。
用以下命令从文件读取参数 $ rosparam load param.yaml
*删除参数
$ rosparam delete param_key
qqtsj ~ rosparam delete /background_b qqtsj ~ rosparam list /background_r /rosdistro /roslaunch/uris/host_qqtsj_nitro_an515_51__43045 /rosversion /run_id
接下来用程序去实现参数的使用和编程
首先创建一个功能包
$ cd ~/catkin_ws/src
$ catkin_create_pkg learning_parameter roscpp rospy std_srvs
通过(c++)去实现
如何获取/设置参数
*初始化ros节点
*get函数获取参数
*set函数设置参数
程序如下
1 /** 2 * 该例程设置/读取海龟例程中的参数 3 */ 4 #include <string> 5 #include <ros/ros.h> 6 #include <std_srvs/Empty.h> 7 8 int main(int argc, char **argv) 9 { 10 int red, green, blue; 11 12 // ROS节点初始化 13 ros::init(argc, argv, "parameter_config"); 14 15 // 创建节点句柄 16 ros::NodeHandle node; 17 18 // 读取背景颜色参数 19 ros::param::get("/background_r", red); 20 ros::param::get("/background_g", green); 21 ros::param::get("/background_b", blue); 22 23 ROS_INFO("Get Backgroud Color[%d, %d, %d]", red, green, blue); 24 25 // 设置背景颜色参数 26 ros::param::set("/background_r", 255); 27 ros::param::set("/background_g", 255); 28 ros::param::set("/background_b", 255); 29 30 ROS_INFO("Set Backgroud Color[255, 255, 255]"); 31 32 // 读取背景颜色参数 33 ros::param::get("/background_r", red); 34 ros::param::get("/background_g", green); 35 ros::param::get("/background_b", blue); 36 37 ROS_INFO("Re-get Backgroud Color[%d, %d, %d]", red, green, blue); 38 39 // 调用服务,刷新背景颜色 40 ros::service::waitForService("/clear"); 41 ros::ServiceClient clear_background = node.serviceClient<std_srvs::Empty>("/clear"); 42 std_srvs::Empty srv; 43 clear_background.call(srv); 44 45 sleep(1); 46 47 return 0; 48 }
编译命令如下
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun learning_parameter parameter_config
以(python)程序如下
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # 该例程设置/读取海龟例程中的参数 4 5 import sys 6 import rospy 7 from std_srvs.srv import Empty 8 9 def parameter_config(): 10 # ROS节点初始化 11 rospy.init_node(‘parameter_config‘, anonymous=True) 12 13 # 读取背景颜色参数 14 red = rospy.get_param(‘/background_r‘) 15 green = rospy.get_param(‘/background_g‘) 16 blue = rospy.get_param(‘/background_b‘) 17 18 rospy.loginfo("Get Backgroud Color[%d, %d, %d]", red, green, blue) 19 20 # 设置背景颜色参数 21 rospy.set_param("/background_r", 255); 22 rospy.set_param("/background_g", 255); 23 rospy.set_param("/background_b", 255); 24 25 rospy.loginfo("Set Backgroud Color[255, 255, 255]"); 26 27 # 读取背景颜色参数 28 red = rospy.get_param(‘/background_r‘) 29 green = rospy.get_param(‘/background_g‘) 30 blue = rospy.get_param(‘/background_b‘) 31 32 rospy.loginfo("Get Backgroud Color[%d, %d, %d]", red, green, blue) 33 34 # 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的service 35 rospy.wait_for_service(‘/clear‘) 36 try: 37 clear_background = rospy.ServiceProxy(‘/clear‘, Empty) 38 39 # 请求服务调用,输入请求数据 40 response = clear_background() 41 return response 42 except rospy.ServiceException, e: 43 print "Service call failed: %s"%e 44 45 if __name__ == "__main__": 46 parameter_config()
编译和c++ 一样
原文:https://www.cnblogs.com/tanshengjiang/p/12238929.html