Pull to refresh

Comments 37

Замечательная работа, и толковое изложение результатов. Спасибо!
У меня к вам вопрос: имеет ли право на существование идея измерения направления на объект методом триангуляции, где для точного измерения трех расстояний (достаточно для нахождения угла в двух плоскостях) применяется фазовый метод, а источник сигнала — излучающий маячок, закрепленный на объекте. Обмен данными между маячком и фотоприемниками однонаправленный (от маячка к приемнику через кодирование излучением), а приемники объединены в одну систему. Диапазон — радио или ближний ИК.
Если все приемники будут связаны проводами (то есть их можно будет синхронизировать), то задача вроде бы как решаемая. Если такой связи не будет — не уверен, можно ли будет ее решить.
Да, три приемника соединены проводами, и разнесены на небольшое расстоние (в зависимости от диапазона — от 10см до метра). В случае ИК, миллимитровая точность измерения фазы позволит держать приемники близко друг от друга.
А каков смысл применения лазера? Только для получения узко-направленного луча? В случае с маячком, это может быть обычный светодиод, как мне кажется.
Да, лазер используют только потому, что с его помощью можно получить луч с малым угловым расхождением.
В случае с маячком один светодиод или несколько действительно могут быть лучше — они безопасны для зрения, так что мощность излучения можно сделать достаточно большой.
Рекомендую изучить систему позиционированная HTC Vive. Там вроде используется подобный способ. Работает довольно точно.
А как она по вашему измеряет расстояние? Там трехмерный трекинг.
Насколько я понял из различных описаний, там для определения положения нужно две базовые станции.
Расстояния определяются триангуляцией.
Вот еще одно обсуждение, там прямо сказано, что устройство маяка очень простое.
Да уж, работа колоссальная, автору респект.
По ходу возник такой вопрос: поскольку рулетка использует четыре частоты модуляции лазера, переключая их через 5 мс (фактически еще одна дополнительная модуляция), нельзя ли использовать прямое преобразование (с нулевой ПЧ). Тогда пришлось бы усиливать после смесителя не 5 кГц, а куда более низкочастотный сигнал (50 Гц с 4 ступеньками по 5 мс)? Вроде схема бы упростилась?
Честно говоря, не очень понял, о чем вы говорите.
Тем более, что если сигнал будет низкочастотным, то при том же числе выборок длительность измерения значительно возрастет.
Ну я имел ввиду, что если частота гетеродина равна частоте модуляции, то на выходе смесителя мы получим не периодический сигнал, а постоянный уровень, соответствующий сдвигу фаз. Уровень будет переключаться при переключении модулирующей частоты. АЦП будет измерять постоянный уровень на каждом участке (можно просто усреднить).
Вероятно, в моих рассуждениях есть какая-то принципиальная ошибка, просто вспомнились детские опыты с приемником прямого преобразования.
Конкретно в этой рулетке после APD стоит полосовой фильтр, так что постоянную составляющую усилить не удастся.
С точным усилением слабых сигналов в аналоговой электронике всегда были проблемы — мешают различные смещения напряжений и токов в транзисторах.
Постоянная составляющая — это когда одна частота — здесь это не работает.
Там будет импульсный сигнал — несколько ступенек для нескольких частот. Так что он (сигнал) может пройти, если нижняя частота среза позволит.
Двух частот не хватит для решения — они дадут только одну величину — разность. Три частоты дадут две величины — достаточно уже для нахождения нулевой фазы и расстояния (без учета неоднозначности фазы). А 4 частоты дадут уже переопределенную систему, с разрешением неоднозначности.
Автор молодец. Проделана большая работа.

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

Вот только фотоприемник будет принимать свет, отраженный от этого зеркала.

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

Половина — это катастрофически много. Основной отраженный сигнал на порядки меньше. Диод может просто сгореть от такого тока, или просадить блок питания, или просто войдет в насыщение. И здесь не импульсный режим, когда можно по времени разделить полезный и паразитный сигнал — они поступают одновременно.
Можно взять поляризационный кубик, чтобы линейно-поляризованный свет лазерного диода проходил через него без потерь. На выходе — четвертьволновая пластинка, чтобы получить круговую поляризацию. На приеме сигнала — конечно потеряем половину сигнала (т.е. общие потери 50% вместо 75% в случае использования 50% зеркала). Но это все дорого, не на уровне ширпотреба…
UFO just landed and posted this here
Угол отражения равен углу падения

Это справедливо для зеркальных поверхностей.
В данном случае используется эффект диффузного отражения света.
Особенность такого типа отражения — большая часть отраженного света действительно не попадает в фотоприемник, а рассеивается в пространстве.
Этим и живем. В итоге если светит солнышко, измерения не идут, так как вносится сильная помеха.
Если поверхность плохо отражает в сторону фотоприемника, то тоже не работает.
Почти ничего не понял, но проделанная работа вызывает большое уважение!
А что конкретно непонятно?
Физика, но я особо и не пытался вникнуть, мне был интересен общий принцип работы.
У меня в голове крутится что-то вроде «итеративного уточнения» — т.е. дальномер начинает показывать сразу, но чем дольше, тем точнее результат.
Это можно реализовать при помощи фильтрации данных. Но такое уточнение можно производить только в том случае, если расстояние до объекта не меняется.
Во многих случаях именно этот режим пригодится. Разумеется, по отдельной кнопке.
Впечатляет! Колоссальная работа.
Скажите, а не могло быть ошибки с определением набора частот модуляции? Все длины волн модулятора в диапазоне 1.5 – 2 метра. Как с таким набором измерить расстояние более двух метров? А ведь диапазон этой рулетки метров до сорока, я думаю?
В статье я подробно описал, как используя достаточно близкие частоты, можно измерять расстояние, больше чем длина волны модуляции.
Пардон. Упустил этот момент. Теперь понятно почему китайские рулетки так медленно измеряют, долго исключают неоднозначность. А вот еще вопрос. Почему температура фотодиода так сильно влияет на фазу? Я почему то думал, что температура влияет лишь на коэффициент усиления фотодиода, и лишь для этого нужна термокомпенсация смещения.
К сожалению, я сам не знаю, с чем именно это связано. Возможно, изменяется емкость фотодиода, или что-то еще.
Шикарная статья, огромное вам спасибо! И наконец то понял как оно работает. Увидел-бы раньше, может подумал бы попробовать даже «в лабе» потестировать.
Расстояние у нас до 0.1-1м (можно выбрать подходящее), изменение — всегда не более 5-10%, засветки нет. Есть правда широкое изменение температуры и сильная вибрация и изменение давления воздуха с этой же частотой.
Советовался с коллегой, до 500 отсчётов в секунду — совсем хорошо было бы.
Вариант выше наверное можно попробовать допилить по скорости для наших условий если делать измерение на одной частоте.
Но после прочтения про VL53L1X, его цене в $3-4 + «всё включено» с учётом, что девайсов нужно 10-20 — выбора не остаётся:)
Может и частоту подкрутят к следующей версии firmware VL53L1X. За год сейчас уже вроде как v3. I2C к сенсору — до 1 mHz, программируемый адрес и аппаратный вывод окончания измерения. Первое, что приходит в голову — попробовать ставить несколько штук и запускать измерение со сдвигом по фазе начала измерения в каждом сенсоре. В pdf VL53L1X не нашел полного описания всех регистров, но ST отдают сорцы на драйвера. В них есть краткое описание. Посвятил пока этому только «один вечер», ещё не разобрался что там можно для наших условий подкрутить.
«Есть правда широкое изменение температуры»
Для вышеописанных лазерных модулей это является проблемой — при изменении температуры абсолютная точность может уйти на 5-10 мм. Это можно компенсировать более тщательной калибровкой.
Я в этом году экспериментировал с рулекой — было желание сделать на ее основе лидар. Мне удалось получить частоту измерений — 600 Гц. Но при этом заметно упала чувствительность, из-за чего лидар сделать не удалось. Измерения производились на двух частотах. Код выложен на Github в ветке max_fast.
Если есть ограничение по расстоянию в 1м, действительно можно использовать только одну частоту модуляции и поднять частоту измерений.

«Первое, что приходит в голову — попробовать ставить несколько штук и запускать измерение со сдвигом по фазе начала измерения в каждом сенсоре.»
Боюсь, что в таком случае датчики могут начать мешать друг другу.
600 Hz! это всё меняет :) код я уже немного пытался посмотреть, интересно было про Алгоритм Гёрцеля, т.к. в матане дальше среднеарифметического — никак :(
Температура абсолютно-точно будет меняться, т.к. будет — включили днём — настала ночь. Но это мне кажется не проблема накидать поправочную таблицу и всё такое. Тем более, что то видел в коде, но сразу не понять конечно что там происходит:)
зы cмотрю файлы проекта — спасибо, что поделились не только кодом.
В версии «max_fast» уже не алгоритм Герцеля, а просто перемножение предварительно вычисленной таблицы на сигнал. За счет этого повышается скорость работы программы.

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

В общем прогресс радует по теме и что оказывается такое решение уже есть, когда интересовался год-два назад, не смог нагуглить. Может когда и у меня дело дойдёт до реального железа, что-то ещё появится, а если и нет, то вот это решение можно использовать что-бы для начала хотя-бы строить модель движения диффузора динамика в ящике в лабе.
Sign up to leave a comment.

Articles