Немного предыстории моей цели
Я нахожусь в процессе создания мобильного автономного робота, который должен перемещаться по неизвестной области, должен избегать препятствий и получать речевой ввод для выполнения различных задач. Он также должен распознавать лица, объекты и т. Д. Я использую датчик Kinect и данные одометрии колеса в качестве датчиков. Я выбрал C # в качестве основного языка, поскольку официальные драйверы и SDK легко доступны. Я закончил модуль Vision and NLP и работаю над навигационной частью.
В настоящее время мой робот использует Arduino в качестве модуля для связи и 64-битный процессор Intel i7 на ноутбуке в качестве процессора.
Это обзор робота и его электроники:
Проблема
Я реализовал простой алгоритм SLAM, который получает положение робота от кодировщиков и добавляет все, что он видит, используя kinect (в качестве 2D-сечения трехмерного облака точек) на карту.
Вот как выглядят карты моей комнаты:
Это приблизительное представление о моей комнате:
Как видите, они очень разные и поэтому очень плохие карты.
- Ожидается ли это от использования только мертвого счета?
- Мне известны фильтры частиц, которые его улучшают, и я готов их реализовать, но как я могу улучшить этот результат?
Обновить
Я забыл упомянуть мой текущий подход (который я раньше должен был, но забыл). Моя программа примерно делает это: (я использую хеш-таблицу для хранения динамической карты)
- Возьмите облако точек от Kinect
- Ожидать поступающие данные серийной одометрии
- Синхронизация с использованием метода на основе отметки времени
- Оцените позу робота (x, y, theta), используя уравнения из Википедии и данные кодировщика
- Получить «кусочек» облака точек
- Мой срез в основном массив параметров X и Z
- Затем постройте эти точки на основе позы робота и параметров X и Z
- Повторение