ROS与Matlab语言入门教程-访问ROS参数服务器
本例程将探索如何在ROS参数服务器上增加和恢复参数,参数服务器和ROS管理节点运行在相同的设备上。参数通常在ROS网络中全局都是可用的,并且可以存储静态数据例如配置参数。支持的数据类型包括字符串、整型数、双精度、逻辑和单元阵列。
预备知识:1.2开始使用ROS和1.3连接到ROS网络。
创建参数树
在MATLAB中启动ROS管理节点和参数服务器。
rosinit
Initializing ROS master on http://bat5136glnxa64.mathworks.com:11311/.
Initializing global node /matlab_global_node_8332 with NodeURI http://bat5136glnxa64:60770/
创建参数树对象与参数服务器进行交互,参数树可让用户与参数服务器进行交互,并提供函数,例如“set”,“get”,“del”,“has”和“search”。由于我们在本例中启动一个新的参数服务器,因此目前没有存储任何参数。
ptree = rosparam
ptree =
ParameterTree with properties:
AvailableParameters: {}
增加新参数
使用参数名“ROBOT_IP”设定机器人的IP地址参数值。使用“has”函数,检查是否存在相同名称的参数。
has(ptree,'ROBOT_IP')
ans =
0
“has”返回0(false)作为输出,这说明当前在参数服务器中没有名称为“ROBOT_IP”的参数。
使用“set”函数,增加指定机器人IP地址的参数到参数服务器。
set(ptree,'ROBOT_IP','192.168.1.1');
set(ptree, '/myrobot/ROBOT_IP','192.168.1.100');
现在,所有连接到当前ROS管理节点的节点,都能够使用“ROBOT_IP”参数,用户还可以为参数指定命名空间,例如此处的“/myrobot/ROBOT_IP”参数的命名空间是“/myrobot”。
设定参数的不同数据类型:
set(ptree,'MAX_SPEED',1.5);
在“set”函数中使用单元阵列,为机器人设定全局坐标参数{x,y,z}:
set(ptree, '/myrobot/ROBOT_NAME','TURTLE');
set(ptree, '/myrobot/MAX_SPEED',1.5);
set(ptree, '/newrobot/ROBOT_NAME','NEW_TURTLE');
获得参数值
当用户想用连接到机器人时,可以从“ROBUT_IP”参数获得机器人的IP地址,用于连接到该机器人。总共有两个名称为“ROBOT_IP”的参数,用户仅需要“myrobot”下的地址。用户可用“get”函数,获得该参数值:
robotIP = get(ptree, '/myrobot/ROBOT_IP')
robotIP =
192.168.1.100
获得所有参数列表
检查“AvailableParameters”的属性,可以获得存储在参数服务器上的所有参数列表,该列表包含了用户在上述章节增加的参数:
plist = ptree.AvailableParameters
plist =
'/MAX_SPEED'
'/ROBOT_IP'
'/goal'
'/myrobot/MAX_SPEED'
'/myrobot/ROBOT_IP'
'/myrobot/ROBOT_NAME'
'/newrobot/ROBOT_NAME'
修改已有参数
用户还可用“set“函数修改参数值。注意,参数的修改是不可逆的,因为参数服务器会用新的值覆盖参数。用户可以使用“has”函数验证参数是否已经存在。
修改“MAX_SPEED”参数:
set(ptree, 'MAX_SPEED', 1.0);
对参数进行修改的数值可以与之前分配的数据类型不同,例如,“MAX_SPEED”的数据类型是双精度,现在可以设置“MAX_SPEED”参数为字符串。
set(ptree, 'MAX_SPEED', 'none');
删除参数
用户可以使用“del”函数从参数服务器中删除参数。
删除“goal”参数:
del(ptree, 'goal');
使用“has”函数检查“goal”参数是否已经成功删除:
has(ptree, 'goal')
ans =
0
返回0(false),意味着“goal”参数已经从参数服务器中删除。
搜索参数
使用“search”指令所有包含“myrobot”的参数:
results = search(ptree, 'myrobot')
results =
'/myrobot/MAX_SPEED' '/myrobot/ROBOT_IP' '/myrobot/ROBOT_NAME'
关闭ROS网络
关闭ROS网络并删除全局节点。
rosshutdown
Shutting down global node /matlab_global_node_8332 with NodeURI http://bat5136glnxa64:60770/
Shutting down ROS master on http://bat5136glnxa64.mathworks.com:11311/.
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号