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

0.前提

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

1.前情回顾

1.拉氏变换

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

2.PID控制器

转向角:

误差牺牲:

3.具体参看上一篇文章

2.巡墙驾驶理论

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

回答:我们可以在当前时间利用雷达获取到右墙的距离,而现在这个时刻的距离认为是,参看下图将小车当前速度设定为,与速度垂直的角度测得到墙距离,距离轴的角度为,在该角度的基础上叠加一个角度),测出一个距离

按下图我们可以计算出角度,这时我们也就知道了当前时刻我们所在的位置

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

按下图,我们假设小车按当前速度会向前行驶一段距离,那我们计算的牺牲误差将会是

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

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

1.微分(D控制器)

1.导数的定义

导数其实本质上就是关于的函数间的除法关系求极限。

2.D控制器公式

换个方式表达:

其中表示当前时间,表示之前时间。涉及到时间的函数在ROS中如何获取?

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

roscpp/Overview/Time - ROS Wiki

2.积分(I控制器)

1.积分的定义

积分其实本质上就是关于的函数间的乘法法关系和求极限。

2.积分控制器公式

换个方式

其中表示当前时间,表示之前时间。

3.PID

最后的PID公式

转向角:

其中表示当前时间,表示之前时间。

误差牺牲:

4.总结

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

相关推荐
AiTEN_Robotics1 天前
AMR机器人:如何满足现代物料搬运的需求
人工智能·机器人·自动化
鲁邦通物联网1 天前
攻克井道信号盲区:基于鲁邦通网关的机器人梯控通讯拓扑与MQTT对接
机器人·机器人梯控·agv梯控·机器人乘梯·机器人自主乘梯·agv机器人梯控
星夜泊客1 天前
C# 基础:为什么类可以在静态方法中创建自己的实例?
开发语言·经验分享·笔记·unity·c#·游戏引擎
Daydream.V1 天前
网页学习——HTML
学习
张永清-老清1 天前
每周读书与学习->JMeter性能测试脚本编写实战(四)-利用JMeter对MySQL数据库查询进行性能测试
学习·jmeter·性能调优·jmeter性能测试·性能分析·每周读书与学习
InterestOriented1 天前
中老年线上学习发展:兴趣岛“内容+服务+空间”融合赋能下的体验升级
人工智能·学习
宇钶宇夕1 天前
CoDeSys入门实战一起学习(二十八):(ST)三台电机顺起逆停程序详解
运维·学习·自动化·软件工程
£漫步 云端彡1 天前
Golang学习历程【第十篇 方法(method)与接收者】
开发语言·学习·golang
im_AMBER1 天前
Leetcode 111 两数相加
javascript·笔记·学习·算法·leetcode
驭渊的小故事1 天前
类和对象的笔记3
笔记