]> rtime.felk.cvut.cz Git - hubacji1/iamcar2.git/commitdiff
Refactor gen scenario script
authorJiri Vlasak <hubacji1@fel.cvut.cz>
Tue, 14 Mar 2023 17:34:12 +0000 (18:34 +0100)
committerJiri Vlasak <hubacji1@fel.cvut.cz>
Tue, 14 Mar 2023 17:34:12 +0000 (18:34 +0100)
- Rename random procedures.
- Re-use gen..at procedures in the random ones.

scripts/gen_scenario.py

index 37c8a002ba22a1b1ecd302ec9847a6ea6a8b63ab..e23875d651cb827e1313f59802cff0a8679a8531 100755 (executable)
@@ -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()}))