目录
目前机器人使用中需要进行SLAM建图,因为移动机器人想要实现自主行走,核心在于实现自主定位导航,在自主定位导航技术中会涉及到定位、建图、路径规划等问题,而地图构建的好坏将直接影响机器人的行走路径。机器人想要到达某个目的地,需要和人类绘制地图一样,描述环境、认识环境的过程主要就是依靠地图。
而目前建图方式有激光雷达、视觉建图、还有深度学习等。今天介绍的cartographer就属于激光slam。主流的激光SLAM算法有hector、gmapping、karto、cartographer等。
cartographer
是google开发的实时室内SLAM项目,cartographer采用基于google自家开发的ceres非线性优化的方法,cartographer的亮点在于代码规范与工程化,非常适合于商业应用和再开发。并且cartographer基于submap子图构建全局地图的思想,能有效的避免建图过程中环境中移动物体的干扰。并且cartographer支持多传感器数据(odometry、IMU、LaserScan等)建图,支持2D_SLAM和3D_SLAM建图。
cartographer算法并没有给人惊艳的感觉,但该算法的主要目标是实现低计算资源消耗,达到实时SLAM的目的,所以很适合嵌入式端的使用。
这篇文章是介绍
cartographer在EHub_tx1_tx2_E100载板,TX1核心模块环境(Ubuntu18.04)
下进行源码下载进行demo测试的教程,本文的前提条件是你的
TX1
里已经安装了ROS版本:Melodic。
将cartographer_ws.tgz 拷贝到系统中,并切解压后,我已经将所有难下载的关联依赖包,全部下载打包到了一起,方便后续安装。
cartographer-ws-机器学习文档类资源-CSDN下载
可以到这个对应位置下载。
将文件拷贝到系统内后,开始安装支持包:
cd /home/nvidia/Workspace/cartographer_ws/src/cartographer/scripts
1.1 安装必要的依赖包
#安装ninja-build
sudo apt-get install -y ninja-build
#安装其它
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 \
libprotobuf-dev \
libsuitesparse-dev \
libwebp-dev \
ninja-build \
protobuf-compiler \
python-sphinx
#安装stow
sudo apt-get install -y stow
1.2 protobuf安装
#进入脚本目录
cd /home/nvidia/Workspace/cartographer_ws/src/cartographer/scripts
#脚本自动安装proto3
./install_proto3.sh
#查看版本验证
protoc --version
install_proto3.sh 内容
set -o errexit
set -o verbose
VERSION="v3.4.1"
# Build and install proto3.
#git clone https://github.com/google/protobuf.git
#git clone https://gitee.com/nfengjing/protobuf.git
cd protobuf
#cd protobuf-3.4.0
git checkout tags/${VERSION}
mkdir build
cd build
cmake -G Ninja \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_BUILD_TYPE=Release \
-Dprotobuf_BUILD_TESTS=OFF \
../cmake
ninja
sudo ninja install
等待编译安装结束,后验证
1.3 ceres 1.13.0安装
#进入脚本目录
cd /home/nvidia/Workspace/cartographer_ws/src/cartographer/scripts
#脚本自动化编译安装
./install_ceres.sh
等待编译结束
install_ceres.sh 内容
set -o errexit
set -o verbose
VERSION="1.13.0"
# Build and install Ceres.
#git clone https://ceres-solver.googlesource.com/ceres-solver
cd ceres-solver-1.13.0
#git checkout tags/${VERSION}
#mkdir build
cd build
cmake .. -G Ninja -DCXX11=ON
ninja
CTEST_OUTPUT_ON_FAILURE=1 ninja test
sudo ninja install
1.4 abseil 安装
cd /home/nvidia/Workspace/cartographer_ws/src/cartographer/scripts
#脚本自动化编译安装
./install_abseil.sh
install_abseil.sh 内容
set -o errexit
set -o verbose
#git clone https://github.com/abseil/abseil-cpp.git
cd abseil-cpp
#git checkout d902eb869bcfacc1bad14933ed9af4bed006d481
mkdir build
cd build
cmake -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local/stow/absl \
..
ninja
sudo ninja install
cd /usr/local/stow
sudo stow absl
1.5 carographer 安装
#进入工作目录
cd /home/nvidia/Workspace/cartographer_ws
#编译
catkin_make_isolated --install --use-ninja
#source
source install_isolated/setup.bash
编译结束。
特别的错误解决:
c++: internal compiler error: Segmentation fault (program cc1plus)
Please submit a full bug report
有时候系统编译一些程序会报上面的错误,但是未必是内存不足,也可能是系统默认stack 和打开文件句柄个数不足导致的
#查看系统本身设置限制参数
nvidia@nvidia-desktop:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 13930
max locked memory (kbytes, -l) 65536
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 1024
cpu time (seconds, -t) unlimited
max user processes (-u) 13930
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
修改open files 和stack size
sudo gedit /etc/security/limits.conf
增加
nvidia hard nofile 65535
nvidia soft nofile 65535
root hard nofile 65535
root soft nofile 65535
ubuntu hard nofile 65535
ubuntu soft nofile 65535
修改
ubuntu hard stack 2024
ubuntu soft stack 2024
nvidia hard stack 2024
nvidia soft stack 2024
保存退出,后需要重启系统生效
#重启
sudo reboot
#重启后查看配置
ulimit -a
nvidia@nvidia-desktop:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 13930
max locked memory (kbytes, -l) 65536
max memory size (kbytes, -m) unlimited
open files (-n) 65535
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 2024
cpu time (seconds, -t) unlimited
max user processes (-u) 13930
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
1.6 carographer 测试
测试推荐使用nomachine切换有桌面系统去验证。
cd /home/nvidia/Workspace/cartographer_ws
source install_isolated/setup.bash
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=/home/nvidia/Workspace/cartographer_ws/bags/cartographer_paper_deutsches_museum.bag