麥輪運動學模型
轉自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)))