суббота, 12 марта 2011 г.

Робот для состязаний: сортировщик - кубик за кубиком

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

Роботов с последовательной обработкой захваченных кубиков, тоже можно условно разделить на два вида:
  1. Обработка последнего захваченного кубика в первую очередь (стек, LIFO)
    Такой робот, погрузит в себя кубики в том порядке, в котором они стоят на свалке.

    Затем, в нужной корзине, с помощью тех или иных приспособлений, робот освобождает захваченные кубики по одному, в пордядке обратном их захвату. Т.е., если комментировать иллюстрации, кубик №1 будет захвачен в первую очередь, но в корзину будет положен самым последним, после того как будут размещены кубики №4, №3, №2.
  2. Обработка первого захваченного кубика в первую очередь (очередь, FIFO)
    Робот такого типа способен обрабатывать кубики в том же порядке, что они и были захвачены. Кубик №1 будет помещен в корзину в первую очередь, кубик №4 – в последнюю.

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

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


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


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

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

Поскольку кубиков несколько становится ясна необходимость использования массивов для хранения их характеристик. Если с языками программирования типа NXC, Java и т.п. использование массивов не вызывает трудностей. То в среде NXT-G эта задача бросает еще один вызов программистам. Один из способов эмуляции массива на NXT-G уже был описан ранее. Но поскольку данные о кубиках не имеет особого смысла класть в файл, посредством которого и происходит эмуляция, то можно использовать и другой не очень элегантный, но простой способ.

Допустим, робот знает, что он должен захватить четыре кубика, характеристики которых распознаются сенсорами и кодируются числами, например 1- большой красны, 2 – маленький красный, 3 – большой синий и т.д. Тогда программно опрос сенсоров происходит в цикле, а характеристика кубика записывается в переменную. Причем, для кубика, стоящего на определенном месте, переменная будет своя.

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

Комментариев нет:

Отправить комментарий

Related Posts Plugin for WordPress, Blogger...