SLAM中的退化問題

2021-10-05 14:35:00 字數 3296 閱讀 6250

**小結

總結參考

最近在研究定位的退化方向的判斷和處理,看了幾篇關於slam退化問題中的**,並做個小結。定位的退化主要是因為約束的減少,比如ndt需要三個正交方向的約束才能很好的匹配,但若在狹長的走廊上或者隧道環境,條件單一,即使人肉眼**雷射雷達資料,也很難判斷機械人所處的位置。

***** 1

on degeneracy of optimization-based state estimation problems

***** 2

robust localization and localizability estimation with a rotating laser scanner

***** 3

estimating the localizability in tunnel-like environments using lidar and uwb

r

gmin⁡x

∣∣ax

−b∣∣

2arg\,\min_ || ax -b||^2

argx

min​∣∣

ax−b

∣∣2這其實可以看做為乙個約束,乙個狀態估計問題是又多個約束一起構成的。然後定義了的degeneracy factord

dd,然後一波證明(見**) d=δ

d/δx

c∗=λ

min+

1d = \delta d/\delta x^*_c = \lambda _+1

d=δd/δ

xc∗​

=λmi

n​+1

所以求ata

a^ta

ata的特徵值和特徵向量即可,特別小的特徵值所對應的特徵向量即為退化方向。

由於退化方向有雜訊,所以在優化的過程中,會有誤差,所以他捨去了特徵方向上的資訊,具體實施如下圖:

我本來想在ndt的優化中加乙個退化方向檢測的功能,但是看了ndt的原始碼和相關**後發現ndt不是乙個最小二乘問題,而是乙個最大似然問題,所以不能使用這種方法來求它的退化方向。

**2是發表在icra2017的**,它是用esfk來進行定位,前半部分是用eskf來推導,後半部分則如何估計定位的準確性,即定位的退化方向。

位姿約束可以描述為nit

(x+r

i−pi

,0)=

0⇒ni

tx=n

itx(

pi,0

−ri)

=din^t_i(x+r_i-p_)= 0\rightarrow n^t_ix=n^t_ix(p_-r_i)=d_i

nit​(x

+ri​

−pi,

0​)=

0⇒ni

t​x=

nit​

x(pi

,0​−

ri​)

=di​

n

in_i

ni​是雷射束打到環境中的點雲的平面法向量,x

xx為機械人位姿,r

rr為雷射束的向量。所以一幀雷射束的約束為

對n矩陣進行奇異值的分解(svd),最小的奇異值所對應的特徵向量便是退化方向。

**3是發表於icra2019的文章,這三篇文章都是cmu的。這篇文章是測量隧道環境中的退化方向,並使用uwb與雷射雷達融合的方法解決隧道等幾何環境單一環境的定位問題。這篇文章的工作是在**2的工作下推進的。

衡量lidar的定位的可信程度,他描述的約束為c(x

,r,ρ

i)=n

it(x

+rri

ρi)+

di=0

c(x,r,\rho_i)=n^t_i(x+rr_i\rho_i)+d_i=0

c(x,r,

ρi​)

=nit

​(x+

rri​

ρi​)

+di​

=0其中,x

xx為機械人的位置向量,r

rr為機械人的姿態,ρ

i\rho_i

ρi​是雷射的測量距離。

把每一束雷射的作為乙個約束,然後來衡量約束的強度。若機械人的位姿輕微移動,但雷射的測距資訊ρ

iρ_i

ρi​變化不大,則該約束強度很弱,反之約束強度強。所以他就求取ρ

iρ_i

ρi​關於x

xx和r

rr的偏導。

把一幀中的每個約束構成矩陣

然後對其平方進行特徵值分解,特徵值小的所對應的特徵向量就是退化方向。

但是作者又覺得單純的特徵值分解沒有物理意義,他就把f和t矩陣重新對映到特徵向量的空間中,然後與力與扭矩聯絡起來(這步感覺就是寫**用)。

之後是將uwb與雷射雷達的測量值進行融合。(由於我沒有考慮使用uwb方案,所以之後就沒有仔細看…)

退化問題還是挺常見的,特別是只依賴一種感測器的時候,比如我之前在專案中遇到過的在隧道環境中無法靠雷射雷達根本無法建圖定位,因為雷射「看到」的環境都是一樣的,在隧道方向是沒有約束的;並且在隧道中gps訊號是沒的,只能依靠高精度的姿態感測器和輪速機的融合來做,當然隨著執行時間的增加,誤差會慢慢增加。

所以在已知地圖的定位問題中,可以對地圖環境進行分析,比如到了隧道的環境中,可以對環境的點雲空間進行分析,按照*****ⅱ ***** ⅲ的思路判斷出環境的退化性和退化方向。之後就靠融合來解決退化問題了。

在優化問題時,也會有退化問題,就像*****ⅰ中一樣,我最近也遇到了乙個問題,使用ceres來優化,由於乙個方向上缺少了約束,優化後的結果就很遭,其實按照*****ⅰ的思路來解決就可以的,但是loam是自己寫的優化器,但ceres的框架有點寫死的感覺,沒有找到很好的解決方法,頭疼。。。

slam中狀態估計優化退化問題(degraded optimization problem)**和原始碼實現

粒子濾波的退化問題

1 退化現象,隨著濾波迭代次數的增加,大部分粒子的權重會變得很小,只有很少的粒子具有較大的權重。2 退化現象會造成 1 後驗概率只由少數幾個權重較大的粒子表示,大多粒子對後驗概率密度貢獻接近於0 2 造成計算資源的浪費,使大量的計算浪費在對狀態估計貢獻甚微的粒子點上。3 減少退化現象 1 增加粒子數...

陣列做函式引數的退化問題

include includevoid arraysort int a,int num void arraysort int a,int num void print array int a,int num int main int i 0 int num sizeof a sizeof a 0 n...

理解slam中的非線性優化問題

主要參考了高翔老師的14講中的知識,以及結合imu預積分 on manifold preintegration for real time visual inertial odometry 結合自己的理解,做了一下整理。整體思路是從狀態估計 最大後驗估計 最小二乘 非線性最小二乘 狀態估計 最大後驗...