基于车辆运动学模型的LQR横向控制算法
一,车辆运动学模型的建立
如图所示,对于横向控制而言,因变量为,自变量为
将速度沿轴分解得车辆的模型为:
即:
其中,因为是横向控制,故假设是常数
上述车辆运动学模型为非线性模型:
二,车辆运动学模型的线性化:泰勒展开
在参考点处的泰勒展开公式,忽略高次项为:
其中,
令,
则上式可表示为:
三,车辆运动学模型的离散化:前向欧拉
其中,
四,基于LQR模型,求解控制量
LQR的代价函数为:
假设,
迭代法求黎卡提方程的解,设置迭代次数和迭代精度,如果在迭代次数范围内满足迭代精度的要求,我们认为该方程收敛,从而求得,则反馈增益为:
反馈量为:
LQR控制理论已经非常成熟,核心是建立模型,对模型进行线性化,并离散化,最终带入公式求解LQR的控制量。
五,实例代码
double lqrComputeCommand(double vx, double x, double y, double yaw, Traj_Point match_point,double vel, double l, double dt)
{double steer = 0.0;MatrixXd Q = MatrixXd::Zero(3,3); MatrixXd R = MatrixXd::Zero(1,1);Q << 1 , 0 , 0,0 , 1 , 0,0 , 0 , 1;R << 1;double curvature = match_point.path_point.kappa;if(vel < 0) curvature = -curvature;double feed_forword = atan2(l * curvature, 1);MatrixXd A = MatrixXd::Zero(3, 3);A(0, 0) = 1.0;A(0, 2) = -vel*sin(match_point.path_point.yaw)*dt;A(1, 1) = 1;A(1, 2) = vel*cos(match_point.path_point.yaw)*dt;A(2, 2) = 1.0;MatrixXd B = MatrixXd::Zero(3,1);B(2, 0) = vel*dt/l/pow(cos(feed_forword),2);double delta_x = x - match_point.path_point.x;double delta_y = y - match_point.path_point.y;double delta_yaw = NormalizeAngle(yaw - match_point.path_point.yaw);VectorXd dx(3); dx << delta_x, delta_y, delta_yaw;double eps = 0.01;double diff = std::numeric_limits<double>::max();MatrixXd P = Q;MatrixXd AT = A.transpose();MatrixXd BT = B.transpose();int num_iter = 0;while(num_iter++ < param_.maxiter && diff > eps){MatrixXd Pn = AT * P * A - AT * P * B * (R + BT * P * B).inverse() * BT * P * A + Q;diff = ((Pn - P).array().abs()).maxCoeff();P = Pn;}MatrixXd feed_back = -((R + BT * P * B).inverse() * BT * P * A) * dx;steer = NormalizeAngle(feed_back(0,0) + feed_forword);return steer;
}
基于车辆运动学模型的LQR横向控制算法相关推荐
- 基于车辆运动学模型的纯跟踪(Pure Pursuit)法
一.定义及概论 纯跟踪控制算法(Pure Pursuit)是一种典型的横向控制方法,最早由 R. Wallace 在1985年提出,该方法对外界的鲁棒性较好. 该算法的思想:基于当前车辆后轮中心位置, ...
- 基于阿克曼转向的车辆运动学模型
基于阿克曼转向的车辆运动学模型 在simulink中建立车辆运动学模型,为路径规划奠定基础,能够更好的检验简化的运动学模型反映运动过程的准确性. 包括:1.simulink仿真验证(版本为2018b) ...
- 自动驾驶控制算法——车辆运动学模型
车辆运动学模型 自行车模型(Bicycle Model) 自行车模型(Bicycle Model)的建立基于如下假设: 不考虑车辆在垂直方向(Z轴方向)的运动,即假设车辆的运动是一个二维平面上的运动; ...
- 基于阿克曼转向的车辆运动学模型 在simulink中建立车辆运动学模型
基于阿克曼转向的车辆运动学模型 在simulink中建立车辆运动学模型,为路径规划奠定基础,能够更好的检验简化的运动学模型反映运动过程的准确性. 包括:1.simulink仿真验证(版本为2018b) ...
- 自动驾驶车辆控制(车辆运动学模型)
本文应配合b站up主"忠厚老实的老王"的自动驾驶控制算法系列视频食用. 文章目录 1. 两个车辆运动学模型 1.1 三个坐标系 1.2符号定义 1.3车辆运动学模型 1.4车辆动力 ...
- Apollo学习笔记(7)车辆运动学模型
这里又整了一遍车辆运动学,之前在Autoware那会,已经在控制那一部分整过一次了,就当复习了吧. 前言 车辆的控制目前用的最广的有三种方式: PID LQR MPC 其中,PID是一种对模型无要求的 ...
- Apollo代码学习(二)—车辆运动学模型
Apollo代码学习-车辆运动学模型 前言 车辆模型 单车模型(Bicycle Model) 车辆运动学模型 阿克曼转向几何(Ackerman turning geometry) 小结 Apollo( ...
- 车辆运动学模型到动力学模型推导
车辆运动学模型到动力学模型推导 参考 https://www.bilibili.com/video/BV1St411A7nH/?spm_id_from=333.788.recommend_more_v ...
- 【自动驾驶】车辆运动学模型
文章目录 参考资料 1. 以车辆重心为中心的单车运动学模型 1.1 参数说明 1.2 几何关系 1.2.1 偏航角ψ\psiψ的关系 1.2.1 滑移角 β\betaβ 的关系 1.2.2 运动学模型 ...
- 自动驾驶(五)---------车辆运动学模型
车辆运动学模型 我的定义:正常直线行驶,位置变化等于速度*时间,车辆不是直线行驶,已知速度和方向盘转角等,求新的位置. 1.单车模型(Bicycle Model) 其中将左/右前轮合并为一个点,位于A ...
最新文章
- CEAC网络构建试题
- python的random函数_关于random()的详细介绍
- bzoj 3033 太鼓达人——欧拉图搜索
- 什么是javax.ws.rs.core.context? [第3部分]
- 2021-07-24 KDD China郑宇博士部分听会记录
- 阿里云和中移物联网M5311的MQTT通讯
- [POJ3177]Redundant Paths(双联通)
- Kerberos与Sniffer,矛与盾永远的对立
- [原创]jQuery动画弹出窗体支持多种展现方式
- mysql unrecognized service问题解决
- matlab仿真环境运行,第7章 Simulink仿真环境.ppt
- 2、pip2.7安装Ansible
- 设备性能测试 : 内存带宽的测试
- c语言乘法口诀表的流程图_C语言实现“乘法口诀表”
- 如何辨别u盘是否为缩水,并恢复u盘真实容量
- (vue)在ajax获取数据时使用loading组件不起作用
- 显示器还有卖的吗_显示器不够好,你确定修的片能好看? | 摄影早自习第1365天...
- RF自动化测试框架(二)
- golang学习笔记(十六):多态的实现
- 利用自媒体推广实用好方法!
热门文章
- 能快速修改视频格式的工具分享
- FidMTF: An MTF Estimator (FidMTF:一种MTF估计方法)
- 每周大数据论文(一)Data-intensive applications, challenges, techniques and technologies: A survey on Big Data
- Hulu在Content Embedding的探索与实践
- 饥饿游戏2:星火燎原[The Hunger Games:Catching Fire]
- 数据中台02:数据中台架构
- 2020 Apple Developer 苹果开发者证书配置
- 【正则表达式】正则表达式在线工具怎么使用?怎么测试自己写的正则表达式是否正确?
- CF1132D Stressful Training (binary search)(greedy)
- CC控制服务的设计和侦测方法综述