我有一辆玩具车,在前,后和两侧都有一个Arduino和4个超声波范围的发现器传感器,如果在该范围内存在任何范围内,它们会给我距离墙壁的距离传感器盖,传感器为我提供了短时间的数据,汽车必须在房间周围移动并绘制轮廓,房间可以有列,有点不规则,我不知道该情节所涉及的算法,任何洞察力将不胜感激。
heh曾经做过几乎相同的机器人:)
芽它可以在一个地方转身(没有转弯半径)
因此,驾驶和映射环境很容易
在您的情况下,很难说,因为我们看不到汽车运动学
无论如何都有一些提示:
1.当超声波聆听时,您应该让电动机安静
- 我使用了步进电动机,以便可以在接收器中听到它们的脉冲
- 如果您使用直流电动机,那么这可能非常棘手(可能是您需要完全停止)
- 或确定哪个回声是回声和哪个换向器噪声
- 无刷(BLDC)和正弦驾驶都可以
- 但是PWM或任何其他冲动驾驶都会造成相同的问题
- 因此,您需要同步听力时间和脉动噪声时间
- 没有适当的测量设备,这将是极大的(示波器是理想的选择)
2.耗时发射器
- 避免许多混乱
- 一次只使用一个
- 这很容易,但慢
- 或一次全部等待首先等待
- 通过这种方式,您不会从遥远的回声中获取数据
- 可以从各个方面接收,但需要一个相当复杂的过滤
- 尽可能多地优化接收循环
- 我在MCU的几个T中做到了,这给了我大约4毫米的分辨率
- 但这是很久以前,所用的attel是旧的51克隆,仅在20 MHz上运行
- 不知道Arduino(Preffer UC3),但是今天的Mcus速度快10倍以上。
3.Movement
- 您将需要编码运动
- forwad/向后通过恒定步骤
- 向左/向右转90度
- 他们必须尽可能准确地编码
- 在合适的环境中,您可以使用超声来更准确(仅需要垂直方面,而内部无问题)
- 使用这些您可以开始映射2D迷宫
4.绘制房间
- 创建环境的2D地图
- 您可以通过单元格或向量方法进行
- 我强烈建议使用单元格(对于初学者而言较不准确,但更容易)
- 地图可以是2D数组
-
,值未知,空间,墙
1.Init
- 将汽车垂直于某些墙壁
- 未知的清晰地图
- 在地图(x,y)的中间设置位置
2. echo-litocation inters
- 如果发现墙壁,则在(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的数据并查看
[notes]
- 有很多可以添加的东西来改善这一点...
- 当心织物/布料(例如材料)
- 他们很难通过超声检测
- 发射器使用其所需频率来最大化其性能
- 对于脉冲回声定位发射的最佳功率/准确性/范围比为7个脉冲
- 没人知道为什么,但这是最好的(至少对于我知道的所有应用程序和设备)
有娱乐:)