这部分教程使用rosservice和rosparm命令行工具介绍ROS service和parameters.至于为什么选择deepin而不是ROS通用的ubuntu,也仅仅是为了支持国产系统。鉴于本人水平有限,如哪位攻城狮网友发现本文存在的问题,烦请留言指正,谢谢!
service是节点间通信的另外一种方式,service允许节点间发送请求接收回应的形式来进行通信
rosservice可以容易地通过ROS服务与ROS的客户端/服务器建立联系。rosservice有很多可以在服务端使用的命令:
gaoy@msi:~$ rosservice -h
Commands:
rosservice args 打印服务参数
rosservice call 使用给定参数调用服务
rosservice find 依据服务类型查找服务
rosservice info 打印服务相关信息
rosservice list 列出激活的服务列表
rosservice type 打印服务的类型
rosservice uri 打印服务的ROSRPC uriprint
rosservice list
/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/spawn
/teleop_turtle/get_loggers
/teleop_turtle/set_logger_level
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level
rosservice list给我展示了turtlesim有关的11个节点提供的服务,另外展示了与单独节点roout有关的rosout/get_loggers和roout/ser_logger_level的服务。下面我们仔细看看clear服务
rosservice type /clear
std_srvs/Empty
clear服务是空的,这意味着当服务调用的时候不带任何参数。
rosservice call [service] [args]
# 示例
rosservice call /clear
/clear服务会清理小乌龟行进的路线。下面我们通过查看/spawn服务
rosservice type /spawn | rossrv show
float32 x
float32 y
float32 theta
string name
---
string name
/spawn服务允许我们在给定的位置和方向上创建一个新海龟,name字段可选。所以我们不要给新海龟命令,而是让turtlesim为我们创建一个默认名称
rosservice call /spawn 2 2 0.3 ''
name: "turtle2" # turtlesim为我们的新海龟给了默认名:turtle2
rosservice call /spawn 2 3 0.3 ''
name: "turtle3"# turtlesim为我们的新海龟给了默认名:turtle3
rosparam允许你在ROS参数服务器上存储和操作数据。参数服务器[parameter server]可以存储整数,浮点数,布尔值,字典和列表。rosparam在语法上使用YAML标记语言。在简单情况下,YAML看起来比较自然:1-整数,1.0-浮点数,one-字符串,true-bool,[1,2,3]-列表,{a:b,c:d}-字典
。rosparam也有许多用于参数的命令:
rosparam -h
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结果可以看到turtlesim节点有三个参数服务
rosparam list
/rosdistro
/roslaunch/uris/host_msi__44847
/rosversion
/run_id
/turtlesim/background_b
/turtlesim/background_g
/turtlesim/background_r
从上面的示例可以知道turtlesim有3个参数服务,这部分我们可以使用rosparam set来修改其中一个参数服务
rosparam set /turtlesim/background_r 150
# clear后新参数才生效
rosservice call /clear
经过上面的测试我们修改了/turtlesim/background_r 的值为150,这节我们通过命令获取其值
rosparam get /turtlesim/background_r
150
# 我们可以使用rosparam get /获取所有参数服务器的内容
rosparam get /
rosdistro: 'noetic
'
roslaunch:
uris: {host_msi__44847: 'http://msi:44847/'}
rosversion: '1.15.14
'
run_id: 5d9878f0-2c1c-11ed-9bbc-f8b54d546b81
turtlesim: {background_b: 255, background_g: 86, background_r: 150}
或许你希望将上述参数服务存储在文件中,以便后续重新加载。这是比较容易的
rosparam dump [filename] [namespace]
rosparam load [filename] [namespace]
# 存储所有的参数到params.xml
rosparam dump params.yaml
# 你可以将这些yaml文件加载到薪的命名空间去 copy_turtle
$ rosparam load params.yaml copy_turtle
$ rosparam get /copy_turtle/turtlesim/background_b
255