Для меня, — это, в первую очередь, интересный датчик для роботов. И хотя, с ним можно работать напрямую из-под или , но больший интерес представляет работа с Kinect из-под операционной системы для роботов — .
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:
Другой вариант — выполнить устновку стека для робота на базе Create и Kinect — :
sudo apt-get install ros-electric-turtlebot-robot
— я остановился именно на этом варианте (и рекомендую именно его), хотя бы потому, что в -а есть полезный пакет , который преобразует , получаемое от сенсора Kinect в данные лазерного сканера (Fake Laser), что позволяет использовать готовые алгоритмы .
— конвертирует трёхмерное облако точек (3D Point Cloud) в двумерные данные сканера (2D laser scan). Это является полезным для использования устройств типа Kinect-а, в роли лазерного сканера для алгоритмов, требующих двумерные данные (2D-based algorithms) (например, на основе лазерных сканеров (laser-based SLAM)).
Мне кажется, что возможность преобразований одного типа данных в другой является очень ROS-а, позволяющей использовать разные варианты и типы сенсоров, но обрабатывая их данные одним готовым алгоритмом (ключевая идея ROS).
В данном случае, логика преобразования очень проста — из всего облака точек, выбирается горизонтальный отрезок, в столбцах которого выбирается ближайшее расстояние (глубина).
Проверка
После устновки пакетов и подключения сенсора, можем проверить его работу.
Для этого:
в одном терминале запускаем roscore
а в другом файл запуска openni.launch:
roslaunch openni_launch openni.launch
запустим новый терминал и проверим какие топики есть в системе, командой:
Но намного удобнее (проще и нагляднее) использовать для таких целей мощную программу визуализации —
Остановим 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
Супер!
но визуализация подтормаживает :(
далее:
Ссылки:
ROS OpenNI is an open source project focused on the integration of the PrimeSense sensors with ROS.
Комментарии (3)
RSS свернуть / развернутьaivanov
aivanov
noonv
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.