Skip to content

Release Notes

Feature docs deliberately describe only the system as it exists — never how it got that way — so that every page reads standalone. This page is the one place where change context lives: what changed, from what, and why.

The published site shows only the notes for the docs version you are viewing. To read another version's notes, switch versions with the selector in the header. Versioned release-notes pages exist from 0.19.0 onward; notes for older releases (0.18.0 and earlier) live on the GitHub releases page.

0.21.0 (Unreleased)

  • New modules: RAVEN semantic planner and the geometric exploration planner. Two global planners now ship as external modules and pinned reference stacks: asm_raven (RAVEN, ICRA 2026 — RayFronts open-set semantic ray-frontier map + behavior manager in a GPU sidecar container, raven_bridge on the robot; stack full_raven) and asm_exploration_planner (the frontier-based geometric exploration planner from the construction-site project, extracted from trunk's robot/ros_ws/src/global/planners/exploration with its bounded viewpoint sampling; stack full_exploration). Both stacks are one <include> swap against full_default: the MIGHTY bridge follows the published global_plan directly, and its LiDAR-based world model keeps working in unlit scenes where stereo disparity does not.
  • global_plan_navigate_bridge. New trunk package that turns a global_plan topic into NavigateTask goals (cancel-then-resend on each new plan), so global planners that only publish a path can drive a task-executor local planner such as droan_gl (asm_droan, stacks full_droan*); the MIGHTY bridge follows the topic itself. full_default's random walk remains its own action client.
  • Compose fragments may declare sidecar services with a build: section. airstack module sync now rewrites a module compose fragment's relative build.context / build.dockerfile / env_file paths to absolute, like it already did for bind-mount sources, so a module can bring its own container (the RAVEN sidecar is the first).
  • Headless follow-camera video. ISAAC_SIM_FOLLOW_CAM_TOPIC publishes the Isaac Sim follow camera as a raw sensor_msgs/Image topic (ISAAC_SIM_FOLLOW_CAM_RES, default 1280x720), giving headless runs and CI a third-person video feed.
  • asm_mighty v0.1.5: follower fixes for the default planner. The full_default, lite_default and lite_offload_global stacks pin mighty v0.1.5. Its mighty_bridge global_plan follower now arms off takeoff_landing_planner/is_airborne (new mighty_is_airborne_topic launch arg) instead of an 8 m climb gate that AirStack's ~3 m TakeoffTask never reached — plans were adopted but never flown — and landing clears the follower's route memory, so a second flight in the same session flies again (the "already completed" check is keyed on the plan's pose list rather than a 2 m radius, which had dropped every later plan to a once-completed target).
  • Wiring baselines for the MIGHTY stacks. stacks/full_default/wiring.md and stacks/lite_default/wiring.md are committed from validated Isaac Sim snapshot runs on the 0.21.0-dev.11 robot image (MIGHTY nodes mighty/{global_mapper_ros,mighty_node,mighty_bridge,mighty_init_pose_tf} in place of droan/disparity_expander_node; the two stacks differ only by the global layer). That image carries MAVROS 2.15.1, which names its plugin sub-nodes interface/mavros/mavros/<plugin> (2.14.0: interface/mavros/<plugin>), so goldens captured on older images (full_droan, full_droan_cpu, full_macvo) will report drift on freshly built images until they are regenerated.

  • Module catalog synced from the registry (sync-modules-index): full_mighty, mighty.

  • MIGHTY is the default local planner; DROAN moved to the asm_droan module. The full_default stack (and the lite stacks lite_default / lite_offload_global) now include the MIGHTY map-based planner from the mighty module (planner + acl-mapping voxel world model + NavigateTask bridge, CPU-only, lidar-fed) in place of the GPU droan_gl node. The judged obstacle-route comparison behind the change is in the module README: DROAN's reactive, map-free design could not clear a 1.0 m clearance gate in dense clutter (absorbing hover states, close-quarters near-contacts), MIGHTY passed 5/5 with 1.59–1.65 m clearances behind the same controller. The six DROAN packages (droan_gl, droan_local_planner, disparity_expansion, disparity_graph, disparity_graph_cost_map, cost_map_interface) left trunk for castacks/asm_droan (history preserved; registered as the droan module). The previous default topology is kept as the new full_droan reference stack (it inherits full_default's wiring baseline); full_droan_cpu and full_macvo pin asm_droan; the opt-in full_mighty stack was folded into full_default. Trunk's robot image swaps the droan_gl GL link deps for MIGHTY's nlohmann-json3-dev header dep, so the default stack runs with no composed module layer (asm_mighty v0.1.4, compat >=0.21.0-dev.10).

  • airstack up reconciles the selected stack's module pins. A stack's modules.repos is now honoured at launch: pinned modules missing from the checkout are added and synced, differing local pins are kept and named, and uncomposed dependency layers are built (airstack module lock --build, unless AIRSTACK_NO_IMAGE_BUILD=1). --dry-run / --config-only only report; AIRSTACK_NO_STACK_MODULE_SYNC=1 opts out. Previously a module-pinned stack required a manual airstack module add first — which the module-pinned default stack would have made a first-run failure.

  • Fixed: post-release main→develop sync no longer skips. The sync-develop-from-main workflow skipped whenever the merge result was content-identical to develop — exactly the situation right after a release — so it never pushed the ancestry-advancing merge commit or rolled develop's VERSION forward. It now skips only when main is already an ancestor of develop.