尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證A ring-sector polar grid running 5 cm cells inside 10 m and 50 cm at 100 m — 705,771 cells against 16,000,000 for a uniform grid over the same footprint — preserving the curbs, potholes and overhangs a 2D occupancy grid destroys.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
NEXA — Adaptive Variable-Resolution 2.5D LiDAR Mapping
A 64-beam LiDAR produces ~120,000 points per revolution at 10 Hz — about 1.2 million
points per second. The two standard ways of consuming that stream both fail on vehicle
compute:
• Keeping the full 3D point cloud or voxel grid is rich but does not close the loop
in real time on embedded hardware.
• Flattening to a 2D occupancy grid is cheap but discards height. A curb, a pothole
and a low gantry all collapse into the same "occupied" bit, so the map cannot tell a
vehicle that the ground is drivable but the bridge above it is 3.1 m.檢視完整 README ↗Live demo: https://nexa-drdo.duckdns.org
| Field | Value |
|---|---|
| Project Title | NEXA — Adaptive Variable-Resolution 2.5D LiDAR Mapping for Dynamic Environment Perception |
| PS ID | 26053 |
| PS Title | Adaptive Variable Resolution 2.5D Lidar Mapping for Dynamic Environment Perception |
| Category | Software |
| Theme | Smart Vehicles |
| Organisation | DRDO — Department of Defence Production / iDEX |
| Team Name | KANVSS |
A 64-beam LiDAR produces ~120,000 points per revolution at 10 Hz — about 1.2 million points per second. The two standard ways of consuming that stream both fail on vehicle compute:
A uniform high-resolution grid also over-samples the far field, where LiDAR beam divergence means the detail was never measured in the first place.
NEXA allocates spatial resolution the way the human eye does — finely where a braking decision is made, coarsening with range to the point where the sensor's own angular sampling runs out.
Raw scans become a semantic 2.5D map (elevation and class per cell) over a ring-sector polar grid running 5 cm cells inside 10 m and 50 cm cells at 100 m. Because each cell keeps ground height and obstacle height separately, the map represents the three hazards a 2D grid destroys: curbs, potholes and overhanging structures. A deterministic decision layer turns the map into a route, a risk level, an ETA and a stated reason.
offset[k] + j, no search, no hashing; 100.000% point
conservation asserted every framespconv, no compiled extensionInstancedMesh canvas, with
per-frame data never entering React statemake bench into
results.json and docs/RESULTS.md| Layer | Technology |
|---|---|
| Perception | Python, NumPy, SciPy, ONNX Runtime (CPU) |
| Mapping / Decision | Python, NumPy (vectorised, pre-allocated) |
| Backend | FastAPI, Uvicorn, binary WebSocket |
| Frontend | Next.js 16 (App Router), React 19, TypeScript, Three.js, Tailwind |
| Auth | Firebase Authentication |
| Database | MongoDB Atlas |
| Deployment | Docker, Docker Compose, Caddy (auto-TLS), AWS EC2 (Graviton ARM64) |
| Companion hardware | Scilab — drone LiDAR payload modelling |
See docs/IMPLEMENTATION_PLAN.md and
docs/DEPLOYMENT.md.
LiDAR scan (~120k points)
|
v
1. PERCEPTION range-image CNN (ONNX, CPU) + geometric fallback
| 19 SemanticKITTI classes -> 5 PS classes
v
2. RING-SECTOR (x,y) -> (r,theta) -> (ring k, bin j) -> flat id
PROJECTION 5 cm @ <=10 m -> 50 cm @ 100 m, closed-form O(1)
|
v
3. CELL ANALYSIS z_ground / z_obstacle / slope / roughness / clearance
+ HAZARD FLAGS OVERHANG - NEGATIVE_OBSTACLE - STEP
|
v
4. DECISION LAYER traversability -> Kalman tracker -> costmap -> A*
(deterministic) -> route, risk, ETA, reason string
|
| FrameMessage (binary WebSocket)
v
5. WEB APP Firebase auth gate - Three.js viewer - live HUD
|
v
6. MongoDB Atlas run history - decision audit log - scene ground truth
Deployed architecture
Internet -> Caddy :443 (TLS)
|-- / -> Next.js :3000
|-- /health -> FastAPI :8000
+-- /stream -> FastAPI :8000 (WebSocket, direct)
The browser reaches the WebSocket without a Next.js hop, so frame data is never proxied, buffered or re-serialised.
sih2026/
├── README.md
├── Makefile # make test | bench | scenes | finetune
├── model/ # the engine
│ ├── avr25d/
│ │ ├── core/ # grid.py, cell.py, refine.py
│ │ ├── perception/ # range_proj, onnx_infer, geometric_seg, cache
│ │ ├── decision/ # traversability, tracker, costmap, planner, explain
│ │ ├── bench/ # memory, latency, distance_bins, hazard, report
│ │ ├── synth/ # ray-cast scenes with exact ground truth
│ │ └── server/ # FastAPI app, wire protocol, fixtures
│ └── tests/ # 382 tests
├── frontend/ # Next.js app
│ ├── app/ # routes: /, /login, /dashboard, /runs, /api/*
│ ├── components/ # viewer (Three.js), hud, decision
│ └── lib/ # protocol, ws, firebase, mongo
├── backend/requirements.txt # pinned Python dependencies
├── deploy/ # Dockerfiles, compose, Caddyfile, push.sh
├── docs/ # PRD, implementation plan, RESULTS.md, DEPLOYMENT.md
├── hardware/ # companion drone LiDAR payload (Scilab)
├── tools/ # dataset fetch, ONNX export, cache build, finetune
├── submission/ # presentation + demo links
└── assets/screenshots/ # dashboard and prototype images
| Item | Location |
|---|---|
| Source code | model/, frontend/, backend/ |
| Architecture / technical documentation | docs/ |
| Screenshots / hardware figures | assets/screenshots/, hardware/figures/ |
| Final PPT | submission/PRESENTATION.md |
| Demo video link | submission/DEMO.md |
| Project overview | README.md |
See submission/PRESENTATION.md.
See submission/DEMO.md.
See assets/screenshots/. Payload figures generated by the Scilab
scripts are in hardware/figures/.
Requires Python 3.13+ and Node 22+. CPU only — no GPU, no CUDA.
git clone https://github.com/sam-eer12/sih2026.git
cd sih2026
# backend
python3 -m venv backend/.venv
backend/.venv/bin/pip install -r backend/requirements.txt
backend/.venv/bin/pip install -e model/
# frontend
cd frontend && npm install && cd ..
The frontend needs a frontend/.env.local; copy frontend/.env.local.example and fill it
in. The app runs without it — authentication and persistence simply stay switched off.
# Terminal 1 — pipeline server (no dataset needed)
cd model && ../backend/.venv/bin/python -m avr25d.server.app --fixtures
# Terminal 2 — web app
cd frontend && npm run dev
Open http://localhost:3000. Other modes:
# real scans, geometric segmenter
cd model && ../backend/.venv/bin/python -m avr25d.server.app \
--infer geometric --seq 04 --data data/kitti
# replay a recorded log — deterministic, no dataset required
cd model && ../backend/.venv/bin/python -m avr25d.server.app \
--replay data/logs/demo.log
Tests and benchmarks
make test # 382 tests
make bench # regenerates results.json and docs/RESULTS.md
make scenes # regenerates the synthetic hazard scenes
Deploy (see docs/DEPLOYMENT.md)
./deploy/push.sh all
Measured numbers live in docs/RESULTS.md, regenerated by make bench.
Structural properties, verified by the test suite:
| Property | Value |
|---|---|
| Rings to 100 m | 662 |
| Total cells, 360° × 100 m | 705,771 |
| Uniform 5 cm equivalent | 16,000,000 |
| Cell reduction | 22.67× |
| Point conservation | 100.000% |
| Pothole depth error (S2, true 0.22 m) | 0.0108 m |
| Gantry clearance error (S3, true 3.10 m) | 0.0024 m |
| Curb height error (S4, true 0.15 m) | 0.0026 m |
| False positives on flat control scene | 0 |
Latency and mIoU depend on the perception mode and the sequences evaluated; both are
stated with their configuration in docs/RESULTS.md rather than quoted bare.
z_ground
in sparse far-field cells and stabilising tracksR = f(distance, complexity, semantics, uncertainty) claimNo passwords, API keys, access tokens or .env files containing secrets are committed to
this repository. deploy/.env and frontend/.env.local are gitignored; the tracked
*.example files carry empty placeholders only.