← All reports

Monthly Report — August 2026

Navigation Stack · Unitree Go2/Go2W · ROS 2 Humble · MuJoCo simulation + real hardware
Last updated: 2026-08-06

Overview

A modular navigation stack for the Go2/Go2W platform. All configurations launch from a single entry point; localization, mapping, navigation, and exploration components are swappable without changing the safety or operator layers. A dedicated safety node owns the final command path to the platform.

In every demonstration on this page, navigation goals are placed manually by the operator in real time (RViz 2D goal pose, or a clicked 3D point for the multilevel scene). No goal sequence is pre-scripted or scheduled; the videos show live goal-driven navigation.

Four results are collected below:

1. Unified stack + operator frontend

One launch entry point resolves a thin preset (which localization / mapping / navigation / exploration components to run) and supervises the whole session: readiness checks, TF validation, and artifact verification on every run. Manual controller input latches autonomy off and cancels active navigation goals.

Sensors Mid360 · D455 Localization Fast-LIO · RTAB-Map Mapping occupancy · traversability Planner Nav2 MPPI · SCAN Command mux manual latch Safety gate disarmed default Platform MuJoCo · Go2W cmd_vel_auto cmd_vel_raw cmd_vel_safe Exploration CFPA2 · none goals only Manual input joystick · web latched takeover Web operator console ROSBridge · read-only + e-stop map · state e-stop = selected per preset (thin YAML); swappable without touching the other layers
Figure 1. Product stack topology. Accented components are selected per preset; every command path converges on a single mux and a single safety gate, and manual input latches autonomy off rather than sharing priority with it.

A web operator console provides login, live camera / map / robot state, and a browser e-stop. It has been exercised against the real robot: map reset, exploration start/stop, and live 2D map / 3D voxel views in a real session.

Web operator console showing live RGB and depth camera feeds, safety state, compute telemetry, localization, occupancy map and topic-rate checks
Web operator console (simulation view): live RGB / depth feeds, safety and control state, compute telemetry, localization, occupancy map, and per-topic rate checks against the stack contract.
Current limitations

2. Real-robot LiDAR occupancy navigation

Mid360 → Fast-LIO → 2D occupancy grid → Nav2 on the real Go2W, with goal-driven navigation from RViz. Several hardware-only issues were found and fixed during bring-up (estimator rate collapse, incorrect robot footprint parameters).

Workstation — ROS 2 stack Go2W robot — onboard (ROS 1 env) Livox driver Mid360, hosted here Fast-LIO odometry ~10 Hz 2D occupancy /robot/map Nav2 Smac + MPPI Command mux → Safety gate manual latch · disarmed by default cmd_vel_auto Livox Mid360 mounted on robot Sport interface 20 Hz · 0.5 s watchdog raw UDP packets over Ethernet cmd_vel_safe
Figure 2. Real-robot LiDAR configuration. The entire autonomy pipeline currently runs on the workstation; only raw sensor packets and gated velocity commands cross the Ethernet boundary. Moving this compute onboard is next-direction 4 (the onboard environment is ROS 1 today).
Real Go2W session (2026-07-30): live LiDAR point cloud, occupancy map, and an operator-placed navigation goal in RViz (left); the robot and onboard camera view (right). The goal is clicked live during the session, not pre-programmed.
Current limitations

3. RTAB-Map navigation instance (simulation)

The localization/mapping pair swapped from Fast-LIO + LiDAR occupancy to RTAB-Map + RGB-D, with the navigation and safety layers unchanged — a direct validation that stack components are genuinely replaceable.

LiDAR head (baseline stack) Livox Mid360 3D LiDAR Fast-LIO LiDAR odometry OctoMap projection 2D occupancy RGB-D head (this instance) RGB-D camera MuJoCo sim · D455 RTAB-Map visual features · map→odom TF · occupancy grid same /robot/map + odom→base_link Nav2 unchanged Mux → Safety → platform unchanged
Figure 3. Perception-head swap. The RGB-D head replaces Fast-LIO + OctoMap with RTAB-Map publishing the same map and odometry contract; Nav2, the command mux, and the safety gate are byte-for-byte the same configuration as the LiDAR stack.
RTAB-Map instance (simulation): occupancy grid built from the RGB-D camera (RViz, right) consistent with the LiDAR navigation scan (green); MuJoCo world on the left.
Current limitations

4. SCAN-Planner integration (simulation)

SCAN-Planner (3D local planner, B-spline trajectory replanning) integrated through the same command/safety chain as Nav2. Closed-loop goal reaching works on flat ground; a purpose-built two-level test scene (stairs + ramp) probes multilevel navigation.

Preliminary conclusion: on flat ground SCAN qualitatively outperforms the MPPI baseline and is the leading candidate there. As the video below shows, the planner does produce 3D paths through the two-level scene — but the current controller is not capable of executing the ascent. The gap is in execution (controller / locomotion), not in planning.

LiDAR + Fast-LIO odometry + registered cloud Nav2 baseline (default / rollback) 2D costmaps inflation · footprint Smac Hybrid global 2D path MPPI controller SE(2) sampling MPC SCAN-Planner (candidate) SCAN 3D occupancy planner-owned 3D map B-spline optimisation continuous 3D replanning Closed-loop tracker upstream controller cmd_vel_auto Mux → Safety → platform
Figure 4. Local navigation backends compared. Nav2 plans on inflated 2D costmaps and samples SE(2) controls; SCAN-Planner maintains its own 3D occupancy and optimises smooth B-spline trajectories tracked by its upstream controller. Both emit cmd_vel_auto into the identical mux/safety chain, and the current stair/ramp failure sits downstream of both, in locomotion.
Demo video: SCAN-Planner flat-ground closed loop (placeholder)
Two-level scene (stairs + ramp), simulation: SCAN-Planner builds a 3D map and plans 3D paths toward an elevated goal clicked live by the operator in RViz (Publish Point, right); the current controller cannot execute the climb (MuJoCo, left).
Current limitations

Next directions

  1. Optimise SLAM stability.
  2. Optimise the Go2/Go2W controller in simulation using reinforcement learning.
  3. Deploy SCAN-Planner in the OPS lab: navigate from the pit, up the stairs, to the ground floor.
  4. Move compute onboard — next 4 weeks (the current onboard environment is ROS 1; this stack is ROS 2).
  5. Deploy vision-only SLAM on the real robot using the D455.
  6. Adopt open simulation benchmarks and develop complex navigation terrains to stress-test the robot in simulation.