+#!/usr/bin/env python3
"""Generate simple JSON scenario.
The scenario contains at least:
- `obst` -- the list of (convex polygon) obstacles.
"""
-from json import dumps, loads
+from json import dumps
from math import cos, pi, sin
from random import random, uniform
+import sys
W = 1.625
L = 3.760
OBST_W = 2
OBST_COUNT = 8
+
def gen_init():
"""Generate car init position."""
# TODO if changed, change ``gen_slot`` accordingly
return (0, 0, 0)
+
+def gen_slot_at(x, y, h, parallel=True):
+ """Generate slot at specified coordinates."""
+ length = 5.3
+ width = 2.4
+ if parallel:
+ length = 6.5
+ width = 2.2
+ right = 1
+ if parallel:
+ return [
+ [
+ x + length/2 * cos(h - pi/2 * right),
+ y + length/2 * sin(h - pi/2 * right),
+ ],
+ [
+ x + width * cos(h) + length/2 * cos(h - pi/2 * right),
+ y + width * sin(h) + length/2 * sin(h - pi/2 * right),
+ ],
+ [
+ x + width * cos(h) + length/2 * cos(h + pi/2 * right),
+ y + width * sin(h) + length/2 * sin(h + pi/2 * right),
+ ],
+ [
+ x + length/2 * cos(h + pi/2 * right),
+ y + length/2 * sin(h + pi/2 * right),
+ ],
+ ]
+ else:
+ return [
+ [
+ x + width/2 * cos(h - pi/2 * right),
+ y + width/2 * sin(h - pi/2 * right),
+ ],
+ [
+ x + length * cos(h) + width/2 * cos(h - pi/2 * right),
+ y + length * sin(h) + width/2 * sin(h - pi/2 * right),
+ ],
+ [
+ x + length * cos(h) + width/2 * cos(h + pi/2 * right),
+ y + length * sin(h) + width/2 * sin(h + pi/2 * right),
+ ],
+ [
+ x + width/2 * cos(h + pi/2 * right),
+ y + width/2 * sin(h + pi/2 * right),
+ ],
+ ]
+
+
def gen_slot(l=5.3, w=2.4):
"""Generate parking slot."""
parallel = True if random() < 0.5 else False
],
]
+
+def gen_obst_at(x, y, h):
+ """Generate obstacle at specific coordinates."""
+ length = 0.5
+ width = 0.5
+ return [
+ [
+ x + width/2 * cos(h - pi/2) + length/2 * cos(h),
+ y + width/2 * sin(h - pi/2) + length/2 * sin(h),
+ ],
+ [
+ x + width/2 * cos(h - pi/2) - length/2 * cos(h),
+ y + width/2 * sin(h - pi/2) - length/2 * sin(h),
+ ],
+ [
+ x + width/2 * cos(h + pi/2) - length/2 * cos(h),
+ y + width/2 * sin(h + pi/2) - length/2 * sin(h),
+ ],
+ [
+ x + width/2 * cos(h + pi/2) + length/2 * cos(h),
+ y + width/2 * sin(h + pi/2) + length/2 * sin(h),
+ ],
+ [
+ x + width/2 * cos(h - pi/2) + length/2 * cos(h),
+ y + width/2 * sin(h - pi/2) + length/2 * sin(h),
+ ]]
+
+
def gen_obst():
"""Generate obstacles array."""
obstacles = []
])
return obstacles
+
+SCENARIOS = {
+ "pa01": {
+ "init": gen_init(),
+ "slot": gen_slot_at(15, 0, 0, True),
+ "obst": [gen_obst_at(p) for p in [[], [], []]]}}
+
if __name__ == "__main__":
- init = gen_init()
- slot = gen_slot()
- obst = gen_obst()
- print(dumps({
- "init": init,
- "slot": slot,
- "obst": obst,
- }))
+ sc = ""
+ if len(sys.argv) == 2:
+ sc = sys.argv[1]
+ if sc in SCENARIOS:
+ print(dumps(SCENARIOS()[sc]))
+ else:
+ print(dumps({
+ "init": gen_init(),
+ "slot": gen_slot(),
+ "obst": gen_obst()}))