CI/CD + Simulation

Simulation Validation CI

A continuous integration pipeline that automatically validates autonomy stacks against hundreds of simulation scenarios before every release, ensuring no regressions reach the hardware.

Demo clip available on request. Visuals shown are AI-generated stand-ins because I can't share the original customer assets.

Role DevOps & Robotics Engineer
Timeline 2024-2025
Stack GitHub Actions · Docker · PyTest
Impact 60% Less Field Testing

Overview

Built a scalable testing infrastructure that spins up headless simulation containers (Isaac Sim / Gazebo) to run mission scenarios, track KPIs (success rate, collision counts, path efficiency), and report results to GitHub.

Problem

Manual regression testing on physical robots was slow (days per release) and inconsistent. Bugs in edge cases (e.g., narrow corridor passing) often slipped through to deployment.

Pipeline Architecture

From code commit to validated release report.

Code Push(GitHub) Build Image(Docker) Parallel Sim(Runners 1..N) Log KPIs(CSV/JSON) Analysis(Pass/Fail) Report

Code Implementation: Test Runner

Python-based test runner that orchestrates ROS 2 launch files and monitors goal success criteria.

test_runner.py

import rclpy
from navigation_interfaces.action import NavigateToPose

def run_scenario(scenario_config):
    # Launch simulation headless
    sim_proc = launch_simulation(scenario_config['world'])
    
    # Send navigation goal
    goal_handle = nav_client.send_goal(scenario_config['target_pose'])
    
    # Monitor metrics
    metrics = {
        'collisions': 0,
        'time_taken': 0.0,
        'success': False
    }
    
    while not goal_handle.done():
        if check_collision():
            metrics['collisions'] += 1
        
    return metrics
                    
pipeline.yaml

name: Simulation Validation
on: [push]

jobs:
  validate:
    runs-on: self-hosted-gpu-runner
    steps:
      - uses: actions/checkout@v2
      - name: Build Container
        run: docker build -t autonomy-stack .
      - name: Run Scenarios
        run: python3 run_tests.py --suite=full_regression
      - name: Upload Artifacts
        uses: actions/upload-artifact@v2
        with:
          name: test-results
          path: results/
                    

Media & Artifacts

Grid of different simulation scenarios running in parallel
Parallel execution of diverse test scenarios (narrow corridor, dynamic agents, etc.).
Dashboard showing pass/fail rates and performance metrics
Automated KPI dashboard generated after each run.

Results

  • Caught 95%+ of regressions (e.g., config drifts, logic errors) before they reached hardware.
  • Reduced field testing time by 60%, allowing engineers to focus on novel feature development.
  • Established a "green build" culture where every merge is guaranteed to be deployable.
← Back to Projects