中科因仑“3+1”工程特种兵精英论坛

标题: 1.四麦轮底盘运动分析 [打印本页]

作者: VCJ    时间: 2023-10-26 22:53
标题: 1.四麦轮底盘运动分析
本帖最后由 VCJ 于 2023-10-26 23:00 编辑

   麦轮,全称为麦克纳姆轮(Mecanum Wheel),又称为艾隆轮(Ilon Wheel)。其由轮毂和固定在外周的许多小辊子构成,轮轴和辊轴之间的夹角通常为45°其结构如图所示。每个轮子具有三个自由度,分别是绕轮轴转动,沿垂直于与地面接触的辊子的辊轴方向移动,绕轮子和地面的接触点转动。

   根据机械原理,机构的原动件数应该等于机构的自由度,因此,若要实现三个自由度的控制,则应该有三个独立的输入。而每个麦轮可以看作一个原动件,因此,若要实现平面3个自由度的控制,就应该至少有3个麦轮。也就是说,理论上只要有3个这样的轮子组成的移动平台便可实现全向移动。但是,在实际应用中,麦轮都是成对使用的,两个左旋轮,两个右旋轮,总共4个,互为手性对称,这样既可以增加机构的稳定性,又方便控制,同时还提升了载重能力。

   麦轮底盘结构及运动学分析,如图所示。

[attach]4417[/attach]

运动底盘共有4个轮子(A、B、C、D),4个轮子呈中心对称,其中AD、BC、AB、DC互为手性对称,每个麦轮由一组独立的电机驱动,4组电机都是带编码器的无刷直流电机。运动学分析图中,参数含义如下:

所谓运动学分析,也就是分析Vx、Vy、Vz 与VA轮、VB轮、VC轮、VD轮 的关系。在分析演算过程中,涉及到每个轮子的相关参数,以下C轮为例,解释参数含义,A、B、D轮同理:

   了解相关参数后,接下来分析这些参数之间的关系,以及如何求出四轮麦轮底盘的运动学正逆解公式。以麦轮C为例,求麦轮C质心的前后左右移动速度VC_x、VC_y与底盘整体的前后左右移动速度、绕O点旋转速度Vx、Vy、Vz之间的关系,底盘整体与4个麦轮质心可以认为是一个刚体,则速度分解可得:
[attach]4418[/attach]
式1、式2是麦轮C质心速度与底盘整体速度的关系,而麦轮C质心速度从根本上来说,还是靠VC轮和VC辊合并产生的。

   已知VC轮是麦轮C的线速度,是由电机转动带动麦轮轮毂产生的。而VC辊是由麦轮C与地面的相对滑动产生的,VC辊速度的大小及方向是由麦轮A、B、C、D的差速和机械结构决定的,其动力来源也是电机,所以当底盘的运动速度需要VC辊辊转动时,就需要电机产生更大的扭矩,带动麦轮轮毂进而带动麦轮辊子。通过速度分解可得:
VC_x = VC轮 + VC辊 × sinβ      式3
VC_y = -VC辊 × cosβ      式4
联立式1、式3和式2、式4可得:
[attach]4422[/attach]
由式6,推导出VC辊的关系式:
[attach]4421[/attach]
将式7代入式5,设[attach]4423[/attach]可得:
VC轮- Vy - Vz × L ×cos αC ×tan β = Vx + Vz + L × sin αC
VC轮 = Vx + Vy + Vz × L ×(sin αC + cos αC + tan β)
其中β= 45°,则:
VC轮 = Vx + Vy + Vz × L ×(sin αC + cos αC)
又因为[attach]4426[/attach]则VC轮与Vx、Vy、Vz的关系:
[attach]4427[/attach]

同理,推导VA轮、VB轮、VD轮与Vx、Vy、Vz的关系,推导时需要注意A、B、D三个麦轮与地面接触的辊子的线速度方向,观察底盘运动学分析图容易知道,线速度方向影响的是麦轮C质心的左右移动速度:
VA_y = -VA辊 × cosβ,VB_y = -VB辊 × cosβ,VD_y = -VD辊 × cosβ

最后可以得底盘的运动学逆解公式,由三轴目标速度求出四个轮子的目标速度:
[attach]4428[/attach]

联立式8、式9、式10、式11,可以求出底盘的运动学正解公式,由四个轮子的实时速度求出三轴实时速度:
[attach]4429[/attach]

根据上述推导得到的数学公式,在运动底盘中,对应的运动学正解代码段:
  1. CarDat.Speed.X = (MOTOR_A.Encoder+MOTOR_B.Encoder+MOTOR_C.Encoder+MOTOR_D.Encoder)/4;
  2. CarDat.Speed.Y = (MOTOR_A.Encoder-MOTOR_B.Encoder+MOTOR_C.Encoder-MOTOR_D.Encoder)/4;
  3. CarDat.Speed.Z = (-MOTOR_A.Encoder-MOTOR_B.Encoder+MOTOR_C.Encoder+MOTOR_D.Encoder)/4/(Axle_spacing+Wheel_spacing);
复制代码
其中,入口参数MOTOR_A.Encoder、MOTOR_B.Encoder、MOTOR_C.Encoder、MOTOR_D.Encoder为4个轮子的实时输出速度;
CarDat.Speed.X、CarDat.Speed.Y、CarDat.Speed.Z为底盘运动的三轴目标速度(Vz方向的速度,要除去底盘自身的尺寸);
Axle_spacing为小车(前后)轴距的1/2;
Wheel_spacing 为小车(左右)轮距的1/2。

对应的运动逆解代码段:
  1. Void Drive_Motor(float Vx, float Vy, float Vz)
  2. {
  3.       MOTOR_A.Target = +Vy + Vx - Vz * (Axle_spacing + Wheel_spacing);
  4.       MOTOR_B.Target = -Vy + Vx - Vz * (Axle_spacing + Wheel_spacing);
  5.       MOTOR_C.Target = +Vy + Vx + Vz * (Axle_spacing + Wheel_spacing);
  6.       MOTOR_D.Target = -Vy + Vx + Vz * (Axle_spacing + Wheel_spacing);
  7. }
复制代码
其中,入口参数Vx、Vy、Vz为底盘运动的三轴目标速度;
MOTOR_A.Target、MOTOR_B.Target、MOTOR_C.Target、MOTOR_D.Target为4个轮子的实时输出速度;
Axle_spacing为小车(前后)轴距的1/2;
Wheel_spacing 为小车(左右)轮距的1/2。







欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4