运动特性为两轮差速驱动,其底部后方两个同构驱动轮的转动为其提供动力,前方的随动轮起支撑作用并不推动其运动,如图1两轮差速驱动示意图所示。
定义其左右驱动轮的中心分别为 W l W_l Wl和 W r W_r Wr,且车体坐标系中这两点在惯性坐标系下移动的线速度为 v l v_l vl和 v r v_r vr,理想情况下即为左右轮转动时做圆周运动的线速度。该值可以通过电机驱动接口输出的角转速 ϕ l \phi_l ϕl, ϕ r \phi_r ϕr和驱动轮半径 r r r求得,即:
v l = r ⋅ ϕ l v_l = r\cdot {\phi_l} vl=r⋅ϕl
令两驱动轮中心连线的中点为机器的基点 C C C, C C C点在大地坐标系 X O Y XOY XOY下坐标为 ( x , y ) (x, y) (x,y),机器的瞬时线速度为 v c v_c vc,瞬时角速度 ω c \omega_c ωc,姿态角 θ θ θ即为 v c v_c vc与 X X X轴夹角。此时,机器位姿信息可用矢量 P = [ x , y , θ ] T P = [x, y, θ]^T P=[x,y,θ]T表示。机器人瞬时线速度为 v c v_c vc可以表示为:
v c = v r + v l 2 v_c = \frac{v_r+v_l}{2} vc=2vr+vl
令左右轮间距为 l l l,且机器瞬时旋转中心(ICR)为 O c O_c Oc,转动半径即为 C C C到 O c O_c Oc的距离 R R R。机器在做同轴(轴为左右轮到ICR连线)圆周(圆心为ICR)运动时,左右轮及基点所处位置在该圆周运动中的角速度相同 ω l = ω r = ω c \omega_l=\omega_r=\omega_c ωl=ωr=ωc,到旋转中心的半径不同,有 l = v r ω r − v l ω l l=\frac{v_r}{\omega_r}-\frac{v_l}{\omega_l} l=ωrvr−ωlvl。则机器的瞬时角速度 ω c \omega_c ωc可以表示为:
ω c = v r − v l l \omega_c = \frac{v_r-v_l}{l} ωc=lvr−vl
联立两式,利用 v r v_r vr和 v l v_l vl求出机器转动半径:
R = v c ω c = l 2 v r + v l v r − v l R = \frac{v_c}{ω_c}=\frac{l}{2}\frac{v_r+v_l}{v_r-v_l} R=ωcvc=2lvr−vlvr+vl
差速驱动方式,即V1和V2间存在的速度差关系决定了其具备不同的三种运动状态,如图所示:
通过上述两节的运动分析,在驱动轮与地面接触运动为纯滚动无滑动情况下,机器的运动学模型可以表示为:
[ x ˙ y ˙ θ ˙ ] = [ c o s θ 0 s i n θ 0 0 1 ] [ 1 2 1 2 1 l − 1 l ] [ v r v l ] \left[\begin{matrix} \dot x \\ \dot y \\ \dot θ \\ \end{matrix}\right]= \left[\begin{matrix} cosθ & 0 \\ sinθ & 0 \\ 0 & 1 \\ \end{matrix}\right]\left[\begin{matrix} \frac{1}{2} & \frac{1}{2} \\ \frac{1}{l} & -\frac{1}{l} \\ \end{matrix}\right]\left[\begin{matrix} v_r\\ v_l\\ \end{matrix}\right] ⎣⎡x˙y˙θ˙⎦⎤=⎣⎡cosθsinθ0001⎦⎤[21l121−l1][vrvl]
MATLAB仿真程序免积分下载链接。
位移变化:
姿态角变化曲线:
(机器人坐标系服从右手定则,其顺时旋转针姿态角减少,逆时针旋转姿态角增加)
位移变化:
姿态角变化曲线:
(机器人坐标系服从右手定则,其顺时旋转针姿态角减少,逆时针旋转姿态角增加)
运动控制的被控对象是所分析的两轮差速移动机器人;直观的控制量是上述建模中所述的左右轮转速,为了更一般的描述车体的运动,控制量选车体线速度 v v v与角速度 ω \omega ω,左右轮转速可由模型反求取。
控制机器人由当前点移动到指定目标点,其核心是令机器人在控制器作用下(以一定合适的方式)持续地朝向目标点运动。其控制系统框图为:
设机器人实时位姿为 [ x t , y t , θ t ] [x_t, y_t,\theta_t] [xt,yt,θt],目标位置为 [ x G , y G , θ G ] [x_G, y_G,\theta_G] [xG,yG,θG],易求出机器与目标点间实时的距离差 d e r r = ( x G − x t ) 2 + ( y G − y t ) 2 d_{err}=\sqrt{(x_G-x_t)^2+(y_G-y_t)^2} derr=(xG−xt)2+(yG−yt)2与角度差 θ e r r = tan ( y G − y t x G − x t ) − θ t \theta_{err} = \tan(\frac{y_G-y_t}{x_G-x_t})-\theta_t θerr=tan(xG−xtyG−yt)−θt(即图中 δ = φ − θ \delta = \varphi-\theta δ=φ−θ),如下图所示。
一种简单通用的控制器,PID控制器可以构成运动控制器。其设计方法是:简单地,运动控制器由两个并联的PID控制器组成:
使用上述公式求出线速度 v c v_c vc、角速度 ω c \omega_c ωc后,再解算为左右轮转速交给机器执行。控制器会控制机器人持续朝向目标移动,当其距离目标小于一定值,即移动到以目标为圆心, τ \tau τ为半径(目标半径)的圆内 d e r r ≤ τ d_{err}\leq \tau derr≤τ时,判定机器人到达目标位置,完成运动控制过程。
该控制系统简单易实现,这里是仿真的下载链接,控制效果如图所示。
上述点到点的运动控制只要求到达目标点,并没有其他约束条件,虽然在实际应用中往往会有许多约束,但是其确是一切运动控制的基石。
在某些具体应用中,如泊车parking,对接docking等往往需要机器人以某个固定的姿态到达某一具体位置。
路径跟踪(巡迹/沿线)是指机器人在已知地图上跟随已规划好路径进行运动的过程。路径跟踪的算法有很多,较为常用的如Pure pursuit,Stanley(针对Ackerman模型),MPC等等。考虑到通用性,这里主要介绍Pure pursuit控制算法。
路径是由什么组成的?很显然,路径是由无数个离散的目标点组成的。通过遍历这些目标点,是不是就可以完成路径的跟随?那么,这些目标点的遍历过程是不是可以通过上面介绍的点到点运动控制来完成?路径上离散的目标点间距那么小,又怎么实现控制?pure pursuit纯跟踪算法应运而生。
Pure pursuit是最基础的路径跟踪算法了,它的核心思想是:通过航向控制,不断地将机器人从当前位置移动到机器人前面的某个前瞻点。pure pursuit算法将根据机器人的当前位置计算出此时路径上对应的前瞻点,并控制其朝向前瞻点移动,不断循环上述过程(机器动,前瞻动)直到到达路径的最后一个点。通俗一点的说,就是机器人在不断地追逐它前面的一个点。
对于pure pursuit纯跟踪算法来说,前瞻点的选取至关重要!前瞻点是根据机器人实时位置通过前瞻距离向前搜素而来。机器人实时位置和前瞻点如图所示,注意实际路径与规划路径不匹配。
前瞻距离决定了跟踪路径的方式,前瞻距离较小,机器将更快速的靠向规划路径,从而实际路径将更贴合规划路径,但是也会伴随着实际路径的震荡;反之,较大的前瞻距离,可以减少沿路径的振荡,但也会导致拐角附近的曲率较大。同时,不同的线速度和角速度也会影响机器对规划路径的响应,在控制过程中也应该考虑到这一点。
纯追踪算法有几个局限性需要注意:
算法的整体和细节效果如下,红色虚线为规划轨迹,蓝色实线为实际路径。位置不会一直贴合路径,但是随时间一定会收敛到路径上。
将前瞻距离加大,贴合路径的速度降低收敛变慢: