Карты и ресурсы SUMO
Используйте ресурсы карты из sumo/assets/maps/, если они уже соответствуют карте CARLA. На этой странице описано создание новой дорожной сети и полигонов, а также проверка координат для YAML-файлов сценариев.
Подготовка среды преобразования
Запускайте вспомогательные скрипты из корня репозитория OpenCDA в Python-среде с CARLA 0.9.16, lxml и sumolib. Для создания сети дополнительно требуется дистрибутив SUMO, включая netconvert и его инструменты. По умолчанию исполняемый файл SUMO не устанавливается в контейнер OpenCDA.
Для временной среды преобразования в контейнере OpenCDA:
python -m venv --system-site-packages /tmp/cavise-map-tools
source /tmp/cavise-map-tools/bin/activate
python -m pip install eclipse-sumo==1.27.0
export SUMO_HOME="$(python -c 'import sumo; print(sumo.SUMO_HOME)')"
export PATH="$SUMO_HOME/bin:$PATH"
netconvert --version
Временная среда удаляется при пересоздании контейнера. Приведённые ниже команды сохраняют ресурсы в opencda/sumo-assets/, который Compose подключает из каталога хоста sumo/assets/. Задайте CARLA_HOST, как описано в Подключение из OpenCDA. Во время преобразования карт оставьте CARLA запущенной без активного сценария OpenCDA, поскольку инструменты преобразования могут загружать карты и продвигать мир по шагам.
Создание дорожной сети
В той же оболочке контейнера OpenCDA:
mkdir -p opencda/sumo-assets/maps/Town06
python scripts/netconvert_carla.py --from-carla \
--carla-host "$CARLA_HOST" --carla-map Town06 \
--output opencda/sumo-assets/maps/Town06/Town06.generated.net.xml
Отдельный суффикс .generated позволяет проверить результат до замены существующих ресурсов. Вместо --from-carla также можно передать локальный файл .xodr. Параметры скрипта описаны в Вспомогательные скрипты.
Перед использованием сети в эксперименте проверьте связность полос и светофоры в SUMO/netedit. Создавайте маршруты с ID рёбер этой сети.
Создание полигонов
Используйте созданную сеть для преобразования координат и обрезки:
python scripts/polyconvert_carla.py \
--net-file opencda/sumo-assets/maps/Town06/Town06.generated.net.xml \
--output opencda/sumo-assets/maps/Town06/Town06.generated.poly.xml \
--carla-host "$CARLA_HOST" --carla-map Town06
Укажите выбранный файл полигонов в .sumocfg сценария:
<additional-files value="../maps/Town06/Town06.generated.poly.xml"/>
Для ручного исправления откройте сценарий в netedit и переключитесь в режим полигонов. Включите заливку и замкнутую форму, задайте ID и тип, нарисуйте вершины и сохраните. Ниже показаны панель инструментов и параметры полигона из примера.
Получение координат сценария
Используйте наблюдателя CARLA, чтобы определить положение на дороге. Из оболочки контейнера OpenCDA:
python scripts/get_spectator_position.py --carla-host "$CARLA_HOST"
Чтобы переместить наблюдателя:
echo "10.0,20.0,50.0" | python scripts/set_spectator_position.py \
--carla-host "$CARLA_HOST"
Выведенное преобразование соответствует положению камеры. Адаптируйте его к допустимой точке появления транспортного средства на дороге. Не копируйте высоту камеры в высоту появления транспортного средства. Проверьте соглашение о позе YAML для выбранного сценария.