7905| 1
|
[教程] 【Gravity】Mind+掌控板进阶教程-项目十五 无人漫游车 |
本帖最后由 _木子_ 于 2019-11-7 18:37 编辑 项目十五 无人漫游车 2011年11月,总造价高达25亿美元的好奇号火星车发射升空。在砾石遍布的火星表面,带着探索火星生命元素的使命,好奇号无人漫游车每天都在缓慢移动着、寻找着。 在这个项目中,我们也将制作一台无人漫游车,并让它能够自行躲避障碍。 一般的避障小车会将超声波固定在车头检测障碍,当有障碍物的时候,就自动转左或转右,其实就是让小车一直向前“看”。在这个项目中,为了让小车更加“智能”,将会让小车向四周“看”,检测周围的障碍物,根据结果“智能”选择路线。 如何实现呢?一起来头脑风暴一下吧! 头脑风暴 问题清单 1、无人漫游车首先是一辆小车,参照“相扑机器人”,如何组装一辆车? 2、超声波传感器可以帮助小车“看见”障碍物,那么如何让它往四周“看”呢?借助什么硬件? 3、想一想,往四周“看”的超声波是不是有点像一个雷达?尝试将它简化为一个雷达,帮助小车判断周围路况,比如当小车前进方向的四周都被阻碍时,引导小车调头,原路返回! 4、雷达(详细介绍见核心知识点)可以通过360或180度扫描,反馈周围障碍物的距离和方位,并使用图形显示出来。刚好掌控板上有一块显示屏,能否在掌控板上做这样一个雷达网图呢? 5、如何确定障碍物的方位呢?能否借助舵机带动超声波看见四周?考虑到这里的舵机是0-180度转动,所以可以采用180度的雷达网图。 6、如何画出雷达网图?如何实时画出障碍物的位置?这可能需要一点数学知识喔! 7、如何“智能”选择路线? 核心知识点 雷达 雷达,是英文Radar的音译,源于radio detection and ranging的缩写,意思为"无线电探测和测距",即用无线电的方法发现目标并测定它们的空间位置。因此,雷达也被称为“无线电定位”。 有的雷达可以360度转动,用于定位附近的障碍物的距离和方位,并将数据传回电脑,通过雷达扫描图来实时显示。图中绿色圆点即为检测到的障碍物。 掌控板屏幕的坐标系 在Mind+中,掌控板屏幕上建立的坐标系如下左图。前面讲过,使用超声波可以确定障碍物的距离。那么如何确定方位呢? 其实方位就是舵机转动的角度。舵机0-180度转动,在坐标系中可以表示为右图。 确定障碍物的坐标 将舵机转动的角度结合超声波探测的距离,即可在坐标系中定位障碍物的位置。比如在角度A时,超声波测得障碍物距离为R,通过一定数学运算即可获得该障碍在坐标系中的位置。 参照下图,在雷达网图中,圆心的位置(x0,y0)是确定的,如果知道舵机角度A和距离R,那么由三角函数的知识,即可求得障碍物位置坐标(x1,y1)的值。 当超声波探测距离R随舵机角度A实时变化,根据上面的数学关系,障碍物位置坐标(x1,y1)也会实时变化。 通过上面这个方法,可以在屏幕上画出简易的雷达网图,还可以实时画出超声波检测的障碍物的位置。一起来看看如何实现吧! 规划方案 功能分解 这个项目将制作一台无人漫游车,使用舵机带动超声波进行转动,模拟雷达功能,在屏幕上实时显示雷达扫描图,并根据扫描结果,“智能”选择没有障碍的路线。 在项目实现的过程中主要有两个难点: 1、如何实现雷达扫描图? 2、如何“智能”行走? 先来解决问题2:如何“智能”行走?这里的“智能”其实是指小车行走的逻辑,在应对不同的路况时,做出合适的判断。那么行走的逻辑是什么呢? 为了简化分析,我们将小车的前进方向按照左、中、右划分为3个区间。如果采用优先转右的思路行走逻辑如流程图。 根据流程图可以看到,小车在行驶过程中,路线选择的优先级是区间2→区间1→区间3,分析如下: ■ 扫描过后,当前方无障碍,小车直行; ■ 当前方有障碍,先判断右侧,无障碍,小车转右后直行; ■ 当前方和右侧都有障碍,再判断左侧,无障碍,小车转左后直行; ■ 当左、中、右都有障碍,说明小车前方道路不通,小车调头后直行; ■ 小车启动后检测前方是否有障碍,无障碍则一直行走,有障碍则停止运动,再重新扫描。 * 优先转右是指当前方有障碍,优先判断右侧。大家也可以采用优先转左,只需要将判断的优先级改为区间2→区间3→区间1。 再来解决问题1:如何实现雷达扫描图?超声波传感器的探测距离为5cm-300cm,但是实际不用探测那么远,假设车身长15cm,超声波探测的范围在60cm也就够用了。将60cm均匀分为3段,在屏幕上画出3个半圆,依次代表探测距离为0-20cm、20-40cm、40-60cm。再画几根线区分0-180度的扫描区间,即可完成雷达网格。 如何显示扫描的障碍呢?考虑到掌控板屏幕小、分辨率低、且只有黑白色,所以这里采用画线的方式显示障碍。如下图,无白线的区域表示没有障碍,有白线的表示有障碍,线的长短代表障碍距离的远近,线越短,说明距离越近! 这样如果扫描时,前方完全没有障碍,屏幕中将没有一点动态效果,为了显示扫描的过程,在雷达网图的最外侧弧线上,通过画点或画圆的方式,实时显示舵机的方位。 这样每次扫描时,可以根据外侧弧线的白点确定舵机方位,根据白线的长短判断障碍的距离。 解决了上面两个难题,一起来看看如何完整实现吧!首先,一步一步分解功能。 构造外观 问题记录 在后面项目实现过程中,可能会遇到各种各样的困难,尝试在下表中记录你遇到的问题和解决办法,便于以后出现类似问题时能更好的面对。 功能实现 功能1:画雷达网格 程序及实现效果如下: 舵机带动超声波0-180转动,检测障碍。在屏幕上显示雷达扫描图。 连线图: * 注意在Mind+中加载舵机和超声波。 在功能一程序基础上,程序修改如下: 运行结果:将超声波固定在舵机上(可将胶带或胶枪固定),超声波随着舵机来回转动,在5-60cm范围内,如果有障碍,屏幕上将画出白线。 功能3:“智能”规划路线 使用两个电机搭建一辆车。 连线图: 在功能分解部分,已经分析过小车行走的逻辑。也留下了一个问题:如何判断区间1、2、3是否有障碍呢? 从下面这张图可以看出,当掌控板屏幕面向小车行驶前方时,区间1对应舵机0-60度,区间2对应舵机60-120度,区间3对应舵机120-180度. 因为在上面程序中设定舵机每次转动6度,所以一个区间中,舵机会转动10次,即超声波进行10次检测。为了让障碍判断的更加准确,可以让舵机进行一次来回扫描。当在一个区间中,超声波来回超过10次检测到有障碍,可以大致确定这个方位一定是有障碍的。 将这种思路带到编程中,可以设定3个变量,分别累计3个区间超声波检测的情况,当超声波检测到一次障碍,变量加一,来回扫描一遍后,当这个变量大于10,则认为这个区间是有障碍的。 结合小车优先转左的行走逻辑,“智能”选择路线程序如下: * 注意在Mind+中加载扩展板。 运行结果:上电后,舵机带动超声波0-180度扫描后,再180-0度扫描,同时在屏幕上显示雷达图。扫描一个来回后,小车“智能”行走,可以自行躲避障碍。 评价与反思 与人分享快乐,能产生更多快乐,尝试与身边的朋友一起分享你的无人漫游车。你还可以在DF创客社区中分享作品,听听更多人的建议! 社区网址:www.dfrobot.com.cn 梳理自己设计项目的思维逻辑、项目在执行层面的问题和经验等等,可以帮助我们形成学习的闭环,加深在项目进行的过程中对知识点和内容的理解,找到可以改进和提高的地方。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed