donkeycar-rl-autoresearch/agent/park_at_start.py

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)