移动机器人运动学

移动机器人运动学

控制对象的正逆解

  要控制一个机器人,首先得弄清楚输入与输出:
  例如,一个两轮差速机器人,我们的控制对象是左右轮的转速,输出的是机器人整体的线速度和角速度;对于一个机械臂,我们控制的是各个关节电机的角度(目前大部分电机),输出的是机械臂末端的空间坐标和空间角(六维)。
  一般来说,控制对象有n个变量,通常把这些变量叫做广义坐标,而输出有m个变量。
  广义坐标:
q n = [ q 1 , q 2 , . . . q n ] \boldsymbol q_{n}=\left [ q_{1},q_{2},...q_{n} \right ] qn=[q1,q2,...qn]
  输出:
x m = [ x 1 , x 2 , . . . x m ] \boldsymbol x_{m}=\left [ x_{1},x_{2},...x_{m} \right ] xm=[x1,x2,...xm]
  由 q n q_{n} qn计算 x m x_{m} xm就是正解,反过来是逆解。
x m = f ( q n ) q n = f − 1 ( x m ) \boldsymbol x_{m} =f\left ( \boldsymbol {q_{n}} \right )\\ \boldsymbol q_{n} =f^{-1}\left ( \boldsymbol {x_{m}} \right ) xm=f(qn)qn=f1(xm)

齐次坐标变换

  1. 一个机器人身上存在的不同的传感器,比如激光雷达、IMU、摄像头等,它们都有自己的坐标系,比如不同位置的摄像头拍摄的画面,而在使用它们的时候,需要转化到一个坐标系下。
  2. 机器人在运动时也需要使用不同坐标系进行描述,机器人自身有一个本体坐标系,同时还有一个基于地图的世界坐标系,我们要求机器人到达某个位置,就是相对于世界坐标系来说的。
  3. 例如机械臂,每一个关节就是一个坐标系。

将一个点从一个坐标系变换到另一个坐标系,左乘变换矩阵:
p A = T B A p B p_{A} =T_{B}^{A} p_{B} pA=TBApB
怎么找 T B A T_{B}^{A} TBA

  1. 固定A坐标系,考察绝对旋转,则旋转矩阵为左乘:
    R = R z R y R x R = R_{z}R_{y}R_{x} R=RzRyRxp为原点坐标做差
    T = [ R p 0 1 ] T=\begin{bmatrix} R&p \\ 0&1 \end{bmatrix} T=[R0p1]
  2. 考察相对旋转,旋转矩阵是右乘
    R = R x R y R z R = R_{x}R_{y}R_{z} R=RxRyRz

机器人运动学模型

  要得到机器人的速度:世界坐标下的速度->机器人坐标系下的速度->轮子的转速(->PWM大小)。在这个过程中,不涉及力的作用。

世界坐标下的速度->机器人坐标系下的速度

移动机器人运动学_第1张图片
一般来说,机器人的线速度方向就是X_robot的方向,则易知:
[ x ˙ y ˙ ] = [ cos ⁡ θ sin ⁡ θ ] v x \begin{bmatrix} \dot{x} \\ \dot{y} \end{bmatrix}=\begin{bmatrix} \cos \theta \\ \sin \theta \end{bmatrix}v_{x} [x˙y˙]=[cosθsinθ]vx
θ \theta θ 就是机器人的角度,没啥变换。所以结合起来可以得到:
[ x ˙ y ˙ θ ˙ ] = [ cos ⁡ θ 0 sin ⁡ θ 0 0 1 ] [ v ω ] \begin{bmatrix} \dot{x} \\ \dot{y} \\ \dot{ \theta } \end{bmatrix}=\begin{bmatrix} \cos \theta & 0\\ \sin \theta & 0\\ 0 & 1 \end{bmatrix}\begin{bmatrix} v\\ \omega \end{bmatrix} x˙y˙θ˙=cosθsinθ0001[vω]其中 v v v是机器人的线速度, ω \omega ω是机器人的角速度, θ \theta θ是机器人线速度在世界坐标系下的角度,这个方程对于所有机器人都适用。

机器人坐标系下的速度->轮子的转速

这个对不同机器人来说,方程就不同了,常见的机器人有如下几种。

  1. 两轮差速机器人移动机器人运动学_第2张图片
      机器人在运动过程中同时具有平移和旋转运动,当机器人的旋转运动可以看成绕某点运动,则左右轮出的角速度应该相等,由此计算出机器人的角速度:
    ω = v l R = v r R + L ⟹ ω = v r − v l L \omega =\frac{v_{l}}{R}= \frac{v_{r}}{R+L}\Longrightarrow \omega=\frac{v_{r}-v_{l}}{L} ω=Rvl=R+Lvrω=Lvrvl这里是不考虑轮子的滑动,一般来说机器人比较重,也不会有滑动。机器人的线速度为:
    v = v l + v r 2 v = \frac{v_{l}+v_{r}}{2} v=2vl+vr

  2. 三轮车模型
    看图,A、B、C三个轮子均为全向轮,
    移动机器人运动学_第3张图片
    这个推导可以这么看:当机器人只有速度 v x v_{x} vx时,A轮无速度,C轮正向,B轮反向,把速度进行分解: v x cos ⁡ 30 ° = v c = − v b v_{x} \cos 30°= v_{c} = -v_{b} vxcos30°=vc=vb同理,当机器人只有速度 v y v_{y} vy时, v y = v a v y cos ⁡ 60 ° = − v c = − v b v_{y} = v_{a} \\ v_{y} \cos 60° = -v_{c} = -v_{b} vy=vavycos60°=vc=vb当机器人角速度为 ω \omega ω ω = v a d = v b d = v c d \omega = \frac{v_{a}}{d} = \frac{v_{b}}{d} = \frac{v_{c}}{d} ω=dva=dvb=dvc综合以上分析可以得到 [ x ˙ y ˙ ω ˙ ] = [ 0 1 3 1 3 1 3 − 2 3 − 2 3 1 3 d 1 3 d 1 3 d ] [ v a v b v c ] \begin{bmatrix} \dot{x} \\ \dot{y}\\ \dot{\omega } \end{bmatrix} = \begin{bmatrix} 0 & \frac{1}{\sqrt{3}} & \frac{1}{\sqrt{3}}\\ \frac{1}{3} & -\frac{2}{3} & -\frac{2}{3}\\ \frac{1}{3d} & \frac{1}{3d} & \frac{1}{3d} \end{bmatrix}\begin{bmatrix} v_{a}\\ v_{b}\\ v_{c} \end{bmatrix} x˙y˙ω˙=0313d13 1323d13 1323d1vavbvc

  3. 轮子的转速->PWM大小
      得到转速后,需要使转速保持稳定,因此需要对每个车轮都做控制,常用的就是PID控制,因为一般来说电机是通过PWM控制的,这个PWM的部分不好建模,因此现控中的控制方法不太方便,PID就简单直接方便。

你可能感兴趣的:(机器人,自动驾驶,人工智能,线性代数)