PCL 基於PCL繪製包圍盒基礎介紹(1)

2021-10-07 23:23:27 字數 3692 閱讀 2117

包圍盒顧名思義就是類似乙個盒子把物體包圍起來。

以下內容來自百科:

包圍盒是一種求解離散點集最優包圍空間的演算法,基本思想是用體積稍大且特性簡單的幾何體(稱為包圍盒)來近似地代替複雜的幾何物件。

常見的包圍盒演算法有aabb包圍盒、包圍球、方向包圍盒obb以及固定方向凸包fdh。碰撞檢測問題在虛擬實境、計算機輔助設計與製造、遊戲及機械人等領域有著廣泛的應用,甚至成為關鍵技術。而包圍盒演算法是進行碰撞干涉初步檢測的重要方法之一。

分類:最常見的包圍盒演算法有aabb包圍盒(axis-aligned bounding box軸對齊包圍盒),包圍球(sphere), 方向包圍盒obb(oriented bounding box)以及固定方向凸包fdh(fixed directions hulls或k-dop)。

aabb是應用最早的包圍盒。它被定義為包含該物件,且邊平行於座標軸的最小六面體(座標軸平行不僅指盒體與世界座標軸平行,同時也指盒體的每個面都和一條座標軸垂直。同一物體的不同方向,aabb也可能不同。如果物體在場景中移動變換,它的aabb也需要隨之移動,當物體發生旋轉時,有兩種選擇,用變換後的物體來重新計算aabb,或者對aabb做和物體同樣的變換)。故描述乙個aabb,僅需六個標量。aabb構造比較簡單,儲存空間小,但緊密性差,尤其對不規則幾何形體,冗餘空間很大,當物件旋轉時,無法對其進行相應的旋轉。處理物件是剛性並且是凸的,不適合包含軟體變形的複雜的虛擬環境情況。

aabb內的點需要滿足xyz分別滿足分別大於最小的小於最大的。因此需要知道兩個頂點最小點,最大點;中心點是兩個頂點的中點代表了包圍盒的質心。

物件的包圍球被定義為包含該物件的最小的球體。確定包圍球,首先需分別計算組成物件的基本幾何元素集合中所有元素的頂點的x,y,z座標的均值以確定包圍球的球心,再由球心與三個最大值座標所確定的點間的距離確定半徑r。包圍球的碰撞檢測主要是比較兩球間半徑和與球心距離的大小。(由於球體只有乙個自由度,所以檢測球對物體方向不敏感。)

obb是較為常用的包圍盒型別。它是包含該物件且相對於座標軸方向任意的最小的長方體(obb是根據物體本身的幾何形狀來決定盒子的大小和方向,盒子不需要和座標軸垂直)。obb最大特點是它的方向的任意性,這使得它可以根據被包圍物件的形狀特點盡可能緊密的包圍物件,但同時也使得它的相交測試變得複雜。obb包圍盒比aabb包圍盒和包圍球更加緊密地逼近物體,能比較顯著地減少包圍體的個數,從而避免了大量包圍體之間的相交檢測。但obb之間的相交檢測比aabb或包圍球體之間的相交檢測更費時。

fdh(k-dop)是一種特殊的凸包,繼承了aabb簡單性的特點,但其要具備良好的空間緊密度,必須使用足夠多的固定方向。被定義為包含該物件且它的所有面的法向量都取自乙個固定的方向(k個向量)集合的凸包。fdh比其他包圍體更緊密地包圍原物體,建立的層次樹也就有更少的節點,求交檢測時就會減少更多的冗餘計算,但相互間的求交運算較為複雜。

優缺點:

aabb也是比較簡單的一類包圍盒。但對於沿斜對角方向放置的瘦長形物件,其緊密性較差。由於aabb相交測試的簡單性及較好的緊密性,因此得到了廣泛的應用,還可以用於軟體物件的碰撞檢測。

包圍球是比較簡單的包圍盒,而且當物件發生旋轉運動時,包圍球不需做任何更新,當幾何物件進行頻繁的旋轉運動時,使用包圍球可能會得到很好的結果;當物件變形時,需要重新計算其包圍球。但它的緊密性是比較差的,因此較少使用。

obb的簡單性要比上面兩種包圍盒差,但它的緊密性是比較好的,可以大大減少參與相交測試的包圍盒的數目,因此總體效能要優於aabb和包圍球。當幾何物件發生旋轉運動後,只要對obb進行同樣的旋轉即可。因此,對於剛體間的碰撞檢測,obb不失為一種較好的選擇,但迄今為止,還沒有一種有效的方法能夠較好地解決物件變形後obb樹的更新問題,而重新計算每個結點的obb的代價又太大,所以obb不適用於包含軟體物件的複雜環境中。

fdh相對於上面三種包圍盒其緊密性是最好的,同時其相交測試演算法比obb要簡單的多。可以用於軟體物件的碰撞檢測。

obb的生成思路簡單來說就是根據物體表面的頂點,通過pca(主成分分析)獲得特徵向量,即obb的主軸。

最小包圍盒的計算過程大致如下:

1.利用pca主元分析法獲得點雲的三個主方向,獲取質心,計算協方差,獲得協方差矩陣,求取協方差矩陣的特徵值和特長向量,特徵向量即為主方向。

2.利用1中獲得的主方向和質心,將輸入點雲轉換至原點,且主方向與座標系方向重回,建立變換到原點的點雲的包圍盒。

3.給輸入點雲設定主方向和包圍盒,通過輸入點雲到原點點雲變換的逆變換實現。

1.1、計算出來的協方差

主對角線的元素表示變數的方差。主對角線的元素較大則表示強訊號。非主對角線的元素表示變數之間的協方差。較大的非對角線元素表示資料的畸變。

為了減小畸變,可以重新定義變數間的線性組合,將協方差矩陣對角化。協方差矩陣的的元素是實數並且對稱。

協方差矩陣的特徵向量表示obb包圍盒的方向。大的特徵值對應大的方差,所以應該讓obb包圍盒沿著最大特徵值對應的特徵向量的方向。

單位向量是指模等於1的向量。由於是非零向量,單位向量具有確定的方向。單位向量有無數個。

乙個非零向量除以它的模,可得所需單位向量。乙個單位向量的平面直角座標系上的座標表示可以是:(n,k) ,則有n²+k²=1。

計算出來的特徵向量進行正交標準化。(單位向量)

2.1、將各點的(x,y,z)座標投影到計算出的座標軸上,求出中心和半長度。小(x,y,z表示點)大(xyz表示標準化後找到的主方向)

做投影要用到與單位向量的內積(點乘),b向量在a向量方向上的投影:

為了確定最大和最小的範圍,可以通過計算每個頂點位置座標

邊界盒的尺寸就是x,y,z三個方向上(xyz表示找到的三個主方向即單位向量)相應內積的最大值與最小值之差,邊界盒的中心o就是三對反向平面中三個平面的交點。令a,b,c分別為x,y,z上最大值與最小值的平均值:

最小包圍盒頂點計算的過程大致如下:

1.輸入點雲轉換至遠點後,求得變換後點雲的最大最小x,y,z軸的座標,此時(max.x,max.y,max.z),(max.x,min.y,max.z),(max.x,max.y,min.z),(min.x,max.y,max.z),(min.x,max.y,min.z),(min.x,min.y,max.z),(min.x,min.y,max.z),(min.x,min.y,min.z)

即為變換後點雲的包圍盒,也是原始輸入點雲包圍盒頂點座標經過變化後的座標.

2.將上述求得的6個包圍盒座標逆變換回輸入點雲的座標系,即得到原始輸入點雲的包圍盒頂點座標.

ps:說明一下

pca在很多地方還可以用到,筆者覺得了協方差矩陣、特徵值、特徵向量的幾何意義是理解pca的關鍵。上述**中還用到四元數,四元數主要用於旋轉變化

參照部落格:

pcl畫圓球 基於PCL繪製模型並渲染

前言 拋開演算法層面不談,要利用pcl庫中pclvisualizer視覺化類,顯示出不同模型並對模型做出不同渲染,製作出豐富的視覺化效果以增強自己應用的功能。下面將對如何新增立方體模型和圓球模型到視窗並渲染進行乙個大概描述。立方體模型 向視窗新增乙個立方體模型並渲染,只顯示線框。若不要顯示線框將下面...

pcl畫圓球 基於PCL繪製模型並渲染

前言 拋開演算法層面不談,要利用pcl庫中pclvisualizer視覺化類,顯示出不同模型並對模型做出不同渲染,製作出豐富的視覺化效果以增強自己應用的功能。下面將對如何新增立方體模型和圓球模型到視窗並渲染進行乙個大概描述。立方體模型 向視窗新增乙個立方體模型並渲染,只顯示線框。若不要顯示線框將下面...

基於PCL繪製模型並渲染

部落格 自 拋開演算法層面不談,要利用pcl庫中pclvisualizer視覺化類,顯示出不同模型並對模型做出不同渲染,製作出豐富的視覺化效果以增強自己應用的功能。下面將對如何新增立方體模型和圓球模型到視窗並渲染進行乙個大概描述。立方體模型 向視窗新增乙個立方體模型並渲染,只顯示線框。若不要顯示線框...