воскресенье, 17 марта 2013 г.

Робот для состязаний: "Батик". Часть VII

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

Это правило будет использоваться при размышлениях, представленных ниже. А начнется все с конструкции...

Очевидно, что после анализа задания "Батик" становиться ясно - робот должен обладать двумя важными конструктивными элементами:
  • Механизм, с помощью которого выкладываются кубики на поле, вместе с резервуаром для кубиков
  • Приспособление, позволяющее аккуратно задвинуть цилиндр в соответствующую зону
Ниже будет подразумеваться, что механизм выталкивания расположен таким образом, что не мешает роботу перемещаться, прижавшись правым краем (если смотреть по ходу движения) вплотную к борту. Также следует отметить, что приспособление выталкивания цилиндра будет находиться в задней части робота. В передней же части располагаются датчики, использовавшиеся для навигации в зоне корзин.

Еще одним моментом является наличие специальных конструктивных элементов на правой стороне робота, позволяющих двигаться работу вдоль борта и направляющих это движение. Это нужно для того, чтобы не программировать каким-то специальным образом движение вдоль стенки. Ниже - пример такой конструкции:


Итак, робот покинул зону корзин - это можно либо специально определять по 4ой черной линии, либо не определять - просто начав двигаться прямо по направлению к цилиндру.


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

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


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


Теперь робот начинает выталкивать цилиндр, двигаясь вдоль стенки. Размеры и положение элементов поля позволяют не направлять много усилий на программирование этого процесса, поскольку максимальная ширина робота 25 см, а расстояние от стенки до самой крайней точки цилиндра 9+13 = 22 см. Если "нож" выталкивания расположить чуть под углом к оси робота (а равно под углом к движению робота), то во время движения цилиндр будет сдвигаться к стенке. И когда робот робот упрется в стенку поля, то цилиндр окажется практически в углу серой зоны доставки, что и требуется по заданию.


Движение назад происходит опять же вдоль стенки. Конец движения - появление черной области под одним из датчиков освещенности, установленных в передней части робота.


Разворот и очередное позиционирование по борту - оно необходимо, чтобы робот смог некоторое время без всяких ориентиров двигаться прямо, пока сбоку не появится стена.


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


2 комментария:

  1. На региональных соревнованиях в Оренбургском президентском кадетском училище организаторы "подложили свинью". Сделали бортики и средний разделитель поля 3 см высотой (то есть на 1 см ниже, чем это прописано в регламенте). В итоге двигаться вдоль среднего разделителя робот не смог - на первом же препятствии боковые колёса перескочили через борт, робот перекосился и застрял. Идея с выравниванием по средней стене не сработала.
    Спорить оказалось бесполезно, хозяева поля сказали, что +-1 см для вертикальных размеров - вполне нормально.

    ОтветитьУдалить
    Ответы
    1. +/- 1 см. допустимая погрешность изготовления полей - здесь ваши организаторы правы: http://wroboto.ru/rules/osnov/osnov_36.html.
      Командам необходимо было адаптироваться к новым условиям, ровно также как они калибруют датчики перед началом попытки и т.п.

      Удалить

Related Posts Plugin for WordPress, Blogger...