< >
Home » ROS与Matlab入门教程 » ROS与Matlab语言入门教程-访问ROS参数服务器

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/.

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros与matlab语言入门教程