当前位置: 首页 > news >正文

Cartographer安装测试与模块开发(一)--Ubuntu20.04下Cartographer安装与Demo测试

前言

Cartographer这个算法断断续续用过好多次了,每一次想记录一下使用文档都因为周期原因没有完成,这次借助开发重定位功能模块来记录一下,因为是完成了重定位功能后回过头来再记录整个过程的,可能在某些地方存在小问题和疏漏。

前期我使用的实车测试比较多,但是这次Cartographer的开发采用的Gazebo仿真来实现的,因为第一次使用仿真也是遇到很多坑和奇奇怪怪的Bug,后文随时间线一一介绍。

整体上的内容大概是这么几步:

一、Cartographer的安装测试

二、Gazebo的仿真环境搭建

三、Cartographer的基于仿真环境的建图

四、重定位方法的简单介绍

由于很多内容是完成之后写了,很多bug和故障可能没有对应的附图了,我尽量贴一些很像的故障图,毕竟实在是不想再把故障复现再来贴图了,因此文本量肯定要大于含图量了(懂,文字多的又没有图片的文章是真不想看下去)

Cartographer的安装

好,接下来正式进入安装,安装前先碎碎念几句,因为安装过程中,每个人用的Ubuntu版本、下载的Cartographer的版本、安装的是官方还是第三方重制等等因素都有可能有差异,所以根据某一个教程安装都有失败的可能。

安装过程参考的文章是:2024.4成功!20.04安装cartographer_ubuntu20.04 安装cartograhper-CSDN博客

因此这里介绍的是基于Ubuntu20.04,安装官方Cartographer2.0.0

版本号我看的是src/cartographer/package.xml文件,里面有一段:

<package format="3"><name>cartographer</name><version>2.0.0</version><description>Cartographer is a system that provides real-time simultaneous localizationand mapping (SLAM) in 2D and 3D across multiple platforms and sensorconfigurations.</description>

安装前声明一点,基本上纯净系统(指新安装的ubuntu系统)对照着安装都没问题,如果已经是用过很久的系统,因为里面的很多内容安装卸载等原因可能会导致某些环节出错,那种情况就只能对症分析了。

安装这个之前可以用小鱼一键安装ROS先把ROS安装好,确实好用。

wget http://fishros.com/install -O fishros && . fishros
1、先把基础依赖安装好:
apt-get install -y build-essential protobuf-compiler clang cmake g++ git google-mock libboost-all-dev libcairo2-dev libcurl4-openssl-dev libeigen3-dev libgflags-dev libgoogle-glog-dev liblua5.2-dev libsuitesparse-dev lsb-release ninja-build stow  python3-sphinx libgmock-dev libmetis-dev libceres-dev
2、安装辅助工具:
sudo apt-get update
sudo apt-get install -y python3-wstool python3-rosdep ninja-build stow
3、下载Cartographer和对应ROS接口包
mkdir carto_ws  
cd carto_ws
wstool init srcwstool merge -t src https://raw.githubusercontent.com/cartographer-project/cartographer_ros/master/cartographer_ros.rosinstallwstool update -t src

这一步大概率会遇到报错,类似于time out之类的错误,不要慌,读一读报错信息,通常情况都是网络原因导致超时报错,可以科学上网下载一下,当然觉得Ubuntu科学上网比较麻烦可以多试几次,总有成功的时候。

很多教程会有一步安装Ceres-solver,之前屡屡翻车都在这一步,要么安装不上要么安装上编译报错,但20.04貌似不需要操心,确实不安装也可以运行。

这一步执行后,src文件下会出现cartographer和cartographer_ros两个文件夹

4、rosdep
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${noetic} -y

如果用小鱼一键安装的ROS这里应该问题不大。

如果遇到:ERROR: the following packages/stacks could not have their rosdep keys resolved to system dependencies: cartographer: [libabsl-dev] defined as "not available"

把src/cartographer中的package.xml 文件中,第46行<depend>libabsl-dev</depend>删掉。

执行:

rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
5、abseil安装

20.04自带protbuf,可以用protbuf version查看一下,没问题在工作空间下执行:

src/cartographer/scripts/install_abseil.sh

仍然需要科学上网,或者多试几次。

//一般新系统不用执行这个命令,如果不确定系统abseil会不会冲突,执行:
sudo apt-get remove ros-${ROS_DISTRO}-abseil-cpp
//如果出现E: Unable to locate package ros-noetic-abseil-cpp
//就是没有冲突,继续下一步就行。
//没有报错就是原本有冲突,执行后上述命令就不冲突了
6、编译

执行:

//以后修改源码也要使用这个编译,不要使用catkin_make编译
catkin_make_isolated --install --use-ninja

至此程序基本安装完毕,工作空间目录结构应该是这样的:

.
├── abseil-cpp
├── build_isolated
├── devel_isolated
├── install_isolated
└── src
7、测试Demo

接下来为了图个流程完整可以跑一下官方Demo:

//下载数据集
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag//工作空间下执行sourece,或者直接将其写入bashrc
source devel_isolated/setup.bash//运行Demo
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=存放路径/cartographer_paper_deutsches_museum.bag

如果下载比较困难可以去网上搜一下,很多人将这个数据包上传到了网盘可以从别的途径下载。

需要注意这个数据包的小细节以后可能用得到:

path:         cartographer_paper_deutsches_museum.bag
version:      2.0
duration:     31:52s (1912s)
start:        May 26 2015 21:30:16.48 (1432647016.48)
end:          May 26 2015 22:02:09.46 (1432648929.46)
size:         470.5 MB
messages:     617965
compression:  bz2 [3334/3334 chunks; 18.31%]
uncompressed:   2.5 GB @   1.3 MB/s
compressed:   462.3 MB @ 247.5 KB/s (18.31%)
types:        sensor_msgs/Imu                [6a62c6daae103f4ff57a132d6f95cec2]sensor_msgs/MultiEchoLaserScan [6fefb0c6da89d7c8abe4b339f5c2f8fb]
topics:       horizontal_laser_2d    70358 msgs    : sensor_msgs/MultiEchoLaserScanimu                   478244 msgs    : sensor_msgs/Imu               vertical_laser_2d      69363 msgs    : sensor_msgs/MultiEchoLaserScan

首先是数据包用了压缩,使用bz2方式压缩后的体积减小还是非常夸张的,如果以后需要经常有录制rosbag调试的需求可以尝试一下rosbag compress功能。

其次该数据包录制的雷达话题消息格式为sensor_msgs/MultiEchoLaserScan。目前cartographer的应用场景下可能还是LaserScan的消息类型多一些,而且数据包不含Odom数据以及对应TF。因此在后文使用Gazebo仿真过程中,这些接口参数时一定要改的,不改一定会出问题。

http://www.dtcms.com/a/296213.html

相关文章:

  • SELinux策略定制于VPS服务器安全加固的配置方法
  • 离线进行apt安装的过程(在只能本地传输的ubuntu主机上使用apt安装)
  • 【Web APIs】JavaScript 节点操作 ⑧ ( 删除节点 - removeChild 函数 | 删除节点 - 代码示例 | 删除网页评论案例 )
  • 网站域名修改以及后续DNS配置
  • Java泛型初始化ArrayList<String>()和ArrayList<>()的区别
  • Vue3实现视频播放弹窗组件,支持全屏播放,音量控制,进度条自定义样式,适配浏览器小窗播放,视频大小自适配,缓冲loading,代码复制即用
  • C++面试8——虚函数表(vtable)
  • 【华为】笔试真题训练_20250611
  • uni-app支付宝小程序样式穿透失效
  • 森马联合新华社推出纪实短片《蹲下来试试》,以“蹲”演绎「森柔牛仔」柔韧体验
  • Android Telephony UrspRule 介绍
  • Windows上用于跨平台开发的环境工具
  • 普通三方App一般只能使用安卓原生Framework提供的公开接口
  • 螺杆支撑座安装后如何检验它的稳定性?
  • 力扣面试150题--在排序数组中查找元素的第一个和最后一个位置
  • Java中的静态变量是在“堆“还是“方法区“?
  • 无人机微型风速风向仪:翱翔天际的 “风之侦探”
  • GISBox实操指南:如何将IFC文件高效转换为3DTiles格式‌‌
  • docker及docker-compose离线安装包下载
  • Java中的抽象类 abstract 关键字
  • 第一节:认识大模型微调
  • S7-1500 与 ET200MP 的组态控制通信(Configuration Control)功能实现详解(上)
  • 【论文|复现】YOLOFuse:面向多模态目标检测的双流融合框架
  • IROS-2025 | OIKG:基于观察-图交互与关键细节引导的视觉语言导航
  • 疯狂星期四第17天运营日记
  • 手写DQN (FrozenLake环境)
  • 飞牛系统安装DataEase自定义Docker包
  • 医疗行业新变革:AR 培训系统助力手术培训精准高效​
  • 大模型回复数据标注优化方案
  • STM32-FSMC