如何从玩具车中的测距传感器绘制房间轮廓?

时间:2014-01-31 20:18:57

标签: algorithm graphics arduino object-recognition

我有一辆玩具车,前后两侧都有一个arduino和4个超声波测距传感器,如果传感器覆盖的范围内存在任何距离,它们会给我一个距离,传感器给我这个数据在短时间内,汽车必须在房间内移动并绘制轮廓,房间可以有列并且有点不规则,我不知道这个绘图所涉及的算法,任何见解都会受到赞赏。

1 个答案:

答案 0 :(得分:3)

嘿,曾经做过几乎相同的机器人:) 芽可以在一个地方转弯(没有转弯半径)
因此很容易驾驶和映射环境 在你的情况下很难说,因为我们没有看到汽车运动学

无论如何一些提示:

1.在做超声波听力时,你应该让你的电机安静

  • 我使用步进电机,因此可以在接收器中听到它们的脉冲
  • 如果您使用直流电机,那么这可能非常棘手(可能您需要完全停止)
  • 或确定哪个回波是回声以及哪个换向器噪声
  • 无刷(BLDC)和正弦驱动都可以
  • 但PWM或任何其他脉冲驱动会产生同样的问题
  • 所以你需要同步收听时间和脉冲时间
  • 没有适当的测量设备,这将是极其困难的(示波器是理想的)

2.超声发射器

  • 避免许多混淆
  • 要么一次只使用一个
    • 这很容易但很慢
  • 或者一下子只等待第一次接收
    • 这样就不会从远处的回声中获取数据
  • 可以从各方面接收,但需要相当复杂的过滤
  • 尝试尽可能多地优化接收循环
  • 我在MCU的几个T中完成了它,这给了我大约4毫米的分辨率
  • 但是很久以前,使用的ATMEL是仅在20 MHz上运行的旧51克隆
  • 不了解arduino(preffer UC3),但今天的MCU速度提高了10倍以上,时间更好。

3.movement

  • 你需要编码动作演习
  • 按常规步骤转发/后退
  • 向左/向右转90度
  • 他们必须尽可能准确地编码
  • 在合适的环境中,您可以使用超声波更精确(仅需要垂直侧面,内部没有问题材料)
  • 使用这些可以开始绘制2D迷宫

4.映射房间

  • 创建环境的2D地图
  • 你可以通过单元格或矢量方法来实现
  • 我强烈建议您使用手机(不太准确,但对初学者来说更容易)
  • 地图可以是2D数组
  • 值未知,空间,墙

    1.init

    • 将汽车垂直于某墙壁
    • 清除未知地图
    • 在地图中间设置位置(x,y)

    2.echo-locate all sides

    • 如果找到墙壁,则在地图上标记(x,y)+(距离*侧向量)
    • 并将x,y和墙标记之间的所有空格标记为空格
    • 如果没有找到墙,则将地图中的所有单元格从x,y标记为空格(x,y)+(安全范围*侧向量)
    • 侧向量可以是:前(0,+ 1),后(0,-1),左(-1,0),右(+1,0)
    • 安全范围是指在[单元格]
    • 中始终检测到墙壁的距离
    • 距离是[细胞]
    • 中壁的距离
    • 不要忘记将汽车位置的发射器/接收器偏移添加到帐户
    • 还将当前位置(x,y)标记为空格

    3.找到任何或最接近或最快的移动标记为未知但相邻空间单元格的单元格

    • 如果没有找到这样的,那么映射就完成了(通过LED闪烁或做一些疯狂的动作来发出信号)
    • 如果找到然后计划路径并将车移动到它
    • 设置位置x,y到它

    4.goto 2

现在只需从MCU到PC挖掘数据并查看

[注释]

  • 可以添加很多东西来改善这个......
  • 当心面料/布料
  • 他们很难通过超声检测
  • 用于发射器使用其所需频率以最大化其性能
  • 用于脉冲回声定位发射的最佳功率/精度​​/范围比为7脉冲
  • 没有人知道为什么,但它是最好的(至少对我所知的所有应用和设备而言)

玩得开心:)