针对网上安装的cartographer算法,能够跑bag包的前提下,如何实车上测试的问题。
首先是安装cartographer,如果不确定自己有没有安装成功,尝试下一个官方的bag包,跑成功了就是安装成功了。
我这里使用的是单线激光雷达,每个人的雷达都不一样,启动就行。
1.按照雷达教程,安装驱动,并启动雷达扫描。
2.修改launch文件,我这里参考古月居的launch文件修改。
3.对照launch文件修改lua文件。
原launch文件以demo_revo_lds.launch为副本,源文件如下:
<launch>
<param name="/use_sim_time" value="true" />
<node name="cartographer_node" pkg="cartographer_ros"
type="cartographer_node" args="
-configuration_directory $(find cartographer_ros)/configuration_files
-configuration_basename revo_lds.lua"
output="screen">
<remap from="scan" to="horizontal_laser_2d" />
</node>
<node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
type="cartographer_occupancy_grid_node" args="-resolution 0.05" />
<node name="rviz" pkg="rviz" type="rviz" required="true"
args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />
<node name="playbag" pkg="rosbag" type="play"
args="--clock $(arg bag_filename)" />
</launch>
复制该文件,修改为:
<launch>
<param name="/use_sim_time" value="true" />
<node name="cartographer_node" pkg="cartographer_ros"
type="cartographer_node" args="
-configuration_directory $(find cartographer_ros)/configuration_files
-configuration_basename my_revo_lds.lua"
output="screen">
<remap from="scan" to="scan" />
</node>
<node name="rviz" pkg="rviz" type="rviz" required="true"
args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />
</launch>
主要修改内容:
1.修改你后面要改的lua文件名,这里也是用源文件为副本,我的修改为my_revo_lds.lua
2. <remap from="scan" to="scan" /> 这里不改没数据读取,暂时不知道干啥用的。
3. args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />
这里demo_2d.rviz也可以修改为自己想要的rviz页面格式。
4.删除了源文件中bag包的调用,毕竟现在是不需要bag文件了,否则会报错。
关于lua文件:
这里也是基于源文件revo_lds.lua的修改
主要修改下两行,我只用了单雷达,雷达在rviz上的fixed frame 为laser,一开始修改别的,各种base_link,或别的都没用,改成laser后成功出结果,了解的大佬可以评论一下原理。
tracking_frame = "laser",
published_frame = "laser",
重新编译后,运行launch文件
$ catkin_make_isolated --install --use-ninja
$ roslaunch cartographer_ros my_demo_revo_lds.launch
再粘贴一些相关lua文件的解释:
以下为机器视觉的课件:
tracking_frame 有imu的link就设置成imu的link, 没有就设置成base_link
published_frame cartographer发布的tf的最下边一个坐标系, 就是bag文件中tf树的最上边的一个坐标系
provide_odom_frame 是否提供里程计, 如果bag中有里程计的坐标系, 这个就是false, 如果没有, 就根据需要决定是否提供里程计的坐标系
use_pose_extrapolator = false 这个一定要设置成false
use_odometry 是否使用里程计的传感器数据, 如果为true, tf树中一定要存在odom这个坐标系
use_nav_sat/use_landmarks 是否订阅里程计话题的数据, 以及landmark话题的数据
num_laser_scans/num_point_clouds 单线点云与多线点云的话题的数量, 可以同时为1, 不可以同时为0
num_subdivisions_per_laser_scan 一帧点云数据会被分成几次处理, 设置成1就行了
MAP_BUILDER.use_trajectory_builder_2d = true 建二维图时一定要有这句话, 建三维图就把2d改成3d
TRAJECTORY_BUILDER_2D.use_imu_data 是否使用imu, 如果用imu, tracking_frame一定要设置成imu的link
TRAJECTORY_BUILDER_2D.min_z 点云的最小z的范围, 单线点云不能设置大于0的值(不设置), 多线点云的这个值要大于0