Odometry
Last updated
Last updated
Odometry是一個位置偵測的系統,可以用來計算機器在場地上的座標位置
在計算位置時,必須先有一套座標系統。在此設定做表的原點在場地俯視圖的左上角,而 x 隨著機器往右提升,y隨著機器往下提升。
再把兩個算式簡化,得到:
最後得到機器面向角度變化:
我們可以把 local y 座標的變化定義為從起始點到機器最後位置畫出直線的長度,可以用此公式計算:
同樣的,也可以用此公式計算local x的變化:
最後用旋轉矩陣轉換到Global:
測量左輪、右輪、橫向輪角度
計算左輪、右輪、橫向輪角度變化
計算機器面向角度變化,和機器的面向角度(如果有Inertial Sensor,可以直接讀值,並計算角度變化)
如果角度變化為零,則 local y 變化為左輪、右輪的角度變化;local x 變化為橫向輪角度變化。否則,以 計算local座標變化 計算 local 座標變化
把 local 座標變化轉換為 global 座標變化
把 global 座標變化加起來,得到機器位置座標
重複以上步驟
這個演算法必須在while loop裡跑,但是不能影響到機器主程序,所以也要把它放在一個獨立執行的Task裡。
此算法一個迴圈能在一秒內跑越多次越好(盡量達到 50~100次)
:左邊輪子的角度變化
:右邊輪子的角度變化
:橫向輪子的角度變化(假設此輪在車後)
:機器的面相角度
:機器的面相角度變化
:左邊輪子距離中心的距離
:右邊輪子距離中心的距離
:後面橫向輪子距離中心的距離
:local x座標變化
:local y座標變化
:global x座標變化
:global y座標變化
角度的變化量會直接影響到後續計算的座標變化。如果機器有裝角度感應器,如Inertial Sensor,就可以用感應器讀到的值算角度變化。如果沒有,就需要靠左右輪計算。設 為機器的旋轉半徑,可以用扇形公式得到左右輪的角度變化:
忽略 ,再進行簡化,得到: