Skip to content

nav tooling

Andrew Lauer edited this page Sep 4, 2026 · 30 revisions

Nav Tooling (WIP)

Lidar -> *Lio -> Raycaster -> Mapper -> Navigation

how to record Mid360 + Go2 + Kronknav

DIMOS_NAV_RECORD=1 RECORD_PCAP=1 dimos --build-native --rerun-host 0.0.0.0 run unitree-go2-nav-3d

# after being finished recording
latest_recording="$(ls -dt ~/.local/state/dimos/recordings/*/mem2.db | head -1)"
uv run python -m dimos.navigation.nav_3d.mls_planner.utils.plan_rrd "$latest_recording"

Verify

https://github.com/dimensionalOS/dimos/blob/main/dimos/mapping/utils/cli/dataset_validation.md

Replay

run 3d nav on arbitrary dataset

build

uv run maturin develop --uv --release -m dimos/mapping/ray_tracing/rust/py/Cargo.toml && uv run maturin develop --uv --release -m dimos/navigation/nav_3d/mls_planner/rust/py/Cargo.toml

run

uv run python -m dimos.navigation.nav_3d.mls_planner.utils.plan_rrd mid360_athens_stairs --robot-height 0.4 --lidar-stream pointlio_lidar --odom-stream pointlio_odometry

Point-LIO Tuning

  1. Record mid360 with PCAP enabled (or use tcpdump), see the go2_mid360.md doc (in dimos)
  2. Use pcap_to_db.py to generate alternative lidar/odom outcomes - renders to rerun

Pcap to DB

You can see/edit the default Point-LIO config here.

python -m dimos.hardware.sensors.lidar.pointlio.scripts.pcap_to_db --pcap mid360_shake_stairs/mid360_shake_stairs.pcap --db stairs.db

will open up rerun with aggregated map + odom path create a new db file with the pointlio stream

generate a global map from this via

dimos map global --lidar pointlio_lidar --pgo-tol=0 --no-carve

Relocalization

dimos run relocalize-mid360 --dataset go2_mid360_sf_office_outdoors_2026-05-29 --map-file go2_mid360_sf_office_outdoors_2026-05-29
dimos run relocalize-mid360 --dataset go2_mid360_china_office_2026-06-12 --map-file go2_mid360_china_office_2026-06-12

china dataset starts in an unmapped area so reloc takes a bit, this is on purpose, test against false positives add --skip 60 not to wait

MacOS Caveats

The module aliases the synthetic IPs onto lo0, which needs sudo. A tty-less worker can't prompt, so set up the interface by hand, then pass --no-network-setup:

sudo ifconfig lo0 alias 192.168.1.5 netmask 255.255.255.0
sudo ifconfig lo0 alias 192.168.1.155 netmask 255.255.255.0
sudo route -n add -host 224.1.1.5 -interface lo0
sudo route -n add -host 255.255.255.255 -interface lo0

python -m dimos.hardware.sensors.lidar.pointlio.scripts.pcap_to_db \
    --pcap "$PCAP" --no-network-setup

Clone this wiki locally