ROS2 Carttographer安装
参考博客:Carto介绍及安装
安装carotgrapher
sudo apt install ros-humble-cartographer
需要注意我们不是直接使用cartographer,而是通过cartographer-ros功能包进行相关操作,所以我们还需要安装下cartographer-ros
sudo apt install ros-humble-cartographer-ros
测试是否安装成功
如果是源码编译请先source下工作空间后再使用下面指令查看是否安装成功
ros2 pkg list | grep cartographer
能看到下面的结果即可

可能你会好奇为什么没有cartographer,因为cartographer包的编译类型原因造成的,不过没关系,cartographer_ros依赖于cartographer,所以有cartographer_ros一定有cartographer。
Cartographer参数配置
作为一个优秀的开源库,Cartographer提供了很多可以配置的参数,虽然灵活性提高了,但同时也提高了使用难度(需要对参数进行调节配置),所以有必要在正式使用前对参数进行基本的介绍。
因为我们主要使用其进行2D的建图定位,所以我们只需要关注2D相关的参数。
Cartographer参数是使用lua文件来描述的,不会lua也没关系,我们只是改改参数而已。
提示:lua中的注释采用 -- 开头
前端参数
文件路径:
./opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_2d.lua
请你打开这个文件自行浏览,下面对初次建图配置的参数进行介绍。
-- 是否使用IMU数据 use_imu_data = true, -- 深度数据最小范围 min_range = 0., -- 深度数据最大范围 max_range = 30., -- 传感器数据超出有效范围最大值时,按此值来处理 missing_data_ray_length = 5., -- 是否使用实时回环检测来进行前端的扫描匹配 use_online_correlative_scan_matching = true -- 运动过滤,检测运动变化,避免机器人静止时插入数据 motion_filter.max_angle_radians |
后端参数
文件路径:
./opt/ros/humble/share/cartographer/configuration_files/pose_graph.lua
该文件主要和地图构建相关
--Fast csm的最低分数,高于此分数才进行优化。 constraint_builder.min_score = 0.65 --全局定位最小分数,低于此分数则认为目前全局定位不准确 constraint_builder.global_localization_min_score = 0.7 |
Carotgrapher_ROS参数配置
该部分参数主要是用于和ROS2进行通信和数据收发的配置,比如配置从哪个话题读取里程记数据,从哪个话题来获取深度信息(雷达)。
文件路径:
./opt/ros/humble/share/cartographer_ros/configuration_files/backpack_2d.lua
include "map_builder.lua" include "trajectory_builder.lua"
options = { map_builder = MAP_BUILDER, trajectory_builder = TRAJECTORY_BUILDER, -- 用来发布子地图的ROS坐标系ID,位姿的父坐标系,通常是map。 map_frame = "map", -- SLAM算法跟随的坐标系ID tracking_frame = "base_link", -- 将发布map到published_frame之间的tf published_frame = "base_link", -- 位于“published_frame ”和“map_frame”之间,用来发布本地SLAM结果(非闭环),通常是“odom” odom_frame = "odom", -- 是否提供里程计 provide_odom_frame = true, -- 只发布二维位姿态(不包含俯仰角) publish_frame_projected_to_2d = false, -- 是否使用里程计数据 use_odometry = false, -- 是否使用GPS定位 use_nav_sat = false, -- 是否使用路标 use_landmarks = false, -- 订阅的laser scan topics的个数 num_laser_scans = 0, -- 订阅多回波技术laser scan topics的个数 num_multi_echo_laser_scans = 1, -- 分割雷达数据的个数 num_subdivisions_per_laser_scan = 10, -- 订阅的点云topics的个数 num_point_clouds = 0, -- 使用tf2查找变换的超时秒数 lookup_transform_timeout_sec = 0.2, -- 发布submap的周期间隔 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., -- 固定的frame位姿采样率 fixed_frame_pose_sampling_ratio = 1., -- IMU数据采样率 imu_sampling_ratio = 1., -- 路标采样率 landmarks_sampling_ratio = 1., } |