Evaluation-Ready Docker Container for Autonomous Robot Exploration
A complete containerized autonomous drone exploration system using Q-Learning reinforcement learning and SLAM mapping for unknown environment discovery. Built specifically for evaluation environments with Docker and X11 forwarding support.
For Evaluators: Single command deployment with full visualization:
# Clone and run
git clone https://github.com/madhurlak0810/drone_exploration.git
cd drone_exploration
# Build and run with GUI (X11/VNC support)
./docker_run.sh build && ./docker_run.sh gui
# Access visualization at http://localhost:6080
# Or VNC client at localhost:5900[PASS] Docker-based: Built on osrf/ros:humble-desktop-full
[PASS] X11 Forwarding: VNC server + web interface support
[PASS] Environment Independent: Consistent across all systems
[PASS] No Hardware Dependencies: Pure simulation-based
This system combines:
- Q-Learning AI - Autonomous decision-making for exploration
- SLAM Mapping - Real-time occupancy grid generation
- Performance Metrics - Comprehensive exploration analytics
- Gazebo Simulation - Complete 3D physics environment
- RViz Visualization - Real-time map and robot display
- Coverage: Up to 94.7% environment mapping
- Efficiency: 20-25% exploration rate
- Safety: <1% collision rate
- Learning: Dynamic epsilon decay and reward optimization
# Option A: Pull pre-built image (fastest)
docker pull madhurlak/drone-exploration:latest
docker run -p 5900:5900 -p 6080:6080 madhurlak/drone-exploration:latest gui
# Option B: Clone and build locally
git clone https://github.com/madhurlak0810/drone_exploration.git
cd drone_exploration
# Build Docker image
./docker_run.sh build
# Run with GUI visualization (recommended for evaluation)
./docker_run.sh gui
# Access web interface: http://localhost:6080
# Or VNC client: localhost:5900# Different running modes
./docker_run.sh run # Headless (performance testing)
./docker_run.sh gui # With VNC visualization
./docker_run.sh dev # Development shell
# Monitoring and control
./docker_run.sh status # Check container status
./docker_run.sh logs # View exploration metrics
./docker_run.sh stop # Stop all containers
./docker_run.sh clean # Full cleanup# Headless exploration
docker-compose up drone-exploration
# GUI with VNC access
docker-compose --profile gui up drone-exploration-gui
# Development mode
docker-compose --profile dev up drone-development# Ubuntu 22.04 LTS with ROS2 Humble
sudo apt update && sudo apt install -y \
ros-humble-desktop \
ros-humble-gazebo-ros-pkgs \
ros-humble-slam-toolbox \
ros-humble-navigation2 \
ros-humble-robot-state-publisher \
python3-colcon-common-extensions \
python3-numpy python3-matplotlib# Clone and build (for native development only)
git clone https://github.com/madhurlak0810/drone_exploration.git
cd drone_exploration
source /opt/ros/humble/setup.bash
colcon build
source install/setup.bash# Complete autonomous exploration system
./launch_final.sh
# In separate terminal for visualization
./launch_single_frame.sh# Native: Real-time metrics
ros2 topic echo /exploration_metrics
# Docker: View container logs
./docker_run.sh logs
# Check results
ls metrics/exploration_*drone_ws/
|-- launch_final.sh # Main system launcher
|-- launch_rviz_fixed.sh # RViz visualization
|-- launch_single_frame.sh # Static map display
|-- q_table.npy # Trained Q-learning model
|-- metrics/ # Performance data & plots
| |-- exploration_metrics.json # Detailed metrics
| \-- exploration_performance.png # Performance graphs
|-- src/drone_rl/ # Source package
| |-- drone_rl/ # Python modules
| | |-- q_learning_agent.py # RL agent implementation
| | |-- exploration_metrics.py # Analytics engine
| | \-- environment_interface.py # State processing
| |-- config/ # Configuration files
| | |-- drone_config.yaml # Agent parameters
| | \-- drone_exploration_robust.rviz # RViz config
| |-- urdf/ # Robot models
| | \-- drone_simple.urdf # Robot description
| |-- worlds/ # Simulation environments
| | \-- exploration_world.world # Gazebo world
| \-- launch/ # ROS2 launch files
|-- install/ # Built packages
\-- log/ # System logs
The system includes four different Gazebo worlds for comprehensive evaluation:
| World | Description | Use Case |
|---|---|---|
exploration |
Original mixed obstacle environment | Standard evaluation and testing |
maze |
Maze-like layout with narrow corridors | Navigation in constrained spaces |
rooms |
Multi-room structure with distinct chambers | Room-to-room exploration |
scattered |
Random obstacle distribution | Varied exploration patterns |
# View available worlds
./select_world.sh
# Switch to specific world
./select_world.sh maze # Maze environment
./select_world.sh rooms # Multi-room structure
./select_world.sh scattered # Random distribution
./select_world.sh exploration # Original world
# Launch with selected world
./launch_final.sh # Native execution
./docker_run.sh build && ./docker_run.sh gui # Docker execution- Common Features: All worlds use identical obstacle types (boxes, cylinders)
- Boundary: 20m x 20m enclosed area with walls
- Spawn Point: Center position (0,0,1) for consistent testing
- Physics: Standard Gazebo physics with realistic collision detection
- Lighting: Ambient and directional lighting for sensor simulation
- Base Image:
osrf/ros:humble-desktop-full[VERIFIED] - Container Size: ~5GB (includes all dependencies)
- X11 Support: VNC server + noVNC web interface
- Ports: 5900 (VNC), 6080 (Web), 11311 (ROS)
# Quick evaluation start (pre-built image)
docker pull madhurlak/drone-exploration:latest
docker run -p 5900:5900 -p 6080:6080 madhurlak/drone-exploration:latest gui
# Alternative: Clone and build
git clone https://github.com/madhurlak0810/drone_exploration.git
cd drone_exploration
./docker_run.sh build && ./docker_run.sh gui
# For different exploration worlds
./select_world.sh maze # Switch to maze world
./docker_run.sh build # Rebuild with new world
./docker_run.sh gui # Launch with maze environment
# Direct Docker commands (alternative)
docker build -t drone-exploration .
docker run -p 5900:5900 -p 6080:6080 drone-exploration:latest gui
# Web access: http://localhost:6080
# VNC access: localhost:5900- Real-time Exploration: Autonomous drone mapping unknown environment
- SLAM Visualization: Live occupancy grid building with SLAM Toolbox
- Performance Metrics: Coverage, efficiency, collision rates (every 10s)
- Q-Learning Progress: Epsilon decay, reward accumulation, decision-making
- System Health: Active ROS topics, node status, transform trees
- Map Coverage: Typically reaches 90%+ in 10-15 minutes
- Exploration Efficiency: 20-35% coverage per minute
- Safety Record: <1% collision rate with obstacles
- Learning Convergence: Stable performance after ~5 minutes
- Purpose: Autonomous exploration decision-making
- Features:
- Dynamic epsilon-greedy exploration
- Reward-based learning with collision avoidance
- Frontier-based goal selection
- State discretization for efficient learning
- Purpose: Real-time mapping and localization
- Features:
- Occupancy grid generation
- Loop closure detection
- Transform management
- Map persistence
- Purpose: Performance tracking and analysis
- Tracks:
- Coverage percentage (explored area)
- Exploration efficiency (coverage/time)
- Collision statistics
- Learning progress (rewards, epsilon)
- Distance traveled
- Gazebo Physics: Complete 3D simulation with realistic sensors
- Robot Model: Differential drive with LiDAR and IMU
- World: Complex environment with obstacles for exploration
# Q-Learning Settings
learning_rate: 0.1 # Learning speed
epsilon: 0.3 # Exploration rate
epsilon_decay: 0.995 # Exploration reduction
discount_factor: 0.9 # Future reward weight
# Environment
safety_distance: 0.3 # Collision avoidance (meters)
max_linear_velocity: 0.5 # Maximum speed (m/s)
angular_velocity: 0.8 # Turn speed (rad/s)
# Rewards
goal_reward: 100 # Reaching unexplored areas
collision_penalty: -100 # Hitting obstacles
progress_reward: 10 # Moving toward goals| Setting | Purpose | Recommended |
|---|---|---|
control_frequency |
Update rate | 10-20 Hz |
map_update_frequency |
SLAM rate | 5-10 Hz |
epsilon_min |
Min exploration | 0.01-0.05 |
safety_distance |
Collision buffer | 0.2-0.4m |
The system tracks comprehensive metrics during exploration:
# Live metrics stream
ros2 topic echo /exploration_metrics
# Example output:
Time: 180.0s
Coverage: 61.4%
Efficiency: 20.46%/min
Distance: 31.3m
Collisions: 1
Collision Rate: 0.28%
Total Reward: 315.0
Epsilon: 0.049Automatically generated graphs include:
- Coverage over time - Mapping progress
- Efficiency trends - Exploration rate
- Reward accumulation - Learning progress
- Collision analysis - Safety metrics
Results saved in metrics/:
exploration_metrics.json- Raw dataexploration_performance.png- Visualizationsq_table.npy- Trained model weights
# Build optimized image
./docker_run.sh build
# Run different modes
./docker_run.sh run # Headless exploration
./docker_run.sh gui # VNC GUI access (port 5900)
./docker_run.sh dev # Development shell
# Monitor and control
./docker_run.sh logs # View container logs
./docker_run.sh status # Check container status
./docker_run.sh stop # Stop all containers
./docker_run.sh clean # Full cleanup
# Docker Compose alternatives
docker-compose up drone-exploration # Headless
docker-compose --profile gui up drone-exploration-gui # GUI mode
docker-compose --profile dev up drone-development # DevelopmentCreate new Gazebo worlds:
# Copy existing world
cp src/drone_rl/worlds/exploration_world.world custom_world.world
# Edit environment layout
gedit custom_world.world
# Update launch file to use custom worldExtend the Q-learning agent:
# In q_learning_agent.py
class AdvancedQLearningAgent(QLearningAgent):
def custom_reward_function(self, state, action, next_state):
# Implement custom rewards
return reward
def multi_objective_selection(self):
# Add multi-criteria decision making
pass# Launch multiple agents
ros2 launch drone_rl multi_robot_exploration.py num_robots:=3| Problem | Solution |
|---|---|
| No map appearing | Check SLAM topics: ros2 topic list | grep map |
| Agent not moving | Verify /cmd_vel publishing: ros2 topic hz /cmd_vel |
| Poor exploration | Tune reward parameters in drone_config.yaml |
| Gazebo crashes | Reduce physics rate or run headless |
| RViz yellow flickering | Use ./launch_single_frame.sh for static display |
# Monitor system resources
htop
# Check ROS2 performance
ros2 topic hz /scan
ros2 topic bw /map
# Reduce computational load
export GAZEBO_MASTER_URI=http://localhost:11345 # Headless mode# Native: Enable detailed logging
export RCUTILS_LOGGING_SEVERITY=DEBUG
./launch_final.sh
# Docker: Debug container
./docker_run.sh dev
export RCUTILS_LOGGING_SEVERITY=DEBUG
./launch_final.sh
# Check specific node logs
ros2 topic echo /rosout | grep exploration_metrics# Check Docker status
./docker_run.sh status
# View detailed logs
./docker_run.sh logs
# Access container shell
docker exec -it drone-exploration-container bash
# Restart services
./docker_run.sh stop
./docker_run.sh runRecent test results (14-minute exploration):
| Metric | Value | Target |
|---|---|---|
| Final Coverage | 94.7% | >90% PASS |
| Exploration Efficiency | 7.17%/min | >5%/min PASS |
| Total Distance | 142.0m | Minimize PASS |
| Collision Rate | 0.26% | <1% PASS |
| Learning Convergence | epsilon=0.01 | <0.05 PASS |
- Early Phase (0-2min): Rapid initial mapping (50%+ coverage)
- Middle Phase (2-8min): Efficient exploration (20-25%/min rate)
- Late Phase (8-14min): Detail completion (90%+ coverage)
- Convergence: Epsilon decay to 0.01, stable Q-values
[PASS] Docker Environment: Built on required osrf/ros:humble-desktop-full
[PASS] X11 Forwarding: VNC server (5900) + Web interface (6080)
[PASS] Single Command: ./docker_run.sh build && ./docker_run.sh gui
[PASS] Environment Independent: No host dependencies required
[PASS] Performance Verified: 94.7% coverage, <1% collision rate
[PASS] Documentation Complete: Full usage and troubleshooting guide
# 1. Pull pre-built image (fastest - recommended)
docker pull madhurlak/drone-exploration:latest
# 2. Run with visualization (immediate)
docker run -p 5900:5900 -p 6080:6080 madhurlak/drone-exploration:latest gui
# Alternative: Clone and build locally
# git clone https://github.com/madhurlak0810/drone_exploration.git
# cd drone_exploration && ./docker_run.sh build && ./docker_run.sh gui
# 3. Access web interface
# Open browser: http://localhost:6080
# Watch autonomous exploration in real-time- Autonomous Operation: No manual intervention required
- Map Building: Real-time SLAM visualization
- Performance: 90%+ coverage within 15 minutes
- Safety: Zero to minimal collisions
- Learning: Visible epsilon decay and reward optimization
Repository: https://github.com/madhurlak0810/drone_exploration
Contact: madhurlak0810@github