Wiki
terrain_analysis(近場地面與障礙高差分析)
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
1.terrain_analysis(近場地面與障礙高差分析)
1.1.地形分析節點分工
| 節點 | 主要分工 | 輸出 | 當前使用者 |
|---|---|---|---|
terrain_analysis |
較細的近場地形分析,當前下采樣尺度為 0.05 m | terrain_map |
局部代價地圖 |
terrain_analysis_ext |
擴展更大範圍,當前下采樣尺度為 0.1 m | terrain_map_ext |
全局代價地圖 |
兩個節點都訂閲 loam_interface 的 lidar_odometry 和 registered_scan;ext 還訂閲 terrain_map,當前以輸入里程計的位置為中心,4 m內採用近場結果、4 m外計算擴展結果,再合併輸出。本塊只整理 terrain_analysis,terrain_analysis_ext 的參數留到下一塊。
本節點在 odom 的水平格子內估計地面高度,輸出點的 intensity 改為相對地面的高度差,單位為 m,已經不是雷達反射強度。當前局部代價地圖的 IntensityVoxelLayer 按該字段篩選障礙,允許範圍為0.1~2.0 m,並另外檢查點座標高度、距離等條件;不是把正負高度相加為通行代價。
1.2.上坡下坡先看哪些參數
先抓住兩個問題:正常的坡會不會被當成障礙,以及坡上的地面點有沒有被過濾掉。 這段講的是導航系統如何看待坡;目前沒有坡道測試,不能從這些數值判斷實車最多能爬幾度。
| 你看到的現象 | 先看哪些參數 | 用直白的話解釋 |
|---|---|---|
| 正常坡被畫成障礙,小車不願意走 | useSorting、quantileZ |
系統要先給每一小片區域選一個“地面高度”。選得太低,斜坡較高的一側就可能看起來像凸出的障礙。當前 True、0.2是在採用較低的一檔高度估計地面,不是開啓了“允許上坡” |
| 上坡遠處的地面點消失 | maxRelZ |
當前地面點若高到輸入雷達位置上方0.5 m之外,會被過濾。要檢查坡是不是被這個上限截掉,而不是一看到不上坡就改排序開關 |
| 下坡遠處的地面點消失 | minRelZ |
當前地面點若低到輸入雷達位置下方1.5 m之外,會被過濾。這個下限影響系統能不能繼續看到較低處的坡面 |
| 下坡較低部分被當成坑或落差 | considerDrop |
True 會把“低於這一小片估計地面”的點也按高差處理,可能識別坑,也可能誤判正常坡。當前 False沒有打開這種處理,不表示禁止下坡;它也會忽略一部分真實凹陷 |
| 坡上的小高差被當成障礙 | 下游 min_obstacle_intensity |
當前局部代價地圖採用0.1 m,也就是10 cm的高度差下限。滿足其他條件時,達到或超過這個門檻的點可能被畫成障礙。這項在後續代價地圖參數塊中,不是本節點的參數 |
改了 disRatioZ,遠處坡點仍然消失 |
disRatioZ 與上面的高度上下限 |
它只在前面的緩存篩選中放寬高度範圍,最後輸出仍受 minRelZ/maxRelZ 限制,所以不能簡單靠調大它解決坡點丟失 |
這裏的高低按代碼當前使用的高度方向計算,實際座標方向仍需核對。正常下坡是一片連續降低的地面;坑、斷崖或向下台階則涉及地面突然降低,不能把它們都歸為同一個“下坡開關”。
例如,其他條件都滿足時:同一個坡上的點,若被算成比這一小片地面高6 cm,會低於當前10 cm障礙門檻;若地面高度估計偏低,把它算成高15 cm,就可能被畫成障礙。這裏是局部地面高度差,不是整條坡的總高度。調整地面估計或抬高障礙門檻,可能減少坡面誤判,也可能讓真實低障礙被忽略,不能只看坡能不能通過。
vehicleHeight=0.5 限制的是正常輸出點相對估計地面的高度差。它沒有表示“車輛能爬0.5 m高的台階”,也沒有規定允許的坡度。
所以,坡道分析先沿着這條順序看:地面高度選得對不對 → 坡點有沒有被刪掉 → 下游是否把正常高差當成障礙。 動態物體清理、舊點保留時間和更新次數主要解決其他問題;當坡麪點缺失時再檢查它們的間接影響。
1.3.參數
1.3.1.ros__parameters(ROS節點參數)
1.3.1.1.參數表
terrain_analysis:
ros__parameters:
scanVoxelSize: 0.05
decayTime: 0.5
noDecayDis: 0.0
clearingDis: 0.0
useSorting: True
quantileZ: 0.2
considerDrop: False
limitGroundLift: False
maxGroundLift: 0.3
clearDyObs: True
minDyObsDis: 0.3
minDyObsAngle: 0.0
minDyObsRelZ: -0.3
absDyObsRelZThre: 0.2
minDyObsVFOV: -28.0
maxDyObsVFOV: 33.0
minDyObsPointNum: 1
noDataObstacle: False
noDataBlockSkipNum: 0
minBlockPointNum: 10
vehicleHeight: 0.5
voxelPointUpdateThre: 100
voxelTimeUpdateThre: 1.0
minRelZ: -1.5
maxRelZ: 0.5
disRatioZ: 0.2
| 參數名 | 當前值 | 單位 | 實車處理建議 | 作用 | 調大效果 | 調小效果 | 生效條件/備註 |
|---|---|---|---|---|---|---|---|
scanVoxelSize |
0.05 |
m,三維體素邊長 | 實物運行時重點觀察,有問題再針對性調整 | 對累計點雲進行體素降採樣 | 點通常更少,計算和緩存負擔下降,小障礙細節可能減少 | 點通常更多,細節增加,負擔上升 | 應為正數;不是地面格子尺寸或定位精度;還會影響地面樣本數 |
decayTime |
0.5 |
s,輸入點雲時間 | 實物運行時重點觀察,有問題再針對性調整 | 更新緩存時剔除過期代表點 | 保存歷史更久,地面樣本更充足,舊障礙殘留也可能更久 | 歷史更短,變化跟隨更快,可能因點少出現空洞 | 僅體素更新時檢查;近距離免衰減可繞過;不是0.5秒準時清除 |
noDecayDis |
0.0 |
m,水平距離 | 根據實際功能需求開啓或設置 | 指定不受時間衰減限制的近距離區域 | 免衰減範圍擴大,近場歷史和舊點保留更多 | 免衰減範圍縮小;0表示不保留免衰減區 | 使用 d < noDecayDis;還用於無數據障礙初始化的移動距離門檻 |
clearingDis |
0.0 |
m,水平清圖半徑 | 根據實際功能需求開啓或設置 | 外部觸發清圖時清除半徑內的緩存點 | 一次清除範圍擴大 | 一次清除範圍縮小;0沒有正半徑清除區 | 僅清圖事件生效;方向是半徑內,不是半徑外;map_clearing 消息可覆蓋此變量 |
useSorting |
True |
不適用,布爾 | 通常保持當前值,不作為優先調試項 | 地面高度採用排序分位值或最小值 | 不適用 | 不適用 | True 使用 quantileZ;False 使用最小高度;不保證上坡,也沒有正負高度抵消 |
quantileZ |
0.2 |
無量綱,分位比例 | 實物運行時重點觀察,有問題再針對性調整 | 選擇排序高度中的地面樣本 | 地面估計通常抬高,凸起相對高度下降,可能漏掉低障礙 | 地面估計通常降低,凸起相對高度上升,更易受低離羣點影響 | useSorting=True 時生效;按 floor(q×N) 取下標並截到有效範圍,宜在0~1內設置 |
considerDrop |
False |
不適用,布爾 | 根據實際功能需求開啓或設置 | 是否把低於估計地面的高度差也取絕對值輸出 | 不適用 | 不適用 | False 時負高度差點被過濾;True 為 abs(z−地面);能與排序同時執行,但坡面可能出現額外障礙 |
limitGroundLift |
False |
不適用,布爾 | 根據實際功能需求開啓或設置 | 限制分位地面相對最低樣本的抬升幅度 | 不適用 | 不適用 | 僅排序分支使用;當前關閉,不限制地面抬升 |
maxGroundLift |
0.3 |
m,相對最低樣本的高度差 | 當前運行不使用這個參數,暫不調整 | 地面抬升限制的上限 | 開啓限制後:允許地面抬得更高 | 開啓限制後:更接近最低樣本,可能提高障礙高度差 | 當前 limitGroundLift=False,不影響輸出;還需 useSorting=True |
clearDyObs |
True |
不適用,布爾 | 實物運行時重點觀察,有問題再針對性調整 | 根據歷史點與本幀回波篩掉疑似動態殘留格 | 不適用 | 不適用 | 當前開啓;不是目標跟蹤或永久禁行記錄,可能受遮擋、稀疏回波影響 |
minDyObsDis |
0.3 |
m,水平距離 | 實物運行時重點觀察,有問題再針對性調整 | 劃分近距離直接計數與較遠的角度篩選分支 | 近距離直接計數區擴大 | 近距離直接計數區縮小 | 僅動態清理使用;近點直接增加計數,不是簡單忽略近點;本幀點仍可重置該格 |
minDyObsAngle |
0.0 |
°,度 | 實物運行時重點觀察,有問題再針對性調整 | 對歷史候選和本幀重置使用同一仰角門檻 | 提高兩輪角度門檻,淨清理效果不單調 | 降低兩輪角度門檻,淨清理效果不單調 | 僅動態清理使用;角度公式含 minDyObsRelZ,不能只按“越大清得越少”理解 |
minDyObsRelZ |
-0.3 |
m,相對輸入位姿的 z 偏置 | 上實物前必須核對並正確配置 | 調整候選仰角計算的垂直基準 | 同一點的計算仰角下降 | 同一點的計算仰角上升 | 僅動態清理使用;同時影響候選計數和本幀重置;當前角門檻0°對應 Δz > -0.3 m |
absDyObsRelZThre |
0.2 |
m,雷達自身 z 帶寬 | 實物運行時重點觀察,有問題再針對性調整 | 讓靠近雷達自身水平面的歷史候選繞過垂直視場窗口 | 旁路帶擴大,更多點可被計數 | 旁路帶縮小 | 僅動態清理使用;條件是 abs(z_L)<阈值,與視場判斷為“或”關係 |
minDyObsVFOV |
-28.0 |
°,度 | 上實物前必須核對並正確配置 | 動態候選在雷達自身系的垂直角下界 | 下界提高,角窗口收窄 | 下界降低,角窗口擴大 | 僅動態清理使用;有高度帶旁路;這是軟件篩選窗口,不能直接當 MID360 標稱視場 |
maxDyObsVFOV |
33.0 |
°,度 | 上實物前必須核對並正確配置 | 動態候選在雷達自身系的垂直角上界 | 上界提高,角窗口擴大 | 上界降低,角窗口收窄 | 僅動態清理使用;應大於下界;需結合實際雷達座標軸和篩選目的核對 |
minDyObsPointNum |
1 |
點計數閾值 | 實物運行時重點觀察,有問題再針對性調整 | 候選計數達到門檻後,篩掉該格本輪輸出 | 較遠區域通常需要更多候選才剔除,殘留可能增加 | 更容易剔除候選格,誤刪風險可能增加 | 僅動態清理使用,宜為正整數;近距離分支直接增加此閾值,不是純粹的實測點數門檻 |
noDataObstacle |
False |
不適用,布爾 | 根據實際功能需求開啓或設置 | 是否為欠缺地面樣本的格子合成障礙點 | 不適用 | 不適用 | 還需無數據處理初始化完成;False 不合成障礙,不代表下游一定把未知區域視為可通行 |
noDataBlockSkipNum |
0 |
次,格子邊界跳過迭代 | 當前運行不使用這個參數,暫不調整 | 合成無數據障礙前,跳過靠近有效數據的部分欠數據格 | 開啓無數據障礙後:通常跳過更多邊界格 | 開啓無數據障礙後:跳過更少,0不跳過 | 當前 noDataObstacle=False,不影響結果;不是米或幀數,使用非負整數 |
minBlockPointNum |
10 |
點,鄰域高度樣本數 | 實物運行時重點觀察,有問題再針對性調整 | 規定正常地形輸出需要的最低地面樣本數 | 輸出更保守,稀疏格更容易缺失 | 更多稀疏格可以輸出,地面估計穩定性可能下降 | 正常輸出一直使用;無數據功能開啓時還用於判斷欠數據;不是隻在 noDataObstacle=True 時生效 |
vehicleHeight |
0.5 |
m,相對估計地面的高度上限 | 上實物前必須核對並正確配置 | 限制正常地形點輸出的高度差 | 保留更高的點,也可能引入懸空結構 | 更多高點被過濾,可能漏障 | 正常點需 0≤h<0.5;不是相對雷達的高度,也不能直接當作已確認的整車高度 |
voxelPointUpdateThre |
100 |
點,每個緩存格的新入點計數 | 通常保持當前值,不作為優先調試項 | 達到計數門檻時重做該緩存格的降採樣與過期篩選 | 點數觸發更新通常更少,等待更久 | 點數觸發更新通常更頻繁,計算增加 | 與時間門檻、清圖事件為“或”;不是整幀點數或緩存總點數 |
voxelTimeUpdateThre |
1.0 |
s,輸入點雲時間 | 通常保持當前值,不作為優先調試項 | 距該緩存格上次更新達到門檻後重做篩選 | 時間觸發更新更稀疏,過期點可能保留更久 | 時間觸發更新更頻繁,計算增加 | 僅收到新點雲進入處理時檢查;與 decayTime 是不同門檻 |
minRelZ |
-1.5 |
m,相對輸入位姿的 odom z |
上實物前必須核對並正確配置 | 有效高度下界 | 下界抬高,更多低點/地面點被過濾 | 下界降低,接受更低的點 | 地面採樣與正常輸出都嚴格使用此下界;地面相對雷達的高度需實測核對 |
maxRelZ |
0.5 |
m,相對輸入位姿的 odom z |
上實物前必須核對並正確配置 | 有效高度上界 | 接受更多高點,頂棚或懸空結構也可能進入 | 過濾更多高點,可能漏障 | 與 vehicleHeight 的參考基準不同;地面採樣與正常輸出嚴格使用此上界 |
disRatioZ |
0.2 |
無量綱,m/m | 實物運行時重點觀察,有問題再針對性調整 | 隨水平距離擴大入緩存的上下高度窗口 | 遠處緩存候選高度範圍更寬 | 遠處緩存候選範圍更窄,0不擴大 | 入緩存及更新篩選使用;最終地面採樣與輸出仍用固定 minRelZ/maxRelZ,不能保證擴大後的坡麪點會輸出 |
1.3.1.2.參數詳解
1.3.1.2.1.scanVoxelSize(點雲降採樣尺度)
當前0.05 m表示累計點雲重採樣時的三維體素邊長。同一小體素中的點合成代表點,可以壓縮重複掃描;調得更大可能減少窄障礙、邊緣和有效地面樣本,調得更小則增加點數和處理負擔。
源碼另外固定了1.0 m的歷史緩存分塊和0.2 m的平面地面格子。scanVoxelSize 不改變這兩種格子的尺寸,也不等於代價地圖分辨率。地面樣本來自平面格子的3×3鄰域,minBlockPointNum 判斷的是這個鄰域收集到的高度樣本數。
1.3.1.2.2.decayTime、noDecayDis 與 clearingDis(舊點保留、免衰減與事件清圖)
新點進入緩存時,intensity 暫存“該幀時間戳減首次點雲時間戳”,用於歷史管理;輸出時再改為高度差。容器 PCL 的體素濾波默認平均各字段,因此年齡判定針對重採樣代表點,不能理解為逐個原始點精確保留時間。
緩存格只有滿足以下任一條件才重做降採樣和篩選:新入點累計達到100、距離上次更新達到1.0秒、收到清圖事件。檢查時按如下關係保留點:
高度在缓存允许窗口内
且(代表点年龄 < decayTime,或水平距离 < noDecayDis)
且不属于本次触发清图的半径内
因此 decayTime=0.5 是更新時檢查的年齡閾值,不是點到0.5秒就立刻消失。稀疏緩存格可能等到時間更新門檻才重新檢查;沒有新點雲時,這段處理不會執行。增大衰減時間有利於保留地面樣本,也可能延長舊物體殘留;減小則需觀察稀疏格是否出現空洞。
當前 noDecayDis=0,沒有近距離免衰減區域。這個值還參與無數據功能的初始化:從記錄位置移動至少該距離才進入無數據處理狀態,0時首次里程計回調即可滿足距離條件;當前 noDataObstacle=False,後者不會生成障礙。
clearingDis 僅在清圖事件觸發後使用,清掉的是 d < clearingDis 的點。當前0沒有正半徑清除區;joy 的第6個按鈕可觸發清圖,map_clearing 的 Float32 消息會覆蓋清圖半徑並觸發處理。原註釋“該距離外的點會被清除”方向相反,不能照此理解。清圖隻影響本節點緩存,不是刪除 Point-LIO 地圖;本輪未發佈任何清圖消息。
1.3.1.2.3.useSorting、quantileZ 與 considerDrop(地面高度選擇與低處高差處理)
每個0.2 m平面格先收集鄰域高度。useSorting=True 時排序並取下標 floor(quantileZ×N) 的高度;當前 quantileZ=0.2,例如10個樣本會取下標2,即從低到高第3個樣本。它可以減少極低離羣點對“最低地面”的影響,但分位比例過高也可能把障礙底部或坡面較高部分當作地面。
地面高度記為 g,原始高度差為 h=z−g:
- 當前
considerDrop=False:只輸出非負高度差,低於估計地面的點被過濾。 - True:先取
abs(z−g),凹下去的點也可能作為高度差輸出;仍需通過其他高度和樣本數條件。
源碼沒有坡面正負高度相加抵消的步驟,也沒有禁止這兩個開關同時開啓。它們可以同時執行,但坡面較低部分取絕對值後可能被當作障礙。useSorting 是地面估計方式,是否能上坡還取決於座標軸、坡度、高度窗口、下游障礙閾值及車輛能力,不能保證“開啓就能上坡”。
當前局部代價地圖的強度下限為0.1 m。地面估計抬高會降低凸起的高度差,可能讓低障礙低於該門檻;估計過低則可能把正常地面標成障礙。後續實物應同時檢查地面、低障礙和坡面,不能只看點雲是否連續。
1.3.1.2.4.limitGroundLift 與 maxGroundLift(地面估計抬升限制)
啓用限制且使用排序時,地面估計不會高於“鄰域最低高度 + maxGroundLift”。它限制的是分位地面相對最低樣本的抬升,不是雲台升降、底盤離地高度或每幀地面變化率。
當前 limitGroundLift=False,所以 maxGroundLift=0.3 不影響結果,暫不調整。最低樣本本身若為低離羣點,開啓限制也可能將地面壓低。
1.3.1.2.5.clearDyObs 及其幾何門檻(動態殘留點篩選)
這個開關用舊點與最新回波做格子級候選篩選,不估計物體速度,也不創建“動態物體走過就永久禁行”的區域。候選計數每輪重建,最後只篩掉本輪仍被標記的格子輸出;緩存老點的移除另由衰減等規則處理。
當前過程是:
- 累計點雲中,水平距離不大於
minDyObsDis=0.3 m的點直接給格子增加minDyObsPointNum;不是忽略近點。 - 較遠的點先滿足
angle1 > minDyObsAngle,再轉到輸入位姿對應的雷達自身系;自身仰角在視場窗口內,或abs(z_L)<absDyObsRelZThre,就給格子計數。 - 最新一幀裁剪點中,只要該格有滿足
angle1 > minDyObsAngle的點,就把計數歸零;這一輪沒有再次要求視場窗口或0.3 m距離門檻。 - 最終計數達到
minDyObsPointNum=1的格子不進入正常地形輸出。
這裏的第一個仰角按 odom 中相對輸入位姿的位置計算:
當前0°角門檻和-0.3 m高度偏置,在非零水平距離處等價於要求 Δz>-0.3 m。minDyObsAngle 與 minDyObsRelZ 同時影響歷史候選和最新回波重置,調整後的淨清理效果不能只按一個方向推斷。
第二個仰角在雷達自身系中計算,單位同樣是度。當前窗口為(-28°,33°),另外 abs(z_L)<0.2 m 可繞過該窗口。MID360 官方標稱垂直視場為 -7°~52°;這與當前軟件窗口不同,但窗口還承擔候選篩選,不能據此直接判定兩項數值必須替換。Livox 官方規格
上實物前需要核對輸入位姿究竟代表 IMU 還是雷達、逆旋轉後的軸向,以及這個窗口的篩選目的。雷達自身系已經扣除安裝姿態,不應把整機傾斜角隨意加到視場上下界;這裏度制的閾值也不能與弧度制 JointState 混用。MID360 隨實際 yaw、不隨實際 pitch 轉動的機械約定繼續保留。
遮擋、稀疏回波或位姿錯誤可能使靜態障礙也暫時缺少“本幀確認”,從而被誤篩。當前 minDyObsPointNum=1 比較敏感;應觀察障礙離開後的殘留和靜態物體被遮擋時的結果,再判斷是否需要調整,而不是直接根據原註釋關閉或修改。
1.3.1.2.6.noDataObstacle、noDataBlockSkipNum 與 minBlockPointNum(缺數據區域與最少地面樣本)
noDataObstacle=True 且初始化完成時,地面樣本不足的格子會生成4個障礙標記點,z 設為輸入位姿高度,intensity 設為 vehicleHeight。這表示主動阻擋欠數據區域;False 只是不生成這些點,未知區域怎樣通行仍由下游決定。
noDataBlockSkipNum 控制欠數據格邊界的跳過迭代次數,不能按米或跳過幾幀理解。當前無數據功能關閉,這項不影響結果,簡述其用途即可。
minBlockPointNum=10 仍然生效:正常地形點輸出要求鄰域地面樣本數至少10。提高它會減少稀疏格輸出,降低它可能保留更多細小障礙,但也更依賴少量、不穩定的地面樣本。它同時受降採樣尺度、衰減時間和實際點密度影響。
1.3.1.2.7.vehicleHeight(地形輸出高差上限)
正常地形點要求 0≤h<vehicleHeight,當前即0~0.5 m,不包含0.5 m上界。h 相對估計地面,minRelZ/maxRelZ 則相對輸入雷達位姿的 odom z,兩者參考基準不同。
該參數沒有直接控制模型尺寸或碰撞包絡。若障礙只有高於0.5 m的有效回波,這些點會被過濾;調小可能漏障,調大則可能把更多懸空結構引入輸出。需結合真實車輛包絡、雷達可見的障礙部位和下游篩選核實,不能僅憑名字把它設成整車高度。
當前正常輸出高度差還與下游0.1 m障礙下限共同作用,因此進入局部障礙標記的正常點,高度差通常需落在0.1~0.5 m之間,並通過其他過濾。當前數值是否適合實車尚無測量結論。
1.3.1.2.8.voxelPointUpdateThre 與 voxelTimeUpdateThre(緩存點雲更新門檻)
每個1.0 m緩存分塊的新入點計數達到100,或距離該塊上次更新達到1.0秒,就重新降採樣並篩除過期點;清圖事件也會強制更新。計數在更新後清零,計時採用輸入點雲時間。
增大門檻通常減少這一階段的更新頻率,減小則增加處理次數。它們不是發佈頻率參數,也不是地面樣本數門檻;發佈由新點雲處理驅動,實際頻率還受負載影響。先沿用當前值,若歷史殘留或計算負擔異常,再與 decayTime 一起檢查。
1.3.1.2.9.minRelZ、maxRelZ 與 disRatioZ(相對輸入位置的高度窗口)
設 Δz=z_point−z_input_pose,d 為 odom 中的水平距離。入緩存以及緩存更新時使用:
當前在5 m水平距離處,緩存候選窗口為(-2.5,1.5) m。但源碼在收集地面樣本和輸出正常點時,又要求固定的 -1.5<Δz<0.5,沒有繼續使用距離擴展。
所以 disRatioZ 能放寬緩存候選範圍,卻不能保證遠處坡面超出固定窗口的點最終被保留。原註釋只解釋了前一階段,不能據此認定整條鏈都隨距離擴大高度範圍。
這些高度沿 odom 的 z 軸,並相對輸入 lidar_odometry 的位置,不是相對底盤原點或雲台 pitch 層。需先確認雷達到地面高度、odom 的方向以及 IMU/雷達位姿轉換;參考系錯誤不能通過單純加大窗口解決。本輪不修改重力方向或任何工程參數。
1.3.1.2.10.啓動來源與當前驗證範圍
整套 reality/simulation 啓動分別默認使用對應目錄的 nav2_params.yaml,經 navigation_launch.py 將處理後的參數文件交給該節點,並把節點名設為 terrain_analysis 以匹配 YAML。包內獨立 XML launch 和 C++ 默認值是另外的來源,例如獨立 XML 的 decayTime=1.0、noDecayDis=1.75、vehicleHeight=1.5,不能套用本表;直接運行可執行文件也不會自動加載整套 YAML。
這26項均在啓動時聲明和讀取,沒有動態參數更新回調。maxGroundLift 和 noDataBlockSkipNum 當前因開關關閉而不影響結果;clearingDis 由事件使用且可被消息覆蓋,其變量變化也不能只靠啓動參數表判斷。
源碼還存在接口前提:兩個輸入分別回調,使用最近收到的里程計,沒有時間配對、插值或“已獲得有效里程計”的保護;輸出參考系固定寫成 odom,沒有校驗或變換輸入參考系。上游位姿與座標關係仍需核對,尤其會影響本塊的高度窗口和動態候選判斷。
- 源碼能確認: 參數讀取、單位、門控分支、衰減與清圖條件、分位地面估計、動態候選篩選和高度輸出範圍;本輪在容器中確認安裝後的導航 launch 與兩份 YAML 對應當前源碼。
- 仿真已觀察: 2026-10-08 僅驗證獨立 Point-LIO 的靜止和短距離往返輸出,沒有驗證本節點地面估計、坡面、動態清理、欠數據障礙或最終代價地圖。
- 必須實物核實: 雷達原點到地面的高度、安裝與內部外參、目標參考系方向、實際點密度、可見障礙高度、坡面與落差特徵,以及動態物體離開/靜態物體被遮擋時的篩選表現。當前無實物,本輪未啓動節點或進行運行測試。
源碼位置:src/pb2025_sentry_nav/terrain_analysis/src/terrainAnalysis.cpp;下游強度篩選位於 src/pb2025_sentry_nav/pb_nav2_plugins/src/layers/intensity_voxel_layer.cpp。本塊糾正的是日誌中的參數解釋,工程源碼、配置和參數值均保留。