Сканирование

17-11-2013, 20:51
Просмотров: 2215

Одна из операций повышенной сложности — это сканирование рабочей области. Сканирование можно брать за основу при прохождении лабиринта для загрузки плана лабиринта в память робота. Затем робот анализирует этот план, решает лабиринт, и, наконец, прослеживает правильный путь, перемещая указатель, прикрепленный к Х-раме.

Сканирование

Сканирование состоит из четырех последовательностей.
Начиная от точки (0, 0), Х-рама перемещается справа налево вдоль ряда 0. останавливаясь каждый раз при достижении маркера, включая первый в позиции (0, 0), и выполняя некоторое действие. В тестовой версии данной программы просто подается звуковой сигнал. После выхода из подпрограммы left декрементируется значение xpos. Этот регистр содержит 5 в начале, поэтому ко времени, когда рама достигнет позиции (6, 0), он равен нулю.
Следующая последовательность возвращает Х-раму к правому концу ряда, однако без остановок и выполнения каких-либо действий. Как и перед этим, xpos устанавливается в 5 в начале и декрементируется до нуля, когда рама достигает правого столбца сетки.
В третьей последовательности Y-рама перемещается на один шаг назад, выводя Х-раму в позицию (0, 1).
Цикл затем повторяется от метки xloop, проводя Х-раму вдоль следующего ряда с остановкой на каждом маркере и дальнейшим возвратом без остановок в точку (0, 1). Цикл xloop повторяется, постоянно декрементируя ypos до тех пор, пока не завершится сканирование всех шести рядов. Обратите внимание на то, что начальное значение ypos равно б, а начальное значение xpos — 5.
Это обусловлено тем, что xpos декрементируется после вызова подпрограмм (left или right), a ypos, участвуя в цикле xloop, декрементируется перед вызовом подпрограммы back.
В четвертой, последней последовательности, Y-рама проходит пять шагов вперед, возвращая Х-раму в позицию (0, 0).
Подпрограмму сканирования можно применять по-разному. Например, при игре в крестики-нолики изменение установки xpos на 2 и ypos — на 3 и затем — на 2, даст в результате требуемое игровое поле Зх3. Исходный текст подпрограммы.
Работа с крюком
Крюк используется для подъема и опускания предметов или, как в нашем примере, перемещения фигур в игре.
Он поднимается и опускается двигателем МЗ, установленном у левого края Y-рамы.
Для обеспечения обратной связи используются два микропереключателя. Переключатель MS3 замыкается, когда шкивный блок полностью поднят и давит на его рычажок. Это дает нам известную позицию крюка. Функция MS3 — та же, что и у двух микропереключателей на главной раме, которые срабатывают, когда Х-рама находится в базовой позиции.
Как только крюк полностью поднят, он может быть опущен на любую требуемую высоту включением двигателя на заданный период времени. Значения, используемые в соответствующих подпрограммах настраиваются с учетом скорости вращения вала, передаточного числа коробки передач и диаметра катушки.
Другой микропереключатель используется для того, чтобы распознавать наличие груза на крюку. Соответствующий механизм оснащен пружиной, натяжение которой необходимо отрегулировать таким образом, чтобы после поднятия крюком груза рычаг уходил вниз и замыкал ключ.
Оба переключателя подключены таким образом, что при своем срабатывании они заземляют входной вывод.
Они соединены проводами с цифровыми входными каналами со слабыми подтягивающими сопротивлениями.
Для микропереключателя полного подъема мы использовали межплатную линию Х2, которая подсоединена к каналу RA0. Для переключателя обнаружения груза мы использовали линию XI, которая идет к каналу RB5. Для обеспечения требуемых соединений три провода, идущие от крюка, подключаются к плате микроконтроллера PIC2 следующим образом:
• О В — на один из выводов 0 В (N7, N11 или N17);
• переключатель полного подъема — на Х2 (ЛЗ);
• переключатель обнаружения груза — на XI (115).
Каждый из названных выводов соединяется напрямую со вторым выводом на той же полоске. Линии XI и Х2, идущие к плате микроконтроллера PIC1, подключаются ко второму выводу. Линия Х0 при работе 1 с крюком не используется, однако может быть задействована, например, В для фотоэлемента.
Х-рама перемещается в точку (2, 3), где крюк цепляет груз. Затем он перемещается в позицию (5, 5) и опускает груз. В качестве груза может использоваться любой подходящий объект соответствующего веса с петлей или ручкой, за которую крюк мог бы зацепиться.
Программа разбита на несколько подпрограмм. Некоторые из них уже были описаны ранее: перемещение в базовую позицию и AtoB. Подпрограмма AtoB вызывает подпрограммы left, right, back и forward, поэтому они также должны быть включены в файл с исходным кодом.
При работе с крюком используются следующие три подпрограммы:
• raise — поднимает крюк на максимальную высоту;
• lower — опускает крюк до момента соприкосновения с землей;
• updown — поднимает или опускает крюк в течении 0,2 с или другого предварительно заданного периода времени.
Подпрограммы raise и lower вызывают подпрограмму updown, которая в свою очередь вызывает подпрограмму delay.
Будет ли подпрограмма updown поднимать или опускать крюк, зависит от состояния флага, который должен быть установлен перед ее вызовом. Этот флаг — разряд регистра флагов. При этом нулю соответствует опускание, а единице — подъем.
В первой версии подпрограммы raise крюк просто поднимался до замыкания переключателя MS3.
К сожалению, давление крюка на шкивный блок вызывало срабатывание MS4, в силу чего микроконтроллер начинал действовать так, как будто на крюке есть груз. Для предотвращения этого вызов подпрограммы updown опускает крюк на один шаг после его подъема.
Данная программа начинается, как обычно, с инициализации микроконтроллера. В случае с крюком здесь есть одно отличие. Для банка 1 вместо movlw 00h используется команда movlw 020h, которая устанавливает вывод RB5 как вход. Кроме того, к списку меток добавлены flags EQU 25hи attempts EQU 26h.
Следующая секция программы перемещает Х-раму в ее базовую позицию, а затем — в точку (0, 0), после чего программа работает согласно.
Подпрограмма перемещения в точку (2, 3) — такая же, как и подпрограмма, однако в ней xpos устанавливается на 02h, а ypos — на 03h.
На этом этапе программа входит в подпрограмму поиска груза. Предполагается, что он размещен в позиции (2, 3), однако его высота Неизвестна. Крюк при этом выполняет последовательность.
Он пытается зацепить петлю или ручку на узе, двигаясь по замкнутой траектории справа, после чего поднимается вверх. Если груз не обнаружен, то крюк возвращается в правую точку, а затем опускается вниз на один шаг перед тем, как предпринять новую попытку. Он повторяет этот цикл до тех пор, пока после подъема не распознает наличие нагрузки на крюк.
Крюку предоставляется 15 попыток. Если он все же не сможет найти груз, то предполагается, что что-то не так (возможно, он прошел мимо груза, или груза нет вообще). В этом случае происходит переход в конец программы, рама отъезжает, крюк поднимается, и робот останавливается.
В конце программы вызывается подпрограмма flash для индикации того, что микроконтроллер выполнил поставленную перед ним задачу. В качестве подпрограмм используются delay, longdelay, left, right, back и forward.
Счетчики устанавливаются на перемещение крюка на два, а не три шага влево. Это обусловлено тем, что Х-рама уже сдвинута на один шаг влево, когда она обнаружила и поднимает груз.
Значения, могут потребовать корректировки, принимающих во внимание скорость вращения вала и другие факторы. Обычно требуется изменение длительности временных задержек в подпрограммах delay и longdelay — особенно в подпрограмме поиска груза.
Предполагается, что груз никогда не будет высоким. Может потребоваться опускание крюка в течении нескольких секунд перед тем, как он начнет поиск. Это означает, что максимальное количество попыток будет уменьшено.

Источник: qwedr.com

Комментарии:
    » Сканирование