当前位置: 首页 > news >正文

轨迹规划 | 基于差速运动学的有模型PID算法(附ROS C++仿真)

目录

  • 0 专栏介绍
  • 1 有模型PID算法介绍
  • 2 基于差速运动学模型的路径跟踪
  • 3 微分同胚视角下的有模型PID
  • 4 算法仿真(ROS C++)

0 专栏介绍

🔥附C++/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。

🚀详情:图解自动驾驶中的运动规划(Motion Planning),附几十种规划算法


1 有模型PID算法介绍

  • 轨迹规划 | 图解路径跟踪PID算法(附ROS C++/Python/Matlab仿真)
  • 控制原理 | PID控制的三个参数如何影响控制效果?(附参数整定方法)

中我们介绍了无模型PID控制律

Δ u ( k ) = K p Δ e ( k ) + K i e ( k ) Δ t + K d ( Δ e ( k ) − Δ e ( k − 1 ) ) / Δ t \varDelta u\left( k \right) =K_p\varDelta e\left( k \right) +K_ie\left( k \right) \varDelta t+K_d{{\left( \varDelta e\left( k \right) -\varDelta e\left( k-1 \right) \right)}/{\varDelta t}} Δu(k)=KpΔe(k)+Kie(k)Δt+Kd(Δe(k)Δe(k1))/Δt

其优势在于不需要建立复杂的系统模型,便于快速部署;能在不确定性较大的环境中工作,适应系统动态变化;由于不涉及模型计算,控制响应速度快。但缺点也很明显,例如参数调整往往依赖经验,可能需要多次试验;在某些情况下,可能面临系统稳定性问题,特别是在非线性系统中

当我们明确知道系统的动力学模型时,可以考虑采用有模型的PID算法更精确地调整PID参数,优化控制性能

2 基于差速运动学模型的路径跟踪

设系统输出方程

x p = [ 1 1 ] x + G ( x ) \boldsymbol{x}_p=\left[ \begin{matrix} 1& & \\ & 1& \\\end{matrix} \right] \boldsymbol{x}+\boldsymbol{G}\left( \boldsymbol{x} \right) xp=[11]x+G(x)

其中 x = [ x y θ ] T \boldsymbol{x}=\left[ \begin{matrix} x& y& \theta\\\end{matrix} \right] ^T x=[xyθ]T G ( x ) = [ l cos ⁡ θ l sin ⁡ θ ] T \boldsymbol{G}\left( \boldsymbol{x} \right) =\left[ \begin{matrix} l\cos \theta& l\sin \theta\\\end{matrix} \right] ^T G(x)=[lcosθlsinθ]T x p \boldsymbol{x}_p xp的物理意义是如图所示的前瞻点, l l l是机器人中心距离前瞻点的几何长度。

在这里插入图片描述

进一步求解输出的一阶微分

x ˙ p = [ 1 1 ] x ˙ + J ( x ) \boldsymbol{\dot{x}}_p=\left[ \begin{matrix} 1& & \\ & 1& \\\end{matrix} \right] \boldsymbol{\dot{x}}+\boldsymbol{J}\left( \boldsymbol{x} \right) x˙p=[11]x˙+J(x)

其中雅克比矩阵

J ( x ) = ∂ G ( x ) ∂ x T = [ 0 0 − l θ ˙ sin ⁡ θ 0 0 l θ ˙ cos ⁡ θ ] \boldsymbol{J}\left( \boldsymbol{x} \right) =\frac{\partial \boldsymbol{G}\left( \boldsymbol{x} \right)}{\partial \boldsymbol{x}^T}=\left[ \begin{matrix} 0& 0& -l\dot{\theta}\sin \theta\\ 0& 0& l\dot{\theta}\cos \theta\\\end{matrix} \right] J(x)=xTG(x)=[0000lθ˙sinθlθ˙cosθ]

根据建模分析 | 差速轮式移动机器人运动学建模(附Python/Matlab仿真)知道差速移动机器人的运动学方程为

x ˙ = [ x ˙ y ˙ θ ˙ ] = [ cos ⁡ θ 0 sin ⁡ θ 0 0 1 ] [ v ω ] = S ( q ) u \boldsymbol{\dot{x}}=\left[ \begin{array}{c} \dot{x}\\ \dot{y}\\ \dot{\theta}\\\end{array} \right] =\left[ \begin{matrix} \cos \theta& 0\\ \sin \theta& 0\\ 0& 1\\\end{matrix} \right] \left[ \begin{array}{c} v\\ \omega\\\end{array} \right] =S\left( \boldsymbol{q} \right) \boldsymbol{u} x˙=x˙y˙θ˙=cosθsinθ0001[vω]=S(q)u

整理可得

x ˙ p = [ cos ⁡ θ − l sin ⁡ θ sin ⁡ θ l cos ⁡ θ ] u = R ( θ ) u \boldsymbol{\dot{x}}_p=\left[ \begin{matrix} \cos \theta& -l\sin \theta\\ \sin \theta& l\cos \theta\\\end{matrix} \right] \boldsymbol{u}=\boldsymbol{R}\left( \theta \right) \boldsymbol{u} x˙p=[cosθsinθlsinθlcosθ]u=R(θ)u

进行变量置换 v = R ( θ ) u \boldsymbol{v}=\boldsymbol{R}\left( \theta \right) \boldsymbol{u} v=R(θ)u,可得线性的输出方程

x ˙ p = v \boldsymbol{\dot{x}}_p=\boldsymbol{v} x˙p=v

此时只需设计线性的反馈控制律

v = − K ( x p − x d ) \boldsymbol{v}=-\boldsymbol{K}\left( \boldsymbol{x}_p-\boldsymbol{x}_d \right) v=K(xpxd)

即可获得线性非齐次微分方程的解

x p = [ C 1 e − k 1 t + x d C 2 e − k 2 t + y d ] T \boldsymbol{x}_p=\left[ \begin{matrix} C_1e^{-k_1t}+x_d& C_2e^{-k_2t}+y_d\\\end{matrix} \right] ^T xp=[C1ek1t+xdC2ek2t+yd]T

其中 K = d i a g ( k 1 , k 2 ) ( k 1 > 0 , k 2 > 0 ) \boldsymbol{K}=\mathrm{diag}\left( k_1,k_2 \right) \left( k_1>0, k_2>0 \right) K=diag(k1,k2)(k1>0,k2>0)是反馈矩阵, x d \boldsymbol{x}_d xd是系统期望位置。通过输入输出线性化, x p \boldsymbol{x}_p xp可以收敛到 x d \boldsymbol{x}_d xd,控制输入为

u = R − 1 ( θ ) v \boldsymbol{u}=\boldsymbol{R}^{-1}\left( \theta \right) \boldsymbol{v} u=R1(θ)v

其中

R − 1 ( θ ) = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ / l cos ⁡ θ / l ] \boldsymbol{R}^{-1}\left( \theta \right) =\left[ \begin{matrix} \cos \theta& \sin \theta\\ -{{\sin \theta}/{l}}& {{\cos \theta}/{l}}\\\end{matrix} \right] R1(θ)=[cosθsinθ/lsinθcosθ/l]

这是一个基于差速运动学和误差 e = x p − x d \boldsymbol{e}=\boldsymbol{x}_p-\boldsymbol{x}_d e=xpxd的P控制器

3 微分同胚视角下的有模型PID

流形(manifolds)是可以局部欧几里得空间化的一个拓扑空间,是具有拓扑结构的点集,是欧几里得空间中的曲线、曲面等概念的推广。

在这里插入图片描述

欧几里得空间是最简单的流形实例。流形要求拓扑结构的局部为欧式空间或其他相对简单的空间。例如下面的左图所示,在一个半径极大的球面(如地球)上,若以充分大的尺度去度量一个三角形则其只能为曲边三角形,欧式距离不成立,因为位于二维平面上的点不能沿直线穿过球面到达目标点;若以充分小的尺度去度量则可以得到直边三角形——例如在地球上测量跑道长度无需考虑地球的曲率。下面右图中的一维流形同理

在这里插入图片描述
一个并非流形的实例是在球面上吊一根线,因为在包含了线和球连接的那一点的附近区域一定不是简单的——既不是线也不是面。

这种将两个流形局部位置的点和几何结构等同起来的方法称为同胚(homeomorphism),形式化定义为拥有连续逆映射的连续映射;进一步地,定义具有连续可微逆映射的连续可微映射为微分同胚(diffeomorphism)。同胚的概念允许在简单结构上处理复杂问题,利用同胚将非线性问题线性化更精准。本节的输入输出反馈线性化就是微分同胚的例子:当 l > 0 l>0 l>0 R ( θ ) \boldsymbol{R}\left( \theta \right) R(θ) R − 1 ( θ ) \boldsymbol{R}^{-1}\left( \theta \right) R1(θ)是连续可微的,因此 v \boldsymbol{v} v微分同胚于 u \boldsymbol{u} u

4 算法仿真(ROS C++)

核心代码如下所示:

Eigen::Vector2d PIDController::_pidControl(Eigen::Vector3d s, Eigen::Vector3d s_d, Eigen::Vector2d u_r)
{Eigen::Vector2d u;Eigen::Vector3d e(s_d - s);Eigen::Vector2d sx_dot(k_ * e[0], k_ * e[1]);Eigen::Matrix2d R_inv;R_inv << cos(s[2]), sin(s[2]), -sin(s[2]) / l_, cos(s[2]) / l_;u = R_inv * sx_dot;return u;
}

算法效果如下:

在这里插入图片描述

完整工程代码请联系下方博主名片获取


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

http://www.mrgr.cn/news/60234.html

相关文章:

  • 外包干了7天,技术明显退步。。。。。
  • autoware-传感器驱动和感知算法(sensing-perception)-笔记
  • Junit + Mockito保姆级集成测试实践
  • 哈希表之哈希数组、HashSet
  • FPGA采集adc,IP核用法,AD驱动(上半部分)
  • c++数据抽象
  • 重磅!WebStorm 个人版免费开放:JetBrains 为个人开发者带来福音
  • 2024年北京海淀区中小学生信息学竞赛预选赛初复题目难度
  • Python忍者:如何悄无声息地获取Taobao商品详情?
  • 陈文自媒体:1年600万+,彻底改变命运!
  • 个人防护装备分割系统:全面扶持小白
  • 构建数据湖仓的开源技术栈有哪些
  • MacOS下载安装Logisim(图文教程)
  • 数据结构-拓扑排序笔记
  • 【RAG】RAG概述
  • 聚焦汽车智能化与电动化︱AUTO TECH 2025 华南展,以展带会,已全面启动,与您相约11月广州!
  • 跨境电商内部售卖系统:基于php的开源解决方案
  • iOS静态库(.a)及资源文件的生成与使用详解(OC版本)
  • conda激活环境失败
  • 趋势丨2024遍地开花的新能源大模型
  • 智能ai写作界黑马,4款神器集锦,你pick哪一款?
  • 无线测温产品在地铁项目中的应用
  • International Journal of Robotics Research综述分享:深度解析模块化自重构机器人前世今生
  • 人人都在学的智能体(AI Agent),带你轻松入门!
  • Python 基础:入门必备知识
  • OceanMind海睿思受邀参加中国信通院2024数据要素发展大会