ROS学习(five): ros services and parameters

ROS services

ros services 是节点之间交互的另外一种方式; service 允许节点发送一个响应 和 接收一个回应

Commands:
	rosservice args		print service arguments
	rosservice call		call the service with the provided args
	rosservice find		find services by service type
	rosservice info		print information about service
	rosservice list		list active services
	rosservice type		print service type
	rosservice uri		print service ROSRPC uri

Type rosservice <command> -h for more detailed usage, e.g. 'rosservice call -h'

rosservices list

输出所有启动的service

rosserives type [service]

打印服务的类型

# 展示topic的类型
rostopic type [topic]
fengxuewei@fengxuewei:~$ rosservice type /clear
std_srvs/Empty
# 该服务为空,这意味着在进行服务调用时,它不接受任何参数(即,在发出请求时不发送数据,而在接收响应时不接收数据)。 让我们使用rosservice调用此服务:rosservice call /clear 没有任何参数

rosservices call [service] [args]

# 该service的类型为 Empty,所以在调用的时候没有参数
fengxuewei@fengxuewei:~$ rosservice type /clear
	std_srvs/Empty

# 没有任何参数
rosservice call /clear 

# 查找 service的消息类型 turtlesim/Spawn
rosservice type /spawn

# 显示消息的内容, 为了调用service的时候, 传入参数
# spawn 可以产生一个新的 turtle 模型
# The name field is optional(可选的)
rossrv show turtlesim/Spawn
	float32 x
	float32 y
	float32 theta
	string name
	---
	string name

# 输出显示 节点 turtlesim 新创建的 turtle 名字
rosservice call /spawn 2 2 0.2 ""

在这里插入图片描述

rosparam

rosparam 用来在ros parameter server上 存储 和 处理数据
这个server可以存储 整形,浮点型,布尔型,字典类型,和列表类型
rosparam 将YAML标记语言用于语法。

YAML looks very natural: 
	1 is an integer, 
	1.0 is a float, 
	one is a string, 
	true is a boolean, 
	[1, 2, 3] is a list of integers, 
	{a: b, c: d} is a dictionary.
rosparam is a command-line tool for getting, setting, and deleting parameters from the ROS Parameter Server.

Commands:
	rosparam set		set parameter
	rosparam get		get parameter
	rosparam load		load parameters from file
	rosparam dump		dump parameters to file
	rosparam delete		delete parameter
	rosparam list		list parameter names

rosparam list

# 三原色: background_b background_g background_r
fengxuewei@fengxuewei:~$ rosparam list
/background_b
/background_g
/background_r
/rosdistro
/roslaunch/uris/host_fengxuewei__39977
/rosversion
/run_id

rosparam set

用来改变某个param的值

rosparam set [param_name]
rosparam get [param_name]
# 改变背景颜色的红色管道,在这里修改了参数的值之后, 我们必须 call 服务一下,让修改生效
rosparam set /background_r 150
# 让param值生效
rosservice call /clear

rosparam get

# 显示各个参数的值
fengxuewei@fengxuewei:~$ rosparam get /background_g 
86
fengxuewei@fengxuewei:~$ rosparam get /background_r
150
fengxuewei@fengxuewei:~$ rosparam get /background_b
255

# 显示param server内存放的所有param的值
fengxuewei@fengxuewei:~$ rosparam get /
background_b: 255
background_g: 86
background_r: 150
rosdistro: 'melodic

  '
roslaunch:
  uris:
    host_fengxuewei__39977: http://fengxuewei:39977/
rosversion: '1.14.3

  '
run_id: 6342b2de-3dc2-11ea-b154-9078413e5bde

rosparam dump and rosparam load

如果希望将这些参数的值保存到 一个文件中 以便于到另外一个时间点来重新装载它, 使用 rosparam

rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]
# 将 param 内的值写入到文件 params.yaml
rosparam dump params.yaml

# 将yaml文件中的数据写入到新的命名空间, 例如 copy
fengxuewei@fengxuewei:~$ rosparam load params.yaml copy
/opt/ros/melodic/lib/python2.7/dist-packages/rosparam/__init__.py:188: YAMLLoadWarning: calling yaml.load_all() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
  for doc in yaml.load_all(str):
fengxuewei@fengxuewei:~$ rosparam get /copy/background_b
\255

发布了25 篇原创文章 · 获赞 0 · 访问量 392

猜你喜欢

转载自blog.csdn.net/fengxuewei123/article/details/104076884
ROS