ROS学习——rosparam

目录

一、简介

二、参数的读和写

2.1 读

2.2 写

三、yaml文件的读写

3.1、yaml-cpp的配置

3.2、yaml-cpp的使用

四、Launch文件应用

4.1 元素

4.2 例子


一、简介

rosparam命令

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          列出参数服务器中的参数

支持数据类型

  • 32-bit integers

  • booleans

  • strings

  • doubles

  • iso8601 dates

  • lists

  • base64-encoded binary data

 

二、参数的读和写

2.1 读

(1)ros::NodeHandle::getParam()

ros::NodeHandle nh;
std::string global_name, relative_name, default_param;

if (nh.getParam("/global_name", global_name))
{  
    ...
}

if (nh.getParam("relative_name", relative_name))
{
    ...
}

// Default value versionnh.param("default_param", default_param, "default_value");

(2)ros::param::get()

std::string global_name, relative_name, default_param;

if (ros::param::get("/global_name", global_name))
{  
    ...
}

if (ros::param::get("relative_name", relative_name))
{
    ...
}

// Default value versionros::param::param("default_param", default_param, "default_value");

2.2 写

此处的写为把参数写入参数管理器中,并不会修改参数文件,若需保存修改后参数需要修改参数文件,参考第三点

(1)ros::NodeHandle::setParam()

ros::NodeHandle nh;
nh.setParam("/global_param", 5);
nh.setParam("relative_param", "my_string");
nh.setParam("bool_param", false);

(2)ros::param::set()

ros::param::set("/global_param", 5);
ros::param::set("relative_param", "my_string");
ros::param::set("bool_param", false);

 

三、yaml文件的读写

3.1、yaml-cpp的配置

(1)安装

下载地址:https://github.com/jbeder/yaml-cpp

下载稳定版后,在本地编译安装,ros本身自带yaml-cpp,但因其版本过低,部分函数无法使用,因此需要安装最新稳定版。

cd yaml-cpp
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON ..
make
sudo make install

(2)调用

在个CMakeLists.txt文件中添加以下内容,使其调用安装的新版本而不是自带旧版本

link_directories(/usr/local/lib)
include_directories(/usr/local/include/yaml-cpp)

同时在编译节点后加上yaml-cpp(http://wiki.ros.org/yaml_cpp)

target_link_libraries(${PROJECT_NAME} yaml-cpp)

3.2、yaml-cpp的使用

#include 
#include 

//读取文件
std::string param_file = "../src/msgs_file/param/param.yaml";
YAML::Node yamlConfig = YAML::LoadFile(motion_file);

//读取父项和子项
YAML::Node parent_param = yamlConfig["parent_param"];
YAML::Node chile_param = parent_param["chile_param"];

//修改
chile_param["param_1"] = 0;
chile_param["param_2"] = 1;

//写
std::ofstream file;
file.open(param_file);
file.flush();
file << yamlConfig;

 

四、Launch文件应用

4.1 元素

  • command="load|dump|delete" (optional, default=load)

rosparam 命令参数

  • file="$(find pkg-name)/path/file.yaml" (load or dump commands)

读取参数文件路径

  • param="param-name"

参数名字

  • ns="namespace" (optional)

命名空间

  • subst_value=true|false (optional)

是否允许替换参数

4.2 例子

  • 读取参数

  • 删除参数 
  •  设置参数
[1, 2, 3, 4]

 

参考

http://wiki.ros.org/roslaunch/XML/rosparam

http://wiki.ros.org/roscpp/Overview/Parameter%20Server

https://blog.csdn.net/u014610460/article/details/79508869

https://answers.ros.org/question/12321/how-to-write-and-parse-yaml-file-for-ros/

你可能感兴趣的:(ROS)