71 lines
2.5 KiB
Python
71 lines
2.5 KiB
Python
"""
|
|
Park at Start — loads a track and holds the car at the starting line for screenshots.
|
|
|
|
Usage:
|
|
python3 park_at_start.py --track generated_road
|
|
python3 park_at_start.py --track generated_track
|
|
python3 park_at_start.py --track mountain_track
|
|
python3 park_at_start.py --track warehouse
|
|
python3 park_at_start.py --track sparkfun_avc
|
|
python3 park_at_start.py --track mini_monaco
|
|
python3 park_at_start.py --track warren
|
|
python3 park_at_start.py --track roboracingleague_1
|
|
python3 park_at_start.py --track waveshare
|
|
python3 park_at_start.py --track circuit_launch
|
|
|
|
The car will sit still at the starting line.
|
|
Press Ctrl+C when done with screenshot. Script will clean up automatically.
|
|
"""
|
|
|
|
import time
|
|
import sys
|
|
import argparse
|
|
import gymnasium as gym
|
|
import gym_donkeycar
|
|
from track_switcher import switch_track
|
|
|
|
TRACK_MAP = {
|
|
'generated_road': 'donkey-generated-roads-v0',
|
|
'generated_track': 'donkey-generated-track-v0',
|
|
'mountain_track': 'donkey-mountain-track-v0',
|
|
'warehouse': 'donkey-warehouse-v0',
|
|
'sparkfun_avc': 'donkey-avc-sparkfun-v0',
|
|
'mini_monaco': 'donkey-minimonaco-track-v0',
|
|
'warren': 'donkey-warren-track-v0',
|
|
'roboracingleague_1': 'donkey-roboracingleague-track-v0',
|
|
'waveshare': 'donkey-waveshare-v0',
|
|
'circuit_launch': 'donkey-circuit-launch-track-v0',
|
|
}
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--track', required=True, choices=list(TRACK_MAP.keys()),
|
|
help='Track name to load')
|
|
parser.add_argument('--current', default='donkey-generated-roads-v0',
|
|
help='Current env ID (to exit from)')
|
|
args = parser.parse_args()
|
|
|
|
env_id = TRACK_MAP[args.track]
|
|
print(f'\n[Park] Loading track: {args.track} ({env_id})', flush=True)
|
|
|
|
env = switch_track(target_env_id=env_id, current_env_id=args.current)
|
|
obs, info = env.reset()
|
|
|
|
print(f'\n[Park] ✅ Car is at the starting line on: {args.track}', flush=True)
|
|
print(f'[Park] Take your screenshot now!', flush=True)
|
|
print(f'[Park] Press Ctrl+C when done.\n', flush=True)
|
|
|
|
# Hold the car still with zero throttle/steer
|
|
try:
|
|
import numpy as np
|
|
while True:
|
|
action = env.action_space.sample() * 0.0 # all zeros = parked
|
|
env.step(action)
|
|
time.sleep(0.1)
|
|
except KeyboardInterrupt:
|
|
print('\n[Park] Exiting...', flush=True)
|
|
finally:
|
|
env.unwrapped.viewer.exit_scene()
|
|
time.sleep(1)
|
|
env.close()
|
|
print('[Park] Done. Sim returned to main menu.', flush=True)
|