ROS零散知识(1)


前言

这两天在跑标定代码时遇到了点问题,所以在调试的过程中了解到了一些ROS的小知识点,相当于学习了,下面来总结一下。


一、在launch文件中使用GDB调试

在launch文件中的节点内添加launch-prefix="gdb -ex run --args"即可启动GDB调试,其表示在运行launch的对话框内,显示bug信息。launch文件修改如下所示

<launch>
  <rosparam command="load" file="$(find livox_camera_calib)/config/calib.yaml" />
  <node 
    pkg="livox_camera_calib"
    type="lidar_camera_calib"
    name="lidar_camera_calib"
    output="screen"
    launch-prefix="gdb -ex run --args"  <!--此处添加代码-->
  />
  <node 
    pkg="rviz"
    type="rviz"
    name="rviz"
    args="-d $(find livox_camera_calib)/rviz_cfg/calib.rviz"
  />
</launch>

bug信息显示如下请添加图片描述

二、ROS中利用yaml将参数传入

1.通过rosparam将参数导入

代码如下

<rosparam command="load" file="$(find 功能包名字)/参数文件.yaml" />

yaml文件内容如下所示

# Data path. adjust them!
common:
    image_file: "/home/ycj/data/calib/image/3.png"
    pcd_file: "/home/ycj/data/calib/pcd/3.pcd"
    result_file: "/home/ycj/data/calib/extrinsic.txt"

# Camera Parameters. Adjust them!
camera:
    camera_matrix: [1364.45, 0.0,      958.327,
                0.0,     1366.46,  535.074,
                0.0,     0.0,      1.0     ]
    dist_coeffs: [0.0958277, -0.198233, -0.000147133, -0.000430056, 0.000000]

# Calibration Parameters.!
calib:
    calib_config_file: "/home/ycj/catkin_ws/src/livox_camera_calib/config/config_indoor.yaml"
    use_rough_calib: false # set true if your initial_extrinsic is bad

文件分为三大块,分别是common、camera、calib这三个大块,块下面保存的是相应的参数及其参数名。

2.获取数据

利用NodeHandle来进行launch文件中的数据获取,代码如下所示

  nh.param<string>("common/image_file", image_file, "");
  nh.param<string>("common/pcd_file", pcd_file, "");
  nh.param<string>("common/result_file", result_file, "");
  std::cout << "pcd_file path:" << pcd_file << std::endl;
  nh.param<vector<double>>("camera/camera_matrix", camera_matrix,
                           vector<double>());
  nh.param<vector<double>>("camera/dist_coeffs", dist_coeffs, vector<double>());
  nh.param<bool>("calib/use_rough_calib", use_rough_calib, false);
  nh.param<string>("calib/calib_config_file", calib_config_file, "");

其中,nh.param函数各部分的意思是

nh.param<传入的参数类型>(launch文件中的参数名称, 程序中接受该参数的变量名称,该参数默认值)

即launch文件里面存在函数参数的名称及参数值,则赋值程序中接受参数值的变量(后面这个),后面的参数默认值就会忽略。
假如launch文件里面没有这个参数名称的定义,则将参数默认值赋给程序中接收参数的变量。

这样,就可以将yaml文件中的参数传入程序中,其过程相当于将yam文件中的内容读入launch中,再进行参数获取。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值