https://github.com/cartesianxr7/scout-navigator
Waypoint pathfinding and navigational re-routing system with a virtual Rust & WASM / Yew interface demonstrating functionality using D*-Lite, A*, and Field D* as optional pathfinding algorithms.
https://github.com/cartesianxr7/scout-navigator
astar dstar-lite pathfinder pathfinding-algorithms pathfinding-visualizer reroute-system rust wasm-bindgen yew-framework
Last synced: about 2 months ago
JSON representation
Waypoint pathfinding and navigational re-routing system with a virtual Rust & WASM / Yew interface demonstrating functionality using D*-Lite, A*, and Field D* as optional pathfinding algorithms.
- Host: GitHub
- URL: https://github.com/cartesianxr7/scout-navigator
- Owner: CartesianXR7
- License: other
- Created: 2025-06-10T11:13:21.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2025-08-15T10:00:16.000Z (about 2 months ago)
- Last Synced: 2025-08-15T12:04:33.902Z (about 2 months ago)
- Topics: astar, dstar-lite, pathfinder, pathfinding-algorithms, pathfinding-visualizer, reroute-system, rust, wasm-bindgen, yew-framework
- Language: Rust
- Homepage:
- Size: 98.6 KB
- Stars: 5
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# scout-navigator
*A live-rerouting path-finding visualiser in Rust + WASM*[](https://github.com/CartesianXR7/ScoutNav/actions/workflows/ci.yml)
[](LICENSE)> **Scout** shows how **A\***, **D\*-Lite**, and **Field-D\*** continually (re)compute optimal routes while new obstacles appear mid-journey.
---
## Features
| Area | Highlights |
|------|------------|
| Algorithms | A\*, D\*-Lite (default), Field-D\* |
| Dynamic obstacles | User-placed **DOBs** autoconvert to static blocks when the rover is ≤ 2 cells away (Chebyshev) |
| UI | Canvas grid with pan/zoom, dark mode, FPS limiter |
| Build | Pure Rust → `wasm-bindgen` → tiny JS wrapper |
| Dev server | `src/bin/serve.rs` (≈ 80 LOC) – no Node required |---
## Quick start
# once per machine
rustup target add wasm32-unknown-unknown
cargo install wasm-pack# development (watch mode)
wasm-pack build --target web --out-dir pkg --dev --watch &
cargo run --bin serve # → http://localhost:8000### Production build
wasm-pack build --target web --out-dir pkg --release
---
## High-level architecture
```bash
Grid Map 4-Layer Architecture
┌─────────────────┐
│ Layer 1 · DOB │ Dynamic Obstacle Map (amber → blue)
└────┬────────────┘
↓
┌─────────────────┐
│ Layer 2 · UI │ Grid visualisation / user input
└────┬────────────┘
↓
┌─────────────────┐
│ Layer 3 · Rover │ Rover state + path planner
└────┬────────────┘
↓
┌─────────────────┐
│ Layer 4 · FOM │ Fixed Obstacle Map (authoritative)
└─────────────────┘
```*(A deep dive lives in [docs/ARCHITECTURE.md](https://github.com/CartesianXR7/scout-navigator/blob/main/docs/ARCHITECTURE.md))*
---
## Directory layout
```bash
Directory Overview:
ScoutNav/
├── src/
│ ├── bin/serve.rs # dev HTTP server (localhost:8000)
│ ├── components/ # Yew UI widgets
│ │ ├── canvas.rs # WebGL/2-D drawing surface
│ │ ├── controls.rs # play/pause/algorithm selectors
│ │ ├── help_bubble.rs # inline docs
│ │ └── main_app.rs # root
│ ├── pathfinding/
│ │ ├── astar.rs
│ │ ├── dstar_lite.rs
│ │ ├── field_dstar.rs
│ │ └── pathfinder_trait.rs # common interface
│ ├── rover.rs # agent FSM: move → scan → update map
│ └── lib.rs # wasm-bindgen glue
├── index.html / styles.css # SPA shell + theming
├── Cargo.toml / Cargo.lock
├── package.json / package-lock.json
├── docs/ # (demo.gif, architecture.svg etc.)
└── .github/workflows/ci.yml # GitHub Actions
```
---## Tests & CI
* Run `cargo test` locally.
* GitHub Actions: check → test → `wasm-pack build`.---
## Contributing
1. `git switch -c feat/my-change`
2. `cargo fmt && cargo clippy -- -D warnings`
3. Conventional-commit message (e.g. `feat: add theta*`)
4. Open a PR – details in **CONTRIBUTING.md**.---
## License
GPL-3.0-or-later – see **[LICENSE](https://github.com/CartesianXR7/scout-navigator/blob/main/LICENSE)**.