ROS学习笔记(15)小车巡墙驾驶

admin2024-05-15  1

0.前提

前一章我讲解了拉氏变换和PID,这一章我来讲解一下小车巡墙驾驶的理论和部分代码。

ROS学习笔记(15)小车巡墙驾驶,第1张

1.前情回顾

1.拉氏变换

ROS学习笔记(15)小车巡墙驾驶,F(s)=\int_{0}^{+\infty}f(t)e^{-st}dt,第2张

拉普拉斯变换是要将时域问题转换成频域问题来处理。

2.PID控制器

转向角: ROS学习笔记(15)小车巡墙驾驶,\theta _{pi}=K_{p}*e(t)+K_{i}\int_{0}^{t}e(t)dt+K_{p}*\frac{d}{dt}e(t),第3张

误差牺牲:ROS学习笔记(15)小车巡墙驾驶,e(t)=-(y+L*sin(\theta )),第4张

ROS学习笔记(15)小车巡墙驾驶,第5张

3.具体参看上一篇文章

2.巡墙驾驶理论

在PID当中我们提到牺牲误差,那实际运用当中我们要如何得到牺牲误差呢?在何时去获取误差(这是一个时域问题)?

回答:我们可以在当前时间ROS学习笔记(15)小车巡墙驾驶,t,第6张利用雷达获取到右墙的距离,而现在这个时刻的距离认为是ROS学习笔记(15)小车巡墙驾驶,D_{t},第7张,参看下图将小车当前速度设定为ROS学习笔记(15)小车巡墙驾驶,v,第8张,与速度垂直的角度测得到墙距离ROS学习笔记(15)小车巡墙驾驶,b,第9张,距离ROS学习笔记(15)小车巡墙驾驶,b,第9张ROS学习笔记(15)小车巡墙驾驶,y,第11张轴的角度为ROS学习笔记(15)小车巡墙驾驶,\beta,第12张,在该角度的基础上叠加一个角度ROS学习笔记(15)小车巡墙驾驶,\theta,第13张ROS学习笔记(15)小车巡墙驾驶,0<\theta \leq 70,第14张),测出一个距离ROS学习笔记(15)小车巡墙驾驶,a,第15张

ROS学习笔记(15)小车巡墙驾驶,第16张

按下图我们可以计算出角度ROS学习笔记(15)小车巡墙驾驶,\beta,第12张,这时我们也就知道了当前时刻我们所在的位置ROS学习笔记(15)小车巡墙驾驶,D_{t}=bcos(\beta ),第18张

ROS学习笔记(15)小车巡墙驾驶,第19张

既然我们得到了车和墙现在的距离,那我们设置一个我们的期望值(车和墙的距离)ROS学习笔记(15)小车巡墙驾驶,R_{t},第20张,计算牺牲误差ROS学习笔记(15)小车巡墙驾驶,e(t)=R_{t}-D_{t},第21张,在低速档的时候按照这个方式计算转向是完全ok的,但当我们小车行驶在超高速度时(雷拉洛的AK-787极速能达到260km/h!),按照这样的测距方式是来不及的,换而言之,在工业上这时不安全的,我们更希望超前预测计算距离。

按下图,我们假设小车按当前速度会向前行驶一段距离ROS学习笔记(15)小车巡墙驾驶,L,第22张,那我们计算的牺牲误差将会是ROS学习笔记(15)小车巡墙驾驶,e(t)=R_{t}-D_{t}-Lsin(\beta ),第23张

ROS学习笔记(15)小车巡墙驾驶,第24张

3. ROS实现巡墙驾驶关键解析

在PID计算中我们需要用到积分与微分,但在实际代码工程中如何实现积分和微分的计算呢?

1.微分(D控制器)

1.导数的定义

ROS学习笔记(15)小车巡墙驾驶,第25张

导数其实本质上就是关于ROS学习笔记(15)小车巡墙驾驶,x,第26张的函数ROS学习笔记(15)小车巡墙驾驶,f(x),第27张ROS学习笔记(15)小车巡墙驾驶,x,第26张间的除法关系求极限。

2.D控制器公式

ROS学习笔记(15)小车巡墙驾驶,u(t)=K_{p}*\frac{d}{dt}e(t),第29张

换个方式表达:

ROS学习笔记(15)小车巡墙驾驶,u(t)=K_{p}*\frac{e(t_{1})-e(t_{2})}{t_{1}-t_{2}},第30张

其中ROS学习笔记(15)小车巡墙驾驶,t_{1},第31张表示当前时间,ROS学习笔记(15)小车巡墙驾驶,t_{2},第32张表示之前时间。涉及到时间的函数在ROS中如何获取?

这里我只给出c++的ROS获取当前时间:

roscpp/Overview/Time - ROS Wiki

2.积分(I控制器)

1.积分的定义

ROS学习笔记(15)小车巡墙驾驶,第33张

积分其实本质上就是关于ROS学习笔记(15)小车巡墙驾驶,x,第26张的函数ROS学习笔记(15)小车巡墙驾驶,f(x),第27张ROS学习笔记(15)小车巡墙驾驶,x,第26张间的乘法法关系和求极限。

2.积分控制器公式

ROS学习笔记(15)小车巡墙驾驶,u(t)=K_{i}\int_{0}^{t}e(t)dt,第37张

换个方式

ROS学习笔记(15)小车巡墙驾驶,u(t)=K_{i}*\sum [e(t)*(t_{1}-t_{2})],第38张

其中ROS学习笔记(15)小车巡墙驾驶,t_{1},第31张表示当前时间,ROS学习笔记(15)小车巡墙驾驶,t_{2},第32张表示之前时间。

3.PID

最后的PID公式

转向角:ROS学习笔记(15)小车巡墙驾驶,\theta _{pi}=K_{p}*e(t)+K_{i}*\sum [e(t)*(t_{1}-t_{2})]+K_{p}*\frac{e(t_{1})-e(t_{2})}{t_{1}-t_{2}},第41张

其中ROS学习笔记(15)小车巡墙驾驶,t_{1},第31张表示当前时间,ROS学习笔记(15)小车巡墙驾驶,t_{2},第32张表示之前时间。

 误差牺牲:ROS学习笔记(15)小车巡墙驾驶,e(t)=-(y+L*sin(\theta )),第4张

4.总结

好了PID的理论和一些代码思路我就讲到这里了,接下来就是大家自己去实践了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!