我正在构建一个自动迷宫迷宫求解器,并使用网络摄像头来控制我的迷宫。
根据其他论坛的建议,我目前正在尝试至少在一个方向上控制迷宫的球运动。所以,我试图控制我的球在两个坐标 466,288 和 466,152 之间的运动。步进电机控制器板的输入是时间,即每个轴(即 x 和 y)旋转的步数。
我使用的步进电机控制器板是egg bot步进电机控制器板: http ://www.sparkfun.com/products/10025
所以为了在两点之间移动,我是否应该在两点之间创建一些路点,即 288 和 152(比如 260 240 230 ... 150)并纠正我的球运动?
我的图像处理算法不够快,无法跟踪球旋转并落入洞中的球。
一些人建议我使用如下视频所示的标准模板,并纠正我的球运动路径偏差:
http://www.youtube.com/watch?v=Prq78ctJ2Rk&feature=player_embedded
我还遇到了一个图像处理工具,他们使用球运动的路点解决了同样的问题。看到太多相同问题的解决方案,我对解决问题完全感到困惑。我知道我应该实现一个 PID 控制器。但是我应该如何分阶段解决问题呢?我被困住了,只是在寻找解决问题的先机时感到沮丧。
我的设置如下所示:
...这是我的软件的屏幕截图:
修订2:我现在也面临一个新问题:之前我通过Arduino串口Java小程序控制步进电机。我可以使用小程序驱动步进器。
每次尝试通过串行端口进行通信时,我都必须重置电路板。此外,当没有命令发送给步进电机时,步进电机会在很短的时间间隔内自行通电。当步进电机进入此模式时,如果不重置电路板,我将无法控制我的电路板。任何援助将不胜感激。
修订版 3:
我在实现 PID 算法方面取得了一些进展。请在下面找到视频: http ://www.youtube.com/watch?v=MEfp7RqPmqY
现在我对实现 PID 算法的速度有疑问。实际上,我的图像处理在 200 毫秒内完成一个周期,识别一个球并将命令发送到步进电机控制器板。即使我的串行端口被发送命令来切换方向,我的步进器仍然保持相同的方向旋转。您可以在上面的视频中找到奇怪的行为。
我的想法是我应该用一个上限来限制 PID 值,如果计算出的 PID 值大于 100,我应该只发送一个 100。我期待听到您对此的想法。
我实现 PID 控制器的方式是使用模板匹配算法识别模板的起点,并使用另一种模板匹配算法识别球。现在,我让球移动到起点模板的质心。如何使用 PID 算法使其遵循直线?
修订版 4:
我已经隔离了轨迹,但我无法找到正确的函数来从起点打印正确的像素坐标。有什么想法吗?