1. 程式人生 > >麥輪運動學模型

麥輪運動學模型

轉自http://bbs.elecfans.com/jishu_1583797_1_1.html

在ROS中,如果使用Twist訊息,您通常會設定linear.x,linear.y和angular.z欄位。
一個不相關的說法是,如果你在不平坦的地形上作業,那麼做mecanum型別的動作將失敗並且有很多滑倒。滑移引導型別的運動通常會更好(使用mecanum車輪)。

WHEEL_SEPARATION_WIDTH = DISTANCE_LEFT_TO_RIGHT_WHEEL / 2

WHEEL_SEPARATION_LENGTH = DISTANCE_FRONT_TO_REAR_WHEEL / 2

正向運動學

車輪命令單位是rad / s

wheel_front_left =(1 / WHEEL_RADIUS)*(linear.x - linear.y - (WHEEL_SEPARATION_WIDTH + WHEEL_SEPARATION_LENGTH)* angular.z);

wheel_front_right =(1 / WHEEL_RADIUS)*(linear.x + linear.y +(WHEEL_SEPARATION_WIDTH + WHEEL_SEPARATION_LENGTH)* angular.z);

wheel_rear_left =(1 / WHEEL_RADIUS)*(linear.x + linear.y - (WHEEL_SEPARATION_WIDTH + WHEEL_SEPARATION_LENGTH)* angular.z);

wheel_rear_right =(1 / WHEEL_RADIUS)*(linear.x - linear.y +(WHEEL_SEPARATION_WIDTH + WHEEL_SEPARATION_LENGTH)* angular.z);

為了驅動機器人,您可能還需要反轉一側,因為電機安裝在另一側。例如:

wheel_front_right = -1 * wheel_front_right

wheel_rear_right = -1 * wheel_rear_right

另外,這給出了一個以rad / s為單位的輸出。如果您的電機控制器以編碼器計數作為單位執行,則需要轉換單位。

逆運動學

linear.x =(wheel_front_left + wheel_front_right + wheel_rear_left + wheel_rear_right)*(WHEEL_RADIUS / 4)

linear.y =(-wheel_front_left + wheel_front_right + wheel_rear_left-wheel_rear_right)*(WHEEL_RADIUS / 4)

angular.z =(-wheel_front_left + wheel_front_right-wheel_rear_left + wheel_rear_right)*(WHEEL_RADIUS /(4 *(WHEEL_SEPARATION_WIDTH + WHEEL_SEPARATION_LENGTH)))