Рассказывает Рамиль Шаймарданов — инженер-программист систем управления и навигации роботов Promobot, прослушал курс по линейным системам контроля в Duke University (Северная Каролина, США).
Навигация в робототехнике — это одновременно простой и сложный вопрос. Простой — потому что задача, казалось бы, очевидная: мы находимся в точке А и хотим попасть в точку B, давайте повернёмся в направлении точки В и включим питание на наши колеса.
Но сложной она становится, когда мы добавляем переменные в среду, в которой обитает робот. Так, например, если вокруг робота есть люди, то есть он находится в общественном месте, то нужно учитывать их позицию и скорость. И как-то предсказывать, куда они будут перемещаться.
Сенсоры
Навигация начинается с поиска положения робота, это осуществляется при помощи сенсоров. Один из самых фундаментальных сенсоров — это IMU, который измеряет ускорение в каждом направлении и нашу ориентацию — таким образом мы получаем положение. Есть другие датчики, как, например, в подводной навигации — это DVL, Doppler Velocity Log, который измеряет изменение частоты импульса, чтобы определить скорость в определённом направлении. Есть датчики GPS и прочие.
Почему используется так много датчиков? Причина очень простая: у каждого датчика есть свои преимущества и свои недостатки. Некоторые датчики хороши в кратковременные сроки, где они очень точно измеряют какие-то изменения в системе. Например, IMU может измерить наше ускорение в любую секунду, но при этом он делает это не идеально точно, со временем ошибки накапливаются, и полагаться в длительном сроке на его показания мы не можем. Есть другие датчики, такие как GPS, которые знают нашу глобальную позицию и не смещаются, но в то же самое время они определяют позицию не очень точно — поэтому всегда используется комбинация датчиков.
Эмуляция среды
Следующая задача при навигации — это эмуляция среды. Чтобы робот мог объезжать препятствия, нам нужно их куда-то добавить, и поэтому обычно создается карта, на которую добавляются препятствия: статические и динамические.
Чтобы построить карту, очень часто используется датчик, который называется LiDAR. LiDAR — это дальномер, который вращается по кругу на 360 градусов и измеряет расстояние через каждые n градусов. Он делает это очень быстро и очень часто, таким образом, у нас получается скан всего пространства. С его помощью мы можем добавить препятствия на карту, можем видеть, где препятствия перемещаются, и даже можем позиционироваться. Для этого используются алгоритмы из категории SLAM, то есть Simultaneous localization and mapping, где мы находим препятствия, запоминаем их форму, и в следующий раз, когда мы видим, как они смещаются, можем сказать: «Сместились не препятствия, а мы».
Построение пути
Следующая задача — это построить путь от точки А к точке В. Нам нужно сделать это для того, чтобы, во-первых, не столкнуться с препятствиями, а во-вторых, сделать это за минимальное количество времени или, может быть, с минимальным потреблением ресурсов, то есть каким-то образом минимизировать наши затраты при перемещении.
Существует несколько алгоритмов. В роботах Promobot мы используем ROS, который имеет встроенные структуры, которые позволяют это делать. И в ROS эта задача разделена на две части: глобальное и локальное планирование. Глобальное планирование заключается в том, чтобы построить общий путь, не учитывая кинематику робота, как добраться из точки А в точку В. Обычно это делается при помощи популярного алгоритма A*, который пытается ехать в направлении от точки А до точки В, и если у него это не получается, допустим, он наехал на препятствие, то он едет немного в другом направлении и в конце концов находит какой-то оптимальный путь.
И вторая задача — это локальное планирование: как роботу, находясь в каком-то определенном положении (то есть при данном развороте, скорости и позиции), ехать дальше, чтобы следовать этому глобальному пути.
Для этого используется очень много разных алгоритмов, но тот, который используем мы, называется TEB, Timed-elastic-band. Он пытается минимизировать отклонение от заданного глобального пути, но при этом учитывает кинематику робота так, чтобы он мог разворачиваться. То есть если мы находимся здесь, нам нужно ехать немного дальше, и робот повёрнут, то он сначала попытается развернуться и уже потом поехать. И тут алгоритмы будут зависеть от кинематики робота. Например, самое простое — это два обычных колеса, робот может вращать обоими колёсами и куда-то ехать, это называется дифференциальный робот, и им действительно просто управлять. Если колеса уже три, то нужно учитывать, как третье колесо будет влиять на результат движения.
Управление колёсами
И вот мы построили путь, у нас есть карта, мы хотим ехать. Тут включается более низкоуровневая часть — это собственно управление колёсами. Для того, чтобы управлять колёсами, используется контроллер, в котором, как правило, встроены системы контроля. Не будем в это углубляться, но идея простая: чем больше разница между тем, где мы находимся и где мы хотим быть, тем быстрее мы хотим ехать. Чем быстрее мы приближаемся к цели, тем больше мы хотим замедляться, и если мы едем с какой-то скоростью, но не достигаем нашего конечного результата, то тогда мы хотим ускоряться.
Есть три фактора, которые влияют на конечный результат, это называется PID. Этого достаточно для того, чтобы робот мог ездить в относительно простых помещениях, чтобы он мог перемещаться просто из точки А в точку В, объезжая препятствия. Но дальше можно улучшать эти алгоритмы до бесконечности.
Например, одно из простых улучшений — это детекция людей. По данным с LiDAR, который я упоминал ранее, мы можем найти, допустим, ноги людей, по ногам определить их позицию и узнать их скорость. И тогда мы знаем, что если человек идёт в одну сторону, то мы можем считать, что он будет продолжать идти в эту сторону. И в таком случае, может быть, стоит объезжать его не спереди, а сзади.
И тут уже появляется концепт, концепт называется concmap, то есть это не просто карта, на которой находятся наши препятствия, а карта с дополнительной информацией. Как, например, «вот такой тип препятствия очень жёсткий, мы на него не можем наезжать». Например, люди. Мы не хотим их давить. Но вокруг робота мы добавим ещё немного препятствий, в которые можно заезжать, то есть можно подъезжать близко к людям, но нам не хотелось бы это делать, если этого можно избежать. И также, если человек движется в какую-то сторону, то тогда в эту сторону мы добавим ещё препятствия, которые позволят нам построить маршрут так, чтобы робот объехал человека сзади, а не спереди.
Можно использовать алгоритм визуальной одометрии. Визуальная одометрия заключается в том, что мы берём камеру, одну или две — в зависимости от того, как мы хотим её использовать — и измеряем изменения нашей позиции одним из многих-многих способов. Да, мы измеряем изменение изображения на камере для того, чтобы понять, как изменилась позиция самой камеры.
Также можно попытаться, зная как выглядят разного типа объекты, понять, где этот объект находится, на каком расстоянии, и также избежать столкновений. Это популярно в более сложных системах, потому что чаще всего для визуальной одометрии используются всё-таки машинное обучение. А для того, чтобы использовать машинное обучение, нужны дорогостоящие компьютеры.
В последние несколько лет становятся популярны социальные роботы — это роботы, которые живут в человеческой среде и как-то им ассистируют. Некоторые из них работают как консультанты, ассистенты, некоторые помогают людям с ограниченными возможностями перемещаться, некоторые разносят по офису документы. Они очень важны, они уменьшают стоимость труда, что позволяет освободить ресурсы для других более важных вещей, они ускоряют деловые процессы и помогают людям.
Для того, чтобы такие роботы стали повсеместными, необходимо, чтобы эти алгоритмы передвижения работали очень чётко, без сбоев, ни в коем случае не наезжая на людей, но при этом не застревали. Потому что если для робота требуется очень часто поддержка и какая-то помощь, вмешательство людей, то он не может быть полностью автономным. Поэтому многие компании, которые занимаются робототехникой и вкладывают значительные ресурсы в развитие таких систем, пытаются сделать их менее ресурсоёмкими, более стабильными и независимыми.
Это текстовая версия видео «Техбранч Наука» с YouTube.
Читайте также
- Как роботы помогут экономить на консьерже 500 тысяч рублей