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