文章目录
前言一、安装 ROS二、安装依赖三、安装 Protobuf 31. 先卸载 ROS 自带的 Proto2 :2. 安装 Protobuf 3.6.0(1) 克隆源码:(2) 编译与安装: 四、创建并配置一个 ROS 工作空间五、安装 Ceres Solver六、安装、编译 Cartographer 及其依赖 Abseil七、编译 cartographer_rosThe End~
前言
环境版本:完全纯净的
Ubuntu 18.04 arm64 + ROS 1 Melodic
或
Ubuntu 20.04 arm64 + ROS 1 Noetic
一、安装 ROS
有了小鱼老师的一键安装ROS,真的是巨省事儿了。地址在这里,一行代码搞定~
链接: 小鱼的一键安装系列
二、安装依赖
sudo apt-get update
sudo apt-get install -y \ cmake \ g++ \ git \ google-mock \ libboost-all-dev \ libcairo2-dev \ libeigen3-dev \ libgflags-dev \ libgoogle-glog-dev \ liblua5.2-dev \ libsuitesparse-dev \ libwebp-dev \ ninja-build \ protobuf-compiler \ python-sphinx
Ubuntu 20.04 下补充一波依赖:
sudo apt-get install -y \ clang \ libcurl4-openssl-dev \ lsb-release \ stow
最后,无论哪个系统,再补充 gmock、PCL 和 pcl_conversions 三个依赖,不然最后编译 cartographer_ros 时可能报错~
sudo apt install libgmock-devsudo apt install libpcl-dev// Ubuntu 18.04 + ROS 1 Melodic 执行如下命令:sudo apt-get install ros-melodic-pcl-conversions// Ubuntu 20.04 + ROS 1 Noetic 执行如下命令:sudo apt-get install ros-noetic-pcl-conversions
三、安装 Protobuf 3
1. 先卸载 ROS 自带的 Proto2 :
sudo apt-get remove libprotobuf-devwhich protoc// 运行 which protoc 后会显示 protoc 所在的路径rm /usr/local/bin/protoc// remove的具体路径以 which protoc 显示的为准,也有可能是usr/bin/protoc // 至此,低版本的 Protobuf 卸载完成。
2. 安装 Protobuf 3.6.0
(1) 克隆源码:
git clone -b v3.6.0 https://github.com/protocolbuffers/protobuf.gitcd protobufgit submodule update --init --recursive// 该命令克隆 Protobuf 的子模块,这句话很必要,否则后面有的你报错咯
(2) 编译与安装:
完成上面的代码后,现在应该是已经在 protobuf 目录之中了。接下来:
./autogen.sh./configuremakemake checksudo make installsudo ldconfigprotoc --version// 此时若能输出 Protobuf 版本信息则表示安装成功which protoc// 查看 Protobuf 的安装位置,其默认下载位置为 /usr/local/bin/protoc 。但 cartographer 搜索 protoc 的路径为 /usr/bin/protoc,因此我们这里直接copy过去~sudo cp /usr/local/bin/protoc /usr/bin
四、创建并配置一个 ROS 工作空间
在自己希望的地方建立工作空间文件夹,这里我命名为 carto_ws。进入 carto_ws 路径,并再创建src文件夹。
mkdir carto_wscd carto_wsmkdir src
回到工作空间路径,并编译:
cd ~/carto_wscatkin_make
回到根目录下,并 source 编译好的 devel 文件夹下的 setup.bash 文件:
cdsource ~/carto_ws/devel/setup.bashgedit ~/.bashrc
在打开的 .bashrc 文件最后的 “source /opt/ros/noetic/setup.bash” 语句后加入刚才的 "source ~/carto_ws/devel/setup.bash"语句,如图。
完成~
五、安装 Ceres Solver
Ceres Solver 是 Cartographer 的重要依赖,但注意新版的 Ceres 安装后会导致 Cartographer 编译报错,这里建议使用 1.13.0 版本:
从以下链接下载 Ceres Solver 1.13.0:
链接: https://codeload.github.com/ceres-solver/ceres-solver/tar.gz/refs/tags/1.13.0
下载后将文件夹移至希望存放的目录下,我这里是放在了与工作空间平行的位置:
接下来编译 Ceres Solver:
cd ceres-solver-1.13.0mkdir buildcd buildcmake ..makemake testsudo make install
六、安装、编译 Cartographer 及其依赖 Abseil
首先进入希望存放 Cartographer 的目录,我这里同样是放在了与工作空间平行的位置。
git clone https://github.com/cartographer-project/cartographer.gitcd cartographersudo gedit package.xml
删除 package.xml 文件中的这一行:
<depend>libabsl-dev</depend>
继续运行:
cd scripts./install_abseil.sh
配置 rosdep:
这里也建议用小鱼老师的一键配置 rosdepc,方法与上面一键安装一样,输入鱼香ROS一键安装命令后选择 [3] 即可。
再运行:
rosdepc update
→→→ Ubuntu 18.04 安装的 ROS1 版本应该是 Melodic,因此命令为:
cd carto_wsrosdep install --from-paths src --ignore-src --rosdistro=melodic -y// 如果不按上面的先删除代码再运行脚本安装 abseil 的话,本步可能会报 "cartographer: [libabsl-dev] defined as “not available“ for OS version [bionic]"错误
→→→ Ubuntu 20.04 安装的 ROS1 版本应该是 Noetic,因此命令为:
cd carto_wsrosdep install --from-paths src --ignore-src --rosdistro=noetic -y
运行后应显示:#All required rosdeps installed successfully
接下来编译 Cartographer:
cd cartographermkdir buildcd buildcmake .. make// 如果 Ceres Solver 用的是最新版本,则此处 make 大概率会花式 (literally~) 报各种错误make testsudo make install
七、编译 cartographer_ros
!!! 注意,在 arm64 架构处理器下,catkin_make 会报"危险的重寻址,不支持的重定位" “recompile with -fPIC dangerous relocation: unsupported relocation” 错误。解决方案是在 abseil 包中添加 fPIC 编译选项。
找到刚才安装的 abseil 目录 abseil-cpp,在其中的 CMakeList.txt 文件的前部添加代码:
add_compile_options(-fPIC)
然后继续,进入刚刚创建的 ROS 工作空间的 src 文件夹中,克隆代码并编译工作空间:
cd ~/carto_ws/srcgit clone https://github.com/cartographer-project/cartographer_ros.gitcd ~/carto_wscatkin_make