我有一辆玩具车,前面、后面和两边都有一个 arduino 和 4 个超声波测距仪传感器,如果在传感器覆盖的范围内存在的话,它们会给我到墙壁的距离,传感器给我简短的数据间隔,汽车必须在房间周围移动并绘制轮廓,房间可以有柱子并且有点不规则,我不知道这个绘图中涉及的算法,任何见解将不胜感激。
问问题
1420 次
1 回答
3
嘿曾经做过一个几乎相同的机器人 :)
芽它可以在一个地方转身(没有转弯半径)
所以很容易驾驶和地图环境
在你的情况下很难说因为我们没有看到汽车运动学
无论如何一些提示:
1.在做超声波聆听时,你应该让你的马达安静下来
- 我使用了步进电机,因此可以在接收器中听到它们的脉冲
- 如果您使用直流电机,那么这可能非常棘手(可能您需要完全停止)
- 或确定哪个回声是回声以及哪个换向器噪声
- 无刷(BLDC)和正弦驱动都可以
- 但是 PWM 或任何其他脉冲驱动都会产生同样的问题
- 所以你需要同步收听时间和脉冲噪声时间
- 如果没有适当的测量设备,这将非常困难(示波器非常适合)
2.超声波发射器
- 避免许多混淆
- 要么一次只使用一个
- 这很容易但很慢
- 或一次全部等待,仅等待第一次接收
- 这样你就不会从远处的回声中获取数据
- 可以从各方接收,但需要相当复杂的过滤
- 尽量优化接收循环
- 我在几 T 的 MCU 中做到了,这给了我大约 4 毫米的分辨率
- 但那是很久以前的事了,使用的 ATMEL 是旧的 51 克隆,仅在 20 MHz 上运行
- 不了解 arduino(更喜欢 UC3),但今天的 MCU 速度快了 10 倍以上,时序要好得多。
3.运动
- 您将需要编写移动操作代码
- 不断前进/后退
- 向左/向右转 90 度
- 它们必须尽可能准确
- 在合适的环境中,您可以使用超声波更准确(只需要垂直边,内部没有问题材料)
- 有了这些,你就可以开始绘制你的 2D 迷宫了
4.映射房间
- 创建环境的 2D 地图
- 您可以通过单元格或矢量方法来完成
- 我强烈推荐细胞访问(它不太准确,但对初学者来说更容易)
- 地图可以是二维数组
值未知,空间,墙
1.初始化
- 将汽车垂直于墙壁
- 清除未知的地图
- 在地图中间设置位置 (x,y)
2.echo-定位所有面
- 如果找到墙,请在地图上的 (x,y)+(distance * side vector) 上标记它
- 并将 x,y 和墙壁标记之间的所有空间标记为空格
- 如果没有找到墙,则将地图中从 x,y 到 (x,y)+(safe range*side vector) 的所有单元格标记为空间
- 侧向量可以是:front(0,+1), back(0,-1), left(-1,0), right(+1,0)
- 安全范围是与您的汽车的距离,在 [cells] 中始终检测到墙壁
- distance 是在 [cells] 中测量的墙的距离
- 不要忘记从汽车位置添加发射器/接收器偏移量
- 还将当前位置 (x,y) 标记为空格
3.找到任何或最近或最快的移动标记为未知但相邻的空间单元格的单元格
- 如果没有找到这样的映射,则映射完成(通过 LED 闪烁或做一些疯狂的动作来发出信号)
- 如果找到然后计划路径并将汽车移动到它
- 将位置 x,y 设置为它
4.转到2
现在只需将数据从 MCU 挖掘到 PC 并查看它
[笔记]
- 可以添加很多东西来改善这一点......
- 当心织物/布类材料
- 它们很难通过超声波检测到
- 发射器使用其所需的频率来最大化其性能
- 对于脉冲回声定位,发射的最佳功率/精度/距离比是 7 个脉冲
- 没有人知道为什么,但它是最好的(至少对于我所知道的所有应用程序和设备)
玩得开心 :)
于 2014-02-01T08:40:56.500 回答