cartographer安裝總結

安裝總結

看了下官方的安裝步驟,本以爲沒太多的依賴,結果還是趟了一路的坑。。。
先做下總結,說下安裝思路,在針對具體問題描述下解決辦法。

總結一

首先最大的坑來自Dockerfile,使用cartographer自帶的Dockerfile文件,經過番茄等一些列操作,下載鏡像還算順利,
但是在跑demo時遇到以下問題:

    1).docker中調用Rviz時, 存在GUI顯示服務的問題,這個問題的常規解法是用X11顯示服務

          ubuntu1604的做法是

           xhost +

           docker run -id --name cartographer_rosc -v /data/apollo_all/slam:/work -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY cartographer_ros:1.1

          Mac OS上的做法需要安裝   XQuartz ,詳情參考此連接

    2). 就算上面能夠解決docker GUI的問題,但在ubuntu上依然存在顯卡驅動問題,涉及到nvidia驅動,這個實在是太繁瑣,最後直接放棄了。

總之最終結論是建議繞過Dockerfile,直接安裝在ubuntu系統上。

總結二

完全可以先按照cartographer官方的文檔中的步驟進行編譯安裝,如果問題太多,總是編譯不過,再考慮我下面的思路。

protobuf與cartographer編譯版本不匹配,這個問題簡直頭疼死了,
要麼報google::protobuf的什麼函數未定義(例如, undefined reference to `google::protobuf::internal::ComputeUnknownFieldsSize),
要麼是xx未使用(error: ‘dynamic_init_dummy_src_2fproto_2fgrpc_2fcore_2fstats_2eproto’ defined but not used [-Werror=unused-variable),

對這個問題,沒有其他辦法,就是反覆的嘗試proto的不同版本+反覆編譯cartographer,
一定要用下面的方法確保protobuf完全安裝成功,要make check,
在每次重新編譯cartographer之前,一定要刪除原來編譯一半的文件夾。

總結三

如果官網的步驟通不過,那就按照自己的步驟安裝吧,

    1) 安裝Ros-kenitic,以及rosdep各種依賴,

    2) 單獨下載cartographer , cartographer_ros, 和ceres-solver 源碼

    3)安裝protobuf

    4) 手動編譯安裝ceres-solver, 參考 src/cartographer/script/install_ceres.sh

    5) 手動編譯安裝 cartographer,參考src/cartographer/script/install_cartographer_cmake.sh

    6)最後在catkin_ws的工作目錄下,直行catkin_make_isolated --install --use-ninja, 建立完整的工作環境

然後就可以用了^^~

source install_isolated/setup.bash
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=/data/apollo_all/slam/ros_bag/2d/cartographer_paper_deutsches_museum.bag

以下是我在Ubuntu16.04上的安裝詳情:

安裝Ros-Kenitic

本步驟中參考ros的官方指導安裝即可,

遇到的坑:

    1)找不到某個ros-*包的問題, 

         需要更新ros的源, 亞洲源 + deb源 ,這兩個源也都來自官方的參考說明

先離線下載源碼

官方提供的下載方式是用rosinstall file,但是裏面ceres的git地址要科學上網,可以自己把三部分源碼下到 src

裏就好。

https://github.com/googlecartographer/cartographer
https://github.com/googlecartographer/cartographer_ros
https://github.com/ceres-solver/ceres-solver

下載後都是最新的,也不用 wstool update -t src 這條了

安裝Protobuf

protobuf-master
git clone https://github.com/protocolbuffers/protobuf.git
$ cd protobuf
$ git submodule update --init --recursive
$ ./autogen.sh
$ ./configure --disable-werror  #這個選項需要帶着防止gtest報錯
$ make
$ make check
$ sudo make install
$ sudo ldconfig # refresh shared library cache.

坑:

1)error: ‘dynamic_init_dummy_src_2fproto_2fgrpc_2fcore_2fstats_2eproto’ defined but not used [-Werror=unused-variable

                 ./configure --disable-werror 解決此問題
2)編譯cartographer時,遇到 undefined reference to `google::protobuf::internal::ComputeUnknownFieldsSize)  
或類似的報錯
 反覆編譯protobuf 和cartorgrapher,一定要注意編譯的順序,還有刪除所有沒有編譯完成的文件夾。

安裝其他cartorgrapher相關的包

只要上面的準備工作做好了,剩下的就按cartographer照官網的步驟安裝即可

sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y

附圖如下

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章