《动手学ROS2》10.4 Cartographer介绍与安装

本系列教程作者:小鱼
公众号:鱼香ROS
QQ交流群:139707339
教学视频地址:小鱼的B站
完整文档地址:鱼香ROS官网
版权声明:如非允许禁止转载与商业用途。

10.4 Cartographer介绍与安装

1.Cartographer介绍

Cartographer是Google开源的一个可跨多个平台和传感器配置以2D和3D形式提供实时同时定位和建图(SLAM)的系统。

github地址:https://github.com/cartographer-project/cartographer 文档地址:https://google-cartographer.readthedocs.io/en/latest

在小鱼呆过的机器人公司里,建图最终方案都是采用了Cartographer,甚至花费大量人力物力对Cartographer算法进行裁剪,这足以表明Cartographer算法的优越性。

Cartographer系统架构概述(简单看看即可,如果大家后面确定研究方向是SLAM可以深入学习):

简单的可以看到左边的可选的输入有深度信息、里程计信息、IMU数据、固定Frame姿态。

2.Carttographer安装

2.1 apt安装

安装carotgrapher

sudo apt install ros-foxy-cartographerCopy to clipboardErrorCopied

需要注意我们不是直接使用cartographer,而是通过cartographer-ros功能包进行相关操作,所以我们还需要安装下cartographer-ros

sudo apt install ros-foxy-cartographer-rosCopy to clipboardErrorCopied

2.2 源码安装

小鱼比较推荐源码安装的方式,毕竟是以学习为目的,我们后面要稍微看一下源码。

将下面的源码克隆到fishbot_ws的src目录下:

git clone https://ghproxy.com/https://github.com/ros2/cartographer.git -b foxy
git clone https://ghproxy.com/https://github.com/ros2/cartographer_ros.git -b dashingCopy to clipboardErrorCopied

安装依赖

这里我们使用rosdepc进行依赖的安装,rosdepc指令找不到可以先运行下面的一键安装命令,选择一键配置rosdep即可。

wget http://fishros.com/install -O fishros && . fishrosCopy to clipboardErrorCopied

接着在fishbot_ws下运行下面这个命令进行依赖的安装。

rosdepc 是小鱼制作的国内版rosdep,是一个用于安装依赖的工具。该工具的安装可以采用一键安装进行,选项编号为3。安装完成后运行一次rodepc update即可使用。

rosdepc install -r --from-paths src --ignore-src --rosdistro $ROS_DISTRO -yCopy to clipboardErrorCopied

编译

这里有一个新的命令–packages-up-to,意思是其所有依赖后再编译该包

colcon build --packages-up-to cartographer_rosCopy to clipboardErrorCopied

2.3 测试是否安装成功

如果是源码编译请先source下工作空间后再使用下面指令查看是否安装成功;

ros2 pkg list | grep cartographerCopy to clipboardErrorCopied

能看到下面的结果即可

cartographer_ros
cartographer_ros_msgsCopy to clipboardErrorCopied

可能你会好奇为什么没有cartographer,因为cartographer包的编译类型原因造成的,不过没关系,cartographer_ros依赖于cartographer,所以有cartographer_ros一定有cartographer。

3.Cartographer参数配置

作为一个优秀的开源库,Cartographer提供了很多可以配置的参数,虽然灵活性提高了,但同时也提高了使用难度(需要对参数进行调节配置),所以有必要在正式使用前对参数进行基本的介绍。

因为我们主要使用其进行2D的建图定位,所以我们只需要关注2D相关的参数。

Cartographer参数是使用lua文件来描述的,不会lua也没关系,我们只是改改参数而已。

小鱼提示:lua中的注释采用 – 开头

3.1 前端参数

文件:trajectory_builder_2d

src/cartographer_core/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_radiansCopy to clipboardErrorCopied

3.2 后端参数

文件:pose_graph.lua-后端参数配置项

路径src/cartographer_core/cartographer/configuration_files/pose_graph.lua

该文件主要和地图构建

--Fast csm的最低分数,高于此分数才进行优化。
constraint_builder.min_score = 0.65
--全局定位最小分数,低于此分数则认为目前全局定位不准确
constraint_builder.global_localization_min_score = 0.7Copy to clipboardErrorCopied

3.3 Carotgrapher_ROS参数配置

该部分参数主要是用于和ROS2进行通信和数据收发的配置,比如配置从哪个话题读取里程记数据,从哪个话题来获取深度信息(雷达)。

文件:backpack_2d.lua

路径:src/cartographer_core/cartographer_ros/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算法跟随的坐标系IDtracking_frame = "base_link",-- 将发布map到published_frame之间的tfpublished_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.,
}Copy to clipboardErrorCopied

4.总结

本节我们简单的介绍了Cartographer以及二进制和源码安装的方法,并对参数进行介绍。

下一节我们就开始为fishbot配置cartographer,接着就可以使用fishbot进行建图了。

参考文章:


技术交流&&问题求助:

《动手学ROS2》10.4 Cartographer介绍与安装相关推荐

  1. 《动手学ROS2》10.7 Nav2导航框架介绍与安装

    <动手学ROS2>10.7 Nav2导航框架介绍与安装 本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版 ...

  2. 《动手学ROS2》第十章章节介绍 机器人导航NAV2

    本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途. 第十章 机器人导航NAV2 千 ...

  3. 《动手学ROS2》10.6导航地图概述

    <动手学ROS2>10.6导航地图概述 本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许 ...

  4. 《动手学ROS2》9.5为FishBot添加添加激光雷达传感器

    <动手学ROS2>9.5为FishBot添加添加激光雷达传感器 本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS ...

  5. 关于动手学深度学习扩展包d2l的安装

    关于动手学深度学习扩展包d2l的安装 方式一 方式二 方式一 下载离线安装包直接放置 d2l_python是动手学深度学习PyTorch中的包,所以他的安装使用离线安装. 链接: [https://g ...

  6. 动手学深度学习——深度学习介绍及软件安装

    动手学深度学习是李沐教授在哔哩哔哩上发布的专栏视频,专栏链接如下: https://space.bilibili.com/1567748478/channel/seriesdetail?sid=358 ...

  7. 《动手学ROS2》4.7ROS2服务介绍

    本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途. 4.4 ROS2服务介绍 大家 ...

  8. 《动手学ROS2》4.6ROS2自定义话题接口

    本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途. 4.3.2 自定义话题接口 本 ...

  9. 《动手学ROS2》4.3ROS2话题通信(C++)

    本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途. 4.2.2 ROS2话题通信( ...

最新文章

  1. 比特币现金足球:BCH驱动的多人世界杯应用
  2. 编写OD插件将IDA中分析出来的函数名导入到OD中
  3. Maven问题总结 - 2
  4. win7+ubuntu20.04双系统+easybcd安装以及Reached target Reboot卡住问题
  5. htmlcss实例小项目_小程序websocket心跳库——websocket-heartbeat-miniprogram
  6. zabbix java api
  7. java在捕获异常并弹窗_Java捕获异常的问题
  8. 最简单的三层实例【插入据
  9. 让Myeclipse10支持Mac OSX – Retina显示屏
  10. SnowNLP包情感分析
  11. (翻译)简化模式(Reduce)
  12. 【跟我学Puppet】1.5 Puppet 3.7 使用Hiera定义配置
  13. layui.css如何使用,Layui新手教程
  14. tp link拨号失败 服务器无响应,【求救】K2提示“等待PPP客户端连接”拨号失败...
  15. 在线客服api是什么?
  16. 你懂SOLID原则吗?
  17. Js实现购物车加减,价格计算等功能
  18. 视频格式转换器哪个好?怎样使用?
  19. xposed的总开关
  20. 我们是ikun,为坤坤加油(简单的python反序列化、爬虫、越权、支付漏洞)

热门文章

  1. NetWorker Pro for mac(网络流量监控软件)
  2. 计算机相关专业大学上海,上海哪几个大学计算机专业的系比较好
  3. 天线接收信号、处理系统
  4. Tableau13——雷达图,凹凸图
  5. python爬虫实验——爬取网页图片+网页源代码
  6. [持续更新中]博客园开放api、还有知乎、V2EX开放接口
  7. 翻译科技论文,俄译中怎样效果好
  8. mongodb netcore 操作封装_mongodb 的基本函数语法封装
  9. JSP——计算圆形和矩形的面积
  10. 使用 ArcGIS Pro 对一幅没有空间参考的老照片进行配准