1.在ros launch文件中添加gdb编译参数
launch-prefix="xterm -e gdb -ex run --args "
如:
<node pkg="basic_visual_map" type="basic_visual_map" name="basic_visual_map" output="screen"
launch-prefix="xterm -e gdb -ex run --args" />
"重要参数":
常用参数:
--r 代表run
--q 退出调试
--bt 追踪错误起源
--b 设置断点, 如b function name, 在某函数处设置断点
非常用参数——"断点调试"
--n "next", 运行下一行代码
--c "continue", 继续运行直到下一个断点
--f "finish", 运行完当前程序
"rosrun node node" gdb 调试
rosrun --prefix 'gdb -ex run --args' package_name node_name
2.rosrun 运行参数添加到launch文件中运行
N1: ros::init(argc, argv, "cloudMap");
ros::NodeHandle nh("~");
std::string file_name;
nh.param<std::string>("file_name", file_name, "../cfg/camera.txt");
放入launch文件中:
<launch>
<node pkg="cloudMapSaved" name="cloudMap_node" type="cloudMap_node" output="screen" >
<param name="file_name" type="string" value="/home/ian/catkin_ws/src/map_optimized/cfg/camera.txt"/>
</node>
</launch>
N2: argc=3
argv[0]="map_server"
argv[1]="-f"
argv[0]="test"
如: rosrun map_server map_saver map:=/<Map Topic> -f PATH_TO_YOUR_PACKAGE/mymap
放入launch文件中:
<launch>
<!--打开已经存在的地图-->
<node pkg="map_server" name="map_server" type="map_server"
args="$(find DataSets)/map/willow-full-0.025.pgm" />
<!--保存现创建的地图-->
<node pkg="map_server" name="map_server" type="map_saver" args="-f $(find DataSets)/map/newmap" />
<node name="rosplay" pkg="rosbag" type="play"
args="--clock --hz=10 $(find DataSets)/simple_driving_test_indexed.bag" />
</launch>
3. launch文件中常使用的参数模板
<!--
集合launch各种各样的参数和元素,初始化一个launch文件模块,以后缺少或不熟悉某个参数可以直接从此文件中获取或者当做参考文件.
注意:该模板文件无法运行,参数和id都是随机选取,没有指定文件,需要按照自己的要求进行修改!,以下以rtabmap_ros包为参照。
Author: Ian
星期四, 18. 七月 2019 08:59下午
-->
<launch>
<!--定义默认参数-->
<arg name="stereo" default="false"/>
<arg name="frame_id" default="camera_link" />
<!--添加gdb调试参数,当前默认参数是执行gdb调试 -->
<arg name="launch_prefix" default="xterm -e gdb -ex run --args"/>
<!-- 一个参数依赖另一个参数 -->
<arg if="$(arg stereo)" name="approx_sync" default="false"/>
<arg unless="$(arg stereo)" name="approx_sync" default="true"/>
<!--执行rosrun跑节点文件 type/name:为可执行文件的名称,也就是cmake编译得到的二进制文件 -->
<node pkg="rtabmap_ros" type="rgbd_odometry" name="rgbd_odometry" output="screen"
launch-prefix="$(arg launch_prefix)">
<!--更改cpp文件中的相关参数, 若已定义默认参数,可直接使用$(arg frame_id)方式对参数进行引用 -->
<param name="frame_id" type="string" value="$(arg frame_id)"/>
<!--重新映射话题,将原来的话题数据映射到新的话题上,from为原始话题,to为新的话题-->
<remap from="odom_topic" to="/T265/odom/frame" />
</node>
<!--执行rosrun时,有时候会在后面添加参数文件,比如摄像头的配置文件(ORB_SLAM2就是这样的), 那么在launch文件如何添加参数 -->
<node pkg="rtabmap_ros" type="rgbd_odometry" name="rgbd_odometry" output="screen"
args="$(find rtabmap_ros)/config/camera.yaml" />
</launch>
参考文献
Author: Ian
星期一, 22. 七月 2019 10:49下午