精华内容
下载资源
问答
  • Apollo代码学习(二)—车辆运动学模型

    万次阅读 多人点赞 2018-10-11 20:53:13
    Apollo代码学习—车辆运动学与动力学模型前言车辆模型车辆运动学模型车辆动力学模型 Apollo(阿波罗)是一个开放的、完整的、安全的自动驾驶平台,以灵活和高性能的技术架构,为全自动驾驶提供支持。 前言 要...

    Apollo(阿波罗)是一个开放的、完整的、安全的自动驾驶平台,以灵活和高性能的技术架构,为全自动驾驶提供支持。

    前言

    要实现对车辆的控制,研究其运动学模型和动力学模型必不可少。上文对横纵向控制的构成及实现做了概述,本文将从车辆的运动学和动力学模型入手,研究如何控制车辆,以及为什么这样控制车辆。

    本文的观点及图表多基于下述书籍及链接,并结合Apollo代码整理而来,由于本身并没有学过实车相关的知识,对力学的认知也不够深,如有理解偏颇或侵权之处,请指正删改。
    【1】Rajamani R. Vehicle Dynamics and Control[M]. Springer Science, 2006.
    【2】龚建伟, 姜岩, 徐威. 无人驾驶车辆模型预测控制[M]. 北京理工大学出版社, 2014.
    【3】无人驾驶汽车系统入门(五)——运动学自行车模型和动力学自行车模型

    提倡大家支持正版资源,本人提供文档仅限交流学习使用,侵删:
    【1】Rajamani R. Vehicle Dynamics and Control[M]. Springer Science, 2006. | CSDN资源
    【2】龚建伟, 姜岩, 徐威. 无人驾驶车辆模型预测控制[M]. 北京理工大学出版社, 2014. | CSDN资源

    车辆模型

    车辆运动学模型与动力学模型的建立是出于车辆运动的规划与控制考虑的。自动驾驶场景下,车辆大多按照规划轨迹行驶,控制模块的作用就是控制车辆尽可能精准的按照规划轨迹行驶。这就要求规划轨迹尽可能贴近实际情况,也就是说,轨迹规划过程中应尽可能考虑车辆运动学及动力学约束,使得运动跟踪控制的性能更好。

    搭建车辆模型主要是为了更好的规划和控制,因此,在分析模型时尽量以应用时所需的输入、输出对对象进行建模分析。Apollo中,计算控制命令需要车辆的定位信息、底盘信息以及规划信息等,

    Status xxxController::ComputeControlCommand(
        const localization::LocalizationEstimate *localization, //定位信息
        const canbus::Chassis *chassis,  //底盘信息
        const planning::ADCTrajectory *planning_published_trajectory, //规划信息
        ControlCommand *cmd //控制命令)
    

    其中,
    定位信息(localization.proto)包含

    message LocalizationEstimate {
      optional apollo.common.Header header = 1;
      optional apollo.localization.Pose pose = 2;
      optional Uncertainty uncertainty = 3;
    
      // The time of pose measurement, seconds since the GPS epoch (Jan 6, 1980).
      optional double measurement_time = 4;  // In seconds.
    
      // Future trajectory acturally driven by the drivers
      repeated apollo.common.TrajectoryPoint trajectory_point = 5;
    }
    

    底盘信息(chassis.proto)包含

    message Chassis {
      enum DrivingMode {
        COMPLETE_MANUAL = 0;  // human drive
        COMPLETE_AUTO_DRIVE = 1;
        AUTO_STEER_ONLY = 2;  // only steer
        AUTO_SPEED_ONLY = 3;  // include throttle and brake
    
        // security mode when manual intervention happens, only response status
        EMERGENCY_MODE = 4;
      }
      
      ...
    
      // Only available for Lincoln now
      optional ChassisGPS chassis_gps = 28;
    
      optional apollo.common.EngageAdvice engage_advice = 29;
    }
    

    规划信息(planning.proto)包含

    message ADCTrajectoryPoint {
      optional double x = 1;  // in meters.
      optional double y = 2;  // in meters.
      optional double z = 3;  // height in meters.
    
      optional double speed = 6;  // speed, in meters / second
      optional double acceleration_s = 7;  // acceleration in s direction
      optional double curvature = 8;  // curvature (k = 1/r), unit: (1/meters)
      // change of curvature in unit s (dk/ds)
      optional double curvature_change_rate = 9;
      // in seconds (relative_time = time_of_this_state - timestamp_in_header)
      optional double relative_time = 10;
      optional double theta = 11;  // relative to absolute coordinate system
      // calculated from the first point in this trajectory
      optional double accumulated_s = 12;
    
      // in meters, reference to route SL-coordinate
      optional double s = 4 [deprecated = true];
      // in meters, reference to route SL-coordinate
      optional double l = 5 [deprecated = true];
    }
    

    对上述元素进行精简,我们需要关注的信息主要有:

    1. 时间(tt
    2. 位置(x,yx, y
    3. 速度(vv
    4. 加速度(aa
    5. 角速度(ω\omega
    6. 位移(ss
    7. 航向角(ψ\psi
    8. 曲率(kk
    9. 前轮转角(wheelwheel
    10. 方向盘转角(steersteer
    11. 刹车(brakebrake
    12. 油门(throttlethrottle
    13. 档位(geargear

    其中,

    • 方向盘转角(steersteer
    • 刹车(brakebrake
    • 油门(throttlethrottle
    • 档位(geargear

    为主要被控量。

    单车模型(Bicycle Model)

    建立模型时,应尽可能使模型简单易用,且能真实反映车辆特性,搭建车辆模型多基于(Bicycle Model)\color{Maroon}单车模型(Bicycle\ Model),使用单车模型需做如下假设[^1]:

    1. 不考虑车辆在Z轴方向的运动,只考虑XY水平面的运动,如图1所示;
    2. 左右侧车轮转角一致,这样可将左右侧轮胎合并为一个轮胎,以便于搭建单车模型,如图2所示;
    3. 车辆行驶速度变化缓慢,忽略前后轴载荷的转移;
    4. 车身及悬架系统是刚性的。
    图1 车辆模型

    (Bicycle Model)\color{Maroon}单车模型(Bicycle\ Model)将左/右前轮合并为一个点,位于A点;将左/右后轮合并为一个点,位于B点;点C为车辆质心点。

    图2 单车模型

    其中,OO为OA、OB的交点,是车辆的瞬时滚动中心,线段OA、OB分别垂直于两个滚动轮的方向;β\beta滑移角(Tire Slip Angle),指车辆速度方向和车身朝向两者间所成的角度,ψ\psi航向角(Heading Angle),指车身与X轴的夹角。

    关于滑移角和航向角,此处有较大争议,由于此处是翻译而来的,而我不能给大家准确的信息,因此附上原文,望大家自己甄别:
    原文出处:Vehicle Dynamics and Control. p20
    ( X , Y ) are inertial coordinates of the location of the vehicle while ψ\psi describes the orientation of the vehicle. The velocity of the vehicle is denoted by VV and makes an angle β\beta with the longitudinal axis of the vehicle. The angle β\beta is called the slip angle of the vehicle.
    如若有确切出处可以证明我所书写的有错,感谢指正并附上出处,感激不尽。

    符号 定义 符号 定义
    AA 前轮中心 BB 后轮中心
    CC 车辆质心 OO 转向圆心
    VV 质心车速 RR 转向半径
    r\ell_r 后悬长度 f\ell_f 前悬长度
    β\beta 滑移角 ψ\psi 航向角
    δr\delta_r 后轮偏角 δf\delta_f 前轮偏角

    当车辆为(frontwheelonly)\color{Maroon}前轮驱动(front-wheel-only)时,可假设δr\delta_r恒为0。

    车辆运动学模型

    运动学是从几何学的角度研究物体的运动规律,包括物体在空间的位置、速度等随时间而产生的变化,因此,车辆运动学模型应该能反映车辆位置、速度、加速度等与时间的关系。在车辆轨迹规划过程中应用运动学模型,可以使规划出的轨迹更切合实际,满足行驶过程中的运动学几何约束,且基于运动学模型设计出的控制器也能具有更可靠的控制性能。

    基于单车模型,如图2所示,搭建车辆运动学模型。由正弦法则:
    sin(δfβ)f=sin(π2δf)R(1.1)\frac{\sin(\delta_f-\beta)}{\ell_f}=\frac{\sin(\frac{\pi}{2}-\delta_f)}{R} \tag{1.1}
    sin(βδr)r=sin(π2+δr)R(1.2)\frac{\sin(\beta-\delta_r)}{\ell_r}=\frac{\sin(\frac{\pi}{2}+\delta_r)}{R} \tag{1.2}
    展开公式(1.1)(1.2)(1.1)(1.2)可得:
    sinδfcosβsinβcosδff=cosδfR(1.3)\frac{\sin\delta_f\cos\beta-\sin\beta\cos\delta_f}{\ell_f}=\frac{\cos\delta_f}{R} \tag{1.3}
    cosδrsinβcosβsinδrr=cosδrR(1.4)\frac{\cos\delta_r\sin\beta-\cos\beta\sin\delta_r}{\ell_r}=\frac{\cos\delta_r}{R} \tag{1.4}
    联立公式(1.3)(1.4)(1.3)(1.4)可得:
    (tanδftanδr)cosβ=f+rR(1.5)(\tan\delta_f-\tan\delta_r)\cos\beta=\frac{\ell_f+\ell_r}{R} \tag{1.5}

    低速环境下,车辆行驶路径的转弯半径变化缓慢,此时我们可以假设车辆的方向变化率等于车辆的角速度。则车辆的角速度为ψ˙=VR(1.6)\dot{\psi}=\frac{V}{R} \tag{1.6}
    联立公式(1.5)(1.6)(1.5)(1.6)可得:
    ψ˙=Vcosβf+r(tanδftanδr)(1.7)\dot{\psi}=\frac{V\cos\beta}{\ell_f+\ell_r}(\tan\delta_f-\tan\delta_r) \tag{1.7}
    则在惯性坐标系XY下,可得车辆运动学模型:

    {X˙=Vcos(ψ+β)Y˙=Vsin(ψ+β)ψ˙=Vcosβf+r(tanδftanδr)(1.8)\begin{cases} \dot{X}=V\cos(\psi+\beta) \\ \dot{Y}=V\sin(\psi+\beta) \\ \dot{\psi}=\frac{V\cos\beta}{\ell_f+\ell_r}(\tan\delta_f-\tan\delta_r) \tag{1.8} \end{cases}

    此模型中有三个输入:δf\delta_fδr\delta_rVV
    滑移角β\beta可由公式(1.3)(1.4)(1.3)(1.4)求得:
    β=tan1(ftanδr+rtanδff+r)(1.9)\beta=\tan^{-1}(\frac{\ell_f\tan\delta_r+\ell_r\tan\delta_f}{\ell_f+\ell_r}) \tag{1.9}

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

    (Ackerman Turning Geometry)\color{Red}阿克曼转向几何(Ackerman\ Turning\ Geometry)是一种为了解决交通工具转弯时,内外转向轮路径指向的圆心不同的几何学。

    在单车模型中,将转向时左/右前轮偏角假设为同一角度,虽然通常两个角度大致相等,但实际并不是,通常情况下,内侧轮胎转角更大。如下图所示,δo\delta_oδi\delta_i分别为外侧前轮和内侧前轮偏角,当车辆右转时,右前轮胎为内侧轮胎,其转角δi\delta_i较左前轮胎转角δo\delta_o更大。w\ell_w为轮距,LL为轴距,后轮两轮胎转角始终为0°\color{Maroon}0\degree
    当以后轴中心为参考点时,转向半径RR为下图中线\color{Red}红线

    图3 阿克曼转向几何

    当滑移角β\beta很小时,且后轮偏角为0时,公式(1.7)(1.7)可表述为:
    ψ˙V1R=δL(1.10)\frac{\dot{\psi}}{V}\approx\frac{1}{R}=\frac{\delta}{L} \tag{1.10}
    由于内外侧轮胎的转向半径不同,因此有:
    δo=LR+w2(1.11)\delta_o=\frac{L}{R+\frac{\ell_w}{2}} \tag{1.11}
    δi=LRw2(1.12)\delta_i=\frac{L}{R-\frac{\ell_w}{2}} \tag{1.12}
    则前轮平均转角
    δ=δo+δi2LR(1.13)\delta=\frac{\delta_o+\delta_i}{2}\cong\frac{L}{R}\tag{1.13}
    内外转角之差
    Δδ=δiδo=LR2w=δ2wL(1.14)\Delta\delta=\delta_i-\delta_o=\frac{L}{R^2}\ell_w=\delta^2\frac{\ell_w}{L} \tag{1.14}
    因此,两个前轮的转向角的差异Δδ\Delta\delta与平均转向角δ\delta的平方成正比。

    依据阿克曼转向几何设计的车辆,沿着弯道转弯时,利用四连杆的相等曲柄使内侧轮的转向角比外侧轮大大约2~4度,使四个轮子路径的圆心大致上交会于后轴的延长线上瞬时转向中心,让车辆可以顺畅的转弯。

    图4 梯形拉杆装置差动转向机构

    小结

    以后轴中心为参考点,以单车模型为基础建立车辆的运动学模型,(Xr,Yr)(X_r, Y_r)为后轴中心坐标,ψ\psi为航向角,vrv_r为车速,δf\delta_f为前轮转角,后轮转角δr\delta_r恒为0°0\degreeww为横摆角速度,滑移角β\beta极小,假设为0。

    当状态量为ξ=[Xr,Yr,ψ]T\xi=[X_r, Y_r, \psi]^T,被控量为u=[vr,δf]Tu=[v_r, \delta_f]^T时,公式(1.8)(1.8)可转换为如下形式:
    [Xr˙Yr˙ψ˙]=[cosψsinψtanδf/l]vr(1.15) \begin{bmatrix} \dot{X_r} \\ \dot{Y_r} \\ \dot\psi \end{bmatrix}= \begin{bmatrix} \cos\psi \\ \sin\psi \\ \tan{\delta_f}/l \end{bmatrix}v_r \tag{1.15}
    但在无人车控制过程中,一般控制对象u=[vr,w]Tu=[v_r, w]^T,则式1.15可写为:
    [Xr˙Yr˙ψ˙]=[cosψsinψ0]vr+[001]w(1.16) \begin{bmatrix} \dot{X_r} \\ \dot{Y_r} \\ \dot\psi \end{bmatrix}= \begin{bmatrix} \cos\psi \\ \sin\psi \\ 0 \end{bmatrix}v_r+ \begin{bmatrix} 0\\ 0 \\ 1 \end{bmatrix}w \tag{1.16}
    速度vrv_r的控制主要通过刹车(brakebrake)、油门(throttlethrottle)、档位(geargear)等来控制,横摆角速度ww主要通过转动方向盘(steersteer)来控制。

    Apollo中的运动学约束(control_gflags.cc)主要有:

    DEFINE_int32(max_localization_miss_num, 20,
                 "Max missing number of localization before entering estop mode");
    DEFINE_int32(max_chassis_miss_num, 20,
                 "Max missing number of chassis before entering estop mode");
    DEFINE_int32(max_planning_miss_num, 20,
                 "Max missing number of planning before entering estop mode");
    
    DEFINE_double(max_acceleration_when_stopped, 0.01,
                  "max acceleration can be observed when vehicle is stopped");
    DEFINE_double(max_abs_speed_when_stopped, 0.01,
                  "max absolute speed can be observed when vehicle is stopped");
    DEFINE_double(steer_angle_rate, 100.0,
                  "Steer angle change rate in percentage.");
    

    车辆动力学模型请看下一篇博文:Apollo代码学习(三)—车辆动力学模型

    展开全文
  • 车辆运动学模型和动力学模型

    千次阅读 2021-02-16 22:25:33
    点击即可打开链接:车辆运动学模型 动力学模型
    展开全文
  • 车辆运动学模型到动力学模型推导 参考https://www.bilibili.com/video/BV1St411A7nH/?spm_id_from=333.788.recommend_more_video.1 1.车辆运动学模型 车辆运动学模型的推导参见我的另一篇博客Coursera self-...

    车辆运动学模型到动力学模型推导

    参考 https://www.bilibili.com/video/BV1St411A7nH/?spm_id_from=333.788.recommend_more_video.1

    跟着一步步推导,可以清楚的了解车辆动力学模型。

    1.车辆运动学模型

    车辆运动学模型的推导参见我的另一篇博客 Coursera self-driving car Part1 Final Project——自动驾驶轨迹跟踪之MPC模型预测控制原理推导及Python实现 1.1小节。这里不再赘述

    这里的Vr就是后轮车速v

    这里的x,y,φ都是大地坐标系,为了和后面推导中的车体坐标系区分,加上下标

    为了推导向动力学模型,可以将vr进一步推导,vr由加速度积分得到,加速度又等于F/m,力除以质量

    2.动力学模型推导

    大地坐标系xg,yg,φg            车体坐标系x,y,φ

    2.1 车体-大地坐标系变换

    如上图的单轨模型,车体与大地坐标之间存在一个变换关系,具体公式后续推导,先一步步列出思路便于理解。

    2.2 车体坐标系下的受力

    进一步对车体坐标系下的坐标求导,就是受力分析,横摆较加速度仅与车体的横向受力相关,还有a,b是车子前后轴到质心的距离。

    物体在旋转的参考系下平动,有一个科氏力,与平动速度和参考系角速度相关。

    2.3 车轮横纵向受力→车体横纵向受力

    2.4 轮胎模型-魔术公式

    2.1-2.4就是车辆动力学分析的整个方面,车轮横纵向受力分析→车体横纵向受力分析→求解车体坐标系下横纵向加速度→大地坐标下的横纵向加速度,如下图:

    仅考虑xy平面运动

    2.5 车辆纵向运动受力分析

     

    由内向外分析,整个传动系   发动机-离合器-变速箱-驱动桥-车轮

    假设车子为前置后驱

    由上述传动过程可以列出轮胎驱动力Ft的公式如下:

    轮胎驱动力就是发动机一路传过来的力矩除以车轮半径乘以个传动效率

    根据牛顿第三定律F=ma

    由内向外分析公式

    由外向内分析纵向运动受力 假设后驱

    传动系是轮胎牵引力Ft的原因,由外向内小车在坡道上这是轮胎力的表现

    具体轮胎力从内到外的转化还要分析轮胎的模型。

    2.6 轮胎纵向动力学模型

    我们要控制2.5中得出公式的Fx2,一个控制发动机输出,一个控制侧偏角,外倾角等在一定范围,控制这些来控制车轮力Fx2

    采用刷子模型分析轮胎受力,轮胎看成一条条橡胶条构成,轮胎在与地面接触的地方产生形变。地面只给轮胎摩擦力和竖直方向的力。

    上图显示了前后轮的形变示意

    前轮摩擦力是阻力,后轮摩擦力是牵引力,是由于橡皮条变形引起的

    车子刚运动时,当力矩T不变时,橡皮条变形逐渐增大,牵引力也随橡皮条变形增大而增大,变形到一定程度时橡皮条拉到极限力(弹性极限)不再增大,随后达到平衡,牵引力还有所回落。

    滑移:车身速度比轮胎转速快

    滑转:车身速度比轮胎转速慢,打滑

    这个纵向动力学的意义就是驱动力矩变成牵引力Fx2的转化关系。跟滑移率是有关系的。

    可以看出,在滑移率s比较小时,驱动力Fx和滑移率成近似线性关系。

    式中:u为车速; u w为车轮速度;ω为车轮滚动角速度;r为车轮半径。

    式写反了,应该是(wr-u)/u,这样打滑时,u很小,wr很大s接近100%

    滑移率s定义:轮胎运动中,滑动所占的比例

    当车轮纯滚动时,u w = u ,s = 0;当车轮抱死纯滑动时, u w = 0 , s =100%;当车轮边滚边滑时,u> uw ,0<s<100%。车轮滑移率越大,说明车轮在运动中滑动成分所占的比例越大。

    2.7轮胎横向动力学模型

    和前面2.6节一样,横向力也是因为轮胎的横向变形导致。拐弯时,车子的向心力由地面对轮胎的横向力提供,车子轮胎会产生如上图所示的变形,如果把轮胎看成弹簧或者橡皮条,拐弯时,有甩出去的倾向,轮胎会向左压,它底部被迫向内右变形,底部弹簧产生抵抗力向左,地面对轮胎底部施加一个相反方向即向右的力。

    然后取轮宽中心线上的A0,A1,A2,A3,A4, A0最接近变形区,变形量最大,A4变形量最小。当将A0-A4按照变形量投影地面的轨迹上,变形后的轨迹相比无变形的轨迹偏转了一个侧偏角α

    此时轮速方向与轴向成一个钝角。

    横向力Fy与侧偏角α的关系如下图:

    当侧偏角开始增大时,横向力Fy随着侧偏角α的增大而增大,当轮胎达到变形极限时,此时侧偏角再增大,横向力不变

    可以看出在小侧偏角α的情况下,横向力Fy与侧偏角α近似成线性关系。

    2.8 轮胎模型的输入输出

    地面摩擦因素和侧倾角是结构性参数是固定的,其他参数是可以控制的。

    横向力和纵向力是耦合的,横纵向力的合力不能超过地面所能提供的最大摩擦力μFz

    耦合影响如下图:

    纵向力曲线和横向力曲线都与垂向载荷Fz有关,Fz越大,越大

     

    3.车辆动力学模型公式

    本章将给出第二章中受力分析的具体公式

    参考 七自由度车辆动力学模型 - 哔哩哔哩专栏 (bilibili.com)

           《无人驾驶车辆模型预测控制》

    看车辆的单轨模型:

    3自由度车辆动力学模型,车辆只有纵向,横向,和横摆运动。

    假设车辆前轴两轮的受力相同,后轴两轮的受力也相同。

    车辆在纵向,横向,和横摆自由度上的受力方程如下:

    科氏力由于车辆在车体坐标x,y方向平动的参考系是车身这个旋转参考系,所以有科氏力。

    式中a,b分别位质心到前后轴的距离,m为车辆整备质量,Iz为车辆绕z轴的转动惯量。

     

    科氏力方向的判断:懒得码字直接贴草稿图

    轮胎的横纵向力转化成车体坐标下的横纵向力:

    轮胎的纵向力横向力与侧偏角,滑移率,路面摩擦系数,垂向载荷有关。

    轮胎的侧偏角的计算,用轮胎横向速度/纵向速度的反正切值。

    vc和vl可以用vx,vy表示,都是轮胎的速度

    滑移率用(轮速-车速)/max(轮速,车速)

    式2.10-2.28构成了车辆的动力学模型。

     

    假设车子具有良好的ABS防抱死系统,使得车辆的滑移率始终保持在最佳工作点,摩擦因数μ,滑移率s都视为已知。

    选取车体的xy方向速度,横摆角,大地坐标系XY坐标为状态量

    控制量为前轮转角,仅考虑前轮转向车子

    输出量选为横摆角和XY坐标

    4.轮胎模型

    轮胎所受的垂直力,横向力,纵向力,和回正力矩对汽车的平顺性,操稳性和安全性起着关键的作用。、魔术公式MF是一个经验轮胎模型,运用三角函数的组合拟合轮胎的实验数据,描述轮胎的纵向力Fl,横向力Fc,回正力矩Mz,翻转力矩Mx,阻力矩My与侧偏角α,滑移率s之间的关系,魔术公式的一般表达式如下:

    系数B,C,D由轮胎的垂直载荷和外倾角确定;Y为输出变量可以是Fl/Fc/Mz;x为输入变量,在不同的情况下分别表示轮胎的侧偏角α或纵向滑移率s; B为刚度因子;C为形状因子;D为峰值因子,E为曲率因子

    实际应用中侧偏力、滚动阻力会引起偏移,通常还会引入垂直、水平偏移Sv,Sh

    5.小角度假设下的车辆动力学模型

    将状态方程2.29和魔术公式结合还是过于复杂,

    可以注意到侧偏角α较小时,侧向力与侧偏角近似成线性关系;纵向滑移率较小时,纵向力与纵向滑移率近似成线性关系;

    在之前建立的车辆动力学非线性模型中,存在较多的三角函数,模型简化困难较大。因此轮胎力的计算过程中提出了小角度的假设

    侧偏角可以由车体的x‘,y’,横摆角φ‘计算得到。

    小角度假设简化后,上述两式代入下士中前后轮纵横向力

    6 动力学模型结果

    前面介绍了受力分析及推导原理,下面直接给出结果

    车辆3自由度动力学模型推导步骤:

    1.状态选取x'.y'φ,φ’,X,Y    车体坐标和大地坐标

    2.列出x‘’,y‘’,φ‘’受力方程,其中除了状态量还与车轮在车体xy方向的受力Fx,Fy(可坐标变换成车轮横纵向Fl,Fc)有关;

    3.Fl,Fc根据小角度假设转化成线性模型,等于刚度乘以滑移率/侧偏角;

    4.将滑移率、侧偏角按定义可转化成状态量的表达式,代入Fl,Fc计算式;

    5.将Fl,Fc的用状态量计算的表达式代入x,y,φ受力方程,再加上车体坐标和大地坐标的变换关系,联立就得到车辆的动力学模型。

    上述草稿最后的状态方程有错误,因为x'出现在等式右边的分母上,是非线性模型,而不是线性时变模型。要通过局部泰勒展开,局部线性近似才行。状态方程可以在参考状态泰勒展开,然后与参考状态表达式做差即可线性化。

     

    展开全文
  • 动态条件下恒星传感器空间变化图像运动的运动学模型
  • Moveit运动学模型

    2019-11-13 16:13:40
    模型获取 ...3)获取一个运动组JointModelGroup,建立运动学模型 1)从ROS参数中找到机器人模型 robot_model_loader::RobotModelLoader robot_model_loader("robot_description"); robot_model::RobotM...

    模型获取

    1)从ROS参数中找到机器人模型RobotModel
    2)实例化操作接口 RobotState
    3)获取一个运动组JointModelGroup,建立运动学模型
    1)从ROS参数中找到机器人模型

    robot_model_loader::RobotModelLoader robot_model_loader("robot_description");
    robot_model::RobotModelPtr kinematic_model = robot_model_loader.getModel();
    ROS_INFO("Model frame: %s", kinematic_model->getModelFrame().c_str());
    

    2)实例化操作接口

    robot_state::RobotStatePtr kinematic_state(new robot_state::RobotState(kinematic_model));
    kinematic_state->setToDefaultValues();
    

    3)获取一个运动组

    const robot_state::JointModelGroup* joint_model_group = kinematic_model->getJointModelGroup("right_arm");
    const std::vector<std::string> &joint_names = joint_model_group->getJointModelNames();
    

    设置关节值

    1)获取关节值
    2)设置关节限制
    1)获取关节值

    std::vector<double> joint_values;
    kinematic_state->copyJointGroupPositions(joint_model_group, joint_values);
    for(std::size_t i = 0; i < joint_names.size(); ++i)
    {
      ROS_INFO("Joint %s: %f", joint_names[i].c_str(), joint_values[i]);
    }
    

    2)设置关节限制

    setJointGroupPositions()函数不能强制自己设置关节限制,但可以通过调用enforceBounds()来设置
    /* Set one joint in the right arm outside its joint limit */
    joint_values[0] = 1.57;
    kinematic_state->setJointGroupPositions(joint_model_group, joint_values);
    
    /* Check whether any joint is outside its joint limits */
    ROS_INFO_STREAM("Current state is " << (kinematic_state->satisfiesBounds() ? "valid" : "not valid"));
    
    /* Enforce the joint limits for this state and check again*/
    kinematic_state->enforceBounds();
    ROS_INFO_STREAM("Current state is " << (kinematic_state->satisfiesBounds() ? "valid" : "not valid"));
    

    正向运动学

    获取一个随机的关节状态,然后求解末端执行器的姿态

    kinematic_state->setToRandomPositions(joint_model_group);
    const Eigen::Affine3d &end_effector_state = kinematic_state->getGlobalLinkTransform("r_wrist_roll_link");
    
    /* Print end-effector pose. Remember that this is in the model frame */
    ROS_INFO_STREAM("Translation: " << end_effector_state.translation());
    ROS_INFO_STREAM("Rotation: " << end_effector_state.rotation());
    

    逆运动学

    给一个末端执行器的位姿,求解次数,还有计算超时时间,得出每一个关节的状态

    bool found_ik = kinematic_state->setFromIK(joint_model_group, end_effector_state, 10, 0.1);
    if (found_ik)
    {
      kinematic_state->copyJointGroupPositions(joint_model_group, joint_values);
      for(std::size_t i=0; i < joint_names.size(); ++i)
      {
        ROS_INFO("Joint %s: %f", joint_names[i].c_str(), joint_values[i]);
      }
    }
    else
    {
      ROS_INFO("Did not find IK solution");
    }
    

    获得雅克比矩阵

    Eigen::Vector3d reference_point_position(0.0,0.0,0.0);
    Eigen::MatrixXd jacobian;
    kinematic_state->getJacobian(joint_model_group, kinematic_state->getLinkModel(joint_model_group->getLinkModelNames().back()),
                                 reference_point_position,
                                 jacobian);
    ROS_INFO_STREAM("Jacobian: " << jacobian);
    

    启动文件

    启动文件做过两件事
    1)上传模型URDF和SRDF到参数服务器
    2)放置运动学求解配置(由配置助手生成的)到ROS参数服务器对应节点的命名空间下,这个节点由是教程里实例化的类

    <launch>
      <include file="$(find pr2_moveit_config)/launch/planning_context.launch">
        <arg name="load_robot_description" value="true"/>
      </include>
    
      <node name="kinematic_model_tutorial"
            pkg="moveit_tutorials"
            type="kinematic_model_tutorial"
            respawn="false" output="screen">
        <rosparam command="load"
                  file="$(find pr2_moveit_config)/config/kinematics.yaml"/>
      </node>
    </launch>
    
    展开全文
  • 汽车运动学模型

    千次阅读 2019-06-23 21:08:33
    1. 汽车运动学模型 1. 运动学模型 在后轴处,即(xr,yr)(x_r,y_r)(xr​,yr​)处,速度为 vr=x˙rcos(φ)+y˙rsin(φ) v_r = \dot{x}_r cos(\varphi)+\dot{y}_rsin(\varphi) vr​=x˙r​cos(φ)+y˙​r​sin(φ) 在沿...
  • 无人驾驶-模型控制,另外还包含了自动驾驶学习资料: 涵盖感知,规划和控制,ADAS,传感器; 1. apollo 相关的技术教程和文档; 2. adas(高级辅助驾驶)算法设计(例如 AEB,ACC,LKA 等) 3. 自动驾驶鼻祖 mobileye ...
  • 手臂康复训练和评估的扩展运动学模型
  • 机器人运动学模型创建

    千次阅读 2019-11-05 08:55:10
    上一篇已经介绍了齐次变换原理,这一篇主要是应用齐次变换来创建机器人运动学模型,我对六轴串联比较感兴趣,所以在描述的过程中会有一点带工业机器人运动学模型的创建过程 DH参数描述 ...
  • C2_车辆动力学与运动学模型

    千次阅读 2019-02-26 19:35:07
    运动学模型、动力学模型、《无人驾驶车辆模型预测控制》
  • 介绍了放矿运动学模型的基本原理。分析了根据运动学模型得出的放出体与实际放出体不相符的原因,并指出了放矿运动学模型的使用范围。改进了散体空位扩散系数DP的取值方法,并推导了二维和三维问题的速度场方程、颗粒...
  • 无人驾驶汽车系统入门(十)——基于运动学模型的模型预测控制 在前面的第五篇博客中,我们介绍了两种常见的车辆模型——运动学自行车模型和动力学自行车模型,本节我们基于运动学车辆模型引入一种新的控制理论...
  • 近断层强地面运动影响场显式有限元数值模拟之震源运动学模型,张晓志,谢礼立,概述了近断层强地面运动影响场显式有限元数值模拟方法的特点和主要环节,重点讨论了如何建立有限断层震源运动学模型及相关问题。
  • 拖钩刨刨头转角运动学模型的建立,李晓豁,宋元,为了研究刨煤机的动力学行为,提高刨头的设计质量,本文以拖钩式刨煤机为例,通过对刨头做运动学分析,得出了各个转动角度与刨头
  • 四轮全方位轮式移动机器人的运动学模型研究pdf,四轮全方位轮式移动机器人的运动学模型研究
  • 机器人学中常用的运动学模型

    千次阅读 2019-10-25 21:45:51
    这里的Simple car model是在无人驾驶中常用到的车辆运动学模型,油门代表对速度v的控制,方向盘转角代表对Φ 的控制(Φ其实决定的是图1中的角速度ω),这两个量在实际中都是有一定的限制的。 ...
  • 参考文章图解差速机器人的三种运动学模型
  • 以方向盘角度和纵向速度为输入的 2DOF 车辆运动学模型
  • 车辆控制-运动学模型(Kinematic Model)

    千次阅读 2019-12-01 23:57:01
    车辆横向运动学模型描述了车辆横向运动的数学模型,该模型不考虑车辆的受力情况。一般考虑运动学模型时,将车辆模型简化成单车模型(bicycle model)。
  • 针对单关节故障机械臂的路径规划问题,提出一种基于运动学模型重构的容错路径规划方法.首先基于旋量理论进行单关节故障机械臂的通用运动学模型重构;然后分析机械臂的退化工作空间,并以运动性能平稳为约束对其进行栅格...
  • 为实现掘进断面自动截割成形控制,达到无人采掘装备自主巡航目标,研究了悬臂式掘进机空间位姿运动学模型并进行了仿真。将悬臂式掘进机的机械机构简化为一系列平移或旋转关节串联而成的运动链,建立了掘进机空间位姿...
  • 通过运动学原理分析了一种空气套管钻机变幅机构的运动对钻机姿态的影响,并在运动学模型基础上分析了钻杆的振动对变幅机构的影响。对变幅机构进行了等效变形,建立了变幅机构的运动学模型,运用运动旋量原理得出运动学...
  • 无人驾驶运动学模型——线性时变模型预测控制的公式推导 最近在学习龚建伟《无人驾驶车辆模型预测控制》里第三章的线性时变模型mpc控制,书里的公式没有推导的细节,而且理论公式跟附的代码对不上,估计公式都是抄...
  • 自动驾驶中的车辆运动学模型

    千次阅读 2020-04-30 15:39:13
    简介 要控制车辆的运动,首先要对车辆的运动简历数字化模型,模型建立的越准确,对车辆运动的描述越准确,对撤离跟踪控制的效果就越好。处理真实反应车辆特性外,...自动驾驶中的车辆运动学模型 卡车的运行模型 ...
  • 无人车系统(一):运动学模型及其线性化

    千次阅读 多人点赞 2019-12-10 12:21:49
    相对无人机与机械臂来说,无人车系统的运动学模型非常简洁。尽管简洁,无人车的运动学模型也是非线性的。应用于具体控制算法时,有必要对模型进行变形或线性化 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,381
精华内容 1,752
关键字:

运动学模型