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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章