查看: 502|回复: 0
打印 上一主题 下一主题

[教程/开发] 1.四麦轮底盘运动分析

[复制链接]
跳转到指定楼层
沙发
发表于 2023-10-26 22:53:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 VCJ 于 2023-10-26 23:00 编辑

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

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

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


运动底盘共有4个轮子(A、B、C、D),4个轮子呈中心对称,其中AD、BC、AB、DC互为手性对称,每个麦轮由一组独立的电机驱动,4组电机都是带编码器的无刷直流电机。运动学分析图中,参数含义如下:
  • W :轮距,底盘左右麦轮的距离,单位:m。
  • H:轴距,底盘前后麦轮的距离,单位:m。
  • Vy :底盘前后移动速度,前进为正,单位:m/s。
  • Vx :底盘左右移动速度,左移为正,单位:m/s。
  • Vz :底盘绕O点旋转速度,逆时针为正,单位:rad/s。(O点为轮距、轴距中心线的交点)
  • VA轮、VB轮、VC轮、VD轮 :麦轮A、B、C、D的线速度,由电机转动带动麦轮轮毂产生,前进为正,单位:m/s。


所谓运动学分析,也就是分析Vx、Vy、Vz 与VA轮、VB轮、VC轮、VD轮 的关系。在分析演算过程中,涉及到每个轮子的相关参数,以下C轮为例,解释参数含义,A、B、D轮同理:
  • VC辊 :麦轮C与地面接触的辊子的线速度,由麦轮C与地面的相对滑动产生(注意是滑动,不是麦轮C的转动产生的VC轮),垂直辊轴向前为正,单位:m/s。
  • Vz_C :麦轮C质心绕点O旋转的线速度,正方向垂直于麦轮C质心与O点的连线,偏逆时针方向。
  • VC_x :麦轮C质心的前后移动速度,与底盘前后移动速度Vx和底盘绕O点旋转速度Vz相关,前进为正,单位:m/s。
  • VC_y :麦轮C质心的左右移动速度,与底盘左右移动速度Vx和底盘绕O点旋转速度Vz相关,左移为正,单位:m/s。
  • αC :轮子C质心与O点的连线与前进方向的夹角,其值已知为tan?1                                。
  • β:轮轴和辊轴之间的夹角,为45°。


   了解相关参数后,接下来分析这些参数之间的关系,以及如何求出四轮麦轮底盘的运动学正逆解公式。以麦轮C为例,求麦轮C质心的前后左右移动速度VC_x、VC_y与底盘整体的前后左右移动速度、绕O点旋转速度Vx、Vy、Vz之间的关系,底盘整体与4个麦轮质心可以认为是一个刚体,则速度分解可得:
式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可得:
由式6,推导出VC辊的关系式:
将式7代入式5,设可得:
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)
又因为则VC轮与Vx、Vy、Vz的关系:

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

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

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

根据上述推导得到的数学公式,在运动底盘中,对应的运动学正解代码段:
  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。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入因仑

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表