OctoMap 是一款基於八叉樹的 3D 佔據圖映射框架,廣泛應用於機器人導航、自動駕駛等領域。其核心在於將空間遞歸劃分為八個子體素,實現高效的空間索引與查詢。
OctoKey 本質上是將 3D 座標 (x, y, z) 通過 Morton 編碼 映射為一個 64 位整數。具體步驟:
xyzxyzxyz...。這種編碼保證了空間鄰近性:鄰近體素的 Key 數值也接近,利於緩存與範圍查詢。
center_offset_key:用於計算子節點中心偏移的輔助常量,實際是 1 << (depth - 1) 的變體。遞歸公式:child_key = (parent_key << 3) | child_index。
// 假設分辨率 resolution,原點 origin
int ix = floor((pt.x - origin.x) / resolution);
int iy = floor((pt.y - origin.y) / resolution);
int iz = floor((pt.z - origin.z) / resolution);
// 再將 (ix, iy, iz) 經 Morton 編碼得 OctoKey
OcTreeKey、OcTreeNode 結構及 coordToKey、keyToCoord 方法。OcTreeCompressed)節省內存。掌握 Morton 編碼與遞歸劃分邏輯,即可透徹理解 OctoMap 的核心機制。