Introduction
The Innex1 Rover is built on ROS 2 Humble and follows a modular architecture designed for the NASA Lunabotics competition. The system is designed to autonomously navigate lunar terrain, excavate regolith, and deposit material in collection bins.Design Principles
Modularity
Each package handles a distinct responsibility with well-defined interfaces
Testability
Simulation-first development with Gazebo Fortress enables rapid iteration
Reliability
Dual EKF localisation and sensor fusion for robust state estimation
Extensibility
Shared interface contracts allow independent package development
System Layers
The Innex1 Rover architecture is organized into four primary layers:1. Hardware Abstraction Layer
- Robot Description: URDF/XACRO models define the physical robot structure
- Simulation Bridge: ROS-Gazebo bridge for sensor and actuator simulation
- Hardware Interfaces: Standardized interfaces for motors, sensors, and actuators
2. Perception and State Estimation
- Sensor Processing: Camera, LiDAR, and IMU data processing
- Localisation: Dual EKF setup with AprilTag correction
- Mapping: RTAB-Map for visual SLAM
- Hazard Detection: Real-time obstacle identification from point clouds
3. Planning and Control
- Path Planning: Nav2 integration with SMAC planner for obstacle avoidance
- Motion Control: Regulated pure pursuit controller for trajectory following
- Mission Actions: High-level excavate and deposit action servers
4. Mission Management
- System Bringup: Orchestrates node launch and configuration
- Teleoperation: Manual override for testing and emergency control
- State Management: Mission state coordination (deferred to future release)
Data Flow Architecture
The system uses a publish-subscribe architecture where nodes communicate via ROS 2 topics and actions, enabling loose coupling between components.
Key Subsystems
Localisation Pipeline
The rover employs a dual Extended Kalman Filter (EKF) configuration:- Local EKF (
odom→base_footprint): Provides smooth, continuous odometry using wheel encoders, IMU, and visual odometry - Global EKF (
map→odom): Integrates AprilTag detections for absolute position correction and drift compensation
Navigation Stack
The rover uses Nav2 with custom configurations:- Planner: SMAC Planner (State Lattice) for non-holonomic path planning
- Controller: Regulated Pure Pursuit for smooth trajectory tracking
- Costmap: 2D occupancy grid from LiDAR and depth camera data
Mission Execution
High-level mission tasks are implemented as ROS 2 actions:- Excavate Action: Navigates to excavation zone, operates bucket mechanism
- Deposit Action: Transports material to collection bin and deposits
Communication Protocols
Topics
- Sensor Data: Raw sensor streams (e.g.,
/camera/image_raw,/scan) - State Information: Odometry, transforms, and filtered state estimates
- Control Commands: Velocity commands to actuators
Actions
- Mission Tasks: Long-running operations with feedback (excavate, deposit)
- Navigation Goals: Move-to-pose commands via Nav2 action interface
Services
- Configuration: Runtime parameter updates
- State Queries: Request current system state
Interface Contracts
The system enforces interface contracts via CI validation:- Contract definitions in
.github/contracts/interface_contracts.json - Ensures topic names, message types, and TF frames remain consistent
- Prevents breaking changes during refactoring
See the Packages page for detailed descriptions of each ROS 2 package.
Simulation Environment
The rover is developed and tested in Gazebo Fortress:- Physics Engine: ODE for realistic dynamics simulation
- Sensors: Simulated cameras, LiDAR, IMU, and GPS
- Terrain: Moon yard environment with regolith physics
- Headless Mode: Default configuration for resource efficiency
Visualisation Tools
RViz2
Standard ROS visualisation for sensor data and robot state
Gazebo Web
Browser-based world geometry and arena layout viewer
Foxglove Studio
Advanced telemetry and time-series data visualisation
Development Workflow
- Local Development: Edit code with symlink install (no rebuild required for Python/launch files)
- Simulation Testing: Validate changes in Gazebo before hardware deployment
- Interface Validation: CI checks ensure contract compliance
- Integration Testing: Full system validation in moon yard simulation
External Dependencies
The rover builds on several key ROS 2 packages:- robot_localization: Dual EKF implementation
- Nav2: Navigation stack (planner, controller, costmap)
- RTAB-Map: Visual SLAM for mapping
- apriltag_ros: Fiducial marker detection
- ros_gz: ROS-Gazebo integration bridge
- Leo Rover: Base robot description and simulation (vendored)
Coordinate Frames
The system uses the REP-105 standard for coordinate frame conventions:map: Fixed global reference frameodom: Continuous odometry frame (accumulates drift)base_footprint: Robot ground projection (2D navigation)base_link: Robot center of mass- Sensor frames: Camera, LiDAR, IMU (defined in URDF)
For detailed TF tree structure, see the TF Frames page.