
Для меня,
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
Комментарии (3)
RSS свернуть / развернутьaivanov
aivanov
noonv
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.