在ROS中处理yaml文件

 

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

在ROS中处理yaml文件

lwl2012v 2018-03-10 16:15:10 11778 收藏 18

文章标签: ros yaml

版权

ROS中的参数服务器(Parameter Server)的相关操作可参见roscpp_tutorials/Tutorials/Parameters

如果想要载入参数,可以通过编写yaml文件,然后在launch文件中加入

<rosparam file="$(find readyaml)/rosYaml.yaml" command="load"/>

可以写个模板类来加载参数:

 
  1. template<typename T>

  2. T getParam(const string& name,const T& defaultValue)  //This name must be namespace+parameter_name

  3. {

  4. T v;

  5. if(ros::param::get(name,v))  //get parameter by name depend on ROS.

  6. {

  7. ROS_INFO_STREAM("Found parameter: "<<name<<",\tvalue: "<<v);

  8. return v;

  9. }

  10. else

  11. ROS_WARN_STREAM("Cannot find value for parameter: "<<name<<",\tassigning default: "<<defaultValue);

  12. return defaultValue;  //if the parameter haven't been set,it's value will return defaultValue.

  13. }

 

在ROS系统中,参数读写一般通过xml或者yaml格式的文件,其中yaml用得比较多。这是一种可读性高,轻量级的标记语言,简单好用。
对于yaml文件,ros中用的较早版本的yaml-cpp库,最新的可在github上下载,并按照readme中所述的方法编译安装。

特别留意的是,如果需要生成共享库,cmake的时候后面一定要加上 -DBUILD_SHARED_LIBS=ON 这句话。

 

有了yaml库,在CMakeLists.txt中加入,

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

最后别忘了在链接库target_link_libraries时,加上yaml-cpp。
关于库的使用,github上有一些简单的tutorial教程
 

以下是简单的yaml文件读写操作示例。

 
  1. #include <ros/ros.h>

  2. #include <yaml-cpp/yaml.h>

  3. #include <iostream>

  4. #include <fstream>

  5.  
  6. int main(int argc, char **argv)

  7. {

  8. std::string fin = "/home/user/param/param.yaml"; //yaml文件所在的路径

  9. YAML::Node yamlConfig = YAML::LoadFile(fin);

  10. int int_param = yamlConfig["int_param"].as<int>();

  11. std::cout << " node size: " << yamlConfig.size() << std::endl;

  12. std::cout << yamlConfig["bool_param"].as<bool>() << "\n";

  13. yamlConfig["bool_param"] = !yamlConfig["bool_param"].as<bool>();

  14. yamlConfig["str_param"] = "test";

  15. std::ofstream file;

  16. file.open(fin);

  17. file.flush();

  18. file << yamlConfig;

  19. file.close();

  20.  
  21. return 0;

  22. }

其中,yaml文件里的内容为:

bool_param: true
int_param: 2
double_param: 0.5
str_param: "123"

也可采用Emit来生成yaml文件,代码如下:

 
  1. #include <ros/ros.h>

  2. #include <yaml-cpp/yaml.h>

  3. #include <iostream>

  4. #include <fstream>

  5.  
  6. int main(int argc, char **argv)

  7. {

  8. std::ofstream fout("/home/user/param/param.yaml");

  9. YAML::Emitter out(fout);

  10. out << YAML::BeginMap;

  11. out << YAML::Key << "int_param";

  12. out << YAML::Value << 1;

  13. out << YAML::Key << "double_param";

  14. out << YAML::Value << 0.5;

  15. out << YAML::Key << "bool_param";

  16. out << YAML::Value << false;

  17. out << YAML::Comment("bool parameter");

  18. out << YAML::Key << "str_param";

  19. out << YAML::Value << "test";

  20. out << YAML::EndMap;

  21.  
  22. return 0;

  23. }

 

yml文件的其他操作可参见博文《.yaml参数文件的编写和使用》,

其综合运用的案例可参见博文:ros-opencv-qt-yaml综合运用之滤波

 

Enjoy!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值