一、Cartographer編譯
cartographer依賴的大型第三方庫很少,編譯時基本沒有依賴項問題,基本按照官方文檔的步驟來,略作修改。使用的環境是Ubuntu16.04+ROS Kinetic
1.先裝好wstool、rosdep、ninja
sudo apt-get install -y python-wstool python-rosdep ninja-build
2.建工作空間
mkdir catkin_ws
cd catkin_ws
用wstool初始化一下
wstool init src
(不知道這種初始化方式和catkin_init_workspace有什么區別)
3.下載cartographer、cartographer_ros、ceres源碼
官方提供的下載方式是用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 這條了。
4.裝proto3
protobuf是谷歌的開源序列化框架(現在還不懂這是干什么的。。。)
catkin_ws/src/cartographer/scripts/install_proto3.sh 這個文件運行一下就可以了
5.安裝依賴項
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
6.最后編譯
catkin_make_isolated --install --use-ninja
最后把環境變量寫到bash里
vi .bashrc
最后一行加上
source ~/catkin_ws/install_isolated/setup.bash
7.跑一下官方demo試試
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
二、rplidar驅動安裝
https://github.com/robopeak/rplidar_ros 下載rplidar的ROS驅動,可以新建一個工作空間,用catkin_make 編譯一下即可;也可以放在cartographer的工作空間里 src 下,執行一下最后的catkin_make_isolated --install --use-ninja 即可。
1.開始使用前要設置一下USB口的權限
ls -l /dev |grep ttyUSB
sudo chmod 666 /dev/ttyUSB0
這樣每次插上rplidar都要設置一次,可以將權限寫在rules里(參考這個):
root權限新建文件 /etc/udev/rules.d/70-ttyusb.rules
寫入KERNEL=="ttyUSB[0-9]*", MODE="0666",保存,重新插上設備,在運行一次ls -l /dev |grep ttyUSB 查看權限,有兩個 rw 就可以了。
(感覺這樣寫的話或許北陽的激光插上也不用設置權限了)
2.運行一下試試
驅動里提供了三個launch文件,跑cartographer的話用 rplidar.launch 即可
roslaunch rplidar_ros rplidar.launch
三、測試cartographer
先要修改 launch 文件和 lua 文件,launch文件在 demo_revo_lds.launch 基礎上修改(跟其他教程學的)
主要兩個地方,<remap from="scan" to="horizontal_laser_2d" />這一句后面的 horizontal_laser_2d 改成 scan (直接刪掉這一句應該也可以);最后的 playbag 節點刪掉。
然后是lua文件,這個里面對參數的調整也會關系到出圖的效果,具體如何影響還在學習中,只想跑起來的話比較簡單,在revo_lds.lua 基礎上修改,tracking_frame 和 published_frame 這兩個改成 laser 就可以了。
(隨便放桌上運行了一下,為了截圖而已。。)
四、總結
Linux的知識真的很欠缺,暑假才第一次用過Ubuntu,很多基礎的命令都不熟,特別是Linux下編譯程序是真挺麻煩的,對cmakelists文件了解太少,只能慢慢用到啥就去查,然后多做筆記。
一開始沒搞明白ros里面幾個坐標系的轉換,雖然知道是tf 問題,但是 lua 文件老是設置不好,ROS的基礎知識還是要多看,特別是后面看源碼的話還是要有ros基礎的。
cartographer的源碼要開始看了,現在只是對大體架構有了解,還是要深入了解,多半是個挺痛苦的過程吧,哈哈。