Хотите просто и быстро получить данные трехмерного сканирования улицы? Нет желания тратить тысячи долларов на покупку лидара? Давайте я предложу вам попробовать симулятор!
Все знают, что главная цель бережливого стартапа - дать умереть проекту как можно раньше. Без мучений. Если будет крохотный шанс, то можно получить финансирование и жить дальше долго и счастливо. Я участвовал в проекте лидарного картографирования, где руководство не торопилось покупать дорогую технику. Перед тем как начать работать с реальным железом, я предложил попробовать свои силы на симуляторах данных, проверить узкие места. Идея проекта - устанавливать лидар на автомобиль и сканировать городскую инфраструктуру в реальном времени. Немного об этой задаче я рассказывал в предыдущей статье. В начале проекта возникали следующие вопросы: сколько каналов должно быть в лидаре? Какой угол установки? Какой алгоритм лучше справится в реальном времени или близком к нему?
Попробуем сформулировать требования для софта, который помог бы ответить на эти вопросы:
Размещение лидара на автомобиле.
Opensource, мало ли что надо подкрутить.
Популярная 3D-платформа для визуализации, не надо экзотики.
Простой в редактировании окружающей обстановки - добавляем людей, животных, машин. Статические и динамические объекты.
Не привязан к конкретному производителю лидара, мы пока не определились.
Какие есть на просторах сети симуляторы с наличием лидарной обстановки:
CARLA Simulator. Хардкорный симулятор на базе Unreal Engine. На хабре попадалась статья о нем. Детально моделирует окружающую обстановку для беспилотного авто. Для моей узкой задачи - явный перебор.
LGSVL. С 1 января заброшенный проект от компании LG. Когда открываешь документацию, то становиться не по себе. Надо очень много страдать, чтобы это всё запустить на локальной машине. Сделан на базе движка Unity.
Airsim. Перспективный Unreal-симулятор для дронов. Можно подключать разнообразные примочки, достаточно удобно скачиваются модели городов и подключаются к движку. На хабре давным-давно её уже упоминали. Неплохая вещь, правда больше заточена под дроны, а не автомобили и есть только оффлайновый редактор сцен.
Gazebo. Ну если вы начнёте на ROS моделировать лидар, то та же система будет работать и в реальном окружении. Мы пока не определились с экосистемой, поэтому переезжать на ROS будет тяжело, придётся много кодировать и допиливать.
Для нашего случая я обнаружил простенький лидарный симулятор для авто. Мне он понравился тем, что написан на Unity и сразу завёлся. После запуска встречает двухрежимный интерфейс - редактирование сцены и запуск симуляции. Элементарно. Пришлось движок доработать под себя в этом форке. Я добавил управление наклонами платформы для установки лидара, а также вывод в результирующий CSV углов эйлера.
Вы можете собрать проект из исходников (я проверял под Windows) или взять уже готовый бинарник в релизах. Давайте подробнее остановимся на интерфейсе. После запуска LidarSimulator.exe
нажимаем кнопку Simulation
и попадаем в режим редактирования.
Основные настройки в нижней части экрана для лидарного датчика. Вверху находится ползунок, который определяет частоту выдачи облаков точек. Для добавления динамических объектов, двигающихся по маршруту, надо нажать кнопку с человечком-велосипедом. Порядок работы простой:
Выбор объекта на ленте, ЛКМ
Выбор места на сцена, ЛКМ
Выбор угла установки, ЛКМ
Установка маршрута планеткой, каждая точка ЛКМ, по завершению ПКМ
Для добавления статических объектов выбрать нижнюю иконку с домом. Расставляются аналогично динамическим, за исключением маршрута.
Для запуска имитации нажать кнопку Play.
Чтобы увидеть изображение облаков точек, необходимо нажать кнопку вверху "Point Cloud". Автомобилем можно управлять как в игре. Основные команды:
W,A,S,D - движение вперед, влево, назад, вправо.
R,F - управление креном.
T,G - управление тангажом.
Z - сброс в 0 всех углов.
После окончания симуляции нажать Stop, для приостановки Pause.
Сохранение облаков происходит автоматически после старта симуляции. Для того, чтобы их экспортировать в текстовый файл необходимо остановить симуляцию и нажать кнопку с иконкой папка в левом нижнем углу. Затем выбрать место сохранения и имя файла. Пример выдачи:
Time |
x |
y |
z |
radius |
inclination |
azimuth |
laserId |
roll |
yaw |
pitch |
---|---|---|---|---|---|---|---|---|---|---|
9,6552 |
-15,87924 |
2,004592 |
-2,004201 |
155,0499 |
157,1568 |
1,968 |
36 |
0 |
0 |
0 |
9,6552 |
-16,65221 |
2,102172 |
-2,0042 |
155,0499 |
157,1568 |
1,968 |
37 |
0 |
0 |
0 |
9,6552 |
-17,50305 |
2,209582 |
-2,004201 |
155,0499 |
157,1568 |
1,968 |
38 |
0 |
0 |
0 |
9,6552 |
-18,44423 |
2,328396 |
-2,004199 |
155,0499 |
157,1568 |
1,968 |
39 |
0 |
0 |
0 |
Для компиляции оригинальной версии использовался Unity 5.6, после адаптации работает на Unity 2019.4.10f1.
В результате у меня получился компактный инструмент, который хорошо справился с проверкой гипотез лидарного проекта. Я отработал построение карты для разного количества лучей и нескольких вариантов углов установки. На самом деле, если используются алгоритмы SLAM, то надо устанавливать лидар параллельно дорожному полотну чтобы "зацепление" между облаками точек было лучше.
Кому интересно, вот ссылка на мой форк на гитхаб.