期末考试终于结束了,好开心啊,终于可以搬小板凳安心更新好文了,原谅前面几篇有点水,Vins-mono
也基本快看完了,激光SLAM
该起程了.
说起激光SLAM,这算是起步比较早的SLAM系统,目前市面常用的就是:
loam系列
cartographer
其他
loam算是比较稳定、问世早、鲁棒性较好的大哥大,长期雄霸各大榜首,基于它的优化改动版也很多,比如Lego-loam等.
cartographer是谷歌开源的2D/3D激光SLAM系统,实现低计算资源消耗,其代码实现也是非常值得学习的.
关于loam安装请参考:
Lidar SLAM系列 | LeGO-LOAM调试
这次以谷歌cartographer为例安装
依赖
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
ros--tf2-eigen
关于protobuf3
,在源码里面,谷歌官方写了一个sh文件进行安装,但是这样安装可能有问题,采用apt方式进行安装protobuf3
更简单.
附上源码编译:
git clone https://github.com/google/protobuf.git
cd protobuf
git checkout v3.6.1
mkdir build
cd build
cmake \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_BUILD_TYPE=Release \
-Dprotobuf_BUILD_TESTS=OFF \
../cmake
make -j4
sudo make install
Abseil安装
Abseil是Google 开源的C++ 基础库
git clone https://github.com/abseil/abseil-cpp.git
cd abseil-cpp
mldir build && cd build
cmake .. -DBUILD_SHARED_LIBS=ON
sudo make
sudo make install
ceres-solver
git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver
mkdir build
cd build
cmake ..
sudo make -j4
sudo make install
重头戏来了
源码编译
官方版
sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build
mkdir catkin_ws
cd catkin_ws
wstool init src
wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall
wstool update -t src
src/cartographer/scripts/install_proto3.sh
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
## Build and install.
catkin_make_isolated --install --use-ninja
民间版:
sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build
#新建cartographer_ws工作站
cd cartographer_ws
mkdir src && cd src
git clone https://github.com/googlecartographer/cartographer.git
git clone https://github.com/googlecartographer/cartographer_ros.git
#进入你的cartographer目录
cd cartographer_ws
# Install proto3.
src/cartographer/scripts/install_proto3.sh
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
# Build and install.这一步会花费很长的时间
catkin_make_isolated --install --use-ninja
source install_isolated/setup.bash
本人使用的是第二种,安装成功.
就这?还有个雷 !
×××× ××××
Abseil问题
CMakeList.txt
文件修改
find_package(Abseil REQUIRED) --> find_package(absl REQUIRED)
CMakeList.txt 第2处:#默认的库文件是 standalone_absltarget_link_libraries(${PROJECT_NAME} PUBLIC ${PROTOBUF_LIBRARY}
absl::base
absl::synchronization
absl::strings
absl::flat_hash_map
absl::numeric
absl::flags)
cartographer-config.cmake.in
修改
find_package(Abseil ${QUIET_OR_REQUIRED_OPTION}) Abseil 改为 absl
上述文件均在cartographer
里面,cartographer_ros
和cartographer_rviz
的CMakeList.txt
修改如下
find_package(Abseil REQUIRED) 改为 find_package(absl REQUIRED)
show Time
官方提供了一些数据集
Deutsches Museum(德意志博物馆)
2D数据集
文件大小400+MB
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
3D数据集
文件大小为几G
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/with_intensities/b3-2016-04-05-14-14-00.bag
roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag
纯定位模式
2D数据集
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/b2-2016-04-05-14-44-52.bag
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/b2-2016-04-27-12-31-41.bag
运行
roslaunch cartographer_ros offline_backpack_2d.launch bag_filenames:=${HOME}/Downloads/b2-2016-04-05-14-44-52.bag
roslaunch cartographer_ros demo_backpack_2d_localization.launch \
load_state_filename:=${HOME}/Downloads/b2-2016-04-05-14-44-52.bag.pbstream \
bag_filename:=${HOME}/Downloads/b2-2016-04-27-12-31-41.bag
第一行命令是生成地图,第二句运行重定位.load_state_filename
是第一个包生成的地图数据,地图格式是pbstream
bag_filename
是第二个离线包的名字.
3D数据集
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/b3-2016-04-05-13-54-42.bag
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/b3-2016-04-05-15-52-20.bag
## 运行
roslaunch cartographer_ros offline_backpack_3d.launch bag_filenames:=${HOME}/Downloads/b3-2016-04-05-13-54-42.bag
roslaunch cartographer_ros demo_backpack_3d_localization.launch \
load_state_filename:=${HOME}/Downloads/b3-2016-04-05-13-54-42.bag.pbstream \
bag_filename:=${HOME}/Downloads/b3-2016-04-05-15-52-20.bag
Static landmarks
该示例是静态路标,landmark是路标点,在VSLAM的一个重要作用就是实现快速定位.但是运行这个包有些问题.
先放上运行命令
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/mir/landmarks_demo_uncalibrated.bag
roslaunch cartographer_mir offline_mir_100_rviz.launch bag_filename:=${HOME}/Downloads/landmarks_demo_uncalibrated.bag
要想运行还需要在原先代码的基础上新安装一个包cartographer_mir
安装过程如下:
首先把cartographer_mir
下载到你的源码文件中:
cd cartographer_ws // 进入到你安装cartographer的工作空间
cd src
git clone https://github.com/googlecartographer/cartographer_mir.git
编译
catkin_make_isolated --install --use-ninja
source install_isolated/setup.bash
参考网友办法,这个demo要想运行成功需要改两个地方:
launch命令必须修改如下:
roslaunch cartographer_mir offline_mir_100_rviz.launch bag_filenames:=${HOME}/Downloads/landmarks_demo_uncalibrated.ba
其中bag_filename:=
修改为了bag_filenames:=
修改配置文件cartographer_mir/cartographer_mir/configuration_files/mir-100-mapping.lua
中的两个参数为:
use_pose_extrapolator = on
TRAJECTORY_BUILDER.collate_landmarks = on
Revo LDS
Revo是激光雷达,官方用它录了一个数据集
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/revo_lds/cartographer_paper_revo_lds.bag
roslaunch cartographer_ros demo_revo_lds.launch bag_filename:=${HOME}/Downloads/cartographer_paper_revo_lds.bag
PR2
PR2是一款人型机器人
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/pr2/2011-09-15-08-32-46.bag
roslaunch cartographer_ros demo_pr2.launch bag_filename:=${HOME}/Downloads/2011-09-15-08-32-46.bag
Taurob Tracker
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/taurob_tracker/taurob_tracker_simulation.bag
roslaunch cartographer_ros demo_taurob_tracker.launch bag_filename:=${HOME}/Downloads/taurob_tracker_simulation.bag
结束.....