麥克納姆輪簡介
依靠各自機輪的方向和速度,這些力的最終合成在任何要求的方向上產生一個合力矢量從而保證了這個平台在最終的合力矢量的方向上能自由地移動,而不改變機輪自身的方向。在它的輪緣上斜向分布着許多小滾子,故輪子可以橫向滑移。小滾子的母線很特殊,當輪子繞着固定的輪心軸轉動時,各個小滾子的包絡線為圓柱面,所以該輪能夠連續地向前滾動。麥克納姆輪結構緊湊,運動靈活,是很成功的一種全方位輪。有4個這種新型輪子進行組合,可以更靈活方便的實現全方位移動功能。——百度百科
參數設定
-
已知條件:小車在以底盤平面為xoy面的坐標系上,欲使小車以Vc的速度在oxy平面上運動,同時圍繞小車雲台YAW軸以w的角速度旋轉
-
規定右手坐標系如下:
-
在接下來的講解中,將會以紅色標注底盤坐標系,以藍色標注雲台坐標系
- 參數標注
設r為麥輪軸心到小車底盤中心的距離,V0為麥輪在底盤坐標系下的合速度,V//為麥輪在與小膠輪平行方向的速度,wheel_speedx(x:1~4)為每個麥輪的線速度設定值。
注意:
與麥輪的小膠輪方向垂直的速度直接轉化為小膠輪的上接觸地面點的線速度,因此不用考慮
分解速度
先把小車整體速度分解到單個麥輪上。這里坐標系為底盤坐標系
再將麥輪單獨分析,麥輪速度分解到小膠輪坐標系上,目的是篩選有用的速度,將膠輪上無用的速度過濾(即小膠輪的轉速)。
最后將過濾掉無用速度的有效速度分解到底盤坐標系上,也可以說是麥輪轉動的坐標系上,得到麥輪輪子圓周上的速度。
此時,單個輪子的分解已經全部搞定。
其余的輪子同理可得:
數據處理注意事項
對於角速度w和wheel_speed的關系,不難發現,四個輪子都差了同一個固定的常系數,因此實際書寫代碼時,會發現某些人源碼並不關心該常系數,並常常將其置一。
解釋該系數置一的原因:
最開始我的想法很簡單,考慮到底盤整體設置了角度環PID,該常量被KP吸收,無需考慮。但是再次想想,發現其實方向錯了,應當理解為你設定的角速度現在÷一個固定常數,也就是說無系數的w與有系數的w之間呈線性關系。
在只追求角速度轉動快慢,而不需要一次性地、從理論上精確控制角速度值的時候是沒有影響的,畢竟我們可以讓車轉動起來,通過類似陀螺儀的傳感器輸出當前的精確角速度,並不斷調試出設定到rad/s之類的角速度,這才是可行的。相反,理論計算出來的值反而會因為機械加工、測量等誤差而產生錯誤。
總之,在做算法時不妨直接將w前的系數設置為1,但是正負號不能改變!!!並且以后我會極其推薦這種做法的。