Download tests/test_segments.py from kimjunhan/vkgs-sim: direct link, hf CLI and curl.
- Browser
- Download file 2.59 kB
-
https://huggingface.co/kimjunhan/vkgs-sim/resolve/main/tests/test_segments.py
- Command line
-
hf download hf://kimjunhan/vkgs-sim/tests/test_segments.py
-
curl -L -o test_segments.py https://huggingface.co/kimjunhan/vkgs-sim/resolve/main/tests/test_segments.py
2.59 kB
| """κΈ΄ μ¬μ κ΅¬κ° λΆν (nusim.recon.batch.plan_segments) κ³Ό μ¦κ°μ νλ μ λ°°μ (nusim.aug.map_aug.assign_front_frames).""" | |
| from types import SimpleNamespace | |
| import numpy as np | |
| import pytest | |
| from nusim.aug.map_aug import assign_front_frames | |
| from nusim.recon.batch import plan_segments | |
| T0 = 1_533_000_000_000_000 | |
| def _scene(speeds, hz=12.0): | |
| """CAM_FRONT λ§ μλ κ°μ§ μ¬: νλ μ μ¬μ΄ μλ speeds[i] (m/s) λ‘ x μΆμ λ°λΌ λ¬λ¦°λ€.""" | |
| x, frames = 0.0, [] | |
| for i, v in enumerate(speeds): | |
| frames.append(SimpleNamespace(timestamp=T0 + round(i / hz * 1e6), ego_translation=(x, 0.0, 0.0))) | |
| x += v / hz | |
| return SimpleNamespace(frames={"CAM_FRONT": frames}) | |
| def test_short_scene_single_segment(): | |
| segs = plan_segments(_scene([1.5] * 240), 60, 10) # 30 m | |
| assert len(segs) == 1 and segs[0]["t0"] is None | |
| def test_segments_cover_with_overlap(speed): | |
| sc = _scene([speed] * 240) # 20 μ΄ | |
| segs = plan_segments(sc, 60, 10) | |
| n = len(segs) | |
| total = speed * 239 / 12 | |
| assert n == int(np.ceil((total - 10) / 50)) | |
| for a, b in zip(segs, segs[1:]): | |
| assert b["t0"] < a["t1"] # νμ΅ κ΅¬κ°μ κ²ΉμΉλ€ | |
| assert a["own1"] == b["own0"] # λ§‘λ ꡬκ°μ λ§λΏλλ€ | |
| assert a["t0"] <= a["own0"] < a["own1"] <= a["t1"] | |
| for s in segs: # κ΅¬κ° κΈΈμ΄ β€ 60 m (νλ μ μμν μ¬μ ) | |
| assert (s["t1"] - s["t0"]) * speed <= 60 + speed / 12 + 1e-6 | |
| assert segs[0]["t0"] == 0.0 and segs[-1]["t1"] == pytest.approx(239 / 12, abs=1e-3) | |
| def test_stop_stays_inside_segment(): | |
| # 30 m λ¬λ¦¬κ³ 5 μ΄ μ μλ€κ° λ€μ 60 m β μ μλ νλ μμ΄ μ΄λ ꡬκ°μμλ λΉ μ§μ§ μλλ€ | |
| sc = _scene([10.0] * 36 + [0.0] * 60 + [10.0] * 72) | |
| segs = plan_segments(sc, 60, 10) | |
| owned = assign_front_frames(sc, segs) | |
| got = [f.timestamp for fr in owned for f in fr] | |
| assert sorted(got) == [f.timestamp for f in sc.frames["CAM_FRONT"]] # νλ μλ§λ€ μ νν ν κ΅¬κ° | |
| def test_assign_each_frame_once(): | |
| sc = _scene([11.9] * 240) | |
| segs = plan_segments(sc, 60, 10) | |
| owned = assign_front_frames(sc, segs) | |
| got = [f.timestamp for fr in owned for f in fr] | |
| assert len(got) == len(set(got)) == len(sc.frames["CAM_FRONT"]) | |
| start = sc.frames["CAM_FRONT"][0].timestamp | |
| for s, fr in zip(segs, owned): # λ§‘μ νλ μμ κ·Έ ꡬκ°μ νμ΅ κ΅¬κ° μ | |
| ts = [(f.timestamp - start) / 1e6 for f in fr] | |
| assert s["t0"] - 1e-3 <= min(ts) and max(ts) <= s["t1"] + 1e-3 | |