carla/PythonAPI/util/extract_spawn_points.py

94 lines
2.7 KiB
Python

""" CARLA map spawn points extractor """
from __future__ import print_function
import argparse
import logging
import glob
import os
import sys
try:
sys.path.append(glob.glob('../carla/dist/carla-*%d.%d-%s.egg' % (
sys.version_info.major,
sys.version_info.minor,
'win-amd64' if os.name == 'nt' else 'linux-x86_64'))[0])
except IndexError:
pass
import carla
def extract(args):
try:
client = carla.Client(args.host, args.port, worker_threads=1)
client.set_timeout(2.0)
world = client.get_world()
try:
_map = world.get_map()
except RuntimeError as error:
logging.info('RuntimeError: %s', error)
sys.exit(1)
if not _map.get_spawn_points():
logging.info('There are no spawn points available in your map/town.')
logging.info('Please add some Vehicle Spawn Point to your UE4 scene.')
sys.exit(1)
spawn_points = _map.get_spawn_points()
with open(args.output_dir + "/spawn_points.csv", "w", encoding='utf8') as file:
index = 0
for index, spawn_point in enumerate(spawn_points):
file.write(f'{index},{spawn_point.location.x},{spawn_point.location.y},{spawn_point.location.z}\n')
finally:
world = None
# ==============================================================================
# -- main() --------------------------------------------------------------------
# ==============================================================================
def main():
argparser = argparse.ArgumentParser(
description='CARLA map spawn points extractor')
argparser.add_argument(
'--host',
metavar='H',
default='127.0.0.1',
help='IP of the host server (default: 127.0.0.1)')
argparser.add_argument(
'-p', '--port',
metavar='P',
default=2000,
type=int,
help='TCP port to listen to (default: 2000)')
argparser.add_argument(
'-o', '--output-dir',
required=True,
help='Output directory path for extraction result')
args = argparser.parse_args()
if args.output_dir is None or not os.path.exists(args.output_dir):
print('output directory not found.')
logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO)
logging.info('listening to server %s:%s', args.host, args.port)
print(__doc__)
try:
extract(args)
except:
print('\nAn error has occurred in extraction.')
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
print('\nCancelled by user. Bye!')
except RuntimeError as e:
print(e)