Привет, Хабр! Меня зовут Илья, я — разработчик систем восприятия окружения в компании Zyfra Robotics. Проще говоря, я учу самосвалы и буровые станки «видеть» окружающий их мир. Наши роботы бурят скважины на просторах Перу, а самосвалы без водителей трудятся на карьерах Хакасии. Чтобы они могли делать это быстро и, главное, безопасно, мы наделяем машины «глазами» и учим ими пользоваться. Для этого мы применяем камеры, радары и, конечно, лидары. В этом посте я хочу рассказать, что это вообще такое и с какими проблемами мы сталкиваемся.
Чайник с глазами
Лидар — это оптический сенсор, использующийся для обнаружения объекта и измерения расстояния до него. По сути, лидар выпускает оптический импульс, который отражается от ближайшего объекта и возвращается. Потом система рассчитывает расстояние до этого объекта. А мы учим ее понимать, от чего именно оттолкнулся этот импульс, и передавать эту информацию машине.
Внешне лидар — это небольшой цилиндр высотой около 15 см. Похоже на мини‑чайник с окошками. Корпус — из металла и светопроводящих материалов защищает лидар от пыли и влаги. Чаще всего их размещают так, чтобы обеспечить необходимое покрытие: на корпусе транспорта или различных его элементах — крыше, бампере, крыльях и т. д.
Лидары как технология известны достаточно давно, но из‑за высокой цены применяли их либо ученые, либо военные. Но примерно десять лет назад в мире начался настоящий бум интереса к городским беспилотникам, который и сделал лидары доступными для массовых разработчиков. Теперь они активно применяются в транспорте и промышленности — эти сенсоры нужны практически всем роботам.
Чтобы наш самосвал не свалился в карьер, ему нужно понимать, что находится вокруг него. Для этого лидар должен изменить направление лазерного луча и измерить расстояние до всех объектов вокруг себя. Проще всего это сделать, поместив лазерный дальномер на платформу. Вращая ее, можно получить картинку в двумерном пространстве. А если использовать несколько дальномеров под разными вертикальными углами и проводить измерения параллельно — в трёхмерном.
Таким образом мы получили серию измерений дальности под разными углами:
Набор точек, переведённых в декартову систему координат, является выходом лидара, поступающим в систему робота. Чаще всего его называют сканом.
Также лидар умеет измерять амплитуду принятого сигнала. Значение амплитуды зависит от многих факторов: дальности объекта и его материала, угла визирования объекта и даже состояния атмосферы.
Моделей лидаров много, и каждая из них может применять свой метод изменения направления луча. Однако в целом принцип формирования лирадного скана не меняется.
Более подробно об устройстве современных лидаров можно почитать здесь.
Главное отличительное свойство облака точек как набора данных — это инвариантность к перестановкам точек внутри массива.
То есть массивы точек P_1 и P_0 являются одним и тем же объектом.
Обработка лидарных данных
Сами по себе «сырые» данные с лидара бесполезны для роботизированной системы. Роботу сначала нужно обработать эти данные и лишь затем применять их.
Вот несколько примеров задач, которые решаются и используются в наших системах с использованием лидарных данных:
1. Регистрация облака точек. Суть задачи заключается в «подборе» пространственного преобразования между двумя массивами точек, снятыми в разных положениях лидара. Формально для лидарного облака точек задача формулируется следующим образом:
Матрица — это матрица вращения, а — вектор смещения. Точки и взяты из массивов (облаков точек) и Эта задача усложняется тем, что для поиска параметров преобразования сначала нужно найти соответствие между точками из и и лишь после этого проводить оптимизацию уравнения 1. Найдя матрицу и вектор мы получаем смещение лидара между и .
Подробнее про методы решения этой задачи можно почитать здесь.
На представленном видео робот строит трехмерную карту пространства, используя лидарную одометрию и данные с IMU.
Полученная карта может использоваться для различных целей. Например, мы можем увидеть на ней дефекты дороги, которые повлияют на работу всего карьера. Также карта необходима и для безопасной навигации робота, поскольку она позволяет машине видеть и запоминать стационарные объекты и избегать их при выборе маршрута.
2. Классификация. По облаку точек необходимо определить класс объекта.
Формально эта задача ставится следующим образом: По заданному облаку точек P необходимо определить класс c из заранее заданного набора классов .
Облаком точек для классификации может выступать как весь лидарный скан (например, если мы хотим определить погодные условия вокруг робота), так и часть этого скана (если нужно определить класс заранее выделенного объекта).
Если говорить про методы решения, то в последнее десятилетие лучше всего работают алгоритмы на основе машинного обучения. Почитать про них можно здесь.
3. Сегментация данных. Здесь класс необходимо присвоить каждой отдельной точке скана.
Методы решения задачи сегментации в целом схожи с методами обычной классификации. Про подходы можно также прочитать здесь.
Для определения класса каждой отдельной точки скана, крайне важно понимать, что окружает эту точку (контекст). Правильное представление контекста — ключевой фактор при решении задачи сегментации. Однако так как точки в пространстве распределяются неравномерно, определить качественный контекст для каждой точки скана проблематично.
При решении этой задачи нужно оценить зону проходимости для робота или фильтровать данные от так называемых «мусорных» точек (пыль, снег и т. д.) В наших роботах мы используем сегментацию для оценки той зоны, куда робот может проехать безопасно.
4. Обнаружение объектов. Необходимо по полному скану окружающего пространства определить положение всех объектов определённых классов.
Например, нам нужно увидеть, где находится другая горная техника, люди или животные. Но здесь недостаточно просто обнаружить эти объекты (указать их геометрическое положение), надо оценить их размеры и класс.
Решение этой задачи помогает роботу безопасно передвигаться и не представлять угрозы для других участников движения. Да и в целом без понимания, объект какого класса мы обнаружили, невозможно правильно организовать полноценный цикл работы самосвала: на человека и машину робот должен реагировать по‑разному.
Прочитать про современные методы решения задачи обнаружения.
Минусы лидара
1. Зависимость от погоды
Лидар использует электромагнитное излучение в нм диапазоне, близком к световым волнам, что делает его чувствительным к погодным условиям. Проще говоря, такие волны отражаются от всего, что больше них. То есть лидар будет видеть не только трактор, но и микроскопическую снежинку или лужу, а его луч будет отражаться как от объектов, находящихся за стеклом, так и от самого стекла. Снег, пыль, туман, пар сильно ухудшают качество данных и могут привести к некорректному поведению алгоритмов: помимо реальных, мы увидим еще и так называемые «теневые объекты».
При этом если точки от снега и пыли можно фильтровать, то туман сильно усложняет работу с лидарными данными.
Мы решаем проблему так: ищем закономерности данных, которые позволяют роботу отличить эту пыль от условного самосвала. Такую линейку закономерностей мы можем придумывать сами: например, «объяснить» системе, что поверхность пыли более неоднородная, чем самосвала. Но если объяснить роботу, как отличить трактор от снежинки, довольно просто, то придумать универсальные признаки не всегда возможно. Сейчас мы начали применять методы машинного обучения и пытаемся подобрать эти признаки на основании большого объёма наблюдаемых данных.
2. Низкое разрешение по углу возвышения
Разрешение по углу возвышения чаще всего достигается за счет использования сразу нескольких каналов под разными углами. Обычно их не очень много (16, 32, 64, 128), часто каналы расположены неравномерно.
В такой конфигурации при увеличении расстояния до объекта его лидарный «портрет» начинает деградировать.
Такое поведение сильно ухудшает качество работы практически всех алгоритмов, особенно классификации и обнаружения. При этом методов борьбы с этим недостатком мало. Единственное, что по‑настоящему работает — увеличить плотность точек через увеличение количества вертикальных каналов.
Не лидаром единым
Лидар — один из ключевых сенсоров для наших роботов, который позволяет получить информацию как об окружающем пространстве, так и о движении самой машины. Конечно, у него есть как сильные, так и слабые стороны. Поэтому, создавая действительно безопасного и эффективного робота, одним лидаром не обойтись. Его слабые стороны можно компенсировать, применяя другие сенсоры. В общем, комбинируйте и все получится!
Комментарии (5)
Germanjon
00.00.0000 00:00Насколько перспективно установить на каждую единицу техники маячок, а потом отслеживать её текущее положение в пространстве, хотя бы в пределах карьера и дорог общего пользования?
Чтобы проще было понять что впереди не снежный ком, а БелАЗ за туманом
vassabi
00.00.0000 00:00+1мне казалось что автор уже на это ответил:
Его слабые стороны можно компенсировать, применяя другие сенсоры. В общем, комбинируйте и все получится!
xexo7c8 Автор
00.00.0000 00:00+1Мы используем, что-то наподобие радиомаяков. Однако, оснастить все интересующие нас объекты маячками очень сложно и при выходе из строя одного маячка на карьере, небезопасной становится сразу вся роботизированная техника. Поэтому мы используем как маячки, так и систему восприятия на самом роботе.
fio
Про свой опыт радарами расскажите?
xexo7c8 Автор
Стоит ли писать отдельную статью про использование радаров мы еще думаем.
Вообще, мы используем решения для автомобильной промышленности (MIMO radar).
В основном для обнаружение объектов и картографирование окружения.