ros之参数的使用与编程方法
参数模型
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++ 一样
ros之参数的使用与编程方法的更多相关文章
- 学习linux/unix编程方法的建议(转)
假设你是计算机科班出身,计算机系的基本课程如数据结构.操作系统.体系结构.编译原理.计算机网络你全修过 我想大概可以分为4个阶段,水平从低到高从安装使用=>linux常用命令=>linux ...
- paip.函数式编程方法概述以及总结
paip.函数式编程方法概述以及总结 1 函数式编程:函数式风格..很多命令式语言里支持函数式编程风格 1.1 起源 (图灵机,Lisp机器, 神经网络计算机) 1.2 函 ...
- 理解ROS的参数
记住每次操作之前都要在一个单独的终端中运行ros的核心. roscore rosparam命令允许你在ROS的参数服务器上操作和存储数据,参数服务器可以存储整数,浮点数,布尔类型,字典,列表.ROS使 ...
- iOS利用block实现链式编程方法(Objective-C链式编程)
objc利用block实现链式编程方法 因为不好读.block和其他语言的匿名函数一样,很多程序员刚开始很难主动去用他. 本文描述block作为属性的实际使用,看懂block,并讲解如何利用block ...
- 学习linux/unix编程方法的建议,学习Linux的四个步骤(转)
解答:学习Linux的四个步骤假设你是计算机科班出身,计算机系的基本课程如数据结构.操作系统.体系结构.编译原理.计算机网络你全修过我想大概可以分为4个阶段,水平从低到高从安装使用=>linux ...
- Py编程方法,尾递归优化,map函数,filter函数,reduce函数
函数式编程 1.面向过程 把大的问题分解成流程,按照流程来编写过程 2.面向函数 面向函数编程=编程语言定义的函数+数学意义上的函数先弄出数学意义上的方程式,再用编程方法编写这个数学方程式注意面向函数 ...
- Atitit 编程语言编程方法的进化演进 sp COP ,AOP ,SOP
Atitit 编程语言编程方法的进化演进 sp COP ,AOP ,SOP 1.1. Sp oop>>COP ,AOP ,SOP1 1.2. Sp oop 结构化方法SP(Stru ...
- Spring3 MVC请求参数获取的几种方法
Spring3 MVC请求参数获取的几种方法 一. 通过@PathVariabl获取路径中的参数 @RequestMapping(value="user/{id}/{name}&q ...
- PHP函数可变参数列表的具体实现方法介绍
PHP函数可变参数列表可以通过_get_args().func_num_args().func_get_arg()这三个函数来实现.我们下面就对此做了详细的介绍. AD:2014WOT全球软件技术峰会 ...
随机推荐
- Qt5 http/HTTPS访问 以及JSON解析的实用
实用QT5访问HTTP/以及HTTPS协议访问 并且调用Json解析 #include "mywidget.h" #include "ui_mywidget.h" ...
- drop-out栈
1.drop-out栈能够用来做什么? 在许多提供编辑功能的软件,如word.ps.画图,都会提供“撤销”和“恢复”功能,使用drop-out能够实现这些功能. 2.drop-out栈特性 drop- ...
- Jmeter-Ant 生成测试报告配置步骤
1.配置java环境变量(不会的可以自行百度) 2.安装jmeter 3.安装ant,配置ant环境变量 4.将JMeter所在目录下extras子目录里的ant-JMeter-1.1.1.jar复制 ...
- Linux之nohup命令
例:执行一个循环的脚本 可以使用sh命令就可以了 后台运行这个脚本使用& nohup能够正常在关闭xshell继续执行,而其他两种办法不行 但是注意 这&方法断掉这session后(进 ...
- 洛谷P3292 [SCOI2016]幸运数字 线性基+倍增
P3292 [SCOI2016]幸运数字 传送门 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在 ...
- 变量的取用与设定:echo,变量设定规则,unset
1.变量的取用echo echo $variable echo ${variable} 2.变量的设定规则 3.让我设定的name=VBird应用在下个应用程序 4.进入到核心的模块目录 5.取消设定 ...
- 关闭Win10 445端口
这次勒索病毒利用了NSA黑客工具包中的“永恒之蓝”0day漏洞,通过电脑445端口(文件共享<普通用户基本用不到这个端口,可以关闭>)在内网进行蠕虫式感染传播,为了防止内网感染,建议用户关 ...
- ArcGIS for JavaScript 开发智能提示
开发如果没有智能提示,可想而知是一件多举痛苦的事情,好在Esri为Visual Studio 2010.Aptana3提供了一个插件,这样就使我们在使用ArcGIS API for Javascrip ...
- Date类(java.util)和SimpleDateFormat类(java.text)
在程序开发中,经常需要处理日期和时间的相关数据,此时我们可以使用 java.util 包中的 Date 类.这个类最主要的作用就是获取当前时间,我们来看下 Date 类的使用: 使用 Date 类的默 ...
- 【Tool】---ubuntu18.04配置oh-my-zsh工具
作为Linux忠实用户,应该没有人不知道bash shell工具了吧,其实除了bash还有许多其他的工具,zsh就是一款很好得选择,基于zsh shell得基础之上,oh-my-zsh工具更是超级利器 ...