Google Cartographer安裝與測試(demo)
cartographer 二維/三維的數據接入:
2D:LIDAR、Odometry、IMU(可選)、GPS(尚且沒有實現)
3D:LIDAR、Odometry、IMU(必須)、GPS(已實現)
GPS在2d模式下,數據接入沒有問題,但是在全局優化的時候,沒有GPS的輸入。
2D模式的pose_graph.cc
void PoseGraph2D::AddFixedFramePoseData(
const int trajectory_id,
const sensor::FixedFramePoseData& fixed_frame_pose_data) {
LOG(FATAL) << "Not yet implemented for 2D.";
}
3D模式的pose_graph.cc
void PoseGraph3D::AddFixedFramePoseData(
const int trajectory_id,
const sensor::FixedFramePoseData& fixed_frame_pose_data) {
AddWorkItem([=]() LOCKS_EXCLUDED(mutex_) {
absl::MutexLock locker(&mutex_);
if (CanAddWorkItemModifying(trajectory_id)) {
optimization_problem_->AddFixedFramePoseData(trajectory_id,
fixed_frame_pose_data);
}
return WorkItem::Result::kDoNotRunOptimization;
});
}
準備工作
從github上下載最新版本的cartographer、cartographer_ros、ceres以及protobuf(3.0)四個文件(必須的)
note:直接在cartographer的scripts下運行install_ceres.sh,install_proto3.sh,會出現錯誤
1.安裝系列依賴
sudo apt-get install -y \
clang \
g++ \
git \
google-mock \
libboost-all-dev \
libcairo2-dev \
libcurl4-openssl-dev \
libeigen3-dev \
libgflags-dev \
libgoogle-glog-dev \
liblua5.2-dev \
libsuitesparse-dev \
ninja-build \
python-sphinx
2.編譯安裝Ceres
在從github中下載的ceres,解壓出來
mkdir build
cd build
cmake .. -G Ninja -DCXX11=ON
ninja
CTEST_OUTPUT_ON_FAILURE=1 ninja test
sudo ninja install
3.編譯安裝Protobuf
在從github中下載的Protobuf,解壓出來
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
4.編譯安裝Cartographer
mkdir build
cd build
cmake .. -G Ninja
ninja
CTEST_OUTPUT_ON_FAILURE=1 ninja test
sudo ninja install
5.編譯Cartographer_ros
1.新建工作空間Cartographer_catkin_ros/src,將cartographer_ros包拷貝至src目錄下。
2.cd …至Cartographer_catkin_ros下,運行:
catkin_make_isolated --install --use-ninja
至此,完成了cartographer所有編譯與安裝工作。
ps:在安裝編譯的過程中提示錯誤,一般是缺少依賴,通過sudo apt-get install 或sudo apt-get install ros-kinetic-即可快速安裝
6.運行Cartographer_ros,測試2D數據
6.1 第一種:demo_backpack_2d.launch
source devel/setup.bash
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME
}/2D_demo/cartographer_paper_deutsches_museum.bag
節點狀態圖如下:
經上述指令,即可出圖。
6.2 第二種:offline_backpack_2d.launch 離線模式
source devel/setup.bash
6.2.1 啓動開始建圖,生成.pbstream文件
roslaunch cartographer_ros offline_backpack_2d.launch bag_filenames:=${
HOME}/2D_demo/cartographer_paper_deutsches_museum.bag
大約一個小時左右,在數據目錄有cartographer_paper_deutsches_museum.bag.pbstream
6.2.2 提取地圖,將.pbstream轉爲柵格地圖輸出
roslaunch cartographer_ros assets_writer_ros_map.launch bag_filenames:=
${HOME}/2D_demo/cartographer_paper_deutsches_museum.bag pose_graph_filename:=${HOME}/2D_demo/cartographer_paper_deutsches_museum.bag.pbstream
會生成建立的地圖文件(包括pgm和yaml)文件。可以用map_server加載使用