天天看點

三輪全向移動機器人的控制方法

我看過幾種三輪全方位底盤的控制方法,感覺不好了解,我在這裡簡單的分享一下我的一種思路。

對于場地坐标系的速度Vx,Vy推導到三個輪子的速度一共有兩個矩陣公式就能解決。

第一個公式,場地坐标系速度Vx,Vy,W轉換到機器人坐标系速度vx,vy,w公式:

三輪全向移動機器人的控制方法
三輪全向移動機器人的控制方法

角theta是機器人坐标系的x軸正方向與場地坐标系y軸正方向的夾角,最終theta所帶值為與陀螺儀偏航角有關的一個變量。

這個公式推導一下也是很友善的,無論定位系統如何安裝,這個公式不會變的!!!

第二個公式,這個公式需要你人為的推導一下。我舉一個典型例子:

1,機器人坐标系與機械結構關系如圖(x軸與2号輪平行)

三輪全向移動機器人的控制方法

将vx,vy分别分解到輪子方向速度,規定的輪子正方向如白色箭頭所示。

計算v1:

三輪全向移動機器人的控制方法

v1 = vx’ + vy’ +wL;(L為三輪底盤中心到輪中心的距離)

v1 = -vx * cos(60) - vy*sin(60) + w*L;

明顯v2 = vx + w*L;

另外将計算v3:

三輪全向移動機器人的控制方法

v3 = vx’+ vy’+ w*L;(L為三輪底盤中心到輪中心的距離)

即v3 = -vx*cos(60) + vy*sin(60) + w*L;

注意,分解速度的時候一定朝着規定的輪子正方向分解!!!

是以,第二個矩陣誕生了!基本上問題就得到解決了。

三輪全向移動機器人的控制方法

将第一個矩陣帶入第二個矩陣問題得解,之後可以通過三角公式進行化簡。便于我以後友善調試,我就當記筆記把後面的步驟寫下來吧!

将第一個矩陣帶入後得到下列方程:

三輪全向移動機器人的控制方法

計算得:

三輪全向移動機器人的控制方法

看到這些公式覺得親切嗎?

sin(A+B) = sin(A)*cos(B) + cos(A)*sin(B);

cos(A+B) = cos(A)*cos(B) - sin(A)*sin(B);

sin(A-B) = sin(A)*cos(B) - cos(A)*sin(B);

cos(A-B) = cos(A)*cos(B) + sin(A)*sin(B);

利用它們化簡得:

三輪全向移動機器人的控制方法

其他情況都這樣推導就行,第一個矩陣不會改變,我們隻需手演算即可。

這是我對該情況封裝的函數:

typedef struct
{
    float v1;
    float v2;
    float v3;
}ActThreeVell;
ActThreeVell ThreeWheelVellControl2(float Vx, float Vy, float angularVell)
{
#define AFA 60
#define L   2ActThreeVell vell;

theta = ;

vell.v1 = (float)(-cos((AFA + theta) / *) * Vx - sin((theta + AFA) / *) * Vy + L * angularVell);

vell.v2 = (float)(cos(theta / *) * Vx + sin(theta /*) * Vy      + L * angularVell);

vell.v3 = (float)(-cos((AFA - theta) /  * ) * Vx + sin((AFA - theta) / *) * Vy + L * angularVell);

return vell;



}
           

繼續閱讀