ROS 八叉樹地圖構(gòu)建 - 安裝 octomap 和 octomap_server 建圖包!

登龍
這是我的第 145?篇原創(chuàng)
項(xiàng)目要用到八叉樹庫(kù) Octomap 來構(gòu)建地圖,這里記錄下安裝、可視化,并啟用帶顏色的 Octomap 的過程。
一、Apt 安裝 Octomap 庫(kù)
如果你不需要修改源碼,可以直接安裝編譯好的 octomap 庫(kù),記得把 ROS 版本「kinetic」替換成你用的:
sudo?apt-get?install?ros-kinetic-octomap*
上面這一行命令等價(jià)于安裝以下的 octomap 組件:
sudo?apt-get?install?ros-kinetic-octomap?ros-kinetic-octomap-mapping?ros-kinetic-octomap-msgs?ros-kinetic-octomap-ros?ros-kinetic-octomap-rviz-plugins
注意:上面沒有安裝 ros-kinetic-octomap-server,原因是我要使用這個(gè)包來建圖,并且需要修改它,所以在下一步我直接通過編譯源碼來安裝它!
二、編譯安裝 OctomapServer 建圖包
因?yàn)槲乙獑⒂冒瞬鏄潴w素柵格的 RGB 顏色支持,需要修改源碼,所以必須使用源碼編譯安裝,過程如下:
2.1 創(chuàng)建編譯用的工作空間
cd?你的一個(gè)目錄/
#?創(chuàng)建工作空間
mkdir?octomap_ws
cd?octomap_ws/
#?ROS?的工作空間必須包含?src?目錄
mkdir?src/
#?創(chuàng)建
catkin_make
#?記得?source?環(huán)境變量
source?devel/setup.zsh
2.2 下載編譯源碼
下載 octomap_server 源碼到 src 文件夾中:
cd?src/
git?clone?https://github.com/OctoMap/octomap_mapping.git
返回你的工作空間主目錄,安裝下依賴,然后開始編譯:
cd?../
rosdep?install?octomap_mapping
catkin_make
編譯過程基本沒有報(bào)錯(cuò),如果你遇到問題,直接復(fù)制錯(cuò)誤信息瀏覽器搜索解決,然后啟動(dòng)測(cè)試的 launch:
roslaunch?octomap_server?octomap_mapping.launch
沒問題的話應(yīng)該可以用 rostopic list 看到一個(gè) octomap_full 的話題:

有這個(gè)話題說明這個(gè)建圖包可以正常工作啦:)
二、Rviz 可視化 Octomap
ROS 中提供了一個(gè) Rviz 可視化 Octomap 的插件,如果沒有安裝使用下面的命令即可:
sudo?apt-get?install?ros-kinetic-octomap-rviz-plugins
安裝后啟動(dòng) Rviz,直接添加一個(gè)八叉樹占用網(wǎng)格的類型,第一個(gè)是帶顏色的類型,第二個(gè)不帶顏色:

建圖節(jié)點(diǎn)啟動(dòng)后,選擇話題名稱為 octomap_full,即可顯示出八叉樹體素柵格,這是我的實(shí)驗(yàn)結(jié)果,我用的是第一個(gè)帶顏色的類型:

我把點(diǎn)云和體素柵格一起顯示了,所以會(huì)重疊。這里要注意的是,如果你的點(diǎn)云顯示不出來,要檢查下「Global Options」的「Fixed Frame」有沒有設(shè)置正確,我是設(shè)置的是 Robosense 雷達(dá)的 frame_id:「rslidar」。
三、啟用 ColorOctomap
默認(rèn)編譯的 octomap 不能顯示顏色,要開啟顏色的支持,需要 2 個(gè)步驟,第一步編輯 OctomapServer.h 文件:
vim?octomap_mapping/octomap_server/include/octomap_server/OctomapServer.h
打開下面 COLOR_OCTOMAP_SERVER 宏的注釋即可:
//?switch?color?here?-?easier?maintenance,?only?maintain?OctomapServer.?
//?Two?targets?are?defined?in?the?cmake,?octomap_server_color?and?octomap_server.?One?has?this?defined,?and?the?other?doesn't
//?打開這個(gè)注釋
#define?COLOR_OCTOMAP_SERVER
然后重新編譯一遍源碼:
cd?octomap_ws/
catkin_make
第二步是在使用時(shí),在 launch 文件中禁用 height_map,啟用 colored_map,這個(gè)配置是我閱讀源碼查找的,因?yàn)楣倬W(wǎng)文檔很久沒有更新了,一些參數(shù)配置方法需要通過閱讀源碼才能知道:
<param?name?=?"height_map"?value?=?"false"?/>
<param?name?=?"colored_map"?value?=?"true"?/>
比如以下是我實(shí)驗(yàn)用的 launch 文件:
<launch>
??<node?pkg="octomap_server"?type="octomap_server_node"?name="octomap_server">
????
????<param?name="resolution"?value="0.10"?/>
????
????
????<param?name="frame_id"?type="string"?value="world"?/>
????<param?name?=?"height_map"?value?=?"false"?/>
????<param?name?=?"colored_map"?value?=?"true"?/>?
????
????
????<remap?from="/cloud_in"?to="/fusion_cloud"?/>
??node>
launch>
我設(shè)置了八叉樹幀的 frame 為 rslidar,并將融合的點(diǎn)云話題 /fusion_cloud 作為節(jié)點(diǎn)的輸入,我沒有提供 TF,因?yàn)槟壳爸皇亲隽艘粋€(gè)單幀的體素柵格構(gòu)建,效果如下:

我在 B 站錄了個(gè)簡(jiǎn)短的視頻,可以去看下初步的效果:

推薦閱讀:
ROS 機(jī)器人技術(shù) - 編寫一個(gè) launch 啟動(dòng)多個(gè)節(jié)點(diǎn)
廈大同學(xué),與你分享編程,AI 算法等技術(shù)干貨!精品文章創(chuàng)作不易,謝謝關(guān)注,歡迎在看。
點(diǎn)擊閱讀原文,查看更多精彩文章!
