Добрый день, уважаемые хабрачитатели!
Последние наблюдения и собственный опыт показали, что с подключением камеры Microsoft Kinect Xbox 360 для ее использования в ROS Indigo из под Ubuntu 14.04 часто возникают проблемы. В частности, при запуске ROS пакета openni_launch не удается определить устройство и выдается ошибка «No device connected». В этой статье я опишу свой пошаговый метод настройки окружения для использования Microsoft Kinect из ROS Indigo. Кто заинтересован, прошу под кат!
Об этом сенсоре уже подробно писали в статье. В двух словах, Microsoft Kinect это 3D (RGB-D, то есть, red, green, blue и depth) камера, основанная на технологии Structured light, которая позволяет получить карту глубины поверхностей объектов, попавших в поле зрения камеры. Карту глубины можно трансформировать в трехмерное «облако» точек, в котором каждая точка имеет точные координаты X, Y и Z в пространстве и в некоторых случаях цвет в формате RGB. «Облака» точек используются в задачах реконструкции объектов, построении карт местности в сервисной робототехнике, распознавании объектов и многих других задачах в области компьютерного зрения в 3D.
ROS предоставляет поддержку для сенсора Kinect. «Облако» точек, получаемое сенсором, можно визуально показать в программе rviz.
Для использования сенсора Kinect в ROS имеется специальные пакеты openni_launch и openni_camera.
Для начала необходимо установить библиотеку OpenNI, предназаначенную для ряда RGB-D сенсоров (Kinect, ASUS Xtion, PrimeSense).
Установим некоторые дополнительные пакеты, которые OpenNI требует для установки:
Теперь непосредственно установим OpenNI 1.5.4 из исходников:
Теперь скачаем библиотеку avin-KinectSensor для сенсора Kinect отсюда.
В зависимости от типа системы (32 или 64 бита) выберем соответствующий установочник. Для 32 битной системы выполним следующие шаги:
Для 64 битной системы выполним:
И наконец выполним установку:
Последнее что нам нужно сделать — это установить пакеты openni_launch и openni_camera, которые позволяют получать и работать с данными OpenNI-совместимых камер глубины в ROS. Установить эти пакеты очень просто:
Теперь все готово! Проверяем успешность установки. Запускаем в разных терминалах:
Установка аргумента depth_registration:=true указывает, что мы хотим включить OpenNI регистрацию и получать XYZRGB данные с камеры (глубину и цвет).
Для начала в rviz развернем секцию Global options в левой колонке Displays и поставим значение /camera_link для поля Fixed frame как на снимке:
Таким образом мы задали необходимую систему координат для корректного отображения данных с камеры Kinect.
В rviz создаем новый дисплей. Для этого нажимаем кнопку Add и выбираем тип дисплея PointCloud2 как на снимке:
Выбираем топик /camera/depth_registered/points для нового дисплея
После этого выбираем для поля Color Transformer значение «RGB8».
Теперь мы увидим подобную картину:
Значение «RGB8» позволяет отобразить цветное «облако точек», где каждая точка имеет координаты X, Y, Z и цвет RGB.
Хочу обратить ваше внимание, что Microsoft Kinect Xbox 360 работает только с USB 2.0. Подключение камеры через USB 3.0 может приводить к ошибке обнаружения устройства, о которой я говорил в самом начале статьи.
На официальном портале ROS есть туториалы по работе с данными RGB-D камер с помощью библиотеки Point Cloud Library. Эти туториалы дают всю необходимую информацию, достаточную для начала работы с «облаками точек».
Желаю вам удачи в использовании RGBD камер в ROS для решения своих задач компьютерного зрения!
Последние наблюдения и собственный опыт показали, что с подключением камеры Microsoft Kinect Xbox 360 для ее использования в ROS Indigo из под Ubuntu 14.04 часто возникают проблемы. В частности, при запуске ROS пакета openni_launch не удается определить устройство и выдается ошибка «No device connected». В этой статье я опишу свой пошаговый метод настройки окружения для использования Microsoft Kinect из ROS Indigo. Кто заинтересован, прошу под кат!
Камера Microsoft Kinect
Об этом сенсоре уже подробно писали в статье. В двух словах, Microsoft Kinect это 3D (RGB-D, то есть, red, green, blue и depth) камера, основанная на технологии Structured light, которая позволяет получить карту глубины поверхностей объектов, попавших в поле зрения камеры. Карту глубины можно трансформировать в трехмерное «облако» точек, в котором каждая точка имеет точные координаты X, Y и Z в пространстве и в некоторых случаях цвет в формате RGB. «Облака» точек используются в задачах реконструкции объектов, построении карт местности в сервисной робототехнике, распознавании объектов и многих других задачах в области компьютерного зрения в 3D.
ROS предоставляет поддержку для сенсора Kinect. «Облако» точек, получаемое сенсором, можно визуально показать в программе rviz.
Для использования сенсора Kinect в ROS имеется специальные пакеты openni_launch и openni_camera.
Установка драйвера для сенсора Microsoft Kinect
Для начала необходимо установить библиотеку OpenNI, предназаначенную для ряда RGB-D сенсоров (Kinect, ASUS Xtion, PrimeSense).
Установим некоторые дополнительные пакеты, которые OpenNI требует для установки:
sudo apt-get install git build-essential python libusb-1.0-0-dev freeglut3-dev openjdk-7-jdk
sudo apt-get install doxygen graphviz mono-complete
Теперь непосредственно установим OpenNI 1.5.4 из исходников:
git clone https://github.com/OpenNI/OpenNI.git
cd OpenNI
git checkout Unstable-1.5.4.0
cd Platform/Linux/CreateRedist
chmod +x RedistMaker
./RedistMaker
Теперь скачаем библиотеку avin-KinectSensor для сенсора Kinect отсюда.
unzip avin2-SensorKinect-v0.93-5.1.2.1-0-g15f1975.zip
cd avin2-SensorKinect-15f1975/Bin
В зависимости от типа системы (32 или 64 бита) выберем соответствующий установочник. Для 32 битной системы выполним следующие шаги:
tar -xjf SensorKinect093-Bin-Linux-x86-v5.1.2.1.tar.bz2
cd Sensor-Bin-Linux-x86-v5.1.2.1
Для 64 битной системы выполним:
tar -xjf SensorKinect093-Bin-Linux-x64-v5.1.2.1.tar.bz2
cd Sensor-Bin-Linux-x64-v5.1.2.1
И наконец выполним установку:
sudo ./install.sh
Установка openni_* пакетов
Последнее что нам нужно сделать — это установить пакеты openni_launch и openni_camera, которые позволяют получать и работать с данными OpenNI-совместимых камер глубины в ROS. Установить эти пакеты очень просто:
sudo apt-get install ros-indigo-openni-camera ros-indigo-openni-launch
Проверка установки драйверов
Теперь все готово! Проверяем успешность установки. Запускаем в разных терминалах:
roscore
roslaunch openni_launch openni.launch depth_registration:=true
rosrun rviz rviz
Установка аргумента depth_registration:=true указывает, что мы хотим включить OpenNI регистрацию и получать XYZRGB данные с камеры (глубину и цвет).
Для начала в rviz развернем секцию Global options в левой колонке Displays и поставим значение /camera_link для поля Fixed frame как на снимке:
Таким образом мы задали необходимую систему координат для корректного отображения данных с камеры Kinect.
В rviz создаем новый дисплей. Для этого нажимаем кнопку Add и выбираем тип дисплея PointCloud2 как на снимке:
Выбираем топик /camera/depth_registered/points для нового дисплея
После этого выбираем для поля Color Transformer значение «RGB8».
Теперь мы увидим подобную картину:
Значение «RGB8» позволяет отобразить цветное «облако точек», где каждая точка имеет координаты X, Y, Z и цвет RGB.
Хочу обратить ваше внимание, что Microsoft Kinect Xbox 360 работает только с USB 2.0. Подключение камеры через USB 3.0 может приводить к ошибке обнаружения устройства, о которой я говорил в самом начале статьи.
На официальном портале ROS есть туториалы по работе с данными RGB-D камер с помощью библиотеки Point Cloud Library. Эти туториалы дают всю необходимую информацию, достаточную для начала работы с «облаками точек».
Желаю вам удачи в использовании RGBD камер в ROS для решения своих задач компьютерного зрения!
Поделиться с друзьями
Комментарии (7)
Alex_ME
15.08.2016 14:13Хм… Я делал все куда проще. Вот тутя описал микро-гайд для товарища по разработке, все сводится к паре пакетов:
- ros-indigo-openni-camera
- ros-indigo-openni-launch
vovaekb90
16.08.2016 08:00+1Посмотрел ваш гайд. Если я правильно понял, установка OpenNI описывается здесь. Думаю, что установки библиотек libopenni0 и libopenni-dev может быть достаточно. Я сам не проверял, но возможно это альтернатива установке OpenNI из исходников.
Alex_ME
16.08.2016 12:021) они сначала поставили libopenni и dev
2) скачали исходники двух модулей ROS (openni-camera, openni-launch) и собрали catkin-ом.
я поступил проще — установил эти модули через apt-get (см. мое сообщение выше)
webzuweb
Отличный получился пост. Вы знаете как долго я искал эту информацию и именно Вы держали бубен, когда я в него бил.
Я рад, что
получилось от моих мозолей.
vovaekb90
Спасибо за поддержку! Самому пришлось искать эту информацию долго. А информация нужная.
NetBUG
А есть ли туториалы по использованию ROS для задач управления, в частности, активного SLAM?
Я столкнулся со странной проблемой: у меня получилось поднять всё «железо» и все нужные пакеты, однако я не вполне понимаю, что делать дальше. Большая часть руководств описывает библиотеки либо ручное управление, и я просто не очень понимаю, как люди используют ROS.
webzuweb
У меня та же самая проблема.
Везде можно найти уроки о том, что такое топики, как писать и читать, но нигде нет статьи как сделать первого робота на ROS.
Задача на поверхности:
Нужно сделать launcer, запуская который мы получим:
Получаем в ROS карту и отправлять на arduino сообщение go, пока впереди нет препятствий.