8.3.2 Избегание препятствий с использованием встроенной камеры в качестве искусственного лазера

В нашем последнем тесте мы будем использовать внутреннюю камеру, такую как Kinect или Xtion Pro, чтобы эмулировать своего рода поддельный лазерный сканер для обнаружения препятствий, чтобы move_base мог планировать путь вокруг них, направляя робота к цели. Если вы посмотрите на файл параметров costmap_common_params.yaml в каталоге rbx1_nav / config / turtlebot, вы увидите следующую пару строк:

observation_sources: scan

scan: {data_type: LaserScan, topic: /scan, marking: true, clearing: true, expected_update_rate: 0}

Первая строка дает указание базовому локальному планировщику ожидать данные датчика от источника, называемого «сканирование», а вторая строка указывает, что источник «сканирования» относится к типу LaserScan, и он публикует свои данные в теме / scan. Установка флагов, отмечающих и очищающих True, означает, что лазерные данные могут использоваться для маркировки областей локальной карты затрат как занятых или свободных по мере движения робота.

Expected_update_rate определяет, как часто мы должны ожидать чтения от сканирования. Значение 0 допускает бесконечное время между показаниями и позволяет нам использовать стек навигации с активным лазерным сканером или без него. Однако, если вы обычно управляете своим роботом, используя лазерный сканер или поддельный лазер, описанные здесь, лучше установить это значение примерно равным 0,3, чтобы стек навигации остановил робота, если лазерный сканер перестанет работать.

Следующие шаги должны работать, если вы используете оригинальный TurtleBot. Если драйверы робота еще не запущены, запустите их сейчас:

$ roslaunch rbx1_bringup turtlebot_minimal_create.launch

(Или используйте свой собственный файл запуска, если вы создали его для хранения параметров калибровки.)

Убедитесь, что ваш Kinect или Xtion подключен к порту USB на роботе, затем войдите в ноутбук TurtleBot и загрузите соответствующий драйвер камеры. Если у вас есть Microsoft Kinect, используйте драйвер камеры freenect следующим образом:

$ roslaunch freenect_launch freenect-registered-xyzrgb.launch

Если у вас есть камера Asus Xtion, Xtion Pro или Primesense 1.08 / 1.09, используйте драйвер openni2 следующим образом:

$ roslaunch openni2_launch openni2.launch depth_registration:=true

Драйвер freenect или openni2 подключается к камере и публикует внутренние данные по теме / camera/depth_registered/image_rect. Чтобы превратить изображение глубины в эквивалентное лазерное сканирование, запустите depthimage_to_laserscan, используя файл запуска, включенный в пакет rbx1_bringup:

$ roslaunch rbx1_bringup depthimage_to_laserscan.launch

Этот файл запуска настраивает узел deepimage_to_laserscan для подписки на тему / camera / deep_registered / image_rect и публикации поддельных сообщений о лазерном сканировании в теме / scan.

Далее запустите узел TurtleBot move_base с пустой картой. ПРИМЕЧАНИЕ. Это файл запуска, отличный от того, который мы использовали для смоделированного робота. Этот конкретный файл запуска загружает набор параметров навигации, которые должны довольно хорошо работать с оригинальным TurtleBot.

$ roslaunch rbx1_nav tb_move_base_blank_map.launch

Если вы уже используете RViz, закройте его и запустите снова с помощью файла конфигурации nav_obstacles.rviz:

$ rosrun rviz rviz -d `rospack find rbx1_nav`/nav_obstacles.rviz

Если в диапазоне камеры есть хотя бы один объект, то лазерное сканирование должно отображаться в RViz. Файл конфигурации (nav_obstacles.rviz), который мы используем для RViz, включает в себя отображение Laser Scan, которое по умолчанию установлено в теме / scan. Вы можете убедиться в этом, прокрутив панель «Дисплеи» слева от RViz. Голубые области вокруг лазерного сканирования обусловлены отображением препятствий, которое подписывается на topic / move_base / local_costmap / costmap и отражает параметр радиуса обхода, который мы установили в файле common_costmap_params.yaml, чтобы обеспечить буфер безопасности вокруг препятствий.

Итак, теперь мы готовы проверить, насколько хорошо робот может избегать препятствий на пути к цели. Выберите точку в нескольких метрах от робота и установите 2D Nav Nav Goal в RViz, используя мышь, как мы делали ранее. Когда робот доберется до цели, встаньте на его пути в нескольких футах от него. Как только вы входите в вид (поддельного) лазерного сканирования, робот должен повернуться, чтобы обойти вас, а затем перейти к месту цели.

В зависимости от скорости компьютера робота можно заметить, что робот приближается к ногам довольно близко даже при радиусе обхода 0,5. Для этого есть две возможные причины. Первый - узкое поле зрения камер Kinect или Xtion - около 57 градусов. Так что когда робот начинает двигаться мимо препятствия, объект быстро выходит из поля зрения, и планировщик пути может повернуть назад к цели. Во-вторых, обе камеры RGB-D слепы на расстоянии в пределах около 50 см (около 2 футов) от проектора. Это означает, что препятствие может быть полностью невидимым, даже если оно расположено непосредственно перед роботом. Настоящий лазерный сканер, такой как Hokuyo или тот, который можно найти на Neato XV-11, имеет гораздо более широкое поле зрения (240 - 360 градусов) и может воспринимать объекты с расстояния до нескольких сантиметров

Last updated