octomap的入門與學習

2021-09-24 04:45:27 字數 2671 閱讀 1679

octomap是一種基於八叉樹的三維地圖建立工具, 可以顯示包含無障礙區域及未對映區域的完整3d圖形, 而且基於占有率柵格的感測器資料可以在多次測量中實現融合和更新; 地圖可提供多種解析度, 資料可壓縮, 儲存緊湊. 事實上, octomap的**主要包含兩個模組: 三維地圖建立工具octomap和視覺化工具octovis。

相比點雲,能夠省下大把的空間。octomap建立的地圖大概是這樣子的:(從左到右是不同的解析度)

由於八叉樹的原因,它的地圖像是很多個小方塊組成的(很像《我的世界》這種沙盒類遊戲)。當解析度較高時,方塊很小;解析度較低時,方塊很大。每個方塊表示該格被佔據的概率。因此你可以查詢某個方塊或點「是否可以通過」,從而實現不同層次的導航。簡而言之,環境較大時採用較低解析度,而較精細的導航可採用較高解析度。

八叉樹(octree)的概念最早在 1978 年由 hunter 博士在他的博士畢業**中提出,是四叉樹(quadtree) 在三維空間的推廣,主要應用於計算機輔助設計與製造(cad /cam)、三維計算機圖形學、三維影象處理等領域。用八叉樹來表示三維形體,並研究在這種表示下的各種操作及應用是在進入 20 世紀 80 年代後才比較全面地開展起來的。這種方法也可以認為是用三維體素陣列表示形體方法的一種改進。

八叉樹結構具有很強的空間分解能力,將空間目標劃分為 8 個象限,每乙個象限表示八叉樹的乙個節點。從八叉樹根節點開始,如果該節點所在的三維空間實體為空,稱其為空節點;如果該節點所在的三維空間實體型別相同(即為均質的),稱其為黑節點;否則,稱其為灰節點,並將其沿每乙個座標軸方向分割為 2 × 2 × 2 個子節點。這樣遞迴的判斷並分割,直到節點為空或該節點所在的三維空間實體為均質的,或達到預先確定的最小尺寸為止。圖1 是用八叉樹表示簡單物件的乙個例子,分別用三維柵格結構和樹結構描述八叉樹。

每個節點都有乙個資料描述它是否被佔據,在最簡單的情況下,可以用 0、1 兩個數表示,通常用 0 ~ 1 之間的浮點數表示它被佔據的概率。0. 5 表示未確定,越大則表示被佔據的可能性越高,反之亦然。由於它是八叉樹,那麼乙個根節點的 8 個子節點都有一定的概率被佔據或不被佔據。用樹結構的好處在於當某個節點的子節點都佔據」或「不佔據」或「不確定」時,就可以把它減去,這樣就可以節省很多空間。

在八叉樹中,我們用概率來表示乙個葉子節點是否被佔據而不是直接用 0、1 表達。因為在對環境的觀測過程中,由於雜訊及物體移動等情況的存在,每個節點是否被佔據的情況會隨時間的變化而發生改變。根據八叉樹的推導原理,假設時間序列為 t = 1,2,3,…,t,每個時刻記錄的資訊為 i1,i2,i3,…,it。那麼第 n 個子節點的更新資訊為:

對上式做乙個 logit 變換,把乙個概率 p 轉換到全實數空間 r 上:

其逆變換為:

α 稱之為 log - odds,用 l()表示每個葉子節點的 log

- odds,則可以得到下面的式子:

通過式(4)可知,每次更新八叉樹的資訊時,只需要將新的資訊加入就可以了,需要注意的是,每個值取值都是有上限和下限的,不然會造成計算溢位,計算八叉樹地圖的時候只需要把實數轉回概率就可以了。通過八叉樹

的構造原理可以得到另乙個結論是,當需要知道父節點的概率時,可以根據子節點來計算,方法可以是取平均值,或者是取所有子節點的上限或者下限。

octomap的網頁見:

它的github原始碼在:

- ctomap ros 功能包安裝 :

octomap_server是ros中的乙個基於octomap的功能包。我在查閱資料的時候,發現所有的介紹、部落格等資料都是在介紹其將點雲地圖轉化為基於octree的octomap的功能。

開啟乙個終端.(ctrl+alt+t)輸入下面指令安裝octomap.

sudo apt-get install ros-kinetic-octomap-ros #安裝octomap

sudo apt-get install ros-kinetic-octomap-msgs

sudo apt-get install ros-kinetic-octomap-server

安裝octomap 在 rviz 中的外掛程式

sudo apt-get install ros-kinetic-octomap-rviz-plugins

**放在了我的github:

point_cloud_converter.launch

我這裡為了方便,將兩個launc**件放在了一起。

成功之後,即可用rviz來檢視地圖。

由於之前安裝了外掛程式,所以在add中會多出乙個octomap_rviz_plugins模組.如下圖所示:

其中的occupancygrid是顯示三維概率地圖,也就是octomap地圖。occupancymap是顯示二維佔據柵格地圖。

然後選擇合適的話題檢視地圖。

octomap入門學習

從今天開始學習octomap,對於octomap還是一無所知的狀態,一起來學習一下。octomap庫運用了3維網格繪製填充技術,專為機械人學提供了資料結構和繪圖演算法。octomap是一種開源三維繪圖框架。全3維模型。無需預先假設就可以為任意環境建模。該模型同時包含了被佔據空間和自由空間。環境中的未...

Octomap庫的安裝與使用

官網 ros octomap wiki 介紹 高翔git 學習 ubuntu1604 安裝 git clone cd octomap mkdir build cd build cmake make j8 make install 測試 cd octomap bin pcd2octomap data ...

增強學習的基礎與入門

首先,要了解的乙個大概念,增強學習是並列監督學習和非監督學習的一種學習方法,不同於這兩種判斷是否有標籤的學習模式,增強學習是為了學習一種策略 policy 使得智慧型體 agent 能夠得到最大累積回報。其中,策略是一系列動作的總和,而智慧型體每乙個動作結束之後,都會產生乙個狀態,並且整個系統大環境...