Как сопоставить недвоичную сетку занятости с несколькими значениями на карте стоимости в ROS? - PullRequest
3 голосов
/ 28 мая 2020

Я ищу способ сопоставить недвоичную сетку занятости с глобальной картой затрат. Сетка занятости имеет значения -1 для неопределенных, 0 для отсутствия столкновений и 1-100 для зон столкновений. Здесь есть аналогичный вопрос, для которого данный ответ не предлагает конкретного решения:

https://answers.ros.org/question/335530/what-range-of-costs-does-ros-navigation-support/

Для лучшего обзора:

Я использую ROS Melodi c.

Моя сетка занятости выглядит так: Изображение сетки занятости

Мой global_costmap_params.yaml выглядит так:

global_costmap:
plugins: 
- {name: static_layer, type: "costmap_2d::StaticLayer"}
- {name: inflation_layer, type: "costmap_2d::InflationLayer"}
global_frame: base_link
map_topic: "prediction_occ_grid"
update_frequency: 10.0
publish_frequency: 10.0
rolling_window: true
always_send_full_costmap: true
height: 26.9
width: 36.4

Обратите внимание, что я чистый новичок в картах затрат, поэтому может оказаться, что это вообще не имеет смысла!

Использование данного global_costmap_params.yaml дает следующую карту затрат: Изображение итоговой глобальной карты затрат

Как вы можете видеть, карта затрат «игнорирует» области столкновения и отображает их с теми же затратами, что и область пути без столкновений. Есть ли способ изменить параметр costmap_params, чтобы он правильно отображал сетку занятости?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 05 июня 2020

Оказалось, что плагин каким-то образом не может прочитать данные параметры из global_costmap_params.yaml (есть идеи о том, в чем может быть причина или как это исправить?).

Я решил проблему, клонировав репозиторий навигации в папку catkin_ws / sr c (вместо установки навигации через sudo apt-get install ros-melodi c -navigation) и изменить значение по умолчанию для параметра trinary_costmap внутри costmap_2d / plugins / static_layer. cpp до 'false' .

Теперь он может правильно отображать все промежуточные значения сетки занятости.

Изменить:

Я понял, что это связано с проблемой пространства имен. Поскольку trinary_costmap является внутренним параметром подключаемого модуля для static_layer-plugin, создается впечатление, что пространство имен должно быть указано явно.

Следовательно, установка параметра в global_costmap_params.yaml работает следующим образом:

/ move_base / global_costmap / static_layer / trinary_costmap: false

1 голос
/ 29 мая 2020

В частности, я бы посмотрел на параметры карты затрат для плагинов, в основном плагины static_map и obstacles. Возможно, вы хотите, чтобы параметр staticmap trinary_costmap был истинным, чтобы иметь полную шкалу значений в карте затрат. Те, что указаны в obstacles, могут изменить то, что вы ожидаете увидеть, с несколькими слоями или входными данными.

Я бы также посмотрел на пакет Clearpath Husky husky_navigation в качестве хорошего примера, например. move_base.launch файл. Все параметры записываются в каталог config/ и загружаются rosparam в узел move_base. Некоторые детали: если вы составляете локальную карту затрат, которая перемещается вместе с роботом, вы не хотите отслеживать пустое пространство, вам нужно скользящее окно и использовать слой препятствий вместо слоя stati c. ; для глобального вы бы отслеживали все пространство, но не перемещали бы окно относительно робота, и вы бы использовали бы карту stati c.

Я думаю, что у вас есть одна проблема в потоке данных . Как Ros (и большинство людей из-за этого) склоняется к тому, чтобы иметь начальную / stati c карту, загруженную с самого начала (map_server) для amcl и move_base, обновите оба с помощью LaserScan s & / или PointCloud s, и тогда у вас останется только результат amcl tfs кадра и оценка локальной позиции, и, подав его в узел move_base, вам понадобится только goal. Чтобы использовать сообщение карты occ_grid для обновления amcl, например, вам нужно изменить параметр use_map_topic.

Изменить: в случае, если map_server было тем, что вам действительно нужно, вот пример использования, который я взял из amcl_demo.launch:

<!-- Run the map server -->
<arg name="map_file" default="$(find husky_navigation)/maps/playpen_map.yaml"/>
<node name="map_server" pkg="map_server" type="map_server" args="$(arg map_file)" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...