ROS使用教程-关于rosparam

引出

launch时roslaunch首先检查roscore是否已经启动,如果没有则启动roscore。
roscore会做三件事:
- 启动master节点,该节点是隐藏的,用于通过消息名查询目标节点,实现消息、服务在各个节点之间的连接
- 启动parameter server,用于设置与查询参数
- 启动日志节点,记录所有消息收发和stdout、stderr, 目前roscore暂不会加入其他功能。

其中启动的任务(节点)列表

任务名称 任务功能 特性
master 通过消息名查询目标节点,实现消息、服务在各个节点之间的连接 隐藏
parameter server 设置与查询参数 -
日志节点 记录所有消息收发和stdout、stderr -

parameter server

参数的访问有三种方式:
- 命令行:rosparam set / rosparam get
- launch文件:param / rosparam
- API:
roscpp: ros::param::set / ros::param::get
rospy: set_param / get_param

访问方式

其中parameter server参数服务器,可以方便地通过设置参数来改变节点的行为。参数服务器内的参数是以key,value的形式交互。 其中key可以加前缀作为命名空间构成多级参数。

参数的访问有三种方式:
- 命令行:rosparam set / rosparam get
- launch文件:param / rosparam
- API:
- roscpp: ros::param::set / ros::param::get
- rospy: set_param / get_param

可用数据类型

The Parameter Server使用 XMLRPC数据类型作为参数值包括
- 32-bit integers
- booleans
- strings
- doubles
- iso8601 dates
- lists
- base64-encoded binary data

命名空间

parameter的命名使用正常的ROS命名传统,这个意味着参数可以是一个分级的,他和和ros topic,ros node是一致的。层级可以很好保护参数的名称冲突,另外对于相关的参数的表示也是有帮助的。

/camera/left/name: leftcamera
/camera/left/exposure: 1
/camera/right/name: rightcamera
/camera/right/exposure: 1.1

roscpp中的parameter server

roscpp中的API上述数据类型,对于其他的数据类型需要使用XmlRpc::XmlRpcValue Class

功能 函数名 command-line tool
Getting Parameters ros::NodeHandle::getParam(),ros::param::get() rosparam get get parameter
Setting Parameters ros::NodeHandle::setParam(),ros::param::set() rosparam set set parameter
Checking Parameter Existence ros::NodeHandle::hasParam(),ros::param::has() -
Deleting Parameters ros::NodeHandle::deleteParam(),ros::param::del() rosparam delete delete parameter
Searching for Parameter Keys ros::NodeHandle::searchParam() -
Retrieving Lists - rosparam list list parameter names
load form file - rosparam load load parameters from file
dump to file - rosparam dump dump parameters to file

launch

ROS中,param特指在参数服务器parameter server中存储的参数

在launch文件中有两个相关的标签:、
- 标签可用于直接设置参数,也可以从文件中读取
- 标签用于从yaml文件中读取并设置参数

roslaunch发现和标签后会调用rosparam包来实现设置

使用参数 描述
command=”load dump
file=”$(find pkg-name)/path/foo.yaml” (load or dump commands) Name of rosparam file.
param=”param-name” Name of parameter.
ns=”namespace” (optional) Scope the parameters to the specified namespace.
subst_value=true false (optional)

Examples

<rosparam command="load" file="$(find rosparam)/example.yaml" />
<rosparam command="delete" param="my/param" /

arg

标签给launch文件内部设置参数,通过标签设置的参数仅在launch文件内有效.
标签有三种设置参数的方式:
- 直接用此标签设置
- 用此标签声明,用roslaunch命令确定其值
- 用此标签声明,在include本launch文件的父launch文件中确定其值

只有一种使用方式:通过launch文件内部的substitution args来使用:$(arg foo)
arg的整个设置到解析仅在roslaunch解析launch文件过程中使用
完成整个启动过程后即刻失效

env

标签用于设置环境变量,此处“环境变量”是指linux系统的进程环境变量,设置了的node对应的进程可观察到此环境变量。可以通过getenv函数读取, ros也提供了跨平台函数ros::get_environment_variable来读取环境变量。需要注意的是此法设置的环境变量是进程的环境变量,在运行roslaunch的shell上是echo不出来的。 可以先rosnode info查看节点进程的pid,例如是12345,再cat /proc/12345/evniron | tr ‘\0’ ‘\n’来查看进程的环境变量。

注意:launch文件的substitution args: $(env ENVIRONMENT_VARIABLE)用于查询当前shell环境变量
是无法查询设置的进程环境变量的。故无法改变launch的行为,只能通过getenv或ros::get_environment_variable来改变节点的行为

refer

  1. launch文件中的param、rosparam、arg、env
  2. http://wiki.ros.org/rosparam
  3. http://wiki.ros.org/roslaunch/XML/rosparam
  4. http://wiki.ros.org/roscpp/Overview/Parameter%20Server
  5. http://wiki.ros.org/Parameter%20Server
  6. http://www.cnblogs.com/stemon/p/4188149.html
  7. http://www.rosclub.cn/post-58.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章