Что такое SLAM и как робот одновременно строит карту и находит себя?
Робот-пылесос как-то строит карту квартиры и при этом знает, где он на ней. Говорят, это SLAM. Как можно строить карту и определять своё место одновременно, если ни того, ни другого ещё нет?
2 ответа
SLAM (Simultaneous Localization and Mapping) — «одновременная локализация и построение карты». Это решение парадокса курицы и яйца: чтобы построить карту, надо знать своё положение; чтобы знать положение, нужна карта. SLAM решает обе задачи вместе, постепенно.
Как это работает (упрощённо):
- Робот стартует и принимает свою точку за начало координат — это центр будущей карты.
- Датчиками (лидар или камера) он видит ориентиры вокруг: стены, углы, мебель — и наносит их на карту.
- Едет дальше. По одометрии (колёса, IMU) он грубо прикидывает, насколько сдвинулся.
- Снова смотрит на ориентиры. Если узнаёт уже знакомые углы — сопоставляет новую картинку со старой и уточняет и своё положение, и положение объектов на карте.
- Шаг за шагом карта достраивается, а оценка позиции постоянно корректируется.
Ключ — взаимная коррекция: ориентиры уточняют положение робота, а уточнённое положение делает карту точнее.
Особо важный момент — замыкание петли (loop closure): когда робот возвращается в уже виденное место и узнаёт его, он «защёлкивает» петлю и исправляет накопленную ошибку одометрии разом по всей карте. Без этого карта «расползалась» бы из-за дрейфа.
Именно SLAM позволяет роботу-пылесосу нарисовать план квартиры и убирать по маршруту, а беспилотникам — ориентироваться без точного GPS.
Идея на пальцах: представь, что ты в тёмной комнате с фонариком. Ты запоминаешь приметы (угол, шкаф), идёшь дальше, замечаешь новые, а по знакомым понимаешь, где ты относительно прежних. Так понемногу рисуется карта, и одновременно ты знаешь своё место. Главный трюк — когда возвращаешься к знакомой примете, исправляешь все накопленные ошибки. Это и есть SLAM: карта и позиция уточняют друг друга по кругу.