Вот смотрите по русски описана задача и решение
http://robot-develop.org/archives/3954Допустим на роботе стоит лидар и компьютер. Одометрию (т.е. энкодеры и пр. - не хотим, в частности, на вертолете это нереально). Надо, пока летаем, понимать "где летаем" и заодно "сделать карту". Это и называется SLAM (локализация и маппинг/картирование).
Вообще много чего можно найти на
http://www.openslam.org/ в том числе исходники.
Но я смотрю сейчас на Hector SLAM.
Сначала видео
http://www.youtube.com/watch?v=F8pdObV_df4Обратите внимание, мужик ходит с лидаром и компом в руках и строит карту (на видео справа показывается).
У меня вместо мужика будет вертолет.
Дальше вот сюда
http://wiki.ros.org/hector_slam Здесь исходники для ROS
https://github.com/tu-darmstadt-ros-pkg/hector_slam Читаем "readme"
https://github.com/tu-darmstadt-ros-pkg ... README.txt В описании к набору данных сказано, что они использовали small embedded handheld mapping system. The systems uses a Atom Z530 CPU board, a low cost IMU and a Hokuyo UTM-30LX laser scanner. Компик на базе атома Z530 (процессор), недорогой IMU (акселерометр, гироскоп) и лидар Hokuyo UTM-30LX. Такой лидар стоит около $5500, но можно аналогичный и подешевле найти, скажем за $1165 ( robotshop.com )
Далее, возвращаемся на
https://github.com/tu-darmstadt-ros-pkg/hector_slam там справа кнопка "Download Zip", жмакаем ее. И оппа... внутри архива есть исходники (cpp/h-файлы). То, что искали.
Смотрим в архиве директорию hector_mapping Остальные директории (package/пакеты) вторичны, можно не глядеть детально. Сама работа описана здесь
http://www.sim.tu-darmstadt.de/publ/dow ... System.pdf (всего 6 страниц).
Предположим, мы покатали робота туда-сюда, записали набор данных с лидара. Лидар это просто устройство которое висит на COM-порту, и шлет данные о дистанциях до препятствия. Сканированирование начинается с угла 16:00 далее на 15:00, 12:00 и до 08:00 (луч лидара идет против часовой стрелки), у моего лидара URG04 это сектор 240 градусов (сзади он не видит). Измерения идут с шагом 0.352 градуса. Т.е. 10 раз в секунду поставляется массив чисел типа Int64. Число это дистанция в миллиметрах до объекта, от которого отразился лазер. Массив чисел пишем в файл. Далее нам надо составить карту из этих данных, смотрим руководство
http://wiki.ros.org/hector_slam/Tutoria ... LoggedData , тут рассказывается
как скачать данные и потестировать в ROS.