С новым годом, уважаемые сообщники :)
В декабре после 4-месячного перерыва мне удалось вернуться к работе над НК. 31-го декабря я доделала bluetooth-пульт для управления своим носимым компьютером. Дистанционное управление - тот самый "последний дюйм", благодаря которому моя система стала вполне работоспособным носимым компьютером. Сейчас написан блок GPS-навигатора, блок работы с внешней камерой, блок работы с внешним пультом управления. Можно было бы начать писать и другие блоки - работу с дополненной реальностью, блок поддержки телефонных функций, реализацию медиаплееера и пр. Но прежде я хочу переписать свое приложение так, чтобы оно было расширяемым - чтобы любой желающий мог дополнить программу нужным функционалом, написав плагин.
С QPlugin я не работала, а Си-шные плагины к собственному линукс-приложению когда-то писать доводилось. Мне также рекомендовали подумать на тему реализации системы на фреймворке GStreamer. Посоветуйте, в каком из этих трех направлении было бы правильнее "копать"?
Что сейчас представляет мой НК?
"системный блок" - Nokia N900
наголовный дисплей - Eyetop Centra
наголовная камера - Logitech Webcam C300
Внешний беспроводной bt-пульт: Nokia N900
Nokia N900 работает под полноценным линуксом (Maemo), софт писался на C++ с использованием Qt/QtMobility. Понятно, что смартфонов, аналогичных N900 больше не будет - выпустив несколько похожих девайсов, Nokia полностью забила на Maemo/MeeGo, переориентировавшись на WinPhone. Но впоследствии моя "носимая система" вполне может быть перенесена с Nokia N900 на платы вроде Beagleboard, Gumstix, IGEP.
Беспроводной пульт на базе второго N900 - явно избыточное решение :) Но для меня оно оказалось более простым в реализации, чем создание самосборного девайса. В ближайшем будущем я сделаю версию пульта на базе телефона с bluetooth/j2me. Собственно, сначала я попробовала написать программу для телефона Alcatel OT-800, превращающую его в пульт носимого компьютера, но bluetooth из-под j2me на алкателе почему-то не заработал, быстрое гугление результатов не принесло - и я пошла по пути наименьшего сопротивления, сделав пульт на базе второго, купленного про запас Nokia N900. Отремонтирую разболтавшийся джойстик на своем Nokia E61 - и попробую сделать из E61 пульт с использованием джойстика.
January 2 2012, 00:31:26 UTC 4 months ago
Иными словами, если задаться спаять такой без нокии внутри, что нужно? кнопки? экран?
January 2 2012, 07:38:54 UTC 4 months ago
Более правильными вариантами мне представляются 2 следующих:
1) на базе недорогого qwerty-телефона с bluetooth/j2me - например, Alcatel OT-800 (чтобы можно было работать с текстами на НК)
2) простое устройство с мини-джойстиком, несколькими кнопками и чем-нибудь для плавного скроллинга (миниатюрный тачпад, трекбол, лазерный блок от мыши). Проще всего, видимо, реализовать что-то подобное на базе синезубой мыши.
January 2 2012, 08:46:22 UTC 4 months ago Edited: January 2 2012, 08:46:43 UTC
Для пульта на базе джойстика, естественно, все будет иначе - будет выводиться экранное меню на наголовник.
Anonymous
January 2 2012, 09:29:44 UTC 4 months ago
В частности, видео с компьютера он не получает. Так?
4 months ago
Deleted comment
4 months ago
January 2 2012, 07:11:17 UTC 4 months ago
January 2 2012, 13:36:42 UTC 4 months ago
http://ru-wearable.livejournal.com/9992
Скриншот приложения (карта отмасштабирована так, чтобы названия читались на наголовнике 320*240). Но вообще нужно переходить с растровых Google Maps на векторные OSM.
January 2 2012, 14:11:02 UTC 4 months ago
4 months ago
January 3 2012, 10:22:36 UTC 4 months ago Edited: January 3 2012, 10:23:07 UTC
January 3 2012, 10:26:27 UTC 4 months ago
4 months ago
January 3 2012, 10:48:16 UTC 4 months ago
January 2 2012, 09:30:51 UTC 4 months ago
Ну, то есть, если быстро махнуть рукой перед камерой, то через какое время мы увидим руку на экране?
January 2 2012, 12:35:12 UTC 4 months ago
January 2 2012, 12:42:55 UTC 4 months ago
Так что боюсь, что борьба с этим лагом будет отдельным квестом.
4 months ago
January 2 2012, 10:14:02 UTC 4 months ago Edited: January 2 2012, 10:15:29 UTC
Потому что я вот подумал, почитал документацию немного и я готов написать здоровый пост с видением архитектуры. Но у меня есть сильное подозрение, что ты имела в виду нечто абсолютно другое :) Нет, придуманный пост-то я, конечно, всё равно напишу...
January 2 2012, 13:30:13 UTC 4 months ago
Носимый компьютер - это вычислительное устройство, способное обрабатывать данные окружающего мира (GPS, аудио/видеопотоки и т.п.), данные пользователя (направление взгляда, пульс и др.). Вывод с носимого компьютера по возможности интегрируется в воспр иятие пользователем окружающего мира - в виде аудиосигналов, визуальных объектов (как "встроенных" в изображение реального мира, так и просто выводимых на наголовный дисплей) - чтобы пользователь мог воспринимать поступающую с НК информацию, минимально переключая внимание с окружающего мира на девайс. Еще одеа цель AR-объектов - дополнять реальные объекты неявной информацией (например, дополнять встреченного пользрвателем человека плашкой с ФИО встреченного, информацией о предыдущих встречах и т.п.)
Если смартфон - это инструмент, то НК должен стать не инструментом, а дополнительным искусственным внешним органом, способствующим восприятию и обработке информации. НК должен самостоятельно определять контекст текущей ситуации и либо самостоятельно выполнять действия, исходя из контекста, либо адаптировать для пользователя "меню" так, чтобы к наиболее вероятно востребованным действиям пользователь смог бы получить максимально оперативный доступ.
Сейчас у меня есть законченный вариант прототипа "железного" решения для НК. Но чтобы он стал реально работающим прототипом носимого компьютера, нужен соответствующий софт. Причем желательно, чтолбы софт сразу решал бы какую-то прикладную (и, желательно, необходимую разработчику) задачу. В качестве первого use case я выбрала GPS-навигатор для пешего и велосипедного применения. Сейчас навигатор находится во вполне функциональном состоянии - я его активно использую по прямому назначению. Теперь нужно дописывать другие функции - работу с камерой, AR и пр.
Правильнее всего, как мне кажется, если софт НК будет состоять из отдельных модулей, отвечающих за те или иные задачи. То есть имеется ядро, обеспечивающее обмен данными между модулями. Система, сконфигурированная под те или иные задачи, загружает нужный набор модулей и те начинают взаимодействовать между собой. Например:
НК для вело-навигационных задач:
- модуль для вывода на наголовник Eyetop Centra
- модуль для чтения данных с беспроводного пульта с мини-джойстиком
- модуль для работы с внешней наголовной камерой (для использрвания ее в качестве зеркала заднего вида)
- модуль GPS-навигации
- модуль работы с картами Google Maps
- модуль вывода картинки с камеры в качестве зеркала заднего вида
- GUI для беспроводного пульта с мини-джойстиком
НК для приложения дополненной реальности
- модуль для вывода на вузиксовский see-through наголовник
- модуль для чтения данных с пульта на базе телефона с bt/j2me
- модуль для работы с внешней наголовной камерой
- модуль GPS-навигации
- модуль для работы с наголовным компасом
- модуль анализа картинки с камеры и наложения на него AR-объектов
- модуль логики приложения
- GUI для беспроводного пульта на базе телефона
При необходимости любой желающий сможет создать модуль, поддерживающий нужную ему функциональность. Например, модуль управления дроном. Это позволит развивать систему силами сообщества (если его удастся сформировать).
В общем, сейчас я хочу создать надстройку над Maemo - как в свое время это сделала M$, выпустив M$Win 3.11. Ну а в дальнейшем логичнее будет перенести данный механизм на уровень ОС - возможно, отказавшись от Maemo и перейдя, к примеру, на "Фантом" Дмитрия Завалишина.
Прошу прощения за сумбурность изложения - опаздываю, надо ехать :(
January 2 2012, 13:54:08 UTC 4 months ago
P.S. Кудайта это ты в празднично-каникульный день намылилась? Сидеть надо дома, код писать :)
4 months ago
4 months ago
January 2 2012, 13:32:28 UTC 4 months ago
В начале тут должно идти вступление, мол НК отличается от традиционной персоналки и потому...но что-то это вступление у меня никак не придумывается толком. Потому отмечу три вещи:
* у НК может быть и скорее всего будет несколько "экранов". Ну элементарно: левый глаз, правый глаз, экранчик на запястье или в кармане (на случай показать кому-нибудь телефонный номер, карту, фотку и т.п.)
* у НК может быть и скорее всего будет несколько источников аудиосигнала (внешний микрофон, микрофон гарнитуры, телефон, радиоприёмник, системные звуки и плеер-диктофон) и несколько "получателей" аудиосигнала (наушники, внешний динамик, телефон, диктофон опять же)
* НК, вероятнее всего, будет иметь достаточно нестандартную периферию и в частности - датчики: GPS, пульсомер, датчик освещённости, пульт-джойстик, блок инерциальной навигации, компас...
January 2 2012, 13:33:59 UTC 4 months ago
* организацию стандартного доступа к аудио/видеопотокам. Тьфу, не слишком понятно сказал. Ну вот примеры:
1) Я говорю по телефону и хочу проиграть аудиозапись моего задержания доблестной
милициейполицией. Для этого аудиопоток с гарнитуры объединяется с аудиопотоком с плеера и направляется в телефон. Но одновременно я хочу записать этот телефонный разговор. Поэтому перед попаданием в телефон этот аудиопоток "ответвляется", объединяется с аудиопотоком С телефона, и направляется в диктофон для записи.2) Я хочу проиграть видео с болотной на наручном экране знакомому, но при этом хочу вести видеосъёмку его реакции. Поэтому видеопоток с плеера я направляю на наручный экран, а видеопоток с камеры в очках - разветвляю и направляю одновременно в программу видеозаписи и в очки (используя их как видеоискатель).
Ну остальные примеры вы и сами придумаете, я думаю. Общий смысл в том, что "единого звука" и "единого экрана", как это обычно реализуется на десктопных системах, здесь, по-видимому, совершенно недостаточно.
* организацию стандартного доступа к информации с именованных датчиков и предоставления этой информации. Опять примеры:
1) Я хочу послать в систему запрос "который час" и получить стандартный timestamp. При этом меня не волнует, как именно реализованы часы. Они могут быть реализованы просто внутренним таймером. Они могут быть реализованы внутренним таймером с периодической "подводкой" через NTP, а в отсутствие сети - через GPS. Наконец, внутренний таймер может вообще не использоваться, а время может непосредственно сниматься с GPS-чипа.
2) Я хочу послать "в систему" запрос "что сейчас видит камера" и получить картинку. И не морочиться - в клиентском приложении - с инициализацией и поиском видеоустройств и тому подобной шнягой. Тем более что "что сейчас видит камера" может быть, строго говоря, не просто картинкой непосредственно с камеры, а результатом некоей обработки специальным модулем.
3) Я хочу послать в систему запрос "где я" и получить координаты. При этом я не хочу мучиться с парсингом NMEA-сообщений в клиентском приложении. Более того, эти координаты ведь могут получаться не просто напрямую с GPS - может быть дополнительный модуль, который агрегирует информацию с GPS, с GSM-модуля и с модуля инерциальной навигации и пытается выдать максимально точные координатфы в том числе в условиях недоступности GPS-сигнала.
Тут, конечно, нужно будет проделать большую работу по выработке стандарта: что как должно называться и какую именно информацию в каком именно виде должно предоставлять. По сути - стандартизацию интерфейсов.
* организацию оповещений о наступлении тех или иных событий. Ну довольно стандартный механизм - регистрируешь обработчик для события с таким-то именем, и в случае его наступления обработчик что-то делает. Примеры:
1) Сигнал о критическом разряде батареи может вызвать сразу много событий. Отключение энергозатратных функций (GPS, радиосвязь), уменьшение или ликвидацию буферов в оперативке со сбросом данных на диск, отображение предупреждения на экране и т.п. При этом "оповещатель" может быть настроен на разный уровень заряда как на критический с одной стороны, а с другой - что именно произойдёт при отправке такого оповещения "оповещатель" не интересует, это определяется другими модулями, которые зарегистрировались для получения этого оповещения.
2) Модуль выделения лиц получает видеопоток с камеры, пытается выделить на нём лица, пробежаться по базе и найти знакомых. Если это удалось, он отправляет оповещение "в кадре Петя". Другой модуль может перехватывать это оповещение, отыскивать в планировщике последние связанные с петей задачи и выводить их на экран интерфейса. Если среди них есть срочные, этот модуль может отправить сообщение "Внимание оператору", которое перехватит уже третий модуль и проиграет мелодию или сделает вибровызов или ещё что-то в таком роде.
3) Отправка сигнала "ТИХО!" может привести к отключению всех внешних источников звуков и ограничению кромкости в наушниках до минимальной.
Тут нужна будет та же работа по стандартизации интерфейсов. ЧТо, как и в предыдущем случае, не мешает проделывать эксперименты и по результатам - расширять/дополнять/изменять стандарт.
January 2 2012, 13:34:30 UTC 4 months ago Edited: January 2 2012, 16:43:49 UTC
Ну и наконец: мне представляется, что это строить надо на основе GStreamer'а (для организации аудио-видеопотоков) и D-Bus'а (для доступа к данным и организации оповещений). Тем более они уже есть и хорошо документированы. QPlugin и "плагины на Си" имеет смысл использовать уже для отдельных компонентов. Которые, в свою очередь, тоже вполне могут быть модульными.
На самом деле, насколько я понимаю, почти всё, описанное мной, уже есть и работает в рамках этих фреймворков. Я в значительной степени просто пересказывал идеи, паоложенные в их основу с акцентом на применение в НК. Надо только разобраться и выработь свои стандарты. Ну и, быть может, написать библиотеки, скрывающие "излишнюю сложность" этих фреймворков и сводящую работу в большинстве случаев к каким-то простым и понятным вещам. Ну и запускалку модулей написать. Ну и ещё...(список длинный) :)
===================================
В качестве простейшего примера для демонстрации концепции можно было бы сделать простейшее - но модульное! - приложение. Оно должно выдавать на наголовник картинку с камеры если ты идешь (двигаешься со скоростью выше определенной) и карту с твоим положением - если ты стоишь.
Не то чтобы от такого приложения сильно много пользы, но оно демонстрирует взаимодействие всех основных компонентов:
1) есть модуль, публикующий данные о текущем местоположении и скорости
2) есть другой модуль, периодически опрашивающий первый модуль, и если скорость поднялась выше определенной или опустилась ниже определенной - генерирующий оповещение "я пошёл"/"я остановился"
3) есть видеопоток с камеры
4) придуман способ, как направить GUI-интерфейс тоже в видеопоток, а не напрямую отрисовывать на экране рабочий стол
5) на наголовник выводится именно видеопоток, а не интерфейс отрисовывается напрямую движком рабочего стола
6) есть модуль-переключатель, который перехватывает сообщения "я пошёл"/"я остановился", и соответственно переключает видеопотоки
7) в идеале картографическое приложение должно брать информацию о положении через всё ту же шину, из модуля (1)
Это НЕ ОПТИМАЛЬНЫЙ способ - в частности, периодическое опрашивание чего-либо желательно по возможности исключать и уж тем более - если опрос производится через эту нашу системную шину данных. По возможности надо делать систему, то что называется, event-driven. В конце-концов, это сэкономит электричество :) Но именно как демонстрация - очень даже.
P.S. Уточню - в наголовнике просто показывается либо картинка с камеры, либо картинка с рабочего стола. Картографическое приложение запустить можно и ручками...ну или кроном или ещё чем
P.P.S. Тут ещё много чего можно дополнить - дъявол, он ведь в деталях. Но это имеет смысл в том случае, если я вообще пытаюсь ответить на тот вопрос, который поставлен, а не на тот, который я сам себе придумал :) Так что желательно уточнить - это ВООБЩЕ примерно то, что хотелось услышать или нет?
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
January 10 2012, 22:29:13 UTC 4 months ago
http://www.metawatch.org/models/
http://www.wimm.com/
http://www.imwatch.it/ru-en/
Третий уже скорее девайс-сам-по-себе, чем пульт. На первом тачскирна нет, только 6 кнопок. Но я пока заказал себе именно его, ибо андроид в пульте мне пока представляется концептуально неправильным явлением.
WBR,
Sergey.
January 15 2012, 08:23:15 UTC 4 months ago
January 16 2012, 19:02:41 UTC 4 months ago
MOD == micro optics display.
Продается в США и Европе без проблем.
MOD Live Platform
CPU: Cortex A8, 600Mhz
Operating System: Android 2.3.4
Screen Resolution 428 x 240, landscape mode
Connectivity: Bluetooth 4.0
Input device: 6-button Bluetooth Remote Control
Sensors:
3-axis accelerometer
3-axis gyro
3-axis magnetometer
Barometer
Temperature sensor on remote control
Android Features Available on MOD Live
Application model - Activity and Service
2D graphics - up to 30fps, but normally updated at 1fps for optimal battery life
Bluetooth Sockets
Sensor manager
SQLite databases and application persistent data
Access to up to 100Mb of mass storage shared between all apps
App Development Process
Download Android SDK at http://developer.android.com
Register as MOD Live app developer
Obtain MOD Live SDK library (.jar files) and documentation from Recon
Develop app using Android SDK and link to MOD Live Library
Make sure that app uses only supported hardware components
Use adb to test app on MOD Live
Submit app to Recon for distribution
Key Features of MOD Live SDK Library
MOD Service:
Register for location, speed and altitude data
Register for skiing/snowboard stats such as runs, jumps, vertical and distance
Sensor Framework Extension:
Synchronised (once-per-second) sensor polling
Free fall detection event
Gravity, linear acceleration and rotation vector (future)
January 16 2012, 20:02:25 UTC 4 months ago
January 19 2012, 18:26:16 UTC 4 months ago Edited: January 19 2012, 18:30:08 UTC
1 Это программа с минимальным набором функций
- 1 Вывод видео не важно куда.
- 2 Вывод звук не важно куда.
- 3 Модуль GPS\ГЛОНАСС и т.д. (кто что припилит)
- 4 Какая-нибудь система управления(пульт\кпк\смартфон\голос и т.д. нужно будет определиться)
2 Это удобный интерфейс для модулей\плагинов (тот же QPlagin)
За драйвера любых устройст отвечает Ядро Линя.
За вывод на эти устройства без изменения кода программы бэкэнды.
Модули - это железка + плагин
Например микрофон + распознавания голосовых комманд
Плагин - это софт который управляет железкой\ или же просто скрипт для удобства пользователя.
Это самая верхняя абстракция архитектуры..
Если это интересная архитектура могу расписать(на блок схемах) и нижние слои абстракции =)