Санкт-Петербургский Государственный Университет

Математико-механический факультет

Реализация управления роботом LEGO Mindstorms NXT посредством USB

Курсовая работа студентки 245 группы

Птахиной Алины Ивановны

Научный руководитель:  ст. преп.

Санкт-Петербург

2011

Содержание

Введение.........................................................................................................................................3

Обзор существующих решений....................................................................................................5

Реализация......................................................................................................................................6

Результаты......................................................................................................................................8

Список литературы........................................................................................................................9

Введение

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

Одним из первых эту проблему попытался решить психолог-информатик из MIT Сеймур Пейперт. Он создал язык программирования LOGO, который должен был быть понятен детям.  Его идея заключалась в том, что программируя на этом языке, школьник сразу же видел результаты своей работы – на экране отображалось движение виртуального объекта  – черепашки.  Благодаря этому языку, школьники отходили от  тонкостей программирования  и в то же время получали доступ к новым информационным технологиям.

НЕ нашли? Не то? Что вы ищете?

Преподавание информатики как учебного предмета во многих советских школах началось благодаря академику и его группе,

к которой принадлежали и . Они  разработали первые методики и соответствующие инструментальные средства (Робик, Рапира). Благодаря , слова «Программирование — вторая грамотность» стали не просто названием доклада, а лозунгом.

Однако использования нематериального исполнителя было недостаточно. Даже красиво отображающийся на экране, он был мало нагляден.  Современный уровень развития вычислительной техники позволяет создание недорогих устройств, как исполняющих внутреннюю программу, так и управляемых по беспроводной связи с персонального компьютера. Такие устройства и соответствующие робототехнические конструкторы уже активно внедряются в школьное образование. Самым популярным среди них является Lego  Mindstorms  NXT 2.0.

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

На данный момент система QReal:Robots позволяет создавать графические программы для роботов Lego Mindstorms NXT 2.0 и исполнять эти программы прямо на компьютере, посылая команды роботу через Bluetooth-интерфейс. Однако не во всех школах, как выяснилось, есть возможность управлять роботом по Bluetooth, и поэтому появилась потребность “общения” с роботом и посылки команд ему посредством USB.  Таким образом задача заключается в следующем:

    реализовать соединение робота с компьютером посредством USB; научиться посылать роботу директ-команды; программа должна функционировать под управлением ОС семейства Windows.

Обзор существующих решений

Libusb - это библиотека, которая дает пользовательским приложениям единый доступ к USB-устройствам в различных операционных системах. Последняя версия: libusb-0.1.12. Поддерживаемые операционные системы: Linux, FreeBSD, NetBSD, OpenBSD, Darwin, MacOS X; для семейства Windows (Windows 98 SE, Windows ME, Windows 2000, Windows XP, Windows Vista, Windows 7) - libusb-win32.

Достоинства данной библиотеки:

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

Недостатки:

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

Fantom - это специальная библиотека NXT, реализующая соединение NXT с персональным компьютером через USB.  Существуют две версии данной библиотеки:  Fantom for Windows (32 or 64 bit) и Fantom Driver for Mac.


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

Реализация

Итак,  для того,  чтобы поддержать управление по USB в QReal:Robots, была выбрана библиотека Fantom.  Чтобы научить робота NXT взаимодействовать с компьютером посредством USB, потребовалось написать тестовое приложение, позволяющее  определить: подключен ли робот к компьютеру или нет и позволяющее посылать роботу NXT команды на исполнение.

Соединение

Для непосредственного установления соединения, для начала необходимо задать значение порта, а именно передать в функцию setPort значение “USB”. Далее, запуская библиотечный метод nFANTOM100_createNXTIterator с соответствующими параметрами, мы создаем итератор, который понадобится нам для получения имени устройства. Потом в случае, если не произошло ошибок подключения, с помощью итератора и метода nFANTOM100_iNXTIterator_getName мы получаем имя подключенного устройства. Для этого нам еще понадобится метод nFANTOM100_iNXTIterator_advance. Он будет использоваться в качестве перехода к следующей итерации. Для удаления итератора используется метод nFANTOM100_destroyNXTIterator.  Для того, чтобы получить устройство и чтобы в дальнейшем с ним можно было работать, используется метод nFANTOM100_iNXTIterator_getNXT. Чтобы проверить, удалось ли подключить робот к компьютеру, мы проверяем его наличие в списке подключенных к компьютеру устройств с помощью метода nFANTOM100_iNXT_findDeviceInFirmwareDownloadMode.

Посылка директ-команд

Посылка команд роботу NXT на исполнение происходит следующим образом: команда записывается в массив байтов, а потом вызываем метод nFANTOM100_iNXT_sendDirectCommand со следующими параметрами:

само устройство; ожидается или нет ответ на команду; сама команда, представленная в виде массива байтов. Например, команда для звукового сигнала будет выглядеть так:

  QByteArray command(5, 0);

               command[0] = 0x03; // direct command play tone

               command[1] = freq;

               command[2] = freq >> 8;

               command[3] = time;

               command[4] = time >> 8;

               command[5] = 0x00;

  где параметр freq - частота, а time - время исполнения команды. 

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

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

Результаты

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

После этого было реализовано приложение, позволяющее осуществлять соединение с роботом NXT и позволяющее посылать ему на выполнение директ-команды, такие как:

    подача звукового сигнала.

В дальнейшем планируется встраивание поддержки управления робота NXT по USB  в среду QReal::Robots.

Список литературы

1)  , , Среда визуального программирования роботов QReal:Robots // Материалы международной конференции "Информационные технологии в образовании и науке", Самара, 2011

2)  Lego Mindstorms  NXT 2.0. URL:  http://mindstorms. /en-us/Default. aspx/ (дата обращения: 18.05.2011)

3)        Библиотека libusb. URL: http://www. libusb. org/wiki (дата обращения: 18.05.2011)

4)        Fantom Driver. URL: http://mindstorms. /en-us/support/files/Driver. aspx  (дата обращения: 18.05.2011)

5)  nFantom100::iNXT Class Reference. URL: http://me. /data/oldcode/NXT++%20Built/doc/developers/fantom%20docs/classnFANTOM100_1_1iNXT. html#a9 (дата обращения: 18.05.2011)