From 455e5924d9980144a037d092574cebb89c4ce6b4 Mon Sep 17 00:00:00 2001 From: Jiri Vlasak Date: Tue, 14 Mar 2023 18:34:12 +0100 Subject: [PATCH] Refactor gen scenario script - Rename random procedures. - Re-use gen..at procedures in the random ones. --- scripts/gen_scenario.py | 120 +++++++++------------------------------- 1 file changed, 26 insertions(+), 94 deletions(-) diff --git a/scripts/gen_scenario.py b/scripts/gen_scenario.py index 37c8a00..e23875d 100755 --- a/scripts/gen_scenario.py +++ b/scripts/gen_scenario.py @@ -26,12 +26,6 @@ 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 @@ -80,66 +74,8 @@ def gen_slot_at(x, y, h, parallel=True): ] -def gen_slot(l=5.3, w=2.4): - """Generate parking slot.""" - parallel = True if random() < 0.5 else False - if parallel and l == 5.3 and w == 2.4: - l = 6.5 - w = 2.2 - elif parallel: - ol = l - l = w - w = ol - right = 1.0 if random() < 0.5 else -1.0 - r = SLOT_RADI - angl = uniform(0, 2 * pi) - x = r * cos(angl) - y = r * sin(angl) - h = uniform(0, 2 * pi) - if parallel: - return [ - [ - x + l/2 * cos(h - pi/2 * right), - y + l/2 * sin(h - pi/2 * right), - ], - [ - x + w * cos(h) + l/2 * cos(h - pi/2 * right), - y + w * sin(h) + l/2 * sin(h - pi/2 * right), - ], - [ - x + w * cos(h) + l/2 * cos(h + pi/2 * right), - y + w * sin(h) + l/2 * sin(h + pi/2 * right), - ], - [ - x + l/2 * cos(h + pi/2 * right), - y + l/2 * sin(h + pi/2 * right), - ], - ] - else: - return [ - [ - x + w/2 * cos(h - pi/2 * right), - y + w/2 * sin(h - pi/2 * right), - ], - [ - x + l * cos(h) + w/2 * cos(h - pi/2 * right), - y + l * sin(h) + w/2 * sin(h - pi/2 * right), - ], - [ - x + l * cos(h) + w/2 * cos(h + pi/2 * right), - y + l * sin(h) + w/2 * sin(h + pi/2 * right), - ], - [ - x + w/2 * cos(h + pi/2 * right), - y + w/2 * sin(h + pi/2 * right), - ], - ] - - -def gen_obst_at(x, y, h): +def gen_obst_at(x, y, h, length=0.5, width=0.5): """Generate obstacle at specific coordinates.""" - length = 0.5 - width = 0.5 return [ [ x + width/2 * cos(h - pi/2) + length/2 * cos(h), @@ -163,40 +99,36 @@ def gen_obst_at(x, y, h): ]] -def gen_obst(): - """Generate obstacles array.""" +def random_init(): + """Generate car init pose. + + It should be random, but now it is just [0, 0, 0]. + """ + return [0, 0, 0] + + +def random_slot(): + """Generate random parking slot.""" + parallel = True if random() < 0.5 else False + r = SLOT_RADI + angl = uniform(0, 2 * pi) + x = r * cos(angl) + y = r * sin(angl) + h = uniform(0, 2 * pi) + return gen_slot_at(x, y, h, parallel) + + +def random_obstacles(): + """Generate a list of random obstacles.""" obstacles = [] min_r = ((W/2)**2 + ((WB+L)/2)**2)**0.5 + (OBST_W**2 + OBST_L**2)**0.5 / 2 for i in range(OBST_COUNT): - l = OBST_L - w = OBST_W angl = uniform(0, 2 * pi) r = uniform(min_r**2, (SLOT_RADI - 5)**2)**0.5 x = r * cos(angl) y = r * sin(angl) h = uniform(0, 2 * pi) - obstacles.append([ - [ - x + w/2 * cos(h - pi/2) + l/2 * cos(h), - y + w/2 * sin(h - pi/2) + l/2 * sin(h), - ], - [ - x + w/2 * cos(h - pi/2) - l/2 * cos(h), - y + w/2 * sin(h - pi/2) - l/2 * sin(h), - ], - [ - x + w/2 * cos(h + pi/2) - l/2 * cos(h), - y + w/2 * sin(h + pi/2) - l/2 * sin(h), - ], - [ - x + w/2 * cos(h + pi/2) + l/2 * cos(h), - y + w/2 * sin(h + pi/2) + l/2 * sin(h), - ], - [ - x + w/2 * cos(h - pi/2) + l/2 * cos(h), - y + w/2 * sin(h - pi/2) + l/2 * sin(h), - ], - ]) + obstacles.append(gen_obst_at(x, y, h, OBST_L, OBST_W)) return obstacles @@ -216,6 +148,6 @@ if __name__ == "__main__": print(dumps(SCENARIOS[sc])) else: print(dumps({ - "init": gen_init(), - "slot": gen_slot(), - "obst": gen_obst()})) + "init": random_init(), + "slot": random_slot(), + "obst": random_obstacles()})) -- 2.39.2