学无先后,达者为师

网站首页 编程语言 正文

yaml文件的加载使用

作者:不盈新成 更新时间: 2022-07-22 编程语言

yaml文件的加载

    • 1. yaml-cpp加载
      • (1)安装编译
      • (2)使用
      • (3)加载参数
    • 2. 使用rosparam
      • 补:添加参数的另一种方式

yaml文件为常用的参数文件,方便调参避免不必要的编译。最近发现了几种加载方法,逐个搜索学习了一下,并进行了实际操作。在此记录一下。

  1. yaml-cpp包加载
  2. 使用rosparam加载
    补: 在launch文件中直接设置参数

1. yaml-cpp加载

(1)安装编译

git clone https://github.com/jbeder/yaml-cpp.git
cd yaml-cpp
mkdir build 
cd build
cmake ..  -D BUILD_SHARED_LIBS=ON
make -j
sudo make install

(2)使用

如果不想每次都到 copy 头文件到不同的工程中,那么你可以将整个文件夹 copy 到系统默认的头文件目录, ubuntu 的地址是 /usr/local/include/;将库文件libyaml-cpp.so拷贝到系统默认的 lib 文件夹,ubuntu 是 /usr/local/lib/。

# 复制文件夹
sudo cp -r yaml-cpp  /usr/local/include/
# 复制库文件
sudo cp libyaml-cpp.so  /usr/local/lib/

头文件添加

#include "yaml-cpp/yaml.h"

CMakeLists.txt中添加

target_link_libraries(${PROJECT_NAME} ${INTERFACE}libyaml-cpp.so)

(3)加载参数

举个梨子,配置一个这样的config.yaml文件

name: frank
sex: male
age: 18
 
skills: 
  c++: 1
  java: 1
  android: 1
  python: 1

yaml文件的编写要注意格式 参数名: 值,冒号后面一定要加一个空格。

加载,若相对路径不行,则需要使用绝对路径

YAML::Node config = YAML::LoadFile("path");
cout << "name:" << config["name"].as<string>() << endl;
cout << "age:" << config["age"].as<int>() << endl;
cout << "skills c++:" << config["skills"]["c++"].as<int>() << endl;

2. 使用rosparam

在launch文件中添加下面这句加载yaml文件,修改路径(功能包名、进入功能包后的文件的路径)

<rosparam command="load" file="$(find pkgname) /config/config.yaml" />

加载参数

ros::NodeHandle nh;
string name1;
int age1;
nh.setParam("name", tom);  
nh.getParam("/name",name1);
nh.setParam("age", 20);  
nh.getParam("/age",age1);
cout << "name1:" <<name1<< endl;
cout << "age1:" <<age1<< endl;

set为从服务器加载,若加载不到则自动生成一个并取默认值。然后再用get获取参数。也可以不用set直接用get去获取。

补:添加参数的另一种方式

在launch文件中用此句话添加参数

<param name="name" type="string" value="frank"/>

启动launch文件时就会自动加载参数到参数服务器中,此方法适用于少量参数的场景。
加载参数的方法与2相同使用get进行获取加载。

原文链接:https://blog.csdn.net/weixin_51498169/article/details/125914795

栏目分类
最近更新