-
Notifications
You must be signed in to change notification settings - Fork 110
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cannot get sync state #73
Comments
Привет! Да, медленное мигание значит нет фикса. У модуля есть дебаг-режим, см вот здесь небольшое описание: #65 (comment) (и ниже по треду). |
Добрый день, Хотя данные вроде как уже выглядят лучше CyclePhaseClassifier: fix 16, phase 0, pulse_base_len 57.686787, history 0xcccccccc, avg error 1.1 us А комманды Не подскажите в чем может быть проблема ? |
ANG0 54069 200 <-- kCycleSynced = 200 - значит синхронизационные импульсы мы видим, а позиционные - нет. Вот здесь видно что импульсы все длинные (len = 50-150 мкс): Возможно threshold нужно сделать поменьше или станции поближе подвинуть. Удачи! |
Спасибо, весьма полезные замечания, благодаря этим им, мне удалось найти положение в котором появились короткие импульсы. В начале у одной станции, а после уменьшения дистанции между станциями в два раза получилось даже получить какую то позицию. Она походу уже валидная ? ANG0 822502 200 -0.0083 -0.3788 0.0626 -0.4191 Вопрос кроме трешолда что еще можно сделать что бы возможно было увеличить дистанцию ? |
Я нацепил гирлянду из светодиодов в (9 штук) и получилось таки расширить пятно в котором датчик получает данные с баз, но дистанция от базы варирует метр полтора, поэтому можно получить либо с одной базы либо с другой. А вот совместить их вместе пока не получилось. |
Логика классификации импульсов на короткие и длинные вот здесь https://github.com/ashtuchkin/vive-diy-position-sensor/blob/master/src/pulse_processor.cpp#L44 Все импульсы до 40мкс - короткие, от 40 до 300 - длинные. Но если импульсов нет в "sensor0 impulses show", то проблема раньше, надо смотреть какие входы используются и как. У Teensy есть два варианта входов - компаратор (с threshold) или обычный таймер, можно попробовать переключить на другой вариант и попробовать. Но в целом я думаю проблема в другом. Мне кажется нужно смотреть схематику фотодиода/усилителя - 16 мкс это слишком много для лазерного луча, не может он так рассеиваться. А вот фотодиод или усилитель может иметь нежелательный RC контур (сопротивление/ёмкость), такой, что сигнал "сглаживается" и вместо четкого короткого импульса получается длинный и гораздо слабее. На осциллографе это было бы хорошо видно. Я сам когда эту схему делал много экспериментировал с сопротивлениями и конденсаторами, чтобы получить хорошую чувствительность. Думаю с китайскими компонентами это нужно заново делать. Если не хочется этим заниматься, есть уже настроенные модули с гораздо большей чувствительностью - TS3633-CM1, если есть возможность их заказать то рекомендую. |
https://github.com/nairol/LighthouseRedox/blob/master/docs/Light%20Emissions.md С сигналом я поработал, форма получилась вполне хорошая, почти идеальная на больших импульсах хорошо видно, А насчет коротких импульсов я их заставил ходить весьма варваским ковырянием кода constexpr TimeDelta short_pulse_min_time = angle_center_len - cycle_period / 3; Только пока не разобрался, если синхроимпульс может быть таким большим как его сюда правильно стоило бы оформить ? |
Да, так и есть с таким набором параметров, вероятно конечно он не правильный, но мне удалось впервые получить правдоподобные координаты, при условии что базовые станции находятся на 5м друг от друга , правда пока только в определенных местах, почему то лучше работает по краям базовых станций. А центр почему то не охотно. constexpr TimeDelta min_long_pulse_len(70, usec); constexpr TimeDelta long_pulse_starts_accepted_range(72, usec); constexpr TimeDelta cycle_period(8333, usec); // Total len of 1 cycle. OBJ0 664579 1000 0.7672 0.0337 -1.7219 3.7041 OBJ0 664979 500 |
О другом - там 3 импульса должны регистрироваться каждый цикл (8333 мкс):
В коде я называю первые 2 импульса "long pulses", третий - "short". Не уверен что изменения в коде помогли - мне кажется они скорее делают так что второй импульс распознается как третий. Импульсы которые указаны выше мы можем классифицировать вот так:
Что мы видим здесь: По поводу изменений в коде: constexpr TimeDelta long_pulse_starts_accepted_range(72, usec); constexpr TimeDelta cycle_period(8333, usec); // Total len of 1 cycle. Почему /3? Внутри базовой станции лазеры вращаются синхронизировано с циклом 8333 мкс. За один цикл они делают 180 градусов поворот, причем так, чтобы в t0+4000 лазер светил прямо по центру. Т.к. светит станция на 120 градусов вперед (-60 до +60), то мы рассчитываем минимальную и максимальную позицию импульса в цикле как (4000 - 8333 * 60 / 180) и 4000 + (8333 * 60 / 180). Из этого и происходит cycle_period / 3. Побочный эффект этой проверки в том, что синхроимпульсы не конфликтуют с позиционным импульсом: short_pulse_min_time = 1222 мкс, больше чем 420 + max_long_pulse_len. Далее, вот это кажется как будто фикс, но скорее всего нет, т.к. последнее значение слишком большое. Это расстояние между рассчитанными линиями от базовых станций, в метрах. Это значение примерно показывает точность определения координат и должно быть ~0.01. |
Да, похоже Вы абсолютно правы, |
Рад был помочь, удачи! |
Добрый день, подскажите пожалуйста как отдебажить сенсор.
Я выставляю порог (threshold) на уровне 36, поскольку в указанной схеме ноль после усиления почему то не получается получить. И сигнал с базовых станций начинает читаться, декодер фрейма, выдает какие то циферки, которые меняются если передвигать сенсор. Но светодиод все равно мигает с интервалом в одну секунду.
По коду насколько понимаю это сигнализирует что лок станций не произошел и сама позиция не доступна.
Что можно еще ткнуть что бы понять что подправить ?
Благодарю.
The text was updated successfully, but these errors were encountered: