Датчики положения в пространстве

Собираем перчатку для определения положения руки сами

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

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

Принцип работы

Жестовые перчатки можно разделить на несколько типов (что-то могу пропустить):
1) На тензорезисторах
Ну это самое простое. Тензорезистор — это такая полосочка, от которой отходят два контакта. При растяжении/сжатии данной полосочки ее сопротивление меняется. Ставим на каждый подвижный сустав по такому датчику и получаем профит. Но эти тензорезисторы довольно дороги, нельзя определить направление сгиба и сама лента имеет приличную длину (около длинны пальца).
2) На «светодиодных трубках»
Уже интереснее. Суть вот в чем: берется силиконовая или резиновая трубка, с одного конца трубки устанавливается светодиод, а с другого конца — фоторезистор/транзистор. Чем сильнее мы изгибаем такой датчик, тем меньше света попадает на фотодатчик, а соответственно увеличивается его сопротивление. Стоит такой датчик дешевле тензорезистора на порядок. Но имеет те же минусы: неудобно сгибать и нельзя определить направление сгиба.
3) Датчики ориентации
Под этим я подразумеваю различные акселерометры, гироскопы, магнитометры и различные их комбинации. Стоимость таких датчиков варьируется в огромных пределах, а основные проблемы возникают при их программировании. Именно такие датчики я и применил в перчатке.
Свой выбор я остановил на датчиках LIS331. Это восьмибитный трехосевой акселерометр. Просто потому, что они стоили тогда 30 рублей за штуку в розницу. Это вообще был мой первый опыт в использовании подобных датчиков, так что я решил: «если угроблю этот датчик, то не жалко будет».
С акселерометра мы получаем разложение вектора ускорения датчика по трем его осям. Откуда ускорение? Ну как из космоса — на нас же ускорение свободного падения Земли действует. Тут нужно сказать о минусе этого датчика: этот самый вектор колеблется от любого дрожания рук, так что имеем мы на выходе высокочастотные помехи. Но для определения жеста, когда рука почти не двигается их применить можно.
Собственно вот и вся задача: взять на каждую подвижную кость по датчику, подключить к микроконтроллеру, найти положение датчика, определить жест. Но не тут то было…

Плата под датчик

Начнем с того, что этот датчик еще запаять надо. Вы думаете, что хорошо паяете? Знакомьтесь (шаг сетки на фотографии 0,5 мм):

LGA16. Он тоже рад знакомству. Именно из-за него мне и пришлось-таки купить паяльную станцию. Я очень люблю SMD. Детали маленькие и платки соответственно тоже маленькие выходят. Но это… В общем, теперь, после пайки MPU-9250, я говорю, что это халява, а тогда это был адище. Ну, хоть убить не жалко. Вооружившись программой для трассировки плат рисуем плату. Сначала площадку под микросхему. Наш лучший друг при пайке — поверхностное натяжение. Когда мы будем паять именно эта сила заставит микросхему встать на свое место. Поэтому площадки нужно делать довольно длинными, иначе микросхему это же поверхностное натяжение утянет в сторону. Все размеры берем из даташита. У меня не получилось в один слой сделать без перемычек, так что одна все-таки будет. На разводке она показана красной линией. Большие площадки для того, чтобы туда запаять шлейф. Так как шаг между этими площадками 2,54 мм и располагаются эти площадки и сверху и снизу от микросхемы, то шлейф с шагом между проводками 1,27 мм идеально нам подходит. Получится в итоге вот такая плата:

И вот такой датчик после пайки:

На фото хорошо видно беспорядок на столе за который я извиняюсь, что я имел в виду, когда говорил про шаг выводов. Ширина шлейфа почти равна ширине платы, а потому выглядит не совсем плохо. Но плату еще надо сделать и вытравить. Плата легко делается ЛУТом, а травлю я в перекиси водорода. Для достижения лучшего результата, я катаю плату в растворе при помощи электромотора. Можно разом сделать массив плат на одном куске стеклотекстолита. Это значительно ускорит процесс изготовления. После травления лудим плату и на этом этапе начинаются проблемы…

Пайка

Этот процесс абсолютно бесполезно описывать. Лучше один раз увидеть видео. Я лишь скажу, что я закосячил 8 датчиков прежде, чем запаял 6 нужных мне. Ну первый раз такое паяю, можно и простить. Видео о пайке корпуса LGA прилагать не буду, так как их легко найти в поисковике, а засорять Интернет очередным не хочется.
Еще полезный лайфхак: паяйте феном в каком-нибудь подносе/противне/тарелке/тазике в общем в чем угодно, у чего есть борта. Микросхемы сдуваются феном, и искать их практически бесполезно.
После запайки датчика запаиваем шлейф, вспоминаем, что забыли запаять перемычку, отпаиваем шлейф, запаиваем перемычку, возвращаем шлейф на место.

Плата микроконтроллера

Это уже ваше дело, какой МК использовать. Здесь я расскажу про небольшую хитрость, про которую почему-то забывают. А позволяет она экономить ножки микроконтроллера, которых на некоторых платах и без того мало. А называется эта хитрость — логика. Не та, которая женская бывает, а та которая на 74HC начинается. Конкретно нас интересует 74HC164. Это сдвиговый регистр. Работает он довольно просто. У него есть ноги Data, Clock, Reset и выводы. Через Data и Clock мы последовательно передаем 8 бит, которые регистр параллельно выводит на выводы. А с помощью Reset можно установить все выводы в 0. Собственно подключаем ножки Enable акселерометров к этой микросхеме и с помощью одной микросхемы управляем восемью акселерометрами. Но нужно нам только пять, так что оставшиеся два можно занять светодиодами. Будет красивая подсветка. Вот только тут есть баг: когда мы будем ресетить микросхему, в «бит светодиодов» будет записываться 0. А так как мы данные пишем довольно быстро, то это моргание будет выглядеть как уменьшение яркости, что может заставить понервничать инженера. Собственно общая блок-схема перчатки будет выглядеть так:


При программировании нужно также помнить, что микросхема будет выбрана тогда, когда на ножке Enable (она же CS) будет логический ноль. Так что чтобы выбрать второй акселерометр, в регистр нужно будет записать не 01000000, а 10111111.

Программирование

Обмен данными с акселерометром происходит так:
0 bit — R/W bit. Если 1, то мы читаем данные, если 0, то пишем в датчик.
1-7 bit — Адрес регистра, с которым мы собираемся работать.
8-15 bit — Данные, которые мы пишем в регистр. Если мы читаем, то акселерометр просто их проигнорирует.
Если с этим все понятно, то тогда читаем для начала регистр WHO_AM_I. Этот регистр можно только прочитать и его дефолтное значение можно найти в даташите. Для нашего акселерометра этот регистр располагается по адресу 0x0F, а дефолтное значение 0x3B. То есть в акселерометр мы посылаем сначала 0x8F, потом любые 8 бит, а считать должны 0x3B. Если прочитали что-то другое, то где-то косяк. Либо в пайке, либо отправляем не те данные, либо перегрели микросхему при пайке. Может скорость слишком большая. И еще не забываем ножку CS подтягивать к земле и возвращать обратно. Если вы приняли правильный данные, то вас можно поздравить — осталось запаять всего 4 датчика. Получится вот такая картина:

После запайки всех пяти датчиков (по одному на каждый палец), мы крепим их на перчатку. Я для этого использовал термоклей. Получилось вот что:

Для того, чтобы мы начали получать какие-нибудь данные с микросхемы, ее надо включить. Для этого нужно установить в единицу бит BOOT регистра CTRL_REG2 и записать в регистр CTRL_REG1 значение 0xC7. Первое — это перезагрузка акселерометра, а второе — это вывод датчика из режима энергосбережения, установка частоты дискретизации 400Hz, и включение всех трех осей.
Все данные с осей x,y и z записываются в регистры с адресами 0x29, 0x2B и 0x2D соответственно. Для того, чтобы получить данные просто читаем их и все (не забываем, что если мы читаем, то 0bit первой посылки — 1). Тут очередное «если» с подвохом: если вы прочитали данные, а там сплошные нули, а код точно рабочий и правильный, то посмотрите внимательно на название своих акселерометров. Там может быть не LIS331DL, а LIS331DLH. Что дает эта буква? А датчик теперь 16-битный, так еще и с большим количеством настроек. Из-за этого адреса регистров меняются. Я на поиск этого косяка убил часа 4, не меньше. Обидно было. Но предположим, что вы все сделали правильно. Тогда вы получите вот такой трэш в терминале:

Я сомневаюсь, что на мирно лежащий на столе акселерометр действуют такие ускорения. Вероятно все дело в помехах. Не, ну а чего мы хотели за 30 рублей? Придется нам как-то от них избавляться. Для этого нам нужен фильтр. Проще всего реализовать его софтварно (внутри датчика вроде как имеется фильтр, но у меня он почему-то не заработал). Выглядит он до безобразия просто: новое значение = старое значение + измеренное значение * коэффициент. Понятно дело, что частота среза зависит от коэффициента, который нужно подбирать самим под свои задачи.

Определение жеста

В простейшем случае можно просто смотреть на знак числа, которое мы приняли. Завести массив на пять пальцев, и слать этот массив на компьютер. Мол, если палец загнули, то 1, а если выпрямлен, то 0. Например, 11011. Именно это и было реализовано в первой перчатке, ибо большего и не требовалось. Но вполне реально определить и угол наклона. Для этого мы просто берем арктангенс отношения ускорений по двум осям и получаем угол наклона вдоль плоскости, в которой лежат эти оси. Сделав это для трех пар осей, можем найти углы наклона по трем осям и восстановить положение датчика в трехмерном пространстве. Но, думаю, это никому не понадобится. Даже не из-за того, что задача не будет этого требовать, а из-за того, что для таких задач нужно использовать шестиосевой датчик (акселерометр+гироскоп) или еще лучше девятиосевой (акселерометр+гироскоп+магнитометр). Но они стоят гораздо дороже и работа с ними уже несколько сложнее.

Заключение

Надеюсь, что тем, кто хотел собрать что-то подобное статья поможет. Мне бы в то время помогла. Сейчас мы уже победили в одном конкурсе с этой перчаткой, и даже сделали на девятиосевых датчиках новую перчатку, с которой победили на другом. Правда по секрету скажу, что магнитометр у меня так и не заработал, но об этом никто не знает. Перчатка и без него неплохо работает, так что я бы лучше купил более дешевые шестиосевые датчики. Теперь конкурсов в ближайшем будущем не предвидится, так что я постараюсь написать про 3d сканер вторую статью, как и обещал.
P.S. Забыл собственно разводку платы для датчика прикрепить:

Датчик положения в пространстве

Схема простейшего акселерометра. Груз закреплён на пружине. Демпфер подавляет колебания груза. Чем больше кажущееся ускорение, тем сильнее деформируется пружина, изменяя показания прибора

Акселеро́метр (лат. accelero — ускоряю и др.-греч. μετρέω «измеряю») — прибор, измеряющий проекцию кажущегося ускорения (разности между истинным ускорением объекта и гравитационным ускорением). Как правило, акселерометр представляет собой чувствительную массу, закреплённую в упругом подвесе. Отклонение массы от её первоначального положения при наличии кажущегося ускорения несёт информацию о величине этого ускорения.

По конструктивному исполнению акселерометры подразделяются на однокомпонентные, двухкомпонентные, трёхкомпонентные. Соответственно, они позволяют измерять проекции кажущегося ускорения на одну, две и три оси.

Некоторые акселерометры также имеют встроенные системы сбора и обработки данных. Это позволяет создавать завершённые системы для измерения ускорения и вибрации со всеми необходимыми элементами.

Применение

Акселерометр может применяться как для измерения проекций абсолютного линейного ускорения (если известны величина и направление гравитационного ускорения в данной точке пространства), так и для косвенных измерений проекции гравитационного ускорения (при неподвижности акселерометра в гравитационном поле). Первое свойство используется для создания инерциальных навигационных систем, где полученные с помощью акселерометров измерения интегрируют, получая инерциальную скорость и координаты носителя. Таким образом, акселерометры, наравне с гироскопами, являются неотъемлемыми компонентами систем навигации и управления самолётов, ракет и других летательных аппаратов, кораблей и подводных лодок. Второе свойство позволяет использовать акселерометры как для измерения уклонов, то есть в качестве инклинометров, так и в гравиметрии.

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

Акселерометры используют в системах управления жестких дисков компьютеров для активации механизма защиты от повреждений (которые могут быть получены в результате ударов и падений): реагируя на внезапное изменение ускорения, система отдаёт команду на парковку головок жесткого диска, что позволяет предотвратить повреждение диска и потерю данных. Такая технология защиты используется в основном в ноутбуках, нетбуках и на внешних накопителях.

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

В устройствах управления игровых приставок акселерометр, совместно с гироскопом, используются для управления в играх без использования кнопок — путём поворотов в пространстве, встряхиваний и т. д. Например, акселерометр присутствует в игровых контроллерах Wii Remote и PlayStation Move.

Кроме того, цифровые акселерометры нашли широкое применение в мобильных устройствах, например, телефонах, планшетных компьютерах и т. п. Благодаря акселерометрам осуществляется управление положением изображения на мониторе мобильного устройства и отслеживание его ориентации относительно направления постоянно действующей силы гравитации Земли.

Равенство классов P и NP

Задачи тысячелетия

Равенство классов P и NP

Гипотеза Ходжа

Гипотеза Пуанкаре (решена)

Гипотеза Римана

Решение уравнений
квантовой теории
Янга — Миллса

Существование и гладкость
решений уравнений
Навье — Стокса

Гипотеза
Бёрча — Свиннертон-Дайера

Вопрос о равенстве классов сложности P и NP (в русских источниках также известный как проблема перебора) — это одна из центральных открытых проблем теории алгоритмов уже более трёх десятилетий. Если на него будет дан утвердительный ответ, это будет означать, что теоретически возможно решать многие сложные задачи существенно быстрее, чем сейчас.

Отношения между классами P и NP рассматриваются в разделе теории алгоритмов, который называется теорией вычислительной сложности. Она изучает ресурсы, необходимые для решения некоторой задачи. Наиболее общие ресурсы — это время (сколько нужно сделать шагов) и память (сколько памяти потребуется для решения задачи).

Проблема равенства классов P и NP является одной из семи задач тысячелетия, за решение которой Математический институт Клэя назначил премию в миллион долларов США.

Аналогичная проблема существует и в теории алгебраической сложности для классов VP и VNP.

Формулировка

Диаграмма классов сложности при условии P ≠ NP.

Нестрого говоря, проблема равенства P = NP состоит в следующем: если положительный ответ на какой-то вопрос можно довольно быстро проверить (за полиномиальное время), то правда ли, что ответ на этот вопрос можно довольно быстро найти (также за полиномиальное время и используя полиномиальную память)? Другими словами, действительно ли решение задачи проверить не легче, чем его отыскать?

Например, верно ли, что среди чисел {−2, −3, 15, 14, 7, −10, …} есть такие, что их сумма равна 0 (задача о суммах подмножеств)? Ответ — да, потому что −2 −3 + 15 −10 = 0 легко проверяется несколькими сложениями (информация, необходимая для проверки положительного ответа, называется сертификатом). Следует ли отсюда, что так же легко подобрать эти числа? Проверить сертификат так же легко, как найти его? Кажется, что подобрать числа сложнее, но это не доказано.

Из определения классов P и NP сразу вытекает следствие: P ⊆ N P {\displaystyle P\subseteq NP} . Однако до сих пор ничего не известно о строгости этого включения, то есть, существует ли задача, лежащая в NP, но не лежащая в P. Если такой задачи не существует, то все задачи, принадлежащие классу NP, можно будет решать за полиномиальное время, что сулит огромную выгоду в скорости вычислений. Сейчас самые сложные задачи из класса NP (так называемые NP-полные задачи) можно решить за экспоненциальное время, что считается неприемлемым с практической точки зрения.

История

Вероятно впервые вопрос о вычислительной сложности был задан Куртом Гёделем в 1956 году в письме к Джону фон Нейману, где он спрашивал, может ли некая задача (которая, как сейчас известно, NP-полная) быть решена за квадратичное или линейное время. В то же время Гёдель предположил, что если решение существует, то это позволит решать с помощью компьютеров многие математические проблемы.

Впервые вопрос о равенстве классов был поставлен Стивеном Куком в 1971 году и, независимо, Леонидом Левиным в 1973 году.

На начало 2000-х гг. большинство математиков считают, что эти классы не равны. Согласно опросу, проведённому в 2002 году среди 100 учёных, 61 человек считает, что ответ — «не равны», 9 — «равны», 22 затруднились ответить и 8 считают, что гипотеза не выводима из текущей системы аксиом и, таким образом, не может быть доказана или опровергнута.

Как и другие известные нерешённые математические проблемы, попытки решения этой задачи привлекают значительные усилия; регулярно публикуются (не в научной литературе) ошибочные доказательства равенства или неравенства классов P и NP, обычно непрофессионалами.

Системы защиты, предполагающие неравенство классов P и NP

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

Любая криптосистема с открытым ключом базируется на предположении существования односторонних функций и/или крайней длительности решения некоторой задачи (например, для алгоритма RSA это разложение на множители очень больших чисел).

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

В блокчейнах, основанных на технологии доказательста выполнения работы требуется, чтобы получаемая хеш-сумма была меньше целевого значения. Процесс поиска нужной хеш-суммы требует её многократного пересчёта с перебором произвольных значений дополнительного параметра (подробнее см. Майнинг). На поиск одной удовлетворительной хеш-суммы все компьютеры системы тратят значительное время (например, в «Биткойн» это в среднем 10 минут). Для проверки корректности уже сформированного блока требуется лишь однократное вычисление хеша.

Датчики положения

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

Наибольшее расстояние обнаружения и динамический диапазон имеют фотоэлектрические датчики, и они же имеют наилучшую точность. При выборе соответствующего типа, они могут решать практически все задачи обнаружения, за исключением случаев работы через непрозрачную преграду или работы при большом уровне паразитной засветки. Фотоэлектрические датчики представляют собой достаточно сложное устройство, изготовленное с применением прецизионных технологических процессов, поэтому из всех датчиков положения они имеют наибольшую стоимость. Номенклатура фотоэлектрических датчиков чрезвычайно обширна, что объясняется оптимизацией конструкции на решение какой то конкретной задачи и невозможностью создать универсальное решение. К настоящему времени выпускающаяся номенклатура фотоэлектрики практически полностью перекрывает задачи, стоящие в промышленной автоматике и системах безопасности.

Индуктивные датчики положения имеют диапазон срабатывания от 1 до 60 мм при точности порядка 10-20% и представляют собой, в общем случае, катушку индуктивности и схему обработки сигнала, заключенные в цилиндрический или прямоугольный корпус. Они предназначены для обнаружения ферромагнитных объектов. Датчики этого типа имеют давнюю историю, и их конструкция хорошо отработана. В их составе нет дорогих компонентов, и они хорошо освоены многими производителями, как в Европе, так и в Азии и России. Датчики этого типа являются наиболее дешевыми и массовыми представителями устройств обнаружения присутствия объекта и наиболее широко применяются в промышленной автоматике. Параметры датчиков, выпускаемых разными производителями, очень близки и при выборе поставщика одним из критериев выбора может выступать надежность и долговременная стабильность параметров датчика. По совокупности этих признаков датчики SICK имеют наилучший рейтинг.

Емкостные датчики положения имеют диапазон срабатывания от 2 до 25 мм при точности порядка 20%. Их срабатывание происходит при изменении емкости пространства перед датчиком при внесении в это пространство объекта, структура которого отличается от структуры воздуха. При этом этот объект не обязательно должен быть твердым телом. При определенной настройке возможно определение уровня заполнения неметаллической емкости через ее стенку. Датчики этого типа незаменимы при работе с сыпучими и жидкими средами.

Ультразвуковые датчики положения имеют диапазон срабатывания от 30 мм до 8 м при точности порядка 2%. Их срабатывание происходит при обнаружении отраженного ультразвукового импульса от внесенного объекта. При этом природа объекта роли не играет. Необходимо только, что бы уровень отраженного сигнала превышал порог срабатывания датчика. Лучше всего обнаруживаются деревянные и металлические гладкие поверхности, несколько хуже картон. Сложности возникают при наличии на поверхности объекта поглощающего слоя – ворсовой ткани, меха и, на предельных дальностях, рассеивающей структуры поверхности, неровностей и канавок.

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

Гаджет, датчик положения в пространстве, задача минимум — ‘человека, а точнее головы’?

Реализация не критична, но требования:
1. подключение устройства к стандартному компьютеру (производительность выше средней) используя стандартные порты USB или хотя бы COM, очень желательна работа не только в win (но при этом поддержка win7 x64 обязательна), наличие SDK или открытых средств для получения координат
2. определение положения относительно ‘базы’ минимум — в виде 2-ух углов в трехмерном пространстве, максимум — в виде 3-ех (можно 2 угла и расстояние, либо 3-координаты в классическом евклидовом пространстве, уже не важно, вопрос уже в погрешностях, соответствующих размерах рабочей области и цены)
3. минимальная рабочая зона: расстояние от датчика минимум 0.3метра, максимум 4-5 метра, и хотя бы 30-40 градусов по вертикали и горизонтали
4. минимальная реакция на срабатывание (задержка между сменой положения и получением данных) — 30мс (30 сигналов в секунду)
5. минимальная погрешность — меньше сантиметра в пределах хотя бы первых 2-ух метрах рабочей зоны, невозможность ‘потерять’ измеряемый объект (например после того как загородили объект другим или уход вне рабочей зоны), точнее быстрое автоматическое восстановление работоспособности после таких сбоев
6. отсутствие каких либо проводов и другого ‘физического подключения’ с объектом (читай — модуль, координаты чего необходимо измерять, должен быть беспроводным) с разумными сроками автономной работы (3-5 часа или лучше сутками)
Опционально:
7. одновременное определение положения больше чем одного объекта (например дешевые передатчики и одна база), хотя бы два
8. наличие хотя бы одной ‘кнопки’ на модуле, координаты чего необходимо измерять (нажатие передается на компьютер)
p.s. пока речь идет об одном экземпляре, но если есть возможность получить желаемое в ‘любом’ количестве, то замечательно.
Некоторые возможные реализации всего этого безобразия я могу и сам перечислить:
* 1-2 веб-камеры (сложность реализации 4-ого требования — скорость реакции) + маркер на объекте (яркий цвет/простая геом. фигура/..) + софт (на хабре где то даже были статьи с опенсорсными реализациями)
Если две веб-камеры находятся на расстоянии но смотрят в одну точку, то достаточно легко определить расстояние до объекта, так же можно сделать одну веб-камеру но анализировать размер искомого объекта (менее точно и требует настройку на размер)
К сожалению не так уж просто найти видеокамеру, не перегруженную фишками (читай платить лишнее неохота), без ощутимого лага между движением и получением информации программой. при этом основные лаги дают — сенсор (все дешевые гарантировано лагают при слабом освещении), софт внутри камеры (кодирование), передача данных usb, декодирование, обработка изображения для выявления объекта. Просто нереальные требования в 30мс.
В остальном это решение — одни плюсы и практически нет проблем в ‘наколенной’ реализации.
ЦЕНА: HD-камеры (у них достаточно быстрый сенсор в VGA режиме некоторые выдают 60fps) стоят они порядка 6-7т.р.
* камеры видео-наблюдения — аналогично веб-камере, только подключение pci/pci-e и отсутствие компрессии (кстати попробуй еще найди простое устройство с отключаемым кодеком mpeg), как вариант — аналоговый ‘видео-глазок’+tv-тюнер.
Уходят задержки кодирования и декодирования (а аналоговый глазок убирает и лаг сенсора). К сожалению не на чем протестировать, возможно ли при такой реализации вписаться в 30мс на распознавание, если есть у кого возможность проверить? это очень легко, выведите изображение с камеры на экран и подвигайте получающийся ‘бесконечный туннель’, затем замерить лаг движения туннеля по числу вложенных кадров (на какой вложенности задержка от движения составит 1 секунду)
ЦЕНА: камера видеонаблюдения от 1.5т.р. (видео-глазок от 500р), плата видеомонтажа от 1.5т.р. (можно тв-тюнер за 700р купить)… т.е. порядка 3-4т.р.
* пара видеосенсоров, подключенных напрямую к плате (достаточно мощности простого atmel/pic видел в интернете готовые примеры детекторов), высматривающих в инфракрасном диапазоне лампочку, мигающую особым сигналом.
Высокая скорость — есть сенсоры, которые позволяют снимать выбранное ‘окно’, которое ‘ведет’ исследуемый объект.
Минусы — нереально найти готовое решение, т.е. это вариант для тех кто дружит с паяльником и с прямыми руками
ЦЕНА: ??? но порядка 3-5т.р.
* Набор (минимум три) ультразвуковых детекторов расстояния, исследующих один объект
Где то видел в продаже даже usb версии, но какие то некрасивые цены в результате получатся (ведь надо минимум три), а так же потенциальные проблемы при их синхронной работе (т.е. нужно искать сразу же готовое устройство, заточенное на вычисление координат, а отдельные устройства могут помешать друг другу), плюс любой лишний объект между или за датчиками может внести большие погрешности (точнее ложные цели)
ЦЕНА: себестоимость только одного ультразвукового приемопередатчика от 600р, плюс схема, плюс софт дадут цену в минимум 5-6т.р.
* Модификация схемы ультразвукового детектора расстояния — а именно отдельно передатчик от приемника (передатчик — тот чье расстояние определяем, сигнал подает одновременно с инфракрасным сигналом, три УЗ приемника и один фотоприемник на основании разницы времени получения между получением световых и звуковых сигналов)
Очень надеюсь на наличие готовых решений с компактным датчиком с креплением на голову (в крайнем случае что то свое можно придумать)
ЦЕНА: отдельные УЗ приемники и передатчики стоят от 80р-150р, схема не становится сложнее чем предыдущая, себестоимость теоретически порядка 1-2т.р.
Может еще есть идеи? и/или готовые ссылки на интернет-магазины с доставкой по россии и хорошими ценами.