一、简介
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<std::string>("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<std::string>("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 <yaml-cpp/yaml.h>
#include <fstream>
//读取文件
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 例子
- 读取参数
<rosparam command="load" file="$(find rosparam)/example.yaml" />
<rosparam ns="namespace" command="load" file="$(find rosparam)/example.yaml" />
- 删除参数
<rosparam command="delete" param="my/param" />
- 设置参数
<rosparam param="a_list">[1, 2, 3, 4]</rosparam>
参考
http://wiki.ros.org/roslaunch/XML/rosparam
http://wiki.ros.org/roscpp/Overview/Parameter%20Server
https://blog.youkuaiyun.com/u014610460/article/details/79508869
https://answers.ros.org/question/12321/how-to-write-and-parse-yaml-file-for-ros/
本文详细介绍了ROS中的参数管理,包括rosparam命令的使用,如设置、获取、删除参数,以及从文件加载和导出参数。同时,深入探讨了如何利用yaml-cpp库读写YAML文件,实现参数的持久化存储。最后,讲解了launch文件中rosparam元素的应用,展示了如何在ROS节点启动时加载或删除参数。
1577

被折叠的 条评论
为什么被折叠?



