roboforum.ru

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

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

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

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

Сообщение Dmitry__ » 05 фев 2016, 05:44

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

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

Сообщение dccharacter » 05 фев 2016, 06:00

ДАТЧИК НЕ РАБОТАЕТ, НАДО ПИЛИТЬ ДАТЧИК

Добавлено спустя 5 минут 15 секунд:
Дима, вот что ты просто обязан сделать как бит-оптимизатор
Ты должен вывести формулу. Формулу вычисления ошибки срабатывания. Ошибка_срабатывания = f(скорости сопла). Ошибка будет равна скорости сопла, умноженной на сумму времени гарантированного срабатывания марлина на изменение ноги, времени реакции датчика (условно период главного цикла) и длины проводов до датчика, деленной на 3е8 м/с.
Последний раз редактировалось dccharacter 05 фев 2016, 06:22, всего редактировалось 1 раз.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

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

Сообщение Dmitry__ » 05 фев 2016, 06:09

dccharacter писал(а):времени реакции датчика (условно период главного цикла) и длины проводов до датчика, деленной на 3е8 м/с.

Ку-ку? :shock:

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

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

Сообщение dccharacter » 05 фев 2016, 07:32

Dmitry__ писал(а):Ку-ку? :shock:

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

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

Сообщение linvinus » 05 фев 2016, 10:42

Dmitry__ , а чего сразу код не запушили на гит?
нужно вырабатывать привычку каждое изменение пушить в гит! Вдруг завтра война а у вас гит не запушен!?
Кстати для geany есть плагин который подсвечивает что в коде изменено но не запушено в гит.
Последний раз редактировалось linvinus 05 фев 2016, 14:23, всего редактировалось 1 раз.
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

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

Сообщение setar » 05 фев 2016, 11:39

dccharacter писал(а):ДАТЧИК НЕ РАБОТАЕТ, НАДО ПИЛИТЬ ДАТЧИК

работает и не плохо.
как тебе такое:
Код: Выделить всёРазвернуть
1 of 10   z: 18.201250
2 of 10   z: 18.219999
3 of 10   z: 18.206249
4 of 10   z: 18.198749
5 of 10   z: 18.203125
6 of 10   z: 18.211875
7 of 10   z: 18.198125
8 of 10   z: 18.216875
9 of 10   z: 18.211250
10 of 10   z: 18.217500
Mean: 18.208499
Standard Deviation: 0.007691


текущие выводы/закономерности:

  • есть два типа срабатывания - по фронту пятна лазера при попадении его в поле зрения, и когда пятно где то в середине поля сенсора. Пока что у меня получаются результаты срабатывания по фронту более точными
  • при срабатывании по фронту появляется зависимость от цвета поверхности (его отражающей способности), на белом пятно шире, срабатывание раньше.
  • признаком примерного попадания пятна в центр может быть повышение значения squal выше 50 (параметр сильно плавает, поэтому признак менее точный чем фронт пятна лазера)
  • признаком внешней засветки может служить неуменьшение pixel_sum ниже 65
  • регулировку интенсивности лазера лучше всего осуществлять не по Maximum_Pixel а по Shutter_Upper (именно по старшему разряду, чтобы игорировать незначительные изменения), хорошие результаты при регулировании к значениям Shutter_Upper = 2 и 3
  • регулировка интенсивности лазера возможна только при попадении пятна в поле зрение, поэтому при регулировании возможна настройка срабатывания лишь на попадании в центр, что менее точно. отсюда вывод что либо интенсивность не регулировать в процессе замера ( тогда появляется процедура калибровки/привязки датчика к поверхности). либо работать в два прохода: при первом проходе запоминаем минимальное значение лазера в процессе регулирования, а при втором проходе (а ведь все замеры в марлине всегда делаются два раза - быстро и повторно медленно) держим лазер на минимальной мощности и ждем срабатывания по фронту.
Аватара пользователя
setar
Site Admin
 
Сообщения: 10981
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

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

Сообщение linvinus » 05 фев 2016, 11:47

Dmitry__,

Пытаясь понять как ваш датчик работает, для себя определил два момента

1)В документации adns сказано следующее

An internal AGC circuit adjusts the shutter value to keep the brightest feature (max pixel) in the mid 50’s.

Внутренний алгоритм поддерживает значение выдержки так что яркость (max pixel) была в районе 50. (при диапазоне значений 0-63)

Shutter Units are clock cycles; default value is 0x0100 HEX . Read Shutter_Upper first, then Shutter_Lower. They should be read consecutively. Thesensor adjusts the shutter to keep the average and maximum pixel values within normal operating ranges. The shutter value may vary with every frame. Each time the shutter changes, it changes by ±1/16 of the current value.



Т.е. если подцепить LED_CNTL, как в схеме из документации на сенсор, то получим тоже самое что RefrPowerLaser(dataMax); только средствами сенсора, только возможно стоит подобрать номинал конденсатора под частоту шима сенсора.
Это немного разгрузит ардуино.

2) от аппаратного spi отказались post343815.html#p343815

Аппаратный spi идет на помойку, для него нужен +1 лишний пин: sdi, sdo, не может переназначаться на другие пины и он работает медленнее программного


Но в документации atiny85 сказано что есть 2х проводной режим USIWM1 =1, USIWM0 =0
SDA (DI) PB5
SCL (USCK) PB7 PB2

Maximum frequency for SCL and SCK is f CK / 2. т.е. до 4Мбит 8МГц (digispark/arduino) но у сенсора максимум 25/12 = 2МГц.

по схеме непонятно чем PB4 лучше PB5 (мне кажется их можно спокойно местами поменять и использовать аппаратный spi)
программный spi требует как минимум 7 операций на один принятый бит.

Можно ещё анализировать саму картинку нужно считать 325 значений это будет примерно 600мкс при скорости SPI 2Mbit
Взять средний столбик по горизонтали и вертикали, если пятно в центре то положение правильное.

не моли бы вы немного пояснить?
Последний раз редактировалось linvinus 05 фев 2016, 12:17, всего редактировалось 3 раз(а).
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

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

Сообщение setar » 05 фев 2016, 11:56

в дигиспарк тини нету SCL (USCK) PB7
там шесть контактов PB0-PB5 (помимо питания и земли)

Добавлено спустя 2 минуты 50 секунд:
linvinus писал(а):Можно ещё анализировать саму картинку нужно считать 325 значений это будет примерно 300мкс при скорости SPI 4Mbit
Взять средний столбик по горизонтали и вертикали, если пятно в центре то положение правильное.

граб картинки занимает примерно одну секунду, или больше
Код: Выделить всёРазвернуть
inline void pixel_grab(uint8_t *buffer, uint16_t nBytes) {
  uint8_t temp_byte;

  //reset the pixel grab counter
  ADNS_write(Pixel_Grab, 0x00);

  for (int count = 0; count < nBytes; count++) {
    while (1) {
      temp_byte = ADNS_read(Pixel_Grab);
      if (temp_byte & Pixel_data_valid) {
        break;
      }
    }
    *(buffer + count) = temp_byte & Mask_pixel_value;  // only n bits are used for data
  }
}

основное время ожидаем готовности Pixel_data_valid

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

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

Сообщение linvinus » 05 фев 2016, 12:47

в дигиспарк тини нету SCL (USCK) PB7

да это я загнался PB2 (поправил)

понятно, я больше работал с ADNS-3080 там больше возможностей, и картинка быстрее грузится (не секунду).


Pixel Dump Pictures The following images are the output of the Pixel Data com-mand. The data ranges from 0 for complete black, to 63 for com-plete white. An internal AGC circuit adjusts the shutter value to keep the brightest feature
(max pixel) in the mid 50’s.


значение 50 это видимо в диапазоне между 0 - 63

Добавлено спустя 7 минут 31 секунду:
setar писал(а):граб картинки занимает примерно одну секунду, или больше
...
основное время ожидаем готовности Pixel_data_valid


Из документации
To dump a complete image, set the LED to forced awake mode, write anything to this register, then read 324 times where the DataValid bit is set. On the 325th read, the StartOfFrame bit will be set indicating that we have completed one frame of pixels and are starting back at pixel 1.

The pixel hardware is armed with any read or write to the Pixel Data register and will output pixel data from the next available frame. So, if you were to write the Pixel Data register, wait 5 seconds then read the Pixel Data register; the reported pixel data was from 5 seconds ago.

Т.е. картинка доступна на следующий ферйм., т.е. 1 сек это что то неправильное.

Я бы так понял написанное - ADNS_write(Pixel_Grab, 0x00); нужно выполнять только один раз, затем только читать.
Для этого SOF и нужен.

Добавлено спустя 1 минуту 15 секунд:
ADNS-3080 на ebay валом.

Добавлено спустя 5 минут 46 секунд:
Взять средний столбик по горизонтали и вертикали, если пятно в центре то положение правильное.

поскольку у вас пятно всегда ходит только по одной оси то нужно анализировать только один столбик.

Добавлено спустя 13 минут 18 секунд:
Я тут прикинул, как я сказал программный spi тратит примерно 7 тактов на чтение одного бита, при частоте кристала 16мгц поулчаем примерно 2.2Мгц это как раз максимум у датчика adns-2610
так что аппаратный spi выгоден только если анализировать картинку, пока грузится байт можно сравнивать значение предыдущего.

Добавлено спустя 3 минуты 29 секунд:
вот ещё идея, можно использовать аппаратный SPI и (USITC: Toggle Clock Port Pin) софтварный клок, это ускорит загрузку данных, можно 6 тактов поделать что нибудь полезное :)

мелочь, но все же
ADNS_read можно разделить на две функции
ADNS_read_end() без паузы (delayMicroseconds(2);) в конце , экономия 32 такта
ADNS_read_continue() с паузой.
Там где последовательно два регистра читаются использовать сначала ADNS_read_continue потом ADNS_read_end
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

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

Сообщение Dmitry__ » 05 фев 2016, 15:42

Ого, linvinus впрягся в датчик, что-то будет :)
Фигасссе вопросов, пробую отвечать.
linvinus писал(а):Dmitry__ , а чего сразу код не запушили на гит?

Так я твой способ вообще проверил на другом проекте :), где был makefile, а этот датчик надо заставить себя дописать до make, надо все выпиливать из *.ino, приводить в порядок все *.h. Выпиливать все ардуиновские быдлобиблиотеки. write() я сразу не использовал, а вот analogwrit таки допустил, ну очень не хотел тратить время на свой pwm :oops:
linvinus писал(а):Кстати для geany есть плагин который подсвечивает что в коде изменено но не запушено в гит.

Даaa, замечательный этот geany, не устаю удивляться, я и 3% о его возможностях не знаю. Когда начинал его учить, тоже делал расцветку кода для avr, прикручивал make, а потом понял что это все бантики и все открутил :) make в отдельной терминалке, подсветка синтаксиса для слабаков, сравнивалка - meld. Гит только commit, pull и push. Ot гитовского diff в глазах рябит, meld в миллиард раз удобнее.
setar писал(а):dccharacter писал(а):
ДАТЧИК НЕ РАБОТАЕТ, НАДО ПИЛИТЬ ДАТЧИК

работает и не плохо.

Да он нас троллит, хочет заставить работать быстрее :D
linvinus писал(а):Пытаясь понять как ваш датчик работает, для себя определил два момента

Забудь про быстрое чтение картинки, они цпециально все загрубили, чтоб дальше мышей это не использовали. Быстре 10 кадров/с не получишь никогда, а это вообще ни о чем. Единственный вариант,я его не исключаю в будущем: Приехало пятно в поле пзс, встали, 3 раза прочитали картинку, рассчитали смещение, отдали марлину.
Внутренними алгоритмами управления лазером тоже нельзя пользоваться, там все завязано на параметр "качество". Прямой зависимости "удерживать 50" там точно нет, посмотри лог от датчика в тестовых режимах. И да, эти алгоритмы меняются не только от чипа к чипу, но и от ревизии одной модели чипа.
linvinus писал(а):Но в документации atiny85 сказано что есть 2х проводной режим USIWM1 =1, USIWM0 =0

Не очень понял, avr может работать со spi по 1 пину sdi + sdo? Не знал. Но самый большой недостаток avr, что он не может мапить ресурсы на разные пины. В дигиспарк, например, нельзя трогать один пин юсб интерфейса, иначе пропадет загрузчик, и там вообще сделано все для уменьшения резания дорожек. Например штатный светодиод дигиспарка является выходом для принтера. И нет вообще лишних пинов. Остался один свободный пин юсб, который нельзя трогать. В будущем, я хотел перевести дигиспарк на rs232 загрузчик, тогда этот пин освободится и можно дебажные режимы обьединять с основным.
linvinus писал(а):Т.е. картинка доступна на следующий ферйм., т.е. 1 сек это что то неправильное.

Да там не только в этом пичалька, там пуза между чтениями регистров должна быть 100мкс. Это получается овер до фига, до 100мс. доходит только одно чтения кадра и без всяких ожиданий след. кадра. ЗАБУДь, нас кинули с фаст граб!
linvinus писал(а):вот ещё идея, можно использовать аппаратный SPI и (USITC: Toggle Clock Port Pin) софтварный клок, это ускорит загрузку данных, можно 6 тактов поделать что нибудь полезное

Да программно можно за 3 такта забирать бит, в это время контроллеру делать нечего совсем, не вижу потребностей в аппаратном spi. Даже в программном чтении добавлены задержки в виде "nop".
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

Сообщение dccharacter » 05 фев 2016, 17:46

Я не троллю, давай формулу для оценки погрешности!

Добавлено спустя 1 минуту 46 секунд:
setar писал(а):Standard Deviation: 0.007691

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

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

Сообщение Dmitry__ » 05 фев 2016, 19:54

dccharacter писал(а):Я не троллю, давай формулу для оценки погрешности!

Формула не имеет смысла. Быдлопрограмма имеет рандомные задержки, в зависимости в какой части куска кода засунут палец в нос. Скорость света - только как шутка. Подьехал быстро, проехал еще чуть-чуть, отьезд обратно ооооооочень медленно, в 100 раз медленнее любой ненормированной задержки. Как вы это не можете понять? Запил марлина светит по-любому...
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

Сообщение linvinus » 05 фев 2016, 20:51

Ого, linvinus впрягся в датчик, что-то будет :)

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

На каком расстоянии с лазерной оптикой у вас точка от лазера в фокусе сенсора?

Единственный вариант,я его не исключаю в будущем: Приехало пятно в поле пзс, встали, 3 раза прочитали картинку, рассчитали смещение, отдали марлину.

мысли сходятся

Внутренними алгоритмами управления лазером тоже нельзя пользоваться, там все завязано на параметр "качество". Прямой зависимости "удерживать 50" там точно нет,

50 это значение пикселя как если бы вы его прочитали через Pixel Data, значение пикселя от 0 до 63.

Pixel_Sum = Register Value x 128 / 324

The maximum register value is 159 (63 x 324 / 128 truncated to an integer). The minimum is 0.

поэтому я считаю что LED_CNTL, это полный аналог RefrPowerLaser(dataMax);

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


а вы пересчитайте значения в дампах по этой формуле Pixel_среднее = (ваш_сохранённый_показатель_Pixel_Sum) x 128 / 324


Не очень понял, avr может работать со spi по 1 пину sdi + sdo? Не знал. Но самый большой недостаток avr, что он не может мапить ресурсы на разные пины.

Ну это же тини, сложно запутаться в 5 ножках ;)

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

Да это печалька, сенсор медленный

Может все таки такой чип попробуете? http://www.ebay.com/itm/Optical-Flow-Se ... 1282083588
правда размер уже другой.

Добавлено спустя 6 минут 36 секунд:
Единсвенное, для нормальной работы LED_CNTL нужно записать 1 в регистр конфигурации. (Configuration = 0b00000001)
Forced Awake Mode
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

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

Сообщение dccharacter » 05 фев 2016, 21:32

Ой http://people.ece.cornell.edu/land/cour ... s_3080.pdf
Ой
Ой
А оно с внутренним софтом
Дим, ты говорил, что ты хакер? Ответишь за слова?

Добавлено спустя 6 минут 21 секунду:
Но там на граб картинки даже в бёрст моде тоже минимум 20мс уйдет
Скорее всего больше, потому что после берсте ресет требуется

Добавлено спустя 3 минуты 20 секунд:
On power-up and reset, the ADNS-3080 program is downloaded into volatile memory using the burst-mode procedure described in the synchronous Serial Port section. The program size is 1986 x 8 bits.
Т.е. это программа для встроенного DSP
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

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

Сообщение Dmitry__ » 05 фев 2016, 21:49

dccharacter писал(а):А оно с внутренним софтом
Дим, ты говорил, что ты хакер? Ответишь за слова?

С добрым утром :)
forum107/topic15929-150.html#p342508
Кста, если узнать какой проц в ADNS-9800, то можно такую круть сделать, шо пипец, загружая свои прошивки. Дизассемблирую родную прошивку и допилю до датчика касания. Там целых 1.5 K bytes загружаемой памяти и несколько образов bin валяются в инете.

https://github.com/mrjohnk/ADNS-9800/tr ... 20Firmware

Добавлено спустя 3 минуты 42 секунды:
linvinus, если тебе все пересказывать, то это будет 3-й круг :)
linvinus писал(а):Может все таки такой чип попробуете? http://www.ebay.com/itm/Optical-Flow-Se ... 1282083588

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

Добавлено спустя 3 минуты 40 секунд:
Да, linvinus, у меня куплена мышка игровая с adns9800 на хак, поверь, это круче чем adns3080. Там прямо в чип встроен лазер с вертикальной модуляцией, правда в нашем случае он не поможет.
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Пред.След.

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

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

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

cron