赞
踩
环境版本:完全纯净的
Ubuntu 18.04 arm64 + ROS 1 Melodic
或
Ubuntu 20.04 arm64 + ROS 1 Noetic
有了小鱼老师的一键安装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-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
sudo apt-get remove libprotobuf-dev
which protoc
// 运行 which protoc 后会显示 protoc 所在的路径
rm /usr/local/bin/protoc
// remove的具体路径以 which protoc 显示的为准,也有可能是usr/bin/protoc
// 至此,低版本的 Protobuf 卸载完成。
git clone -b v3.6.0 https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
// 该命令克隆 Protobuf 的子模块,这句话很必要,否则后面有的你报错咯
完成上面的代码后,现在应该是已经在 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
在自己希望的地方建立工作空间文件夹,这里我命名为 carto_ws。进入 carto_ws 路径,并再创建src文件夹。
mkdir carto_ws
cd carto_ws
mkdir src
回到工作空间路径,并编译:
cd ~/carto_ws
catkin_make
回到根目录下,并 source 编译好的 devel 文件夹下的 setup.bash 文件:
cd
source ~/carto_ws/devel/setup.bash
gedit ~/.bashrc
在打开的 .bashrc 文件最后的 “source /opt/ros/noetic/setup.bash” 语句后加入刚才的 "source ~/carto_ws/devel/setup.bash"语句,如图。
完成~
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
首先进入希望存放 Cartographer 的目录,我这里同样是放在了与工作空间平行的位置。
git clone https://github.com/cartographer-project/cartographer.git
cd cartographer
sudo 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_ws
rosdep 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_ws
rosdep install --from-paths src --ignore-src --rosdistro=noetic -y
运行后应显示:#All required rosdeps installed successfully
接下来编译 Cartographer:
cd cartographer
mkdir build
cd build
cmake ..
make
// 如果 Ceres Solver 用的是最新版本,则此处 make 大概率会花式 (literally~) 报各种错误
make test
sudo make install
!!! 注意,在 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/src
git clone https://github.com/cartographer-project/cartographer_ros.git
cd ~/carto_ws
catkin_make
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。