Как работают роботы. Часть 2
Сегодня немного расскажу об автономном перемещении роботов, ибо другие темы, о которых можно было бы рассказать, видятся мне еще более занудными.
Небольшая ремарка: большинство людей, услышав слово "робот" представляют себе антропоморфных терминаторов, но в реальности роботы выглядят совершенно по разному, и их внешний вид напрямую зависит от функционала. Когда-нибудь я расскажу и о подводных роботах и о космических, но не будем забегать вперед :)
Так вот, колесный или гусеничный робот, который решит начать восстание машин и самостоятельно выбраться... хотя бы из чулана, в котором его держат кожаные ублюдки, должен пройти несколько этапов обретения автономности:
1) Управление по скорости.
Робот должен выполнять команды линейного перемещения (вперед-назад) и углового вращения (по часовой стрелке - против) с заданными скоростями. Также он должен высчитывать текущую скорость, и, исходя из нее, пройденное расстояние. В самом простом случае корректность выполнения команд достигается ПИД-регулятором, а подсчет текущей скорости - датчиком холла или энкодером.
2) Локализация на местности.
Робот должен понимать, где конкретно он сейчас находится. Если это улица, то тут все относительно просто. Устанавливаем на робота GPS и получаем абсолютные координаты с погрешностью в +-15 метров. Либо GPS RTK для точности в пару сантиметров, тут уже от задач зависит. Если же мы находимся в помещении, то вариантов несколько больше: маячки, метки, камеры, и.т.д. Лично мне больше всего нравится локализация при помощи Лидара. Он и точность неплохую дает, и позволяет обеспечить...
3) Динамическое построение маршрута.
Робот должен адаптироваться к изменению окружения. Если ему приходит задача перемещения из точки "А" в точку "Б", то сначала строится маршрут, в котором присутствуют только статические препятствия, нанесенные на карту помещения, которая может содержаться в памяти робота (стены, мебель и прочие неподвижные вещи). Если карты нет, то робот считает, что и статических препятствий тоже нет и маршрут строится по прямой линии, а все реальные препятствия считаются динамическими. Собственно, сканирование местности происходит при помощи того же самого лидара, что и отвечает за локализацию.
Выглядит в голове у робота это все, примерно, вот так. Заранее простите за пояснения в пэинте :)
Здесь, например, красными линиями обозначены данные, полученные с лидара. Черная область вокруг - запрещенная (если робот там окажется - он врежется в препятствие), белая область - разрешенная (никто никуда не врежется), серая - неизведанная.
В итоге, пройдя все эти этапы, мы получаем достаточно универсальную систему, которая может допиливаться под конкретные задачи и становиться гораздо более прикладной. Например, катать ikomas'a по офису. Собственно, а почему бы и нет?


А инерционные системы навигации сейчас для роботов используются?