Теория триангуляционного определения расстояния, которой пользовался я, дана в начале темы. По поводу TSL1401 - на самом деле, это не ПЗС, а "128 × 1 array of photodiodes". Управление ей описано в даташите, довольно подробно также оно описано здесь: http://cache.freescale.com/files/microcontrollers/doc/app_note/AN4244.pdf
Расскажу вкратце про управление. TSL1401 - интегрирующая, то есть она накапливает заряд, пока на пиксель падает свет(у каждого фотодиода есть 2 конденсатора). Управление микросхемой ведется при помощи всего двух выводов - синхронизации и стартового. Для того, чтобы считать данные, нужно послать одиночный стартовый импульс (микросхема начинает новый захват данных), после чего, подавая на TSL1401 тактовые импульсы, с ее аналогового выхода считываем значения яркости, которые были захвачены в предыдущий раз.
По поводу сверхразрешения - я использую алгоритм нахождения центроида. В массиве яркостей сначала нахожу максимальное значение, выделяю небольшой участок яркостей рядом с максимумом, потом по нижеприведенной формуле рассчитываю более точные координаторы центра.
Последний раз редактировалось citizen 26 янв 2016, 15:56, всего редактировалось 2 раз(а).
citizen писал(а):Снял видео, в котором показано, как работает дальномер, установленный на роботе.
Управляется вручную? Есть ли идеи по векторизации карты? Мой результат на скрине (исходные данные введены вручную, дальномера пока нет). Есть идея, как на векторизованной карте находить собственные координаты.
Да, пока управляется вручную. По поводу векторизации тоже есть определенные наработки, но сейчас нет времени писать код дальше. Определенной проблемой является то, что на больших расстояниях (> 2м) падает точность определения координат, начинается их зашумление. Плюс предметы в самой комнате мешают(стул на фотографии разрывает линию). Хотя было бы интересно услышать любые предложения.
1.Разрывы линий устранять в процессе векторизации (например, зачем учитывать то, куда робот проехать не сможет), пусть будут сплошными. 2.По нахождению положения на карте: Изначально в памяти пусто. После включения робота и сканирования окружающего пространства, производится запоминание элементов карты (элементы - линии в полярной системе координат). При перемещении робота, на вновь сформированном "кадре" последовательно ищутся элементы карты (по длине и взаимному расположению). Искать все элементы не нужно, достаточно 3-4 штук. Далее определяется расположение робота, учитывая расстояние до элементов и относительный угол (т.е. угол поворота дальномера).
Лазер и так установлен для достижения максимальной точности на больших расстояниях. На близких расстояниях при такой установке точность нормальная получается.
Удалось кое-как запустить hector slam под ROS. В результате получилась вот такая карта: Как видно, из-за погрешности не все стены параллельны - накапливается угловая ошибка. По какой-то причине возникла ошибка локализации в верхней части карты, в результате чего карта частично исказилась. Пришлось вручную указывать положение робота на карте. Часть ошибок, вероятно, связана с искажением данных на выходе дальномера при вращении робота вокруг оси - 3 оборота в секунду - достаточно низкая скорость для дальномера.