Реализация алгоритма ПИД с использованием компьютерного зрения

10

Я создаю автоматический решатель лабиринтных лабиринтов и использую веб-камеру для управления моим лабиринтом.

Основываясь на предложениях на других форумах, я пытаюсь контролировать движение мяча лабиринта по крайней мере в одном направлении в данный момент. Итак, я пытаюсь контролировать движение мяча между двумя координатами 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:

Blob траектория изолированы

Я выделил траекторию, но не смог найти правильную функцию для печати правильных координат пикселей с начальной точки. Есть предположения?

Sai
источник
1
Re PS: Тогда просто опубликуйте ссылку на изображение, и я уверен, что кто-то придет и заменит его на само изображение ...
Majenko
@Matt - Исправлено! Тем не менее, я бы предпочел, чтобы пользователь предоставил текст для изображений, а не только ссылки на изображения. Я не уверен, где @Sai хотел их, я просто положил их внизу.
Кевин Вермеер
Ух ты ... У этих степперов достаточно крутящего момента, чтобы двигать доску с любой скоростью? Я надеюсь, что где-то есть какое-то снижение передачи.
Коннор Вольф
@ Фейк - Степперы не должны иметь проблем с этим. Доска не весит много, и ее вес сбалансирован. У меня есть настенные часы длиной 40 см, и они управляются тем же маленьким механизмом, что и любой другой, это тоже степпер. (Механизм 5 см x 5 см выглядит смехотворно маленьким по сравнению с диаметром часов 80 см)
Стивенвх
@ Фейк: Стив прав. У меня нет проблем со степпером. Все дело в алгоритме PID
Саи

Ответы:

2

Во-первых, поскольку степперы хороши в позиционировании (нет необходимости в обратной связи по позициям), вам, безусловно, следует ограничить их движение, как вы сказали сами. Я не уверен, как вал двигателя спроектирован прямо сейчас, но если он будет прикреплен к двигателю, то, если он будет продолжать вращаться, это может повредить оборудование.

Далее, задержка переноса 200 мс в вашем датчике, вероятно, будет слишком медленной, иначе вам придется сильно замедлить ход событий, чтобы замедлить сам шар. Подобно тому, что сказал Rocket Surgeon , вы должны упростить алгоритм обработки изображений, чтобы рассчитать траекторию только один раз , а затем быстро рассчитать только положение шара в каждом кадре. Если вы хотите быстро пропустить этот шаг, найдите красный шарик вместо этого, а затем проверяйте только красный компонент на вашем изображении RGB, пока не найдете лучший алгоритм.

Для ПИД-управления начните с того, что вам действительно нужны два отдельных ПИД-регулятора, один для двигателя восток-запад, другой для север-юг. Если у вас есть два точных двигателя, их параметры должны быть равны.

Чтобы ПИД-регулятор действовал, ему необходимо знать ошибку : разницу между желаемой позицией и фактической позицией мяча. Компоненты X и Y этого смещения будут входами для двух ПИД-регуляторов (по одному для каждого двигателя). Чтобы получить ошибку, вам нужно сначала указать желаемую позицию на вашем пути: траекторию .

Чтобы получить траекторию, вам нужно обработать изображение и получить путь , а также его начальную и конечную точку. Я не уверен, что ваш алгоритм способен отличить путь от остальной части платы прямо сейчас, но если нет, обратите внимание, что это собственный алгоритм, который нужно обработать, прежде чем продолжить. Опять же, вы можете пропустить эту часть, вручную введя точки соединения, если вы хотите быстро увидеть некоторые результаты. В любом случае вы должны иметь возможность определить заданное значение скорости и заставить ваше программное обеспечение перемещать желаемую координату по траектории от начала к концу. Очевидно, вы начнете с низкой желаемой скорости.

Итак, прежде чем начать с контроля, вы должны сначала пройти следующий контрольный список:

  • Упростите алгоритм обработки изображений, чтобы получить более быстрый отклик
  • Создайте алгоритм, который создает траекторию на вашем пути, используя предопределенную скорость
  • В каждом кадре:
    • Рассчитайте разницу между траекторией и положением мяча
    • Передайте компонент delta-X в PID восток-запад, передайте delta-Y в PID север-юг

Может оказаться, что лучше создать траекторию по одному сегменту за раз и продолжить со следующим сегментом, когда этот шар заканчивает предыдущий. В противном случае вам нужно позаботиться о том, чтобы мяч не превысил желаемую траекторию (что может быть трудно сделать)

Гру
источник
1

Если у вас есть фиксированное положение для камеры и измерения моментов для обеих осей, вам не нужно распознавать нарисованные пути, отверстия и стены в кадрах. Это можно сделать одним выстрелом во время установки. Во время выполнения вам может потребоваться только определить точное местоположение одного блестящего металлического шара.

Чтобы определить мяч, вы можете использовать 1 фиксированный ИК-светодиод и узкополосный фильтр на камере. Алгоритм должен вычислить самый яркий пиксель и перевести X, Y в реальный X, Y, принимая во внимание следующие шаги:

  • найти самый яркий пиксель
  • используйте угол для обеих осей (чтение из сервопривода), чтобы восстановить расстояние от камеры
  • используйте метку времени для считывания положения осей
  • применять интерполяцию во времени для чтения позиции, если это необходимо
  • использовать известные искажения объектива
  • переведите мир X, Y пикселя в угол отражения от идеальной сферы, чтобы найти истинный центр шара в мире X, Y
  • дельта время, чтобы восстановить истинное время кадра
  • интерполяция во времени положения в плоскости X, Y, если необходимо
  • отправить результат X, Y (t) в алгоритм PID
  • отправить вторую цель подачи X, Y (t) из генератора / последовательности траекторий
  • пусть PID определиться с выводом
  • выполнить вывод (последние шаги могут быть выполнены параллельно)

Это не должно быть вычислительно интенсивным и главным образом зависит от пары абсолютных значений.

Обычно, небольшой процессор должен делать это с темпом кадровой частоты.


источник
Я не уверен, что понимаю ваше решение. Я нахожу ваше решение интересным. Как мне убедиться, что мой мяч идет по правильному пути? Должен ли я обеспечить набор контрольных точек?
Саи
Да. В программном обеспечении управления движением всегда должен быть «генератор траекторий», который является процедурой, создающей идеальную конечную последовательность X, Y (t) для любого заданного шага во времени. Эта последовательность подается на первый вход контура управления, второй вход контура управления - это последовательность реальных позиций. Процедура управления должна рассчитывать ошибки положения / скорости / ускорения, а также усиливать / суммировать все ошибки в соответствии с ПИД-регулированием и генерировать корректирующие сигналы.