суббота, 30 марта 2013 г.

Робот для состязаний: кегельринг, часть II

Эта заметка является продолжением статьи, в которой рассказывалось об особенностях конструкции, которой должен обладать робот для участия в состязании Кегельринг. Сейчас пойдет речь о возможных подходах решения этой задачи с точки зрения программирования поведения робота.
Итак, базовое поведение робота в состязании Кегельринг можно описать просто:
  1. Найти кеглю в внутри ринга
  2. Выдвинуть ее за пределы ринга
  3. Перейти в пункт 1.
Поскольку известно, что робот в самом начале стоит в центре ринга, то в самом начале для поиска кегли робот может вращаться вокруг своей оси, и если датчик расстояния обнаружит предмет на каком-то заданном удалении от робота, то можно считать, что он обнаружил кеглю. Т.е. вращение робота должно прекратиться для того, чтобы следующими действиями выдвинуть кеглю за пределы ринга.

Что делать дальше, когда кегля выдвинута?

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


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


На данном рисунке холостой ход, когда ультразвуковой датчик не задействован показан зеленым цветом.

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


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

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


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


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


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

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

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


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


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

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

Related Posts Plugin for WordPress, Blogger...