- Lift the env-aware VO backend factory verbatim from core/vo.py.
- Body and parameter defaults preserved exactly (PATTERNS.md §4.1
mandate: 'Preserve this factory verbatim').
- Return-type annotation widened from ISequentialVisualOdometry to the
canonical VisualOdometry Protocol from Plan 01-02; the I-prefix alias
is still importable so legacy callers/type-checkers keep working.
- Imports route through the new components.vio.* modules; no
cross-package edits needed because Plan 08 (composition root) is the
only other call site planned.
- Append to the components.vio barrel.
- Extract CuVSLAMVisualOdometry (Inertial) + CuVSLAMMonoDepthVisualOdometry
(Mono-Depth) from core/vo.py into a dedicated cuVSLAM-bridge module.
- Preserve the optional 'try: import cuvslam / except ImportError' pattern
at module top with the _CUVSLAM_AVAILABLE flag — verified False on x86 dev,
True on Jetson (PATTERNS.md §6.5, §8.1).
- Both classes embed an ORBVisualOdometry instance for transparent dev/CI
fallback; metric scale semantics preserved (scale_ambiguous=False).
- Scaffold components/vio/native/ as Phase-1 placeholder for future native
SDK glue (PATTERNS.md §1.4); Phase 1 is intentionally empty.
- Append both classes to the components.vio barrel.
- Extract SequentialVisualOdometry and ORBVisualOdometry from core/vo.py
into a dedicated pure-Python OpenCV backend module.
- Module deliberately does NOT import cuvslam — keeps optional-SDK
isolation from the cuvslam backend (Plan 01-03 Task 1).
- Both classes inherit from the components.vio.protocol.ISequentialVisualOdometry
Protocol alias (Plan 01-02 surface).
- Barrel-export both classes from components/vio/__init__.py.
- core/vo.py is unchanged in this commit; the shim wires up in Task 4.