查看: 159|回复: 0

[教程] 【Gravity】Mind+掌控板进阶教程-项目十五 无人漫游车

[复制链接]
本帖最后由 _木子_ 于 2019-11-7 18:37 编辑

项目十五 无人漫游车


2011年11月,总造价高达25亿美元的好奇号火星车发射升空。在砾石遍布的火星表面,带着探索火星生命元素的使命,好奇号无人漫游车每天都在缓慢移动着、寻找着。

201911074772..png

在这个项目中,我们也将制作一台无人漫游车,并让它能够自行躲避障碍。

一般的避障小车会将超声波固定在车头检测障碍,当有障碍物的时候,就自动转左或转右,其实就是让小车一直向前“看”。在这个项目中,为了让小车更加“智能”,将会让小车向四周“看”,检测周围的障碍物,根据结果“智能”选择路线。

如何实现呢?一起来头脑风暴一下吧!

头脑风暴


问题清单
1、无人漫游车首先是一辆小车,参照“相扑机器人”,如何组装一辆车?
2、超声波传感器可以帮助小车“看见”障碍物,那么如何让它四周“看”呢?借助什么硬件?
3、想一想,往四周“看”超声波是不是有点像一个雷达?尝试将它简化为一个雷达,帮助小车判断周围路况,比如当小车前进方向的四周都被阻碍时,引导小车调头,原路返回!
4、雷达(详细介绍见核心知识点)可以通过360或180度扫描,反馈周围障碍物的距离方位,并使用图形显示出来。刚好掌控板上有一块显示屏,能否在掌控板上做这样一个雷达网图呢?
201911076839..png 201911074464..png

5、如何确定障碍物的方位呢?能否借助舵机带动超声波看见四周?考虑到这里的舵机0-180度转动,所以可以采用180度的雷达网图。
6、如何画出雷达网图?如何实时画出障碍物的位置?这可能需要一点数学知识喔!
7、如何“智能”选择路线?

核心知识点

雷达
雷达,是英文Radar的音译,源于radio detection and ranging的缩写,意思为"无线电探测和测距",即用无线电的方法发现目标并测定它们的空间位置。因此,雷达也被称为“无线电定位”。

201911071122..png 201911075984..png

有的雷达可以360度转动,用于定位附近的障碍物的距离和方位,并将数据传回电脑,通过雷达扫描图来实时显示。图中绿色圆点即为检测到的障碍物。

三角函数(结合初中数学)
在初中数学中讲过,三角函数是将直角三角形的内角和它的两个边长的比值相关联,若已知斜边长R和其中一个内角的角度A,则两条直角边长可用三角函数表示,如下图。

201911074222..png

掌控板屏幕的坐标系
Mind+中,掌控板屏幕上建立的坐标系如下左图。前面讲过,使用超声波可以确定障碍物的距离。那么如何确定方位呢?
其实方位就是舵机转动的角度。舵机0-180度转动,在坐标系中可以表示为右图。

201911074755..png

确定障碍物的坐标
舵机转动的角度结合超声波探测的距离,即可在坐标系中定位障碍物的位置。比如在角度A时,超声波测得障碍物距离为R,通过一定数学运算即可获得该障碍在坐标系中的位置。

参照下图,在雷达网图中,圆心的位置(x0,y0)是确定的,如果知道舵机角度A距离R,那么由三角函数的知识,即可求得障碍物位置坐标(x1,y1)的值。

201911079061..png

超声波探测距离R舵机角度A实时变化,根据上面的数学关系,障碍物位置坐标(x1,y1)也会实时变化。
通过上面这个方法,可以在屏幕上画出简易的雷达网图,还可以实时画出超声波检测的障碍物的位置。一起来看看如何实现吧!

规划方案

功能分解
这个项目将制作一台无人漫游车,使用舵机带动超声波进行转动,模拟雷达功能,在屏幕上实时显示雷达扫描图,并根据扫描结果,“智能”选择没有障碍的路线。
在项目实现的过程中主要有两个难点:
1、如何实现雷达扫描图?
2、如何“智能”行走?

先来解决问题2:如何“智能”行走?这里的“智能”其实是指小车行走的逻辑,在应对不同的路况时,做出合适的判断。那么行走的逻辑是什么呢?

为了简化分析,我们将小车的前进方向按照左、中、右划分为3个区间。如果采用优先转右的思路行走逻辑如流程图。

201911079700..png 201911071748..png

根据流程图可以看到,小车在行驶过程中,路线选择的优先级是区间2→区间1→区间3,分析如下:
扫描过后,当前方无障碍,小车直行;
当前方有障碍,先判断右侧,无障碍,小车转右后直行;
当前方和右侧都有障碍,再判断左侧,无障碍,小车转左后直行;
当左、中、右都有障碍,说明小车前方道路不通,小车调头后直行;
小车启动后检测前方是否有障碍,无障碍则一直行走,有障碍则停止运动,再重新扫描。

* 优先转右是指当前方有障碍,优先判断右侧。大家也可以采用优先转左,只需要将判断的优先级改为区间2→区间3→区间1。

再来解决问题1:如何实现雷达扫描图?超声波传感器的探测距离为5cm-300cm,但是实际不用探测那么远,假设车身长15cm,超声波探测的范围在60cm也就够用了。将60cm均匀分为3段,在屏幕上画出3个半圆,依次代表探测距离为0-20cm、20-40cm、40-60cm。再画几根线区分0-180度的扫描区间,即可完成雷达网格。
                      201911071435..png 201911072917..png

如何显示扫描的障碍呢?考虑到掌控板屏幕小、分辨率低、且只有黑白色,所以这里采用画线的方式显示障碍。如下图,无白线的区域表示没有障碍,有白线的表示有障碍,线的长短代表障碍距离的远近,线越短,说明距离越近!

201911072068..png

这样如果扫描时,前方完全没有障碍,屏幕中将没有一点动态效果,为了显示扫描的过程,在雷达网图的最外侧弧线上,通过画点或画圆的方式,实时显示舵机的方位。

这样每次扫描时,可以根据外侧弧线的白点确定舵机方位,根据白线的长短判断障碍的距离。

解决了上面两个难题,一起来看看如何完整实现吧!首先,一步一步分解功能。

机器图13-1.png
截图13-2.png


构造外观
截图13-3.png


问题记录
在后面项目实现过程中,可能会遇到各种各样的困难,尝试在下表中记录你遇到的问题和解决办法,便于以后出现类似问题时能更好的面对。

问题记录.png

功能实现


功能1:画雷达网格
程序及实现效果如下:
201911071010..png
功能2:实现雷达扫描效果
舵机带动超声波0-180转动,检测障碍。在屏幕上显示雷达扫描图。

连线图:

201911076322..png
* 注意在Mind+中加载舵机和超声波。

在功能一程序基础上,程序修改如下:
201911076914..png
201911076562..png

运行结果:将超声波固定在舵机上(可将胶带或胶枪固定),超声波随着舵机来回转动,在5-60cm范围内,如果有障碍,屏幕上将画出白线。
201911077667..png

功能3:“智能”规划路线
使用两个电机搭建一辆车。

连线图:
201911079770..png

在功能分解部分,已经分析过小车行走的逻辑。也留下了一个问题:如何判断区间1、2、3是否有障碍呢?
从下面这张图可以看出,当掌控板屏幕面向小车行驶前方时,区间1对应舵机0-60度,区间2对应舵机60-120度,区间3对应舵机120-180度.

201911075341..png
201911078072..png

因为在上面程序中设定舵机每次转动6度,所以一个区间中,舵机会转动10次,超声波进行10次检测。为了让障碍判断的更加准确,可以让舵机进行一次来回扫描当在一个区间中,超声波来回超过10次检测到有障碍,可以大致确定这个方位一定是有障碍的。

将这种思路带到编程中,可以设定3个变量分别累计3个区间超声波检测的情况,当超声波检测到一次障碍,变量加一,来回扫描一遍后,当这个变量大于10,则认为这个区间是有障碍的。

结合小车优先转左的行走逻辑,“智能”选择路线程序如下:

* 注意在Mind+中加载扩展板。
201911073170..png 201911079450..png

201911072700..png 201911072125..png

运行结果:上电后,舵机带动超声波0-180度扫描后,再180-0度扫描,同时在屏幕上显示雷达图。扫描一个来回后,小车“智能”行走,可以自行躲避障碍。

构造外观
201911076226..png 201911074441..png

评价与反思
与人分享快乐,能产生更多快乐,尝试与身边的朋友一起分享你的无人漫游车。你还可以在DF创客社区中分享作品,听听更多人的建议!

社区网址:www.dfrobot.com.cn

自我反思
梳理自己设计项目的思维逻辑、项目在执行层面的问题和经验等等,可以帮助我们形成学习的闭环,加深在项目进行的过程中对知识点和内容的理解,找到可以改进和提高的地方。
自我反思.png



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail