roboforum.ru

Технический форум по робототехнике.

Датчик касания оптический, триангуляция

Обсуждение технологии печати на 3D принтерах. Самостоятельное изготовление и приобретение. RepRap и его последователи.

Re: Датчик касания оптический, триангуляция

Сообщение Dmitry__ » 09 фев 2016, 03:07

dccharacter писал(а):Я наглухо запутался в гите.

Ржака и рука лицо :D
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Датчик касания оптический, триангуляция

Сообщение dccharacter » 09 фев 2016, 08:56

Пацаны, навались, меня учитель обижает!

Добавлено спустя 1 час 55 минут 10 секунд:
https://github.com/dccharacter/RF3Sens
Все работает на Нане. Пофиксил несколько не то, чтобы ошибок. Добавил бинарник для вьювера для Linux x64

Добавлено спустя 1 час 1 минуту 30 секунд:
ОЙ ЧО Я ПРИДУМАЛ
ЧО Я ПРИДУМАЛ
Короче, ставим два лазера, оба под углом. Считываем только сервисные значения (сквалы там и т.д.). После каждого успешного считывания переключаемся на другой лазер (т.е. они пыхают попеременно)
В итоге схожие показатели в двух фреймах будут только тогда, когда лазеры светят в одну точку. При этом на показания не влияет ВООБЩЕ НИЧЕГО, можно даже музыку громко включать! АЕ?

Добавлено спустя 2 минуты 31 секунду:
Дим, просыпайся

Добавлено спустя 1 час 44 минуты 5 секунд:
https://github.com/dccharacter/RF3Sens/ ... uble_laser Начал пилить, но тут кое-что запроисходило, и теперь, вероятно, нескоро смогу хоть чем-то заняться
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Датчик касания оптический, триангуляция

Сообщение ales2k » 09 фев 2016, 10:45

Dmitry__ писал(а):Так, вижу ошибку. Если ты пины физически подключал так:
Код: Выделить всёРазвернуть
#define SDIO 12 //значения ставил как у вас и переключал физику, тоже работает.
#define SCLK 10 //

то в твоем board_ArduinoNano.h:
Код: Выделить всёРазвернуть
//pin_nClock (SCK)
//PB4 D12
#define pin_nClock_bit      4
#define pin_nClock_DDR      DDRB
#define pin_nClock_PORT     PORTB

//MOSI
//PB3  D11
#define pin_SDIO_bit        3
#define pin_SDIO_DDR        DDRB
#define pin_SDIO_PORT       PORTB
#define pin_SDIO_PORT_IN    PINB

Т.е. SDIO должен быть на D11, а SCLK на D12

Добавлено спустя 7 минут 58 секунд:
Я все понял, надо схему в док добавить для ардуины нано. Слишком круто все меняется...



//////#define SDIO 12 //значения ставил как у вас и переключал физику, тоже работает.
На пины не смотреть скопировал из примера базового. Пины подключал как в конфиге.
Первичный анализ вчера ночью показал что в этом коде совсем другие задержки. Сегодня вечерком проверю.

Добавлено спустя 22 минуты 28 секунд:
Расковырял лазер китайский с линейкой(не точкой), все оказалось просто, в лазер с линейкой китайцы приклеили дополнительное стеклышко с трапецией, если его вынуть - обычный лазер с точкой. При фокусировке в точку(примерно 0.1*0.1мм) зона фокуса сильно короткая. Пытались чтото делать с этим?
"Мы не в Англии случиться может всякое" Сказано главой МИ6 в Эдинбурге Шотландия.
Аватара пользователя
ales2k
 
Сообщения: 463
Зарегистрирован: 30 июн 2014, 12:50

Re: Датчик касания оптический, триангуляция

Сообщение setar » 09 фев 2016, 13:16

Андрей, и где пул реквесты ?
ты же перед фиксами замержил базовый репо

Добавлено спустя 7 минут 27 секунд:
туплю, увидел, замержил

Добавлено спустя 1 минуту 24 секунды:
dccharacter писал(а):Короче, ставим два лазера, оба под углом. Считываем только сервисные значения (сквалы там и т.д.). После каждого успешного считывания переключаемся на другой лазер (т.е. они пыхают попеременно)
В итоге схожие показатели в двух фреймах будут только тогда, когда лазеры светят в одну точку. При этом на показания не влияет ВООБЩЕ НИЧЕГО, можно даже музыку громко включать! АЕ?

запаримся лазеры в одну точку сводить.

Добавлено спустя 30 минут 5 секунд:
Dmitry__ писал(а):Смотрю свой старый конфиг, отличия от гит:
Код: Выделить всёРазвернуть
//pin_led
//PB5 D13
#define pin_led_bit         5
#define pin_led_DDR         DDRD
#define pin_led_PORT        PORTD

Код: Выделить всёРазвернуть
//pin_led
//PB5 D13
#define pin_led_bit         5
#define pin_led_DDR         DDRB
#define pin_led_PORT        PORTB

Напомните, почему стало так?

я такого не нахожу в базовом коде, это для какой борды ?
если для #define ARDUINO_NANO
то либо пин нужно вешать на PB5, либо вешать на PD5 и менять примечание и ставить PORTD.
очевидно что PB5 это не порт D

Добавлено спустя 1 час 51 минуту 9 секунд:
глобальное переименование констант, рекомендую синхронизироваться.
ну и пожелания принимаю.
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Датчик касания оптический, триангуляция

Сообщение dccharacter » 09 фев 2016, 19:29

Да ничо не запаримся, они ввизуально сводятся даже без оптика, а у тебя еще и для тонкой подстройки ПЗС с объективом

Добавлено спустя 33 секунды:
Дим, ау, ты чо, не проникся идеей?

Добавлено спустя 2 минуты 21 секунду:
//pin_led
//PB5 D13
#define pin_led_bit 5
#define pin_led_DDR DDRB
#define pin_led_PORT PORTB

Это ж мои настройки нановские. Вы их не правите, потому что вы дигиспарком занимаетесь.
Смысл этого изменения - использовать светодиод для индикации, уже напаянный на плату. Поскольку аппаратный SPI все равно нет смысла использовать, то всем без разницы, а нам приятно.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Датчик касания оптический, триангуляция

Сообщение setar » 09 фев 2016, 20:37

тут с двумя лазерами проблема будет абсолютно та же.
если они будут приближаться одновременно то параметры будут одинаковы на месте текущего срабатывания = как только краешки пятен появились в поле зрения
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Датчик касания оптический, триангуляция

Сообщение Dmitry__ » 09 фев 2016, 20:55

dccharacter писал(а):Дим, ау, ты чо, не проникся идеей?

Я ваще уже поляну не пасу.
А чего вы в папки boards и sens не хотите убрать *.h ? Ведь выяснили, что последняя версия иде нормально работает с папками. Не могу нормально сравнивать ваши ветки со своей (в один клик мыши). Пожалейте вендузятника...
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Датчик касания оптический, триангуляция

Сообщение setar » 09 фев 2016, 21:09

не вопрос, сейчас пофиксим

Добавлено спустя 6 минут 28 секунд:
пока алгоритм детекта максимума squal через среднескользщие работает не стабильно
тобы не пугать новичков я ввел выбор алгоритма детектирования.
оставив и уже отработанный по MaxPix в поле зрения, и новые экспериментальные

P.S. коллеги, придумайте как дебагить на скорости, мне хотя бы знать сколько замеров успевает пройти при приближении с заданой скоростью. а то я сейчас математическое сглаживание на угад делаю
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Датчик касания оптический, триангуляция

Сообщение dccharacter » 09 фев 2016, 21:28

Слуш, я уже обо все это зубы обломал (но ты пробуй, мож получится). Я только не сглаживание делал, а поиск максимума скользящим окном.

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

Добавлено спустя 2 минуты 9 секунд:
forum107/topic15929-435.html#p343925

Добавлено спустя 2 минуты 48 секунд:
forum107/topic15929-390.html#p343761
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Датчик касания оптический, триангуляция

Сообщение setar » 09 фев 2016, 21:34

можно в принципе совместить дебаг с нормальной работой задействовав пин который как TRIG сейчас стоит.
на него вешаем software_serial но данные туда плюём только после срабатывания.

тут еще одна мысль пришла, но алгоритм быстрый не осилю - нужно быстро посчитать сумму по центральному столбцу результата pixel_grab
тогда можно будет сделать так:
марлин всегда (даже при тесте датчика) делает два касания.
первый определяем быстрым сканом по max_pix а за ним начинаем с какой получится скоростью делать pixel_grab с вычислением суммы по среднему столбцу. как только она начала уменьшаться - даем срабатывание.
можно задать второе приближение в 4, 8 или даже 16 раз медленнее чем основная скорость.
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Датчик касания оптический, триангуляция

Сообщение dccharacter » 09 фев 2016, 21:42

как только она начала уменьшаться

А она, собака, постоянно уменьшается. То уменьшается, то увеличивается. Из-за этого надо вводить пороги, а из-за этого идет заточка под конкретный экземпляр датчика.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Датчик касания оптический, триангуляция

Сообщение setar » 09 фев 2016, 22:27

заголовки базовых плат и датчиков перенесены в boards и sens соответственно
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Датчик касания оптический, триангуляция

Сообщение linvinus » 10 фев 2016, 00:06

Судя по всему главная проблема как идентифицировать точное положение не считывая картинку.
Что имеем:

1) Датчик не позволяет зафиксировать выдержку на определённом значении
2) У нас динамическая (нами не контролируемая) подстройка выдержки и (контролируемая подстройка) мощности лазера
3) О том какая картинка мы можем судить только по 6 параметрам

Алгоритм датчика ADNS-2610 примерно такой
Код: Выделить всёРазвернуть

setup(){
Shutter=(24000000/1500)-3476;// Shutter max 12524;
}

loop(){
  uint Pixel_Sum=0;
  uint SQUAL=0;
  uint Minimum_Pixel=63;
  uint Maximum_Pixel=0;

  for( i=0 ; i<324 ; i++){

    Pixel_Sum+=Pixel_Data[i];

    Maximum_Pixel=max(Maximum_Pixel,Pixel_Data[i]);

    Minimum_Pixel=min(Minimum_Pixel,Pixel_Data[i]);

    if(Pixel_Data[i] != Pixel_Data[i-1]){ //условно
       SQUAL++;
    }
  }//for

  Pixel_Sum=(uint)(Pixel_Sum/128);

  if( Maximum_Pixel > 55 ){
     if((Shutter+Shutter/16) < 12524)
        Shutter=Shutter+Shutter/16;
  }else if( Maximum_Pixel < 50 ){
     if( (Shutter-Shutter/16) >0)
        Shutter=Shutter-Shutter/16;
     else
        Shutter=1;
  }

  LED_CNTL=PWM(Shutter);

  Update_registers();
}



4 параметра вычисляются по кадру и два динамических (автоматически подстраиваемых).

Maximum_Pixel и Minimum_Pixel могут быть в любом месте кадра, поэтому о положении мало что говорят.

Pixel_Sum мог бы однозначно сказать насколько жирное пятно мы видим если бы не зависел от динамической подстройки выдержки и мощности лазера

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


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

Если посмотреть на фотки с лазерной точкой post343755.html#p343755
то мы видим круглое пятно определённого размера, такое пятно должно давать примерное одинаковое количество SQUAL
в общем идея в том чтобы повысить количество SQUAL по максимуму, и по этому параметру определять положение.

Решения?
1) повышать SQUAL, скажем если бы была возможность нарисовать не пятно а на например бублик или крестик, шахматную доску , полый квадрат , то по одному параметру SQUAL можно было бы судить о положении, значение SQUAL должно резко подскакивать когда шаблонная картинка займёт весь кадр

как вариант, выше я давал ссылку на проекты определения перемещений от "спеклов" (http://laser-portal.ru/content_517) произвольного отражения лазера от поверхности, там на датчиках даже оптику не ставят (матрица открытая) т.к. хаотично отраженные лучи всегда как то лягут на матрицу так что будет контрастный белый шум, но картинка будет постоянна т.к. "шум" формируется шероховатостью поверхности, это тоже должно сработать, в качестве "трафарета".


2) Maximum_Pixel - может быть постоянным и по его величине можно судить целиком ли пятно в кадре или нет, если зафиксировать мощность лазера в момент как только Minimum_Pixel упадёт ниже определённого порога, это означает что пятно появилось в кадре, дальше важна стабильность параметнов, Shutter будет плясать но скорее всего значительно меньше чем если бы мы не зафиксировали мощность лазера.

как рассеять лазерное пятно:

В экранах любого мобильного телефона (ЖК монитора ПК) есть особая пленочка. А особенная она тем что в ваших мобильных экранчиках целая система призм и пленочек разного назначения, я насчитал их 4 , две из них раздваивают изображения по вертикали и горизонтали, одна как зеркало отражает, и вот последняя под призмой самая нам нужная, она очень здоровски и равномерно рассеивает свет, а ГЛАВНОЕ имеет КПД 90-95%, в отличии от всяких других пленок и оракалов которые имеют кпд 50-70%

Еще один вариант — т.н. «голографические рассеиватели» (holographic diffuser). Они представляют собой специальный полимер с задаваемой наносруктурой молекул. Любопытное свойство голографических диффузоров состоит в том, что, меняя геометрию кластеров молекул, можно, например, из круглого пучка света сделать овальный, квадратный или другой формы (отсюда еще одно их название light shaping diffusers).

Выпускает эти рассеиватели компания Physical Optics Corporation http://www.poc.com/lsd/default.asp в лице своей дочерней компании Luminit http://www.luminitco.com. У последних можно заказать коммерческие образцы их продукции. Однако есть более простой способ добыть голографический рассеиватель для своей самоделки — они используются для матирования подсветки в LCD дисплеях, КПК, мобильных телефонах и т.п. Если разобрать дисплей старого мобильного телефона, там в подложке обычно находится тонкая матовая пленка - это и есть голографический диффузор. Недостаток такого похода в том, что не угадаешь ни плотности пленки, ни угла рассеивания - у разных производителей по-разному, а некоторые и вовсе обходятся рассеивателями других технологий для наших целей непригодными. Однако, если у вас завалялся старый сломаный мобильник - вы ничего не теряете.

Делаем приватный монитор из старого LCD монитора http://habrahabr.ru/post/133473/ Чистим матрицу ноутбука от следов жидкости http://habrahabr.ru/post/62807/


Добавлено спустя 10 минут 6 секунд:
ещё пара слов про SQUAL
в документации сказано
Data Type: Upper 8 bits of a 9-bit integer.
т.е. внутри SQUAL 9ти битный, максимальное значение 511, при том что пикселей 324
что бы это могло значить?
Последний раз редактировалось linvinus 10 фев 2016, 00:26, всего редактировалось 2 раз(а).
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: Датчик касания оптический, триангуляция

Сообщение dccharacter » 10 фев 2016, 00:16

Да, максимум SQUAL дает максимальную точность. Но вот определить его очень сложно из-за упомянутого тобой шума
Pixel_Sum мог бы однозначно сказать насколько жирное пятно мы видим если бы не зависел от динамической подстройки выдержки и мощности лазера

Вот тут разные графики на разных подложках:
forum107/topic15929-390.html#p343747
pix_sum, к сожалению, бесполезен :-(

Добавлено спустя 1 минуту 41 секунду:
Блин, вот только что заметил: download/file.php?id=39463&mode=view
Обратите внимение на шаттере в яме два минимума. Знаете что это? Это отражение точки от верхней поверхности стекла, а потом от нижней

Добавлено спустя 2 минуты 6 секунд:
Вообще, судя по Диминым графикам, SQUAL можно в ведро выкинуть (forum107/topic15929-390.html#p343747)

Добавлено спустя 31 секунду:
Т.е. остается минимум shutter - вот он работает всегда

Добавлено спустя 1 минуту 50 секунд:
Но вообще все беды из-за тормозного интерфейса. Поэтому надо переходить на датчик с внутренней прошивкоий и прям в матрице анализировать каждый кадр
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Датчик касания оптический, триангуляция

Сообщение linvinus » 10 фев 2016, 00:23

dccharacter писал(а):Да, максимум SQUAL дает максимальную точность. Но вот определить его очень сложно из-за упомянутого тобой шума


нет это два разных понятия, тот шум о котором я говорю (спеклы) не имеет отношения к "шуму" - градиенту светового пятна


pix_sum, к сожалению, бесполезен :-(

я не говорил что с ним легко, я сказал как , на мой взгляд, правильно с ним работать, т.е. понимая его слабые стороны нужно постараться их устранить.
Когда Дмитрий снимал графики он несколько иначе оценивал параметры, и метод их получения.
Если держвать в голове что мы хотим получить одинаковое значение pix_sum, и приложить все усилия чтобы это получить вот тогда и нужно смотреть графики что на них будет.

Т.е. остается минимум shutter - вот он работает всегда

shutter это зависимость от ( (pix_max -> const) + laser)
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Пред.След.

Вернуться в 3D печать

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7