无人车之美——双舵轮运动分解与合成

目录


0. 写在前面

无人车,要做到无人化,但本质上,它是个车。既然是车,就离不开各种轮子。

这次,我想和你聊一聊舵轮,进一步,聊一聊双舵轮的运动解算(也叫运动分解)与运动合成。

1. 舵轮是什么?

在正式讨论前,先简单介绍一下舵轮。

舵轮,其实是一种非常常见形式的运动轮。比如,我们耳熟能详的杂技车,本质上就是一个舵轮。我在网上搜索了“杂技车”(或者“单轮车”),找到了下面的图片(侵删)。

我相信,不管你骑没骑过,都不妨碍参照它来理解什么是舵轮。

我们用一些通俗易懂的话来总结,它的特点是结构简单,行走与转向功能在同一滚动轮上实现。你看,踏板围绕在滚动轮的轴心上下翻动,转动踏板可使轮子前后移动;骑车的人通过扭动身体改变滚动轮的朝向。

1.1 为什么取名叫舵轮?

至于为什么取名叫舵轮,刚接触这个专业名称的时候,我也有这个疑问,还特意去查了查。

一般来说,“舵”的解释是,船、飞机等控制方向的装置;而“舵轮”是轮船、汽车等的方向盘。另有一种说法,位于船舶驾驶室中,用于控制船舵运动、改变船舶航向的手轮,称为舵轮。

我兜兜转转查了一圈,大概意思总结一下,舵轮是用来改变方向的。有一句话叫做,掌握了舵轮就掌握了前进的方向。

对于今天讨论的舵轮,我推测,取这个名字,可能就是因为轮子的方向可以改变。也就是滚动轮的方向(又称舵向角)相对于车体是可变的。

其实,还有个特点,如果你仔细观察,会发现,改变舵轮的中心轴朝向时,舵轮和地面的接触点可以保持不变,就好像轮子上方有个转盘可以扭动车轮的朝向一样。

其实,在AGV行业里,舵轮就是这么设计的。

1.2  AGV舵轮长啥样?

简单说,AGV舵轮代表性形式有下面两种。左图是卧式,便于做低整车高度,右图是立式,能做小车子的长宽尺寸。值得注意的是,图中红色箭头所指的位置,就是所谓的“舵”——起到改变滚动轮方向的齿轮。


如果你仔细观察一下,两种形式只是改变了行走和转向电机的摆放位置而已。

我们用稍微专业点的话来总结一下,舵轮是集成了行走电机、转向电机、减速机等组件的机械结构,集行走、牵引和转向功能为一体,可以荷载和牵引较重货物。

其中,行走电机和转向电机是舵轮的执行机构,分别由行走电机驱动器和转向电机驱动器直接控制。有时,两个电机驱动器会封装在一个外壳里,或做到一张嵌入式控制板上。这种外形的改变不影响我们对舵轮控制形式的理解。

1.3. AGV舵轮如何交互?

在工业AGV上,通常来说,舵轮电机驱动器使用伺服电机,以低压永磁无刷伺服电机为主,因此,可交互的信息很多,比如电机转速、电机扭矩、电机的绝对位置、电机加速度、电机电压电流等。

但在一些大功率场合,也会使用变频电机和外装轮速计或角度编码器来组合使用。

为了便于后续对舵轮车进行运动分解,我们将这些信息进行提炼,并对模型进行抽象:

1) 舵轮转向电机的转角可控,状态为舵轮的舵向角大小,简称舵向角,记作θ;

2) 舵轮行走电机的转速可控,状态为舵轮接地点的线速度大小,简称线速度,记作vt;

3) 舵轮的线速度方向恒等于舵向角;

关于舵轮的舵向角θ的测量,比较简单,一般直接使用伺服电机内置的绝对值编码器的实时数据。

关于舵轮的线速度vt,需要由电机实时转速(rpm)换算而来。一般而言,为了增大滚动轮的输入扭矩,行走电机不直接输出扭矩,而是先经过减速机,再传递给滚动轮。在不考虑轮子在地面上可能存在的滑动时,舵轮车线速度vt的公式为:

vt= \frac{n}{60*i}*\pi *d

其中,

n为电机转速,单位为rpm(每分钟的转动圈数);

i为减速机的减速比,无量纲;

d为滚动轮的外径,单位为米;

vt为舵轮转动轴的线速度,单位为m/s(米/秒);

我们都知道,对于物体的运动状态,通常会抽象成线速度v和角速度w。其中,线速度v

w=\frac{vt}{r}

进行计算。其中,r为舵轮接地点到转向中心点(整车的转向中心点,也叫瞬心)的距离。这样一来,舵轮的参数也可由线速度大小、角速度大小、舵向值(vt,w,θ)三个参数来表达。

需要注意的时,到目前为止,我们讨论的对象依旧是单个舵轮。

2. 双舵轮的运动分解

2.1 问题描述

为了讨论方便,在不失一般性的前提下,我们选择前后对称排布的双舵轮车进行讨论。

理由有两点:

1.  双舵轮的结构形式,可实现车辆的全向移动,是一种形式简洁的全向车。

2. 对于双舵轮的研究结果,只需要增加有限的约束,便可快速应用到单舵轮的场合。比如,假定后轮的舵向角恒定不变,速度与整车质心运动速度动态匹配,也就是说把后轮变成定角度的随动轮,那么,模型便可对应到单舵轮。

 

因此,我们讨论的问题就变成了双舵轮的运动控制了。

当我们控制双舵轮AGV去跟随路径时,导航算法会给AGV下发目标线速度大小vt、目标线速度方向θ和目标角速度w。这里需要区分两个概念,舵轮自身的航向角和AGV车体运动中心(一般为车体几何中心,但也可以自由设定。本文假定AGV运动中心为车体的几何中心)的航向角,两者不一定相等,准确的说,在导航的动态过程中,大部分时间是不相等的。

基于以上概念,我们建立车体坐标系,采用东北天(ENU)形式,车体逆时针旋转时为正,顺时针旋转时为负。我们在后续讨论中,舵轮的航向角的零位定义在车体的正北向,也就是当车体向前时,前后舵轮的舵向角为0。结合正负角度的定义有,舵轮逆时针旋转时角度增加,顺时针旋转时角度变小,取值范围为[-180°,180°]。

现在,来一句话描述问题。

假设AGV的运动中心在两个舵轮连线的中点,当导航算法给AGV下发控制指令,含有目标线速度大小、目标线速度方向和目标角速度,记作(vt,w,θ),我们通过运动分解,得到两个舵轮各自的线速度和舵向角,记作(v1,θ1)和(v2,θ2)。

2.2 运动分解的公式推导

为简化讨论的过程,我们可以将双舵轮AGV的模型进一步简化,认为两个舵轮旋转中心支点刚性连接,然后,以两个舵轮旋转中心连线的中点,来讨论AGV的线速度和角速度。


已知下发给双舵轮AGV运动中心的参数为(v,w,θ),两舵轮之间的距离为d,其中,两个舵轮的运动状态分别表示为(v1,w1,θ1)和(v2,w2,θ2)。

由于整个AGV车体假设为刚性连接,因此两个舵轮、车体运动中心以及车体任意一点的旋转角速度w是相同的。我们的目标是,通过运动分解,获得两个舵轮的目标控制值,且只需要包含线速度和舵向角,即(v1,θ1)和(v2,θ2)。

下面,我们一步步进行推导。

1)计算AGV转向中心的转动半径O1O2;

r = O2O1 = \frac{v}{w}

2)计算前后舵轮各自的转动半径:(从O2点向线段P1P2做辅助垂线O2T1)

r1 = O2P1 = \sqrt{(r\cdot \cos \theta )^{2}+(d/2+r\cdot \sin \theta )^{2}}

r2 =O2P2 = \sqrt{(r\cdot \cos \theta )^{2}+(d/2-r\cdot \sin \theta )^{2}}

3) 计算前后舵轮的舵向角:

\theta_{1} = \arctan( \frac{P1O1+O1T1}{O2T1}) = \arctan( \frac{d/2+r\sin\theta}{rcos\theta})

\theta_{2} = \arctan( \frac{P2O1-O1T1}{O2T1}) = \arctan( \frac{d/2-r\sin\theta}{rcos\theta})

4)计算前后舵轮的线速度:

v_{1} = w * r_{1}

v_{2} = w * r_{2}

 总得来说,整个推导过程还是相对比较简单的。

特别地,当θ1或θ2强制为0时,即为单舵轮结构。此时,一般而言,整车的移动中心将移动到对应的舵轮旋转中心。调整之后,依旧可以用上述四步的方法,进行类似地推导。

3. 双舵轮的运动合成

3.1 问题描述

在有些情况,AGV控制系统需要获得整体的运动状态,供其他系统进行数据融合。比如,SLAM系统可使用车辆的里程计信息,增加定位数据的稳定性,提高定位的精度等。又比如,在导航系统中,轨迹规划控制器需要实时获取车辆的线速度和角速度,以便形成控制闭环。

这时,就需要用到双舵轮的运动合成。

在正式合成之前,我们先定义一下待解决的具体问题。

假设AGV的运动中心在两个舵轮连线的中点,当我们已知两个舵轮各自的线速度和舵向角,记作(v1,θ1)和(v2,θ2),计算整个AGV中心点的状态信息,含有线速度大小、角速度和线速度方向,记作(v,w,θ)。

3.2 运动合成的公式推导

已知:两个舵轮各自的线速度和舵向角,分别为(v1,θ1)和(v2,θ2);

求:AGV中心点的目标线速度大小、目标角速度和目标线速度方向,记作(v,w,θ)。

因此,运动合成的推导过程如下:

1)计算前后舵轮的转向半径r1和r2:

如右图所示,为了便于计算舵轮运动半径r1(即O2P1),增加了辅助垂线P1T2;

r_{1} = \frac{d\cdot\cos \theta2 }{\sin(\theta1+\theta2)}

r2(即O2P2)的求法类似,不赘述,直接展示公式。

r_{2} = \frac{d\cdot\cos \theta1 }{\sin(\theta1+\theta2)}

2)计算前后舵轮的角速度;

w_{0} = v_{1} / r_{1}

或有

 w_{0} = v_{2} / r_{2}

3)通过前舵轮或后舵轮,计算AGV中心点的航向角。(使用左图推导)

\theta_{0} = \arctan( \frac{P1T1-P1O1}{O2T1}) = \arctan( \frac{r_{1}\cdot \sin\theta_{1} - d/2}{r_{1}\cdot cos\theta_{1}})

或有

\theta_{0} = \arctan( \frac{P2O1-P2T1}{O2T1}) = \arctan( \frac{d/2 - r_{2}\cdot \sin\theta_{2}}{r_{2}\cdot cos\theta_{2}})

4)通过前舵轮或后舵轮,计算AGV中心点的转向半径。

r = O2O1 = \sqrt{(r_{1}\cdot \cos \theta_{1} )^{2}+((r_{1}\cdot \sin \theta_{1} - d/2 )^{2}}

或有

r= O2O1 = \sqrt{(r_{2}\cdot \cos \theta_{2} )^{2}+(d/2 - r_{2}\cdot \sin \theta_{2} )^{2}}

5)计算AGV中心点的线速度大小;

v = w * r

4. 最后的话

双舵轮的结构形式简单,运动分解和合成的过程也很直观。

公式无需记忆,使用的时候,临时推导即可快速获得。

当假定其中一个舵轮的舵向角恒定不变,速度与整车运动中心运动速度动态匹配,也就是说把该轮变成定角度的随动轮,那么,本文的方法就可以应用到单舵轮的场合。

对于两个以上舵轮构成的AGV车辆,套用本文的思路和步骤,也能顺利地解决问题。

好了,今天就到这里,希望对你有帮助。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年9月1日
下一篇 2023年9月1日

相关推荐