Когда идет разговор о устройстве робота, обрабатывающего за одну поездку к свалке несколько кубиков, то можно условно их разделить на два вида: роботы, выполняющие последовательную обработка кубиков, и роботы, обладающие возможностью производить манипуляции с произвольным кубиком. |
Роботов с последовательной обработкой захваченных кубиков, тоже можно условно разделить на два вида:
- Обработка последнего захваченного кубика в первую очередь (стек, LIFO)
Такой робот, погрузит в себя кубики в том порядке, в котором они стоят на свалке.
Затем, в нужной корзине, с помощью тех или иных приспособлений, робот освобождает захваченные кубики по одному, в пордядке обратном их захвату. Т.е., если комментировать иллюстрации, кубик №1 будет захвачен в первую очередь, но в корзину будет положен самым последним, после того как будут размещены кубики №4, №3, №2.
- Обработка первого захваченного кубика в первую очередь (очередь, FIFO)
Робот такого типа способен обрабатывать кубики в том же порядке, что они и были захвачены. Кубик №1 будет помещен в корзину в первую очередь, кубик №4 – в последнюю.
В зависимости от того, какая схема выбрана, может быть разное расположение сенсоров, отвечающих за определение характеристик робота.
Для робота, обрбатывающего первый кубик в последнюю очередь, вполне оправдано расположение таких сенсоров в той части робота, через которые кубики загружаются и/или выгружаются.
Для робота, работающего с кубиками в порядке их очереди, блок сенсоров может располагаться как в месте загрузки кубиков, так и в месте их выгрузки.
Варианты, когда характеристики кубика определяются перед его транспортировкой в нужную корзину и выгрузкой, выглядят довольно просто с точки зрения программирования. Здесь, сенсоры просто опрашиваются в после заверешения обработки очередного кубика, для того чтобы определить характеристики нового. А уже после определения робот едет к соответствующей корзине.
Вариант, когда характеристики кубиков определяются в момент из загрузки в робота выглядит чуть сложнее, исключительно по причине того, что распознанные характеристики кубика, нужно сохранить где-то до того момента, пока робот не будет готов к сортировке кубика соответствующего номера. А как только такой момент наступает – характеристика кубика извлекается из памяти и используется для определения маршрута к нужной корзине.
Поскольку кубиков несколько становится ясна необходимость использования массивов для хранения их характеристик. Если с языками программирования типа NXC, Java и т.п. использование массивов не вызывает трудностей. То в среде NXT-G эта задача бросает еще один вызов программистам. Один из способов эмуляции массива на NXT-G уже был описан ранее. Но поскольку данные о кубиках не имеет особого смысла класть в файл, посредством которого и происходит эмуляция, то можно использовать и другой не очень элегантный, но простой способ.
Допустим, робот знает, что он должен захватить четыре кубика, характеристики которых распознаются сенсорами и кодируются числами, например 1- большой красны, 2 – маленький красный, 3 – большой синий и т.д. Тогда программно опрос сенсоров происходит в цикле, а характеристика кубика записывается в переменную. Причем, для кубика, стоящего на определенном месте, переменная будет своя.
В таком случае, процесс сортировки кубиков будет выглядеть следующим образом:
Программа будет в цикле обращаться в соответствующую переменную, извлекать из нее код кубика с нужным номером, код будет использоватся для определения маршрута необходимого для достижения корзины, соответствующей коду кубика и т.п. до тех пор, пока не насутпит момент "вспоминания" кода следующего кубика.
Комментариев нет:
Отправить комментарий