Для меня, Kinect — это, в первую очередь, интересный датчик для технического зрения роботов. И хотя, с ним можно работать напрямую из-под OpenCV или PCL, но больший интерес представляет работа с Kinect из-под операционной системы для роботов — ROS.
lsusb
Подключим Kinect к USB и посмотрим как он определится системой.
Для этого выполним команду
lsusb
... Bus 002 Device 010: ID 045e:02ae Microsoft Corp. Bus 002 Device 009: ID 045e:02ad Microsoft Corp. Bus 002 Device 008: ID 045e:02b0 Microsoft Corp. ...
ага — вот он 🙂
подробнее можно посмотреть если задать программе параметр -v:
lsusb -v
Bus 002 Device 010: ID 045e:02ae Microsoft Corp. ... iProduct 1 Xbox NUI Camera ... Self Powered Bus 002 Device 009: ID 045e:02ad Microsoft Corp. ... iProduct 2 Xbox NUI Audio ... Self Powered Bus 002 Device 008: ID 045e:02b0 Microsoft Corp. ... iProduct 2 Xbox NUI Motor ... (Bus Powered)
Установка
Установка стека ROS для работы с Kinect, очень проста. Если у вас уже установлен ROS, то нужно выполнить команды:
sudo apt-get update
— для обновления списка пакетов
Остаётся установить стек openni-kinect:
для ROS версии Diamondback:
sudo apt-get install ros-diamondback-openni-kinect
, соответственно для ROS версии Electric:
sudo apt-get install ros-electric-openni-kinect
Другой вариант — выполнить устновку стека для робота на базе iRobot Create и Kinect — Turtlebot:
sudo apt-get install ros-electric-turtlebot-robot
— я остановился именно на этом варианте (и рекомендую именно его), хотя бы потому, что в стеке Turtlebot-а есть полезный пакет pointcloud_to_laserscan, который преобразует облако точек, получаемое от сенсора Kinect в данные лазерного сканера (Fake Laser), что позволяет использовать готовые алгоритмы SLAM.
pointcloud_to_laserscan — конвертирует трёхмерное облако точек (3D Point Cloud) в двумерные данные лазерного сканера (2D laser scan). Это является полезным для использования устройств типа Kinect-а, в роли лазерного сканера для алгоритмов, требующих двумерные данные (2D-based algorithms) (например, SLAM на основе лазерных сканеров (laser-based SLAM)).
Мне кажется, что возможность преобразований одного типа данных в другой является очень мощной фишкой ROS-а, позволяющей использовать разные варианты и типы сенсоров, но обрабатывая их данные одним готовым алгоритмом (ключевая идея ROS).
В данном случае, логика преобразования очень проста — из всего облака точек, выбирается горизонтальный отрезок, в столбцах которого выбирается ближайшее расстояние (глубина).
Проверка
После устновки пакетов и подключения сенсора, можем проверить его работу.
Для этого:
в одном терминале запускаем roscore
а в другом файл запуска openni.launch:
roslaunch openni_launch openni.launch
запустим новый терминал и проверим какие топики есть в системе, командой:
rostopic list
получим вот такую портянку:
/camera/depth/camera_info /camera/depth/disparity /camera/depth/image /camera/depth/image/compressed /camera/depth/image/compressed/parameter_descriptions /camera/depth/image/compressed/parameter_updates /camera/depth/image/theora /camera/depth/image/theora/parameter_descriptions /camera/depth/image/theora/parameter_updates /camera/depth/image_raw /camera/depth/image_raw/compressed /camera/depth/image_raw/compressed/parameter_descriptions /camera/depth/image_raw/compressed/parameter_updates /camera/depth/image_raw/theora /camera/depth/image_raw/theora/parameter_descriptions /camera/depth/image_raw/theora/parameter_updates /camera/depth/image_rect /camera/depth/image_rect/compressed /camera/depth/image_rect/compressed/parameter_descriptions /camera/depth/image_rect/compressed/parameter_updates /camera/depth/image_rect/theora /camera/depth/image_rect/theora/parameter_descriptions /camera/depth/image_rect/theora/parameter_updates /camera/depth/image_rect_raw /camera/depth/image_rect_raw/compressed /camera/depth/image_rect_raw/compressed/parameter_descriptions /camera/depth/image_rect_raw/compressed/parameter_updates /camera/depth/image_rect_raw/theora /camera/depth/image_rect_raw/theora/parameter_descriptions /camera/depth/image_rect_raw/theora/parameter_updates /camera/depth/points /camera/depth/rectify_depth/parameter_descriptions /camera/depth/rectify_depth/parameter_updates /camera/depth_registered/camera_info /camera/depth_registered/disparity /camera/depth_registered/image /camera/depth_registered/image/compressed /camera/depth_registered/image/compressed/parameter_descriptions /camera/depth_registered/image/compressed/parameter_updates /camera/depth_registered/image/theora /camera/depth_registered/image/theora/parameter_descriptions /camera/depth_registered/image/theora/parameter_updates /camera/depth_registered/image_raw /camera/depth_registered/image_raw/compressed /camera/depth_registered/image_raw/compressed/parameter_descriptions /camera/depth_registered/image_raw/compressed/parameter_updates /camera/depth_registered/image_raw/theora /camera/depth_registered/image_raw/theora/parameter_descriptions /camera/depth_registered/image_raw/theora/parameter_updates /camera/depth_registered/image_rect /camera/depth_registered/image_rect/compressed /camera/depth_registered/image_rect/compressed/parameter_descriptions /camera/depth_registered/image_rect/compressed/parameter_updates /camera/depth_registered/image_rect/theora /camera/depth_registered/image_rect/theora/parameter_descriptions /camera/depth_registered/image_rect/theora/parameter_updates /camera/depth_registered/image_rect_raw /camera/depth_registered/image_rect_raw/compressed /camera/depth_registered/image_rect_raw/compressed/parameter_descriptions /camera/depth_registered/image_rect_raw/compressed/parameter_updates /camera/depth_registered/image_rect_raw/theora /camera/depth_registered/image_rect_raw/theora/parameter_descriptions /camera/depth_registered/image_rect_raw/theora/parameter_updates /camera/depth_registered/points /camera/depth_registered/rectify_depth/parameter_descriptions /camera/depth_registered/rectify_depth/parameter_updates /camera/driver/parameter_descriptions /camera/driver/parameter_updates /camera/ir/camera_info /camera/ir/image_raw /camera/ir/image_raw/compressed /camera/ir/image_raw/compressed/parameter_descriptions /camera/ir/image_raw/compressed/parameter_updates /camera/ir/image_raw/theora /camera/ir/image_raw/theora/parameter_descriptions /camera/ir/image_raw/theora/parameter_updates /camera/ir/image_rect /camera/ir/image_rect/compressed /camera/ir/image_rect/compressed/parameter_descriptions /camera/ir/image_rect/compressed/parameter_updates /camera/ir/image_rect/theora /camera/ir/image_rect/theora/parameter_descriptions /camera/ir/image_rect/theora/parameter_updates /camera/ir/rectify_ir/parameter_descriptions /camera/ir/rectify_ir/parameter_updates /camera/rgb/camera_info /camera/rgb/debayer/parameter_descriptions /camera/rgb/debayer/parameter_updates /camera/rgb/image_color /camera/rgb/image_color/compressed /camera/rgb/image_color/compressed/parameter_descriptions /camera/rgb/image_color/compressed/parameter_updates /camera/rgb/image_color/theora /camera/rgb/image_color/theora/parameter_descriptions /camera/rgb/image_color/theora/parameter_updates /camera/rgb/image_mono /camera/rgb/image_mono/compressed /camera/rgb/image_mono/compressed/parameter_descriptions /camera/rgb/image_mono/compressed/parameter_updates /camera/rgb/image_mono/theora /camera/rgb/image_mono/theora/parameter_descriptions /camera/rgb/image_mono/theora/parameter_updates /camera/rgb/image_raw /camera/rgb/image_raw/compressed /camera/rgb/image_raw/compressed/parameter_descriptions /camera/rgb/image_raw/compressed/parameter_updates /camera/rgb/image_raw/theora /camera/rgb/image_raw/theora/parameter_descriptions /camera/rgb/image_raw/theora/parameter_updates /camera/rgb/image_rect /camera/rgb/image_rect/compressed /camera/rgb/image_rect/compressed/parameter_descriptions /camera/rgb/image_rect/compressed/parameter_updates /camera/rgb/image_rect/theora /camera/rgb/image_rect/theora/parameter_descriptions /camera/rgb/image_rect/theora/parameter_updates /camera/rgb/image_rect_color /camera/rgb/image_rect_color/compressed /camera/rgb/image_rect_color/compressed/parameter_descriptions /camera/rgb/image_rect_color/compressed/parameter_updates /camera/rgb/image_rect_color/theora /camera/rgb/image_rect_color/theora/parameter_descriptions /camera/rgb/image_rect_color/theora/parameter_updates /camera/rgb/rectify_color/parameter_descriptions /camera/rgb/rectify_color/parameter_updates /camera/rgb/rectify_mono/parameter_descriptions /camera/rgb/rectify_mono/parameter_updates /rosout /rosout_agg /tf
О-го сколько всего!
Попробуем посмотреть картинку с RGB-камеры. Для этого, воспользуемся программой image_view, которой укажем интересующее нас название топика:
rosrun image_view image_view image:=/camera/rgb/image_color
в другом терминале, запустим ту же утилиту, но с запросом карты глубины:
rosrun image_view image_view image:=/camera/depth/image
Можно себя поздравить — сенсор работает 🙂
rviz
Но намного удобнее (проще и нагляднее) использовать для таких целей мощную программу визуализации — rviz
Остановим image_view, нажав Ctrl+C в соответствующих терминалах.
И запустим rviz:
rosrun rviz rviz
Для начала работы, необходимо указать программе базовую систему отсчёта.
В левой части окна rviz, выводятся текущие параметры визуализации.
В самом верху находятся глобальные настройки:
.Global Options
щёлкаем напротив Fixed Frame и в появившемся окошке доступных систем отсчёта указываем
/camera_link
Теперь можно добавлять визуализацию 🙂
Щёлкаем внизу на кнопке Add и из списка объектов визуализации выбираем камеру:
Camera
Появится пустое окошко, а в области параметров появятся параметры камеры. Остаётся выбрать топик, картинки которого мы хотим посмотреть.
Щёлкаем напротив Image Topic и получаем окошко со списком топиков, которые публикуют сообщения типа image.
Например, выберем ИК-картинку:
/camera/ir/image_rect
Отключим показ картинки, просто сняв галочку напротив Camera в области параметров.
И добавим облако точек, которое выдаётся топиком
/camera/depth/points
Супер!
но визуализация подтормаживает 🙁
далее: Преобразование облака точек в данные лазерного дальномера
Ссылки
http://www.ros.org/wiki/kinect
http://www.ros.org/wiki/openni_kinect
ROS OpenNI is an open source project focused on the integration of the PrimeSense sensors with ROS.
http://www.ros.org/wiki/openni_camera
http://www.ros.org/wiki/openni_tracker
http://www.ros.org/wiki/turtlebot
http://www.ros.org/wiki/pointcloud_to_laserscan
http://www.ros.org/wiki/rviz
Шпаргалка:
Установка:
ROS Diamondback
sudo apt-get install ros-diamondback-openni-kinect
ROS Electric
sudo apt-get install ros-electric-openni-kinect
или
sudo apt-get install ros-electric-turtlebot-robot
Проверка работы:
roslaunch openni_launch openni.launch rosrun image_view image_view image:=/camera/rgb/image_color rosrun rviz rviz
По теме
Что же такое ROS?
Юбилей Kinect-а
Kinect — начало работы — настройка OpenCV
0 комментариев на «“Работа с Kinect под ROS”»
молодчина! поздравляю! так держать!
а вот елку уже пора убирать))
уже давно убрана 🙂