Бродя однажды по рунетовским просторам, наткнулся я как-то раз на самый банальный блок яндекс.директа. Но что-то меня там заинтересовало, и попал я на некий сайт. Где торговали управляемыми машинками. Вроде бы ничего особенного, но в итоге это привело к довольно интересным вещам и к этому топику.
Называются эти машинки Takara-Tomy Q-Steer (известные так-же в США под именами Microsizers и ZipZap). Радикальное отличие машинок Q-steer (а именно ими торговали на том сайте) в том что они маленькие. Очень маленькие. Очень-очень. Длина 4 см, ширина 2.7 см, если быть точным. Но, не смотря на это, машинки полностью управляемые. Понимают команды вперёд-назад, влево-вправо. И ещё форсаж есть (!) А ещё интересный момент - канал управления - ИК. Инфракрасное излучение. Есть у них вроде машинки (чуть побольше размером, но ненамного) на радиоуправлении, но для моих надобностей они не подходят.
В общем, просидев на том сайте несколько часов и проштудировав там практически всё, решил себе купить машинку. С управлением через ИК, само собой, ибо появилась одна интересная мыслишка.
В Москве такие машинки найти не удалось, так что заказал на найденом сайте. Доставка заняла несколько дней, но меня в первый же день после заказа уволили с моей нынешней работы, так что в беготне оставшееся время до прибытия посылки пролетело очень быстро. Про unboxing рассказывать не буду - сорвал обёртку, разорвал пластик, достал машинку и пульт. Всё просто.
При первом личном контакте с машинкой испытал небольшой шок - "такая мелкая, неужели поедет?". Правда, сразу поехать не удалось - в комплекте не было батареек. А батарейки там под стать машинке - тоже мелкие, "часовые" LR44. Только через некоторое время, прочитав инструкцию и выяснив что машинку надо включить поворотом незаметного рычажка, оказалось что батарейки есть и в пульте и в машинке. Так что можно гонять.
Ну, я и погнал :-) Первый опыт микровождения запечатлел на набольшом видеоролике.
В общем, машинка идеальна для офиса - можно прекрасно гонять по столу, по стульям, по ноутбуку... Короче, даже по ободу унитаза можно гонять.
Но ручное управление машинкой - это банально и неинтересно. Хочется управления с чего-нибудь айтишного (не люблю я это слово, но всё-таки приходится привыкать). Я уже успел узнать что для Sony PSP есть софтина для управления машинками Q-steer. Однако работает только на старых моделях PSP, где есть ИК. У меня же PSP Slim, а там ИК-порта нет на борту :-(
Из гаджетов с ИК-портом под рукой у меня сейчас есть только Nokia N900. Правда, там ИК-порт немного кастрированый - умеет только передавать сигналы, но не получать. Но для управления машинкой принимать-то ничего и не надо, так что N900 подходит. Готовых программ для N900, которые могли бы управлять моей машинкой, нигде не нашлось, так что пришлось делать самому.
Весь процесс написания софтинки состоял из этапов: 1. Определение управляющих ИК-сигналов из родного пультика машинки 2. Воспроизведение управляющих ИК-сигналов на N900 3. Написание скрипта для N900, преобразующего какие-то действия с телефоном в управляющие сигналы для машинки 4. Распитие бутылочки нефильтрованного 5. Фотографирование и видеосъёмка всего ездящего и управляющего безобразия 6. Торжественная запись в блоге о том что всё заработало 7. Рассылка ссылки на запись всем знакомым дабы похвастаться
В итоге эти этапы затянулись на два дня (а точнее, на две ночи). Первая была посвящена попыткам раскодировки ИК-сигналов пульта. У меня на десктопе давно уже используется самодельный ИК-приёмник для WinLIRC, вот для приёма сигналов пульта он подошёл идеально. Но всплыла проблемка - WinLIRC не хотел обучаться командам пульта. Перепробовал все варианты настроек - не помогло. И RAW-коды тоже не захотели записываться, так что пришлось вручную выдирать их из тестового окна приёма RAW-сигналов.
Немного не айс, но удалось поймать все нужные коды для основных типов движения. Только вот кнопочку форсажа я не использовал. Сведение всех кодов в один настроечный файл привёл к появлению вот такого - файл настроек для пульта Q-steer. Правда, полностью настройки есть только для диапазона B, в диапазон A я пока не лез, у меня ведь всего одна машинка :-)
В общем, это и была первая часть сабжа после равенства - "сначала Fuck". Ибо потрахался с кодами реально. И ещё предстоит потрахаться - пока немного дёрганое управление получилось, надо ковырять дальше.
С воспроизведением полученных сигналов на N900 проблем не было. Ибо на этой мобило-таблетке стоит вполне себе обычный lirc, для которого очень даже подошёл сформированный мною файлик настроек пульта Q-steer. Осталось только подсунуть его лирцу.
В файл /etc/lircd.conf дописываем инклуд нашего файлика с конфигом (у меня он лежит в /home/user/MyDocs/DISTR/Q-STEER/qsteer)
include "/home/user/MyDocs/DISTR/Q-STEER/qsteer"
Рестартуем лирц. Само собой, это надо проделывать под рутом.
sudo gainroot /etc/init.d/lirc restart
Итак, демон управления ИК-портом запущен, осталось чем-то передавать ему команды. И вообще, как будем управлять?
А управлять будем наклонами телефона. Зря что-ль в нём акселерометр есть? Наклоняем телефон сильно вперёд - машинка едет вперёд. Наклоняем слегка вперёд - едет назад. Наклоняем слегка назад - машинка останавливается. Почти то же самое с поворотами. Наклон влево - машинка влево, наклон вправо - машинка туда же. Почему было не сделать движение машинки назад при таком же наклоне телефона - просто сигнал ИК-передатчика телефона послабее чем у родного пульта, так что лучше чтоб ИК-светодиод был направлен в сторону машинки, а так получается только когда наклон телефона вперёд. Кстати, забегая вперёд - если телефон вертикально поставить - это выход из программы.
За основу получения координат поворота телефона взял довольно известный скрипт shake.py by Niklas Tanskanen. Для образца взаимодействия с lirc - скрипт некоего Blubbi с форума Maemo. Я раньше ни разу не сталкивался с Python, а тут вот хороший повод появился попробовать покодить на этом языке. Кстати, ппц как непривычно после C/C++, PHP, JavaScript, etc. IMHO, особенно дико условия IF выглядят :-) Да просят меня питоновцы.
Короче, что в итоге получилось? А получилось вот что.
Скрипт qsteer.py - управление машинкой Q-steer с таблетки Nokia N900 путём издевательств над акселерометром.
Выглядит это примерно вот так. Сложно одному одновременно и управлять и камеру держать. И с управлением я ещё не до конца освоился.
Движение пока дёрганое, эт надо управляющие сигналы корректирвать. И мелкие косяки устранить (иногда повторяется посылка испульсов, когда они уже посылаются, из-за этого в конце ролика сообщение об ошибке видно). Но в целом - всё работает!!!
Осталось сделать обучение маршруту - чтоб можно было задать команды и телефон сам бы в цикле их машинке скармливал. Но это уже детали, доделать труда не составит.
Нид хелп! Управление RAW кодами отстой. Ибо рывками ездит. Нужно эмулировать нормальные управляющие сигналы. Мож кто подскажет, как узнать параметры протокола управления для LIRC? WinLIRC обучаться отказывается, видимо нестандартные последовательности импульсов.
UPD> Да, кстати. Не сочтите за рекламу, тот магазинчик называется mikrogonki.ru. Если вдруг соберётесь заказать там машинку - в поле "Примечания к заказу" напишите "Я от лысого". Вдруг, глядишь, мне машинку подарят :-)
UPD> Нашёл где мой косяк! Под пиво думается лучше, щас вот уже назад машинка двигается без рывков, всего-то надо было стартовый бит выкинуть нафиг. Сейчас подкорректирую остальные коды и выложу новое пруфвидео.
UPD> Коды подкорректировал, теперь без дёрганий движется. Хотя изредка, всё-таки, притормаживает. Но это уже из-за того что у N900 не очень мощный ИК-передатчик и довольно направленный. Файл с настройкой LIRC перезалил.
Вот новый видеоролик, примерно демонстрирующий движение с пофиксеными управляющими сигналами
P.S. Изначально статья была написана специально для Хабрахабра. Там она до сих пор и висит.
Вот только что запустил скрипт ваш, всё работает! Только вопрос, можно ли сделать то же самое, только без акселерометра? Не удобно жутко, а клавиатура - самое то! Спасибо!
Гость Четверг, 3 Февраля, 2011 19:19 цитировать ссылка на коммент
Спасибо!
Gol Четверг, 3 Февраля, 2011 19:26 цитировать ссылка на коммент
Гость Пятница, 13 Мая, 2011 18:00 цитировать ссылка на коммент
Тоесть пульты взаимозамяемые или нет?
Гость Пятница, 13 Мая, 2011 22:53 цитировать ссылка на коммент
Гость Вторник, 17 Мая, 2011 09:15 цитировать ссылка на коммент
Кустиры выпускались A-B | С-В
А чироки A | B | C
для D нужно поработать паяльничком ;-)
Gol Вторник, 17 Мая, 2011 16:02 цитировать ссылка на коммент