Сканирующий лазерный дальномер

Наше хобби — конструировать и программировать.
Демонстрация готовых роботов и устройств построенных своими руками.

Re: Сканирующий лазерный дальномер

Сообщение citizen » 07 дек 2013, 13:11

Насколько я понимаю, родная среда Arduino DMA не использует. Нужно искать сторонние библиотеки, в которых такая возможность есть.
Самый лучший способ полностью использовать все ресурсы контроллера - писать на чистом С.
У меня в программе используются два канала DMA.
Один из них используется для записи данных от АЦП в память, второй - для передачи массива данных по UART.
Таким образом, контроллер может одновременно захватывать данные с линейки (аппаратно), вычислять максимум для предыдущего измерения (программно) и передавать данные предыдущего оборота на компьютер (аппаратно).
OpenSimpleLidar - проект простого самодельного лидара.
Аватара пользователя
citizen
 
Сообщения: 369
Зарегистрирован: 12 окт 2008, 12:40
Откуда: Красногорск, Подмосковье

Re: Сканирующий лазерный дальномер

Сообщение linvinus » 08 дек 2013, 10:36

Вот пример Arduino Due DMA: ADC - MEMORY
https://gist.github.com/pklaus/5921022
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!
Аватара пользователя
linvinus
 
Сообщения: 1672
Зарегистрирован: 29 апр 2011, 12:37
Откуда: Москва
прог. языки: С

Re: Сканирующий лазерный дальномер

Сообщение citizen » 14 дек 2013, 17:10

Вручную подправил и дорисовал мебель на карте, которую выкладывал ранее. Крестами отмечены комнаты, в которые робот не заезжал.
Справа хорошо видны ножки стола и двух стульев.
map_flat.png

Ссылка на исходную карту: post281679.html#p281679
OpenSimpleLidar - проект простого самодельного лидара.
Аватара пользователя
citizen
 
Сообщения: 369
Зарегистрирован: 12 окт 2008, 12:40
Откуда: Красногорск, Подмосковье

Re: Сканирующий лазерный дальномер

Сообщение Nesenin » 14 дек 2013, 17:47

круть. можно робота заставить ехать в нужную область кликом по карте?
Аватара пользователя
Nesenin
 
Сообщения: 1341
Зарегистрирован: 26 янв 2012, 03:59
Откуда: Казань
прог. языки: LabVIEW
ФИО: Никита Есенин

Re: Сканирующий лазерный дальномер

Сообщение citizen » 14 дек 2013, 18:19

Нет. Мне так и не удалось запустить систему навигации в ROS. То ли это связано с низкой скоростью сканирования, то ли настройки неправильные, то ли еще что-то.
Сейчас я разобрался, как записывать данные от робота при помощи rosbag, благодаря чему появилась возможность проверять работу hector slam, не запуская робота. Теперь хочу попробовать написать фильтр данных дальномера, чтобы картинка стала поприличней.
OpenSimpleLidar - проект простого самодельного лидара.
Аватара пользователя
citizen
 
Сообщения: 369
Зарегистрирован: 12 окт 2008, 12:40
Откуда: Красногорск, Подмосковье

Re: Сканирующий лазерный дальномер

Сообщение sned » 15 дек 2013, 08:16

citizen писал(а):
Захватить 256 пикселей мой контроллер, скорее всего сможет, а вот обработать (вычислить максимум) - я не уверен.

Если взять контроллер, работающий на более высокой частоте (48 МГц), то тогда точно успеет захватить.


У вас используется 8МГЦ хотя контроллер STM32F100C4 позволяет работать
до 24 мгц.Частота АЦП может быть до 830 кгц (мне требуется около 500кгц).
Так что похоже возможно перенести контроллер с программой на 256 пиксельную
линейку.

Кстати чем рисовали диск энкодера?Неожиданно не могу ничего найти
подходящего.
sned
 
Сообщения: 303
Зарегистрирован: 08 апр 2013, 08:09
Откуда: Екатеринбург
ФИО: Сергей

Re: Сканирующий лазерный дальномер

Сообщение citizen » 15 дек 2013, 13:26

У меня контроллер работает на частоте 24 МГЦ, которые формируются PLL из 8 Мгц кварца.

Энкодер рисовал в Wheel Encoder Generator. Об этом сказано в инструкции, там же указаны настройки.
OpenSimpleLidar - проект простого самодельного лидара.
Аватара пользователя
citizen
 
Сообщения: 369
Зарегистрирован: 12 окт 2008, 12:40
Откуда: Красногорск, Подмосковье

Re: Сканирующий лазерный дальномер

Сообщение sned » 22 дек 2013, 12:03

linvinus писал(а):Вот пример Arduino Due DMA: ADC - MEMORY
https://gist.github.com/pklaus/5921022


Удалось добиться работы 256-пиксельной линейки на плате Due при
скорости сканирования 360 дальностей на оборот и немного быстрее
чем один оборот в секунду.На один замер и обработку программа тратит
примерно 3-4 мкс.Для дальнейшей оптимизации программы,видимо
надо копать в сторону применения DMA и настроек ADC с элементами
ассемблера.
Вложения
2013-12-22_13-49-26_85.jpg
sned
 
Сообщения: 303
Зарегистрирован: 08 апр 2013, 08:09
Откуда: Екатеринбург
ФИО: Сергей

Re: Сканирующий лазерный дальномер

Сообщение linvinus » 22 дек 2013, 18:40

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

Re: Сканирующий лазерный дальномер

Сообщение sned » 22 дек 2013, 19:54

Смотри 18 страницу форума(sned » 16 июн 2013, 18:09 ).Если коротко то применю линзу
диаметром 20мм.
sned
 
Сообщения: 303
Зарегистрирован: 08 апр 2013, 08:09
Откуда: Екатеринбург
ФИО: Сергей

Re: Сканирующий лазерный дальномер

Сообщение linvinus » 22 дек 2013, 20:39

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

Re: Сканирующий лазерный дальномер

Сообщение sned » 25 дек 2013, 19:56

citizen писал(а):Ось камеры пересекает ось лазера примерно на посередине между минимальным и максимальным расстоянием. В таком случае на максимальном расстоянии изображение луча будет на одной стороне матрицы, на минимальном - на другой.

Поначалу поверил на слово(про пересечение осей камеры с обьективом посередине).
Сейчас пересчитал по формулам и это совсем не так.Получилось что при
базе между лазером и обьективом в 7-8см,пересечение осей должно быть
на расстоянии примерно 45см для достижения минимального измеряемого расстояния в 15-20см.И неприятный факт что около 80% пикселей
фотолинейки учасвуют в измерении дальности до одного метра,а на свыше
этой дальности всеголиш оставшиеся 20%(т.к.межпиксельные растояния
одинаковые а тригонометрические функции далеко не линейны).В результате
погрешность измерения с расстоянием растет гораздо сильнее чем по
линейному закону.
sned
 
Сообщения: 303
Зарегистрирован: 08 апр 2013, 08:09
Откуда: Екатеринбург
ФИО: Сергей

Re: Сканирующий лазерный дальномер

Сообщение citizen » 26 дек 2013, 12:52

Соглашусь, действительно ошибся с серединой.
О том, что погрешность падает с увеличением расстояния, говориться еще в самом начале темы, там же приводится теория с формулами, из которых явно видно, что зависимость нелинейная.
Основная формула такая (я использую ее для расчета расстояния):
Изображение
h - длина базы, pfc - расположение максимума яркости.
Плюс точность падает из-за того, что на большем расстоянии падает отношение сигнал-шум, и наличие шума начинает искажать результат.
OpenSimpleLidar - проект простого самодельного лидара.
Аватара пользователя
citizen
 
Сообщения: 369
Зарегистрирован: 12 окт 2008, 12:40
Откуда: Красногорск, Подмосковье

Re: Сканирующий лазерный дальномер

Сообщение Myp » 26 дек 2013, 14:31

sned писал(а):На деле написанная
програмка для этого показала в 20 раз меньшую скорость вычисления
чем требовалось.

http://habrahabr.ru/post/141442/
http://cyber-place.ru/showthread.php?t=550
вопрос в использованных библиотеках.
стандартные вещи типа DigitalRead() выполняются невероятно долго.
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Сканирующий лазерный дальномер

Сообщение sned » 27 дек 2013, 19:53

Те ссылки не для DUE.Да, DigitalWrite() уже заменил на
прямые команды с регистрами.
sned
 
Сообщения: 303
Зарегистрирован: 08 апр 2013, 08:09
Откуда: Екатеринбург
ФИО: Сергей

Пред.След.

Вернуться в Наши проекты

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

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

cron