当前位置:   article > 正文

Ubuntu 18.04 20.04 在 ROS 1 下安装 Cartographer 和 Cartographer_ROS【方法与避坑~】_ubuntu查找cartographer

ubuntu查找cartographer


前言

环境版本:完全纯净的

Ubuntu 18.04 arm64 + ROS 1 Melodic

Ubuntu 20.04 arm64 + ROS 1 Noetic


一、安装 ROS

有了小鱼老师的一键安装ROS,真的是巨省事儿了。地址在这里,一行代码搞定~

链接: 小鱼的一键安装系列

二、安装依赖

sudo apt-get update
  • 1
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

Ubuntu 20.04 下补充一波依赖:

sudo apt-get install -y \
    clang \
    libcurl4-openssl-dev \
    lsb-release \
    stow
  • 1
  • 2
  • 3
  • 4
  • 5

最后,无论哪个系统,再补充 gmock、PCL 和 pcl_conversions 三个依赖,不然最后编译 cartographer_ros 时可能报错~

sudo apt install libgmock-dev
sudo 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

三、安装 Protobuf 3

1. 先卸载 ROS 自带的 Proto2 :

sudo apt-get remove libprotobuf-dev
which protoc
// 运行 which protoc 后会显示 protoc 所在的路径
rm /usr/local/bin/protoc
// remove的具体路径以 which protoc 显示的为准,也有可能是usr/bin/protoc 

// 至此,低版本的 Protobuf 卸载完成。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2. 安装 Protobuf 3.6.0

(1) 克隆源码:

git clone -b v3.6.0 https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
// 该命令克隆 Protobuf 的子模块,这句话很必要,否则后面有的你报错咯
  • 1
  • 2
  • 3
  • 4

(2) 编译与安装:

完成上面的代码后,现在应该是已经在 protobuf 目录之中了。接下来:

./autogen.sh
./configure
make
make check
sudo make install
sudo ldconfig
protoc --version
// 此时若能输出 Protobuf 版本信息则表示安装成功
which protoc
// 查看 Protobuf 的安装位置,其默认下载位置为 /usr/local/bin/protoc 。但 cartographer 搜索 protoc 的路径为 /usr/bin/protoc,因此我们这里直接copy过去~
sudo cp /usr/local/bin/protoc /usr/bin
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

四、创建并配置一个 ROS 工作空间

在自己希望的地方建立工作空间文件夹,这里我命名为 carto_ws。进入 carto_ws 路径,并再创建src文件夹。

mkdir carto_ws
cd carto_ws
mkdir src
  • 1
  • 2
  • 3

回到工作空间路径,并编译:

cd ~/carto_ws
catkin_make
  • 1
  • 2

回到根目录下,并 source 编译好的 devel 文件夹下的 setup.bash 文件:

cd
source ~/carto_ws/devel/setup.bash
gedit ~/.bashrc
  • 1
  • 2
  • 3

在打开的 .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.0
mkdir build
cd build
cmake ..
make
make test
sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

六、安装、编译 Cartographer 及其依赖 Abseil

首先进入希望存放 Cartographer 的目录,我这里同样是放在了与工作空间平行的位置。

git clone https://github.com/cartographer-project/cartographer.git
cd cartographer
sudo gedit package.xml
  • 1
  • 2
  • 3

删除 package.xml 文件中的这一行:

<depend>libabsl-dev</depend>
  • 1

继续运行:

cd scripts
./install_abseil.sh
  • 1
  • 2

配置 rosdep:
这里也建议用小鱼老师的一键配置 rosdepc,方法与上面一键安装一样,输入鱼香ROS一键安装命令后选择 [3] 即可。

再运行:

rosdepc update
  • 1

→→→ Ubuntu 18.04 安装的 ROS1 版本应该是 Melodic,因此命令为:

cd carto_ws
rosdep install --from-paths src --ignore-src --rosdistro=melodic -y
// 如果不按上面的先删除代码再运行脚本安装 abseil 的话,本步可能会报 "cartographer: [libabsl-dev] defined as “not available“ for OS version [bionic]"错误
  • 1
  • 2
  • 3

→→→ Ubuntu 20.04 安装的 ROS1 版本应该是 Noetic,因此命令为:

cd carto_ws
rosdep install --from-paths src --ignore-src --rosdistro=noetic -y
  • 1
  • 2

运行后应显示:#All required rosdeps installed successfully

接下来编译 Cartographer:

cd cartographer
mkdir build
cd build
cmake .. 
make
// 如果 Ceres Solver 用的是最新版本,则此处 make 大概率会花式 (literally~) 报各种错误
make test
sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

七、编译 cartographer_ros

!!! 注意,在 arm64 架构处理器下,catkin_make 会报"危险的重寻址,不支持的重定位" “recompile with -fPIC dangerous relocation: unsupported relocation” 错误。解决方案是在 abseil 包中添加 fPIC 编译选项。
找到刚才安装的 abseil 目录 abseil-cpp,在其中的 CMakeList.txt 文件的前部添加代码:

add_compile_options(-fPIC)
  • 1

然后继续,进入刚刚创建的 ROS 工作空间的 src 文件夹中,克隆代码并编译工作空间:

cd ~/carto_ws/src
git clone https://github.com/cartographer-project/cartographer_ros.git
cd ~/carto_ws
catkin_make
  • 1
  • 2
  • 3
  • 4

The End~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/557947
推荐阅读
相关标签
  

闽ICP备14008679号