最小二乘法實現二維多感測器標定

2021-08-08 22:17:30 字數 2836 閱讀 2418

最近用c++實現了多感測器的標定,實現方法很簡單,但是很實用,特來分享一波。

簡單說明現在需要解決的問題。如圖每個座標系都代表乙個感測器的位姿,十字星代表同一時刻兩個感測器感知到的環境中的固定點(特徵點)。現在已知兩個感測器座標系中個特徵點的對應座標值(帶有雜訊),需要求得兩個感測器間的位姿變換引數(也就是這裡的旋轉矩陣r和平移矩陣t)。

數學表達如下

已知感測器a觀測到的特徵點(1,2,3…n)座標(x,y)為: (p

a1x,

pa1y

),(p

a2x,

pa2y

),…,

(pan

x,pa

nx)

已知感測器b觀測到的特徵點(1,2,3…n)座標(w,z)為: (p

b1w,

pb1z

),(p

b2w,

pb2z

),…,

(pbn

w,pb

nz)

求xy座標系變換到wz座標系的平移引數與旋轉引數。

座標系變換可以表示為: a∗

pa=p

b a=

⎡⎣⎢c

os(θ

)sin

(θ)0

−sin

(θ)c

os(θ

)0xt

yt1⎤

⎦⎥其中

θ 是旋轉角度,xt

,yt 是平移。

eigen有給出很多最小二乘的解決方案,例如下面就有乙個利用svd做最小二乘的方法:

補全**,可以得到乙個可執行的例子:

#include 

#include "eigen/svd"

using

namespace

std;

using

namespace eigen;

int main()

簡單介紹上面**。這個例子實現的是:
已知mx=rhs,已知3* 2的矩陣m,以及3* 1的向量rhs。**通過最小二乘法求得了最優的x。

步驟大致如下:

先利用matrixxf m = matrixxf::random(3,2);生成了3*2的隨機數矩陣m;

對m做svd分解。這個jacobisvd預設只會計算singular values。如果需要求得u或者v矩陣,需要另外設定。這裡我們要求解最小二乘,只需要求解 thin u 和 thin v,所以用到的函式是:

jacobisvdsvd(m, computethinu | computethinv);

用svd.solve(rhs)求解x。

前面的例程解出了mx

=rhs

中的x。但是回看第一部分,我們需要求解的是: a∗

pa=p

b ⎡⎣

⎢cos

(θ)s

in(θ

)0−s

in(θ

)cos

(θ)0

xtyt

1⎤⎦⎥

⎡⎣⎢p

axpa

y1⎤⎦

⎥=⎡⎣

⎢pbw

pbz1

⎤⎦⎥

其中已知的是右邊兩個矩陣。所以我們需要先重構矩陣為: ⎡⎣

⎢⎢⎢⎢

⎢⎢⎢⎢

⎢⎢⎢p

a1xp

a1yp

a2xp

a2y.

..pa

nxpa

ny−p

a1yp

a1x−

pa2y

pa2x

−pan

ypan

x101

0100

1010

1⎤⎦⎥

⎥⎥⎥⎥

⎥⎥⎥⎥

⎥⎥∗⎡

⎣⎢⎢⎢

⎢cos

(θ)s

in(θ

)xty

t⎤⎦⎥

⎥⎥⎥=

⎡⎣⎢⎢

⎢⎢⎢⎢

⎢⎢⎢⎢

⎢pb1

xpb1

ypb2

xpb2

y...

pbnx

pbny

⎤⎦⎥⎥

⎥⎥⎥⎥

⎥⎥⎥⎥

⎥ 現在就變成了mx=rhs求解x的形式,可以簡單改寫例程即可求解:

#include 

#include "eigen/svd"

using

namespace

std;

using

namespace eigen;

int main()

上面**輸入了帶有雜訊的三對點進行測試,執行結果與理論值近似。

在實際運用中,如果有p對點,需要將matrixxf m(6,4);修改為matrixxf m(p,4);。vectorxf rhs(6);修改為vectorxf rhs(p);。

輸入矩陣有兩種形式,一種是一次性輸入,m << 1.97, … , …… ;

另一種是單個輸入: m(0,0)= 2;m(0,1)=-2;m(0,2)=1;m(0,3)=0; …

根據輸入需求進行修改即可。

陣列重構

eigen—jacobisvd詳解

Matlab實現最小二乘法

p polyfit x,y,n 最小二乘法計算擬合多項式係數。x,y為擬合資料向量,要求維度相同,n為擬合多項式次數。返回p向量儲存多項式係數,由最高次向最低次排列。y polyval p,x 計算多項式的函式值。返回在x處多項式的值,p為多項式係數,元素按多項式降冪排序。擬合以下資料 x 12 9...

最小二乘法及其C 實現

監督學習中,如果 的變數是離散的,我們稱其為分類 如決策樹,支援向量機等 如果 的變數是連續的,我們稱其為回歸。回歸分析中,如果只包括乙個自變數和乙個因變數,且二者的關係可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析。如果回歸分析中包括兩個或兩個以上的自變數,且因變數和自變數之間是線性關係,...

線性回歸 最小二乘法實現

目錄 一 線性回歸 給定由n個屬性描述的樣本x x0,x1,x2,xn 線性模型嘗試學習乙個合適的樣本屬性的線性組合來進行 任務,如 f x w1x1 w2x2 wnxn b w.t x b。通過一定方法學得向量w和常數b後,模型便可以確定下來。而對於給定資料集d xm x1,x2,xn 線性回歸則...