среда, 2 июля 2008 г.

Робот на основе Wiimote. Библиотека WiimoteLib

Итак, напомню, что Wiimote, или Wii Remote - это пульт дистанционного управления для приставки Wii фирмы Nintendo, обладающий широкими возможностями обратной связи (акселерометр + инфракрасная камера достаточно высокого разрешения). Вообще, о Wiimote я уже писал. Например, переводил статью Альберто Биетти об использовании Wiimote для управления роботом Lego NXT - с помощью Microsoft Robotics Studio.

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

Впрочем, не все такие пессимисты, как я. Господин remrum высказал на Робофоруме другую идею переворота Wiimote «с ног на голову», и даже попытался воплотить эту идею в жизнь.

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

В принципе, достаточно простенький робот из всего этого вполне может получиться. И самое главное, управлять такой машиной можно с компьютера, с использованием всех самых современных средств программирования. Низкоуровневые драйвера для Wiimote уже давным давно написаны, и представлены в виде, например, библиотеки WiimoteLib, доступной в двух видах: на C# и на VB.Net (именно эту библиотеку использовал Альберто Биетти, ее подключение и использование описаны в упомянутой уже статье Wiimote и Robotics Studio).

Напомню, стоимость пульта составляет около 1500-2000 рублей, если покупать отдельно от приставки. Безусловно, это для многих покажется дороговатым приобретением. Спешу вас уверить - насколько мне известно, собрать подобную систему, оснащенную инфракрасной камерой и акселерометром, да еще и управляемую по Bluetooth, дешевле не получится точно.

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

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

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

А пока что - обзорные сведения по библиотеке:

Библиотека WiimoteLib содержит одноименный нэймспэйс, основным классом которого является класс Wiimote. По сути, любая работа с пультом начинается с создания экземпляра этого класса:

Wiimote wm = new Wiimote();

После создания класса нужно подключиться к пульту с помощью метода без параметров Connect (после окончания работы с пультом, нужно разъединиться с ним, используя обратный метод Disconnect):

wm.Connect();

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

wm.SetLEDs(false, true, true, false);
wm.SetRumble(true);

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

Что касается получения данных о состоянии кнопок, акселерометра и инфракрасной камеры - для этого у класса Wiimote существуют события, на которые можно поставить собственные обработчики. Делается это так:

wm.WiimoteChanged += new
    WiimoteChangedEventHandler(wm_WiimoteChanged);
wm.WiimoteExtensionChanged += new
    WiimoteExtensionChangedEventHandler(
        wm_WiimoteExtensionChanged);

На этом пока все, подробное описание класса, его свойств, методов и событий - будет, надеюсь, скоро готово.

P.S. Да, кстати, со следующего понедельника ухожу в отпуск, кто знает, может быть за отпуск удастся продвинуться в моих проектах роботов... Следите за новостями - подписывайтесь на RSS! (те, кто еще не подписан)

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

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

Внимание! Реклама и прочий спам будут беспощадно удаляться.