ubuntu20.04(ROS noetic版)安装cartographer
前言:
博主在做完二轮差速移动机器人的仿真后,想着可不可以把之前的slam绘图技能弄回来,于是便开始安装起了cartographer,其实之前安装的时候感觉没有这么多问题,主要还是环境问题导致的,所以写这片文章来记录一下。
其实,要我推荐的话,我觉得这几篇文章写的安装教程是比较全面的。
思岚激光雷达+cartographer建图_思岚a1与cartographer-CSDN博客文章浏览阅读5.8k次,点赞7次,收藏99次。思岚+cartographer_思岚a1与cartographerhttps://blog.csdn.net/shsh0810/article/details/122360539?spm=1001.2014.3001.5506Cartographer(1)源码安装,rosdep问题解决_cartographer: [libabsl-dev] defined as "not availa-CSDN博客文章浏览阅读6.5k次,点赞28次,收藏159次。cartographer完美安装,rosdep问题解决两个思路(好用),官方demo验证,依赖问题解决……全在这里呀_cartographer: [libabsl-dev] defined as "not available" for os version [bioni
https://blog.csdn.net/qq_46274948/article/details/126889695?spm=1001.2014.3001.550620.04/cartographer源码保姆级教程(全是坑已经踩完,太折磨了)_cartographer安装教程保姆级-CSDN博客文章浏览阅读4.8k次,点赞58次,收藏74次。源码安装编译cartographer_cartographer安装教程保姆级
https://blog.csdn.net/qq_53004665/article/details/142057918?spm=1001.2014.3001.5506 但是,最经典的还得是官方教程。
Compiling Cartographer ROS — Cartographer ROS documentationhttps://google-cartographer-ros.readthedocs.io/en/latest/compilation.html#building-installation
正文:
其实前言介绍的已经很多了,跟着上面的文章也可以编译并且安装好cartographer,但是,为了记录和分享我的心路历程,我还是写一下我的安装步骤。
一、ros安装
如果,你的系统是才新装的系统,还没有安装ros的话,那么就需要你安装下对应的ros,这个在我的博文Ubuntu下基于ROS开发QT人机交互界面和PCL点云处理软件_ros qt-CSDN博客文章浏览阅读4k次,点赞42次,收藏108次。仁兄加油吧,活到老,学到老。持续关注博主,将会更新PCL的滤波、平滑、拟合(贪婪三角化)等点云操作方法。_ros qthttps://blog.csdn.net/qq_60640693/article/details/134811948?spm=1001.2014.3001.5502的第一个模块有详细介绍以及一键安装的脚本。
二、依赖安装
按照官网的来的话,我们主要是安装以下这些依赖
sudo apt-get update
sudo apt-get install -y python3-wstool python3-rosdep ninja-build stow
当然,我建议检查一下上面有些博主说的其他依赖有没有,没有的话最好也安装好(创建一个脚本来运行下面的代码)。这一步不做影响也不大。
#!/bin/bash# 需要检查的依赖列表
dependencies=(cmakeg++gitgoogle-mocklibboost-all-devlibcairo2-devlibeigen3-devlibgflags-devlibgoogle-glog-devliblua5.2-devlibsuitesparse-devlibwebp-devninja-build
)# 存储未安装的依赖项
missing_deps=()# 检查每个依赖是否已安装
for dep in "${dependencies[@]}"; doif ! dpkg -s "$dep" &> /dev/null; thenmissing_deps+=("$dep")echo "未安装: $dep"elseecho "已安装: $dep"fi
done# 如果有未安装的依赖项则安装
if [ ${#missing_deps[@]} -gt 0 ]; thenecho -e "\n以下依赖未安装,正在安装..."sudo apt-get updatesudo apt-get install -y "${missing_deps[@]}"
elseecho -e "\n所有依赖已安装!"
fi
但是,这里有一个坑需要注意下,ubuntu20.04安装的protobuf库默认是3.6.x版本的,但我担心大家的情况不一,所以,需要查一下自己的版本。这个重要
protoc --version
如果是3.6.x(我这里就是libprotoc 3.6.1) 其实就没问题,因为20.04的cartographer需要3.6.x的版本的。但是,你不是这个,比如你是3.4.1,那么就需要你升级下了,这个我刚好在上片博文的 编译异常处理 下的 第2点 有说到解决办法。
ROS下gazebo仿真夹爪抖动问题_ros gazebo 夹爪仿真-CSDN博客文章浏览阅读694次,点赞12次,收藏14次。其实,发散下思维我们可以看到,这个libroboticsgroup_upatras_gazebo_mimic_joint_plugin.so和libroboticsgroup_upatras_gazebo_disable_link_plugin.so 目前是位于 你的工作空间/devel/lib 下的 也就是说 你不在该工作空间下或者不刷新环境 肯定就使用不到他的功能了;所以,我们把它们放到ros的主环境下,那么就可以像gazebo_ros_control一样使用了。_ros gazebo 夹爪仿真https://blog.csdn.net/qq_60640693/article/details/145774149?spm=1001.2014.3001.5502
三、创建工作空间
接下来,就是创建工作空间,下载源码和配置了。
mkdir catkin_ws
cd catkin_ws
wstool init src
wstool merge -t src https://raw.githubusercontent.com/cartographer-project/cartographer_ros/master/cartographer_ros.rosinstall
wstool update -t src
源码下载完毕后,src下就有了cartographer和cartographer_ros两个包了。然后,我们就可以运行下面的命令来安装他们的依赖包了。
这里用 1 的话大多数同学的网络环境都会报错,所以我推荐用小鱼的rosdepc命令(2),关于这个的安装,我在上面的ros安装里推荐的博文中有写。
1、
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
2、
sudo rosdepc init
rosdepc update
rosdepc install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
报错:
你发现无论是1还是2都会报:
ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
cartographer: [libabsl-dev] defined as "not available" for OS version [focal]
所以我们需要打开 cartographer包里面的package.xml文件将46行屏蔽掉,再运行就不会报错了。
所有依赖安装完成后会提示
#All required rosdeps installed successfully
现在,你的工作空间已经配置完成了。
四、安装abseil-cpp
按照官网教程来就好了,不过建议你先卸载自带的abseil-cpp,避免版本冲突。
sudo apt-get remove ros-${ROS_DISTRO}-abseil-cpp
进入cartographer包下的scripts目录,执行
./install_abseil.sh
保证网络环境下,这个脚本便会下载abseil-cpp并编译到系统环境中去,如果你这个在终端一直不能git下来的话,那么你就自己去脚本中的链接下载,下载下来后改为abseil-cpp名字放到这个脚本目录下,然后把脚本的下载git clone https://github.com/abseil/abseil-cpp.git命令用#屏蔽掉再执行脚本就好了。
五、编译cartographer
做完上述一切,就可以开始编译我们的工作空间了。回到工作空间目录下,执行:
catkin_make_isolated --install --use-ninja
一般来说,编译后运行demo就没有什么大问题,不过博主的情况比较复杂,所以,我在这里提前说一下。
由于,我的环境中安装了pcl1.13的库,而cartographer在ubuntu20.04上需要的是pcl1.10,我编译通过了是没有多大问题的,不过再运行时会报下面的错: 然后,我用
ldd devel_isolated/cartographer_ros/lib/cartographer_ros/* | grep pcl
看了一下,我编译的cartographer链接的pcl动态库,发现都是1.13版本的。
解决办法,进入cartographer_ros下的cartographer_ros包,打开CMakeLists.txt可以看到45行的find_package(PCL REQUIRED COMPONENTS common),我们把他修改为
set(PCL_DIR "/usr/lib/x86_64-linux-gnu/cmake/pcl")
find_package(PCL 1.10 REQUIRED)
然后,再清除工作空间下除了src的所有内容,再执行上面的编译命令,就好了。
六、运行demo
我们下载官方提供的demo数据集,然后再运行开始画图。
# 下载数据集
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag# 进入你的工作空间 刷新环境
source devel_isolated/setup.bash
# 开始画图
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
画图,得到这样的效果。
结语:
网上教程千奇百怪,还得是官方教程最为客观。不过,这次我重装了太多次系统才发现,最干净的系统做安装测试最为合适,其实就是我的pcl版本问题,不然的话早就成功了,唉...所以说,诸位仁兄,还得学习,还得不断尝试。哈哈哈...