Я создаю автоматический решатель лабиринтных лабиринтов и использую веб-камеру для управления моим лабиринтом.
Основываясь на предложениях на других форумах, я пытаюсь контролировать движение мяча лабиринта по крайней мере в одном направлении в данный момент. Итак, я пытаюсь контролировать движение мяча между двумя координатами 466,288 и 466,152. Входной сигнал для платы контроллера шагового двигателя - время, без шагов для поворота для каждой оси, то есть x и y.
Я использую плату контроллера шагового двигателя - плату контроллера шагового двигателя яичного бота: http://www.sparkfun.com/products/10025
Таким образом, чтобы перемещаться между двумя точками, должен ли я создать ряд промежуточных точек между двумя точками, а именно 288 и 152 (скажем, 260 240, 230 ... 150) и исправить движение моего мяча?
Мой алгоритм обработки изображений недостаточно быстр, чтобы отследить шар, чтобы шар просто вращался и падал в лунку.
Некоторые предлагали мне использовать стандартный шаблон, как показано в следующем видео, и исправлять свои движения мяча для отклонения в пути:
http://www.youtube.com/watch?v=Prq78ctJ2Rk&feature=player_embedded
Я также наткнулся на инструмент для обработки изображений, где они решили ту же проблему, используя промежуточные точки для движения мяча. Видя слишком много решений одной и той же проблемы, я совершенно сбит с толку, решая проблему. Я знаю, что я должен реализовать контроллер PID. Но как мне идти к решению проблем поэтапно? Я застрял и просто разочаровался в поиске опоры в решении проблемы.
Моя установка выглядит так:
... и вот скриншот моего программного обеспечения:
Редакция 2: Я также столкнулся с новой проблемой: раньше я управлял шаговыми двигателями через Java-апплет последовательного порта Arduino. Я могу управлять степперами с помощью апплета.
Мне приходится сбрасывать плату каждый раз, когда я пытаюсь связаться через последовательный порт. Кроме того, шаговый двигатель включается через небольшие промежутки времени, когда ему не отправляется команда. Когда шаговый двигатель входит в этот режим, я не могу управлять своей платой без ее сброса. Любая помощь будет оценена.
Редакция 3:
Я добился определенного прогресса, где реализовал алгоритм PID. Пожалуйста, найдите видео ниже: http://www.youtube.com/watch?v=MEfp7RqPmqY
Теперь у меня проблема со скоростью реализации алгоритма PID. Фактически моя обработка изображений завершает цикл за 200 мс, идентифицирует шар и отправляет команды на плату контроллера шагового двигателя. Несмотря на то, что мой последовательный порт посылает команды для переключения направлений, мой шаговый двигатель продолжает вращаться в одном направлении. Вы можете найти странное поведение в видео выше.
Я думаю, что я должен ограничить значения PID потолком, где, если рассчитанное значение PID больше 100, я должен просто отправить 100. Я с нетерпением жду ваших мыслей по этому поводу.
Я реализовал ПИД-контроллер так, что я определил начальную точку шаблона, используя алгоритм сопоставления с шаблоном, и определил шар, используя другой алгоритм сопоставления с шаблоном. Теперь я переместил шар в центр тяжести шаблона начальной точки. Как мне заставить его следовать прямой линии с помощью алгоритма PID?
Редакция 4:
Я выделил траекторию, но не смог найти правильную функцию для печати правильных координат пикселей с начальной точки. Есть предположения?
Ответы:
Во-первых, поскольку степперы хороши в позиционировании (нет необходимости в обратной связи по позициям), вам, безусловно, следует ограничить их движение, как вы сказали сами. Я не уверен, как вал двигателя спроектирован прямо сейчас, но если он будет прикреплен к двигателю, то, если он будет продолжать вращаться, это может повредить оборудование.
Далее, задержка переноса 200 мс в вашем датчике, вероятно, будет слишком медленной, иначе вам придется сильно замедлить ход событий, чтобы замедлить сам шар. Подобно тому, что сказал Rocket Surgeon , вы должны упростить алгоритм обработки изображений, чтобы рассчитать траекторию только один раз , а затем быстро рассчитать только положение шара в каждом кадре. Если вы хотите быстро пропустить этот шаг, найдите красный шарик вместо этого, а затем проверяйте только красный компонент на вашем изображении RGB, пока не найдете лучший алгоритм.
Для ПИД-управления начните с того, что вам действительно нужны два отдельных ПИД-регулятора, один для двигателя восток-запад, другой для север-юг. Если у вас есть два точных двигателя, их параметры должны быть равны.
Чтобы ПИД-регулятор действовал, ему необходимо знать ошибку : разницу между желаемой позицией и фактической позицией мяча. Компоненты X и Y этого смещения будут входами для двух ПИД-регуляторов (по одному для каждого двигателя). Чтобы получить ошибку, вам нужно сначала указать желаемую позицию на вашем пути: траекторию .
Чтобы получить траекторию, вам нужно обработать изображение и получить путь , а также его начальную и конечную точку. Я не уверен, что ваш алгоритм способен отличить путь от остальной части платы прямо сейчас, но если нет, обратите внимание, что это собственный алгоритм, который нужно обработать, прежде чем продолжить. Опять же, вы можете пропустить эту часть, вручную введя точки соединения, если вы хотите быстро увидеть некоторые результаты. В любом случае вы должны иметь возможность определить заданное значение скорости и заставить ваше программное обеспечение перемещать желаемую координату по траектории от начала к концу. Очевидно, вы начнете с низкой желаемой скорости.
Итак, прежде чем начать с контроля, вы должны сначала пройти следующий контрольный список:
Может оказаться, что лучше создать траекторию по одному сегменту за раз и продолжить со следующим сегментом, когда этот шар заканчивает предыдущий. В противном случае вам нужно позаботиться о том, чтобы мяч не превысил желаемую траекторию (что может быть трудно сделать)
источник
Если у вас есть фиксированное положение для камеры и измерения моментов для обеих осей, вам не нужно распознавать нарисованные пути, отверстия и стены в кадрах. Это можно сделать одним выстрелом во время установки. Во время выполнения вам может потребоваться только определить точное местоположение одного блестящего металлического шара.
Чтобы определить мяч, вы можете использовать 1 фиксированный ИК-светодиод и узкополосный фильтр на камере. Алгоритм должен вычислить самый яркий пиксель и перевести X, Y в реальный X, Y, принимая во внимание следующие шаги:
Это не должно быть вычислительно интенсивным и главным образом зависит от пары абсолютных значений.
Обычно, небольшой процессор должен делать это с темпом кадровой частоты.
источник