概要
利用cartographer这个算法进行建图,不需要录制bag,而是用激光雷达进行实时定位+建图,最终目的是为了获取雷达此时的坐标。(坐标是以开启雷达的位置为初始坐标)
我们上一篇已经进行了ros驱动雷达
ros驱动雷达教程
一,安装cartographer
一共有两种安装方法
1.用鱼香ros一键安装:
wget http://fishros.com/install -O fishros && . fishros
按照提示一步步来,这个方法很可能安装失败,但是不要紧,哪一步出错了,把出错的部分给ai帮你解析,或者对照其他人的cartographer安装教程,看看鱼香ros安装到哪步,接着那一步继续安装。
2.用源码安装
可以参照这个博客进行安装:
简单快速的cartographer安装教程
直到利用官方给的bag包实现建图之后,就说明安装好了cartographer
温馨提示:如果用的是树莓派4b 编译的时候可能会面临着系统死机,这时候我们不要让他多线程编译,使用单线程编译就好了,在ninja后面加一个 -j1 ,因为它默认是-j4,四个线程编译
catkin_make_isolated --install --use-ninja -j1
二,修改revo_Ids.lua文件
该文件的路径在:
~/cartographer_ws/src/cartographer_ros/cartographer_ros/configuration_files/revo_lds.lua
修改文件的内容如下
-- Copyright 2016 The Cartographer Authors
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
include "map_builder.lua"
include "trajectory_builder.lua"
options = {
map_builder = MAP_BUILDER,
trajectory_builder = TRAJECTORY_BUILDER,
map_frame = "map",
tracking_frame = "laser",
published_frame = "laser",
odom_frame = "odom",
provide_odom_frame = true,
publish_frame_projected_to_2d = false,
use_pose_extrapolator = true,
use_odometry = false,
use_nav_sat = false,
use_landmarks = false,
num_laser_scans = 1,
num_multi_echo_laser_scans = 0,
num_subdivisions_per_laser_scan = 1,
num_point_clouds = 0,
lookup_transform_timeout_sec = 0.2,
submap_publish_period_sec = 0.3,
pose_publish_period_sec = 5e-3,
trajectory_publish_period_sec = 30e-3,
rangefinder_sampling_ratio = 1.,
odometry_sampling_ratio = 1.,
fixed_frame_pose_sampling_ratio = 1.,
imu_sampling_ratio = 1.,
landmarks_sampling_ratio = 1.,
}
MAP_BUILDER.use_trajectory_builder_2d = true
TRAJECTORY_BUILDER_2D.submaps.num_range_data = 35
TRAJECTORY_BUILDER_2D.min_range = 0.3
TRAJECTORY_BUILDER_2D.max_range = 8.
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 1.
TRAJECTORY_BUILDER_2D.use_imu_data = false
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 10.
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1
POSE_GRAPH.optimization_problem.huber_scale = 1e2
POSE_GRAPH.optimize_every_n_nodes = 35
POSE_GRAPH.constraint_builder.min_score = 0.65
return options
与原文件相比较主要是进行了以下修改
tracking_frame = "laser",
published_frame = "laser"
use_pose_extrapolator = true
里面的 tracking_frame 和 published_frame ,改成自己激光雷达的frame_id,我的是laser,一般都是laser,其余的不要动。
三,修改demo_revo_lds.launch文件
文件路径为
~/cartographer_ws/src/cartographer_ros/cartographer_ros/launch/demo_revo_lds.launch
修改成以下内容
<!--
Copyright 2016 The Cartographer Authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<launch>
<!-- 使用真实时间(不是 bag 文件或仿真) -->
<param name="/use_sim_time" value="true" />
<!-- Step 1: 启动 Cartographer 节点 -->
<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">
<!-- 如果 scan topic 名称不同,请修改 remap ,一般雷达扫描的数据都是scan这个话题发布的信息 -->
<remap from="scan" to="scan"/>
</node>
<!-- Step 2: 启动 RVIZ 进行可视化 -->
<node name="rviz" pkg="rviz" type="rviz" required="true"
args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />
</launch>
这里我们不用bag包,就不需要设置下面这个节点
<node name="playbag" pkg="rosbag" type="play"
args="--clock $(arg bag_filename)" />
四,回到总目录下重新编译
cd ~/cartographer_ws
catkin_make_isolated --install --use-ninja -j1
source install_isolated/setup.bash
到这里配置工作已经完成了
五,启动测试
1.先启动雷达
source devel/setup.bash
roslaunch lslidar_driver lslidar_serial.launch
2.在启动cartographer
source install_isolated/setup.bash
roslaunch cartographer_ros demo_revo_lds.launch
注意:启动cartographer的时候建议使用电脑自带的远程连接服务,不然rviz启动不了
3.运行结果
可以在rviz中看出
此时可以另开终端
查看轨迹信息
信息在 trajectory_node_list这个话题中发布
rostopic echo trajectory_node_list
可以看到
这里就是雷达位置的实时数据坐标了