车辆运动学模型—bicycle model

参考文献:

【1】Rajamani R. Vehicle Dynamics and Control[M]. Springer Science, 2006.

【2】https://blog.csdn.net/u013914471/article/details/82968608

1 . 单车模型(bicycle model)

     假设条件:

  •  假设车辆只有前后两个轮A和B,C为车辆质心;
  • 车辆运动只考虑平面运动,不考虑Z方向的影响,如车辆颠簸等 ;
  • 车辆低速运动,此时不需要考虑滑移角的影响,书中的原话是“This is a reasonable assumption for low speed motion of the vehicle (for example, for speeds less than 5 mls). At low speeds, the lateral force generated by the tires is small 。”

   在上述假设前提下,下图中的各参数说明如下:

  •  δr 和 δf : 分别表示后轮和前轮相对车辆纵轴的转角,由方向盘决定通常情况下车辆只依靠前轮进行转向操作,因此实际应用中 δr = 0 ;
  • C为车辆质心位置,到前后轮胎A和B的距离为lf 和 lr , 质心C的线速度矢量表示为V,方向β表示与车身纵轴的夹角,ψ表示车身纵轴与X轴的夹角。注意:这里的X轴指的是你设定的正前方方向,这里的β指的就是假设条件里面的滑移角,低速情况下通常β值很小,也可以忽略为0;
  • O为A、B、C三点(也就是车体)的瞬时旋转中心;

                                    

数学模型推导(以下公式都是针对质心C进行推导):

  • △OCA 和△OCB由正弦定理得:

                                       

  • 二者联立,可以得到:

                                                       

                                                            

  • 根据V = RW 可得质心C(即车体)的角速度为:  

                                                                 

  • 最终得到车辆的状态方程为:

                                                                 

      * 注意,这里的X、Y、ψ均带有“·” ,指归一化后的单位时间内的变化量,实际应用需要乘△t 。

2. 阿克曼转向几何(Ackerman turning geometry)

         单车模型简化了汽车的前后轮胎,实际中汽车前后均有两个轮胎,如下:

                                               

         对于汽车前面的两个轮胎来说,实际转角是不同的。阿克曼转向几何(Ackerman Turning Geometry)是一种为了解决交通工具转弯时,内外转向轮路径指向的圆心不同的几何学。在单车模型中,将转向时左/右前轮偏角假设为同一角度,虽然通常两个角度大致相等,但实际并不是,通常情况下,内侧轮胎转角更大。这部分我就不再推导了,文献【2】中写的很清楚。
 

 3. 仿真实现

     根据上述原理,基于C++和opencv建立了系统仿真模型,可以根据输入的车辆信息实现对车辆模型的控制。仿真模型假设图像的x方向为车辆的前行方向,能够通过'w'/'s'/'a'/'d'/'b'/' '/'c'等按键实现对车体的速度、转向、减速等控制。

     代码链接

    车辆状态信息:

struct VehicleInfo
    {
        cv::Point2d location[5];  //  lt rt lb rb c
        double R[2];              //  质心R 和 右后轮R 
        cv::Size vehSize;         //  车身尺寸
        double acceleration = 0;  //  车辆加速度
        double delta_t = 1;       //  时间间隔
        double speed = 0;         //  车速
        double delta_f = 0;       //  前轮和车身的夹角
        double  w = 0;            //  车辆角速度
        double  yaw_angle = 0;    //  偏航角,相对图像坐标系下的x轴
        double  beta = 0;         //  滑移角
        double  Lw = 99.5;        //  pixel 轮距
        double  L = 188.6;        //  pixel 轴距    
        bool   brake = true;      //  刹车 true : speed = 0;
    }vehInfo;

效果展示:

猜你喜欢

转载自blog.csdn.net/weixin_40059786/article/details/104994715