TOD
Компания
32,32
рейтинг
25 января 2014 в 13:19

Что роботу стоит карту построить?


Снова с вами блог компаниии Tod, и сегодня мы продолжим знакомство с навигационным стеком операционной системы для роботов ROS. Напомним, что в предыдущей статье было дано общее описание навигационного стека, обозначены необходимые требования для его использованию на роботе, рассмотрены задачи управления перемещением робота, получения сенсорных данных одометрии и сонаров. В этой статье мы расскажет о самых «вкусных» возможностях навигационно стека: построение карты и планирование траектории движения с учетом встречающихся на пути робота препятствий. Под катом помимо всего прочего вы найдете видео с навигацией робота Tod в квартире.

Kinect


Для построения карты роботом можно использовать как профессиональный лазерный дальномер, так и менее дорогостоящую камеру глубины: Kinect или ASUS Xtion. Пожалуй, каждый из вас знает о Kinect как о игровом контроллере для приставки Xbox 360, расширяющим ее интерактивные возможности, но не все знают что именно благодаря Kinect профессиональная робототехника стала намного доступнее. Тогда как цена лазерного дальномера начального уровня составляет около 1000 $, покупка Kinect обойдется вам в 150-200 $.

Как видно из картинки выше, Kinect оснащен несколькими видами сенсоров, которые оказываются полезными для решения сразу нескольких задач в области робототехники:
  • VGA камера с разрешением до 1280x1024 может быть использована в системе телеприсутсвия, навигации в помещении и совершения видеозвонков.
  • На основе данных, получаемых с сенсора глубины, строятся 2-D и 3-D карты и выполняются другие задачи автономной навигации, а при наличии у робота манипулятора — осуществляется поиск и захват предметов.
  • Массив 4-х микрофонов — для локализации источников звука (это интересная тема для отдельной статьи).

В ROS общение с Kinect происходит через узел пакета openni_launch путем публикации нескольких видов сообщений в соответствующие темы. В первую очередь, стоит обратить внимание на следующие темы:
  • /camera/rgb/image_color — данные RGB-камеры в виде изображения;
  • /camera/depth/image — данные сенсора глубины в виде изображения;
  • /camera/depth/points — данные сенсора глубины в виде трехмерного облака точек.

Применение Kinect в навигационном стеке требует преобразования данных облака точек в данные фейкового лазерного 2-D дальномера, что означает получение горизонтального среза исходного облака точек. Для решения этой задачи мы воспользовались пакетом pointcloud_to_laserscan из стека робота Turtlebot. Вот так выглядит срез сенсорных данных Kinect в формате сообщения sensor_msgs/LaserScan.

Kinect по сравнению с дорогостоящими лазерными дальномерами, однако, имеет определенные недостатки. Их следует учитывать, в первую очередь, при решении вопроса о расположении Kinect на роботе. Один из главных недостатков — это большая слепая зона (около 50 см). После комментария пользователя ambikontur в предыдущей статье насчет этой проблемы и некоторых обсуждений, мы решили расположить Kinect ближе к задней части робота. Это позволило «спрятать» большую часть мертвой зоны внутрь корпуса.

Таким образом, на данном этапе робот Tod уже может выполнять следующие задачи, связанные с навигацией:
  • получать данные одометрии для отслеживания траектории движения;
  • принимать команды перемещения робота в формате линейной и угловой скорости;
  • получать сенсорные данные сонаров в формате облака точек;
  • получать сенсорные данные Kinect в формате лазерного 2-D дальномера.

На базе такой системы можно решать навигационные задачи более высокого уровня. В первую очередь, к таким задачам можно отнести SLAM (Simultaneous localization and mapping). SLAM решает проблему «курицы и яйца»: с одной стороны, достоверная оценка местоположения робота в пространстве требует точно построенной карты, с другой стороны, процесс построения карты нуждается в более точной оценки местоположения робота. Другой не менее важной навигационной задача — планирование траектории движения.
Навигационный стек ROS предоставляет 3 основных пакета, предназначенных для решения навигационных задач высокого уровня:
  • gmapping создает карту помещения на основе алгоритма SLAM, данных лазерного дальномера и одометрии;
  • amcl определяет местоположение робота уже на существующей карте;
  • move_base позволяет перемещать робота в любую точку на карте с учетом препятствий.

Теперь давайте рассмотрим подробнее возможности каждого пакета.

gmapping

Сначала стоит сказать о том, что карта в ROS представляет собой обычный файл изображения в формате PGM, где каждый пиксель может быть:
  • белым — пространство свободно;
  • черным — пространство занято препятствием;
  • серым — пространство еще не исследовано роботом.


Узел slam_gmapping в составе пакета gmapping предназначен для построения карты. Используемый в пакете алгоритм SLAM на основе собранных сенсорных данных формирует сеточную карту, в которой каждая ячейка задается определенной вероятностью нахождения в ней препятствия. Вероятность каждой ячейки корректируются по мере поступления новых сенсорных данных, и в итоге мы получаем наиболее достоверное представление карты. В качестве сенсорных данных gmapping использует данные лазерного дальномера, источником которых в роботе Tod служит Kinect, и данные одометрии.
Что бы создать карту, необходимо, управляя роботом с клавиатуры или джостика, объехать помещение и сохранить полученную карту в файл. Объезжать помещение лучше не очень быстро, при этом учитывая особенности используемого дальномера. Например, Kinect обладает слепой зоной спереди, поэтому при построении карты не стоит подъезжать к стенам слишком близко.
Мы испытали пакет gmapping и робота Tod в боевых домашних условиях, и вот что из этого получилось.


amcl


Алгоритм узла amcl (Adaptive Monte Carlo Localization ) работает с уже готовой картой, например, созданной с помощью пакета gmapping. Этот алгоритм предназначен для вероятностного определения местоположения робота на основе метода Монте-Карло и фильтра частиц (particle filter).
Робот Tod в качестве исходных данных в узле amcl использует сенсорные данные лазерного дальномера и одометрии. После старта узел ожидает задания начального положения робота. Это удобно, например, при старте робота с док-станции. Однако, если начальное положение не задано, то ему назначается точка в начале системы координат карты.
Как видно на картинке ниже, на карте отображаются текущие данные лазерного дальномера в виде красных точек на стенах и препятствиях, а сам робот находится в облаке из зеленых стрелок. Эти стрелки обозначают массив возможных положений робота в текущий момент времени, формируемый узлом amcl. По мере перемещения робота по карте и получения новых сенсорных данных неопределенность положения робота уменьшается, и это облако становится меньше.

В узле amcl можно задавать множество параметров работы алгоритма. Например, увеличение максимального количества частиц (particle) повышает точность определения положения робота, но при этом увеличивается нагрузка на CPU.

move_base


Можно перемещать робота по карте, управляя им с клавиатуры, но имеющийся в навигационном стеке ROS пакет move_base также позволяет осуществлять его автономное перемещение. Достаточно задать точку на карте, и робот самостоятельно проложит оптимальный маршрут до цели. Во время выполнения задания робот будет сообщать о своем текущем местоположении, а если цель по какой-то причине окажется недоступной, то он отменит ее, не нарушая работы системы.
Глобальный маршрут строится сразу после задания цели с учетом известных на данный момент препятствий. Во время движения к цели глобальный маршрут разбивается на сегменты — локальные маршруты. Каждый локальный маршрут строиться с учетом поступающих сенсорных данных путем задания подходящей линейной и угловой скорости робота.
Характер маршрута движения робота к цели определяется двумя составляющими:
  • глобальная карта затрат (global cost map) — для построения глобального маршрута движения;
  • локальная карта затрат (local cost map) — для построения ближайшего локального маршрута движения.

Карты затрат предоставляют навигационную информацию, необходимую для успешного выполнения текущего маршрута. В конфигурационных файлах карт затрат задаются размеры робота, скорость его движения по маршруту, длина сегментов, частота обновления маршрута и многое другое.


И на этом мы заканчиваем знакомство с навигационным стеком ROS. В следующем посте мы научим робота Tod понимать русскую речь. Подписывайтесь на наш блог — будьте в курсе событий.
Автор: @hoverjet
TOD
рейтинг 32,32
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Комментарии (40)

  • НЛО прилетело и опубликовало эту надпись здесь
    • –2
      неа, не станут, ведь тогда будет фатальный недостаток в устройстве
    • 0
      Kinect 2 хочется тоже опробовать — пока ждем драйверов под ROS.
  • +1
    А лидары, которые уже несколько лет на роботах пылесосах ставят ( Neato XV-11 ) ещё в продаже не появились?..
    • НЛО прилетело и опубликовало эту надпись здесь
    • +1
      Нам пока такой лидар отдельно не встречался, но модель интересная в бюджетном сегменте. Сейчас же покупать лидар вместе с пылесосом, а потом еще демонтировать его выходит накладнее использования Kinect.
      • +1
        Это да. Но, согласитесь, что в комнате, где в окно бьёт солнце от Kinect стабильности ожидать не стоит.
        • 0
          Да, с этим согласен. Неприятной проблемой еще оказалась неспособность Kinect адекватно реагировать на присутствие зеркал — он считает их продолжением комнаты. В видео можете наблюдать эту проблемы на шкафах с зеркалами.
          • 0
            Кстати, я не знаю как лидары с зеркалами работают — не сталкивался с ними никогда. Но засветки солнцем для них вроде не критичные.
            • 0
              Погодите, а Kinect-2, это ведь ToF, то есть разновидность лидара как раз. Хотя, если судить по интеловско-креативовской камере, creative senz3d, которая тоже ToF, то выходит у некоторых лидаров проблемы с засветкой таки есть.

              По крайней мере у этой камеры проблема с засветкой от солнца точно есть. Равно как есть проблема и с бликами от глянцевых/зеркальных поверхностей.
              • 0
                Кстати, не знал. Но, всё же от нормального лидара это сильно отличается. Врятл ли там такую мощность можно загнать как в один импульс обычного лидара.
            • 0
              Получается трёхмерное отражение сцены в зеркале. Если зеркало пыльное — зависит от типа лидара: импульсные возьмут либо первый импульс (от зеркала), либо самый сильный (от отраженного объекта). Фазовые выдадут слегка искаженную форму отраженного объекта.
              Засветки солнцем зависят от длины волны лазера. Тем, кто работает на полутора микронах, на солнце наплевать, но они за это расплачиваются большим пятном (и вообще, проблемами с настройкой). Тем, кто в ближнем ИК, или в видимом свете, приходится с засветкой бороться, но средства для этого очень ограничены (узкополосный фильтр на приёме, длиннофокусный объектив...) Так что роботы лучше видят по ночам :)
  • 0
    > робот Tod

    «I am a techno-service droid»?
    • 0
      Todo 360… отсылка к вселенной Звездных войн. Годно.
      На самом деле, расшифровку аббревиатуры мы еще не придумали, поэтому будем рады рассмотреть и ваши варианты. ;)
  • 0
    А использовать 2 обычных камеры в роли датчиков глубины — всё ещё неподъёмная задача для современного железа?
    • +1
      Системы с камерами тоже активно используются на роботах, но у таких систем тоже свои проблемы. Самые продвинутые роботы зачастую используют гибридные системы с лидарама, камерами и датчиками глубины.
    • +1
      Точность низкая особенно на гладких поверхностях. Работает то оно быстро. Мы как-то сделали алгоритмы, что облако точек могло даже на ARMах общитыватся приблизительное. Но оно достаточно неплотное было.
      Плюс низкая точность если расстояние до объекта сильно больше базы.
    • +1
      Нынче уже становится модным по 4-м камерам облака строить, особенно там, где активные сенсоры нельзя использовать в силу конструктивных ограничений.
  • 0
    Потрясающе! Всегда было интересно, как можно организовать локальную (в пределах квартиры, например) навигацию. На ум приходили только несколько радио-маячков, расставленных по квартире, и замер «пингов» до них.

    Однажды я не сдержусь, и куплю себе Lego Mindstorm :)
    • 0
      К сожалению, Lego Mindstorms настолько убог, что ни о каком SLAM там речи идти не может. Это детская развивающая игрушка.
      • 0
        Почему? Можно по пунктам рассказать почему Lego Mindstorms EV3 не пригоден для SLAM ни в каком виде?
        • 0
          Своей памяти мало для такой цели. Прямое программирование невозможно — только примитивные команды в графическом интерфейсе. А если обрабатывать все на внешнем Android то сам Lego Minstorms нафиг не нужен. Тем более при его цене. Проще взять нормальный STM32 + Android и сделать на нем. К тому же изначательно о EV3 речи не шло. А Mindstorms первый, да и NXT — убог до безобразия. при этом цена дикая. Портов у всех версий кот наплакал, гибкость тоже никакая. Игрушка для детей — не более.
          • 0
            Прелесть Lego Mindstorms в том, что это лего :)
            • 0
              А, культ лего, ага :)
          • –2
            Что-то странное вы пишите. Современный Lego Mindstorms это как раз таки EV3. NXT по моему и не производят больше.

            А в EV3 у нас линукс. И bricxcc уже имеет эксперементальную его поддержку. То есть на С/С++ можно писать и заливать нативные программы в EV3 (то есть не в виртуальную машину, в которой леговские «графические» приложения запускаются, все моторы/сенсоры в EV3, как и положено в линуксе, представлены в виде файлов в fs). Да и не только на плюсах.

            Оперативки там 64 метра, это ARM 300 MHz, флеша там 16 Мб, но туда можно воткнуть SD-карту на 64 Гб — 64 Гб хватит для ваших нужд? :-)

            Кроме того там есть usb host.

            В принципе на базе этого линукса народ уже делает свои сборки, заточенные под что-то конкретное. Например под запуск jvm от оракла, дабы на жабе программировать все это хозяйство. Пруф: www.oracle.com/technetwork/java/embedded/downloads/javase/javaseemeddedev3-1982511.html

            В общем, это обычный нормальный embedded linux, на не самом слабом камне. Хотя конечно в смартфонах сейчас мощнее.

            Короче, матчасть несколько разнообразней и интересней, чем кажется на первый взгляд :-)
          • 0
            Минус это конечно хорошо, но аргументы — лучше :-)
            • 0
              1. Карты только до 32 ГБ официально.
              2. 300 МГц — для SLAM маловато. 64МБ под Linux — это вообще ни о чем. Разве что маршрутизатор сделать.
              3. JVM — это отличный способ сделать невыдающиеся параметры производительности вообще никакими.
              4. Камень откровенно слабый. За куда более скромные деньги есть много более произвительные платы вроде той же Raspberry Pi, которая уже не экспериментально, а от рождения на линуксе и портов USB у нее 2 и интерфейс камеры и сама камера есть. OpenCV тоже адаптрирован для нее, хоть и урезанный. И она не самая мощная.
              5. Датчиков кот наплакал и они медленные и игрушечные.
              6. Портов всего 4, не особенно разбежишься.
              7. Цена — 15 тыр за один комплект — это очень дорого, учитывая, что для чего-то интересного их нужно хотя бы 2-3. Иначе будет одинокий девайс, у которого быстро кончатся и порты и возможности что-то прицепить.

              Еще раз, LEGO MindStorms — это развивающая игрушка для детей младшего и среднего школьного возраста. Оставьте ее детям. Для взрослых мальчиков есть игрушки посерьезнее и поинтереснее. Да, мозги нужно приложить, конечно, но и результат не будет детским.
              Механическая прочность конструкций рассчитана на детей — все трясется и болтается.
              • 0
                32 Гиг маловато будет? ;-)

                У нас на 16 метрах ОЗУ бегал линукс на дивайсе (с графическим дисплеем, да) который стоял (да и сейчас стоит) в цеху газоперекачивающей станции и управлял одновременно восемью агрегатами. И ничего, справлялся. А тут целых 64 метра!

                Про jvm — это был пример. А еще один был пример про нативные приложения. Какая разница что запускать — jvm (которого искаропки нет) или свой бинарь?

                Камень нормальный. Для продвинутого компьютерного зрения дивайс конечно слабоват, но это и не тот класс устройств. Начинка EV3 очень похожа на ту же виртурилку (http://virt2real.ru/ habrahabr.ru/company/virt2real/blog/156491/) и используется в общем то по тому же сценарию. Но карту построить на EV3 вполне можно.

                Датчиков (в том числе сторонних) довольно много. Да и вообще, можно же в принципе любой по i2c или rs-232 прицепить. Это ж линукс.

                Если нужно еще мозгов — можно покупать не полные комплекты по 15 тыр (цена в россии действительно не адекватная, впрочем так у нас со многими товарами), а именно что сам мозг отдельно покупать.

                В общем, мне видится EV3 как хорошая стартовая точка для работы над тем же SLAM например. Не даром же университеты для исследований их закупают :-)

                Если же есть четкая задача что-то сделать, то тут уже надо смотреть на конкретные требования и реальные возможности EV3, вполне вероятно что оно не подойдет (по мощности, точности, габаритам, автономности, влагозащищенности и так далее).

                Lego это таки indoor only.

                PS. Но да, если голову не прикладывать, а использовать только то что идет сразу искаропки с EV3, то это чистая игрушка для детей — на официальном инструментарии далеко не уедешь.
                • 0
                  SD — Это всего лишь дисковое пространство.
                  в 64 метра придется сильно урезанные версии всего искать. В общем — сплошной геморрой. и ладно бы было дешево, так за этот геморрой еще и хотят 15 тыр, не вижу никакого смысла в этом. В США цена не сильно меньше — 350 баксов.
                  Университеты закупают по глупости, видимо. Они вообще много чего делают не от большого ума. Меня сегодня полдня в скайпе теребил студент, который по моей статье о сборке коптера делает диплом. И преподы считают, что то, что он что-то делает, а не купил диплом — уже хорошо. А он даже сам запустить коптер не смог.
                  Так что предлагаю завершить дискуссию. Если вам нравится эта игрушка — не буду вас разубеждать. Это отличный способ выбросить кучу денег, лучше чем на новый смартфончик, чтобы птиц покидать и потупить в примитивные шутеры. Но для описанной задачи не то, что не оптимальный, а совершенно дурацкий способ.
                  • 0
                    Ладно, в печку игрушку эту. Что посоветуете вместо? Нужна и механика и мозг. Куда бежать, что смотреть?
                    • 0
                      Мозги высокого уровня под Linux — RPi, OdroidX, CubieBoard, PandaBoard. В зависимости от бюджета и усидчивости.
                      Управление всеми «мышцами»- исполнительными устройствами — STM32 или AVR Atmega если боитесь сложностей.
                      STM32 сам по себе имеет море готовых компактных плат, более компактных чем Mindstorms.
                      Есть готовые платы с 2.4-3.2" LCD с тачем за 30-50 баксов. FreeRtos или чистый проц — довольно легко стартовать.
                      CooCox IDE для быстрого старта или EmBlocks для более серьезного подхода. Обе бесплатны.
                      Исполнительные устройства и сенсоры — продаются на ebay и aliexpress за копейки — и датчики света и цвета и микрокамеры и сервоприводы от 5 баксов и до 200 за штуку разного размера, мощности и скорости. В качестве рамы — металлический конструктор из детского мира или пластиковый на любой вкус. Вариант — Стеклотекстолит и ножовка. Пенопласт и канцелярский нож.
                      Моторчики всех видов с гирбоксами и без, стоят тоже недорого. продаются на ebay, aliexpress, hobbyking.
                      Все это можно снабдить 10DOF платой за 15 баксов и будет вам сенсоры наклона, вибрации, давления, магнетометр. Только алгоритмы и математику добавляй. Это уж по мере наличия мозга.
                      За 15 тыр можно собрать шикарнейший комплект. Будет все. Можно с пайкой, можно без.
                      Есть и GPS и сонары и черта с рогами только нет. Хотя может и он найдется )
                    • +1
                      Вариант предложенный RaJa хорош, но возможно стоит подумать о перспективах, конечных целях и задачах. Если собираетесь решать более ресурсоемкие задачи такие, как визуальная одометрия, распознавание образов, то можно использовать ноутбук или аналогичные по производительности embedded системы в связке с ардуино либо STM32.
              • 0
                SLAM -он ведь не только визуальный бывает, впринципе простенький можно и на ардуину при желании вкорячить(смотрим например в сторону TinySLAM + какой-ниубдь ултразвуковой датчик расстояния).

                А вообще для «серьезной» домашней робототехники есть такое чудо, как Intel NUC. С Core i7 на борту есть где развернуться;)
                • 0
                  Ну я собственно и не предполагал использовать камеру для SLAM'а. По крайней мере на первом этапе.
                • 0
                  Ух ты! Intel NUC действительно стоящий аппарат. Во только не совсем понятно как быть с аудио выходом. Его как-то можно от туда извлечь?
                • 0
                  Хорошая мать, вот только где ее купить то?
                  • 0
                    На амазоне, например, продаются.
                    Да и в местных магазинах можно найти, если погуглить немного.
                    • 0
                      Не особенно то Intel D33217GKE продается. Только на одном из процов можно найти коробочку. А отдельно мать да и коробочку на этой матери тоже не найти
  • +1
    Лет восемь назад придумывал концепт: робот-мяч, оснащеный дебалансом для передвижения, различными датчиками передвижения, скоростей и ускорений для «слепого» ориентирования на местности + GPS, а также всенаправленные фотокамера и дальномер.
    techvesti.ru/files/images/dodeca.jpg

    Робот катается, записывая своё положение и что находится вокруг него, а на компьютере на основе этих данных можно легко построить подробную цветную трёхмерную модель окружающего пространства.

    Всё из описанного давно доступно, панорамные снимки в помещениях и на улице были бы куда более подробными.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое