Files
RDC_Simulation/scripts/run_ardupilot_sim.sh

123 lines
4.5 KiB
Bash
Executable File

#!/bin/bash
# =============================================================================
# ArduPilot Gazebo Simulation Launcher
# =============================================================================
# Launches Gazebo with the ArduPilot iris drone model.
# Start this FIRST, then run SITL in another terminal.
#
# Usage:
# ./scripts/run_ardupilot_sim.sh # Default runway
# ./scripts/run_ardupilot_sim.sh warehouse # Indoor warehouse
# =============================================================================
set -e
echo "=============================================="
echo " Gazebo + ArduPilot Simulation"
echo "=============================================="
echo ""
# Get script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
# =============================================================================
# GPU DETECTION
# =============================================================================
echo "[INFO] Detecting GPU..."
export LIBGL_ALWAYS_SOFTWARE=0
if command -v nvidia-smi &> /dev/null && nvidia-smi &> /dev/null 2>&1; then
GPU_NAME=$(nvidia-smi --query-gpu=name --format=csv,noheader 2>/dev/null | head -1)
echo "[GPU] NVIDIA: $GPU_NAME"
export __GLX_VENDOR_LIBRARY_NAME=nvidia
export __NV_PRIME_RENDER_OFFLOAD=1
elif command -v glxinfo &> /dev/null; then
GPU_NAME=$(glxinfo 2>/dev/null | grep "OpenGL renderer" | cut -d: -f2 | xargs)
echo "[GPU] $GPU_NAME"
export MESA_GL_VERSION_OVERRIDE=3.3
else
echo "[GPU] Unknown - using Mesa defaults"
export MESA_GL_VERSION_OVERRIDE=3.3
fi
# =============================================================================
# GAZEBO PATHS
# =============================================================================
export GZ_SIM_SYSTEM_PLUGIN_PATH="${HOME}/ardupilot_gazebo/build:${GZ_SIM_SYSTEM_PLUGIN_PATH}"
export GZ_SIM_RESOURCE_PATH="${HOME}/ardupilot_gazebo/models:${HOME}/ardupilot_gazebo/worlds:${GZ_SIM_RESOURCE_PATH}"
export GZ_SIM_RESOURCE_PATH="${PROJECT_DIR}/gazebo/models:${GZ_SIM_RESOURCE_PATH}"
# =============================================================================
# CHECK INSTALLATION
# =============================================================================
if [ ! -d "${HOME}/ardupilot_gazebo" ]; then
echo "[ERROR] ardupilot_gazebo not found!"
echo "Run: ./setup/install_ardupilot.sh"
exit 1
fi
if [ ! -f "${HOME}/ardupilot_gazebo/build/libArduPilotPlugin.so" ]; then
echo "[ERROR] ArduPilot plugin not built!"
echo "Run: cd ~/ardupilot_gazebo && mkdir -p build && cd build && cmake .. && make -j4"
exit 1
fi
# =============================================================================
# SELECT WORLD
# =============================================================================
WORLD_ARG="${1:-runway}"
case "$WORLD_ARG" in
runway|default)
WORLD="${HOME}/ardupilot_gazebo/worlds/iris_runway.sdf"
;;
warehouse)
WORLD="${HOME}/ardupilot_gazebo/worlds/iris_warehouse.sdf"
;;
*)
if [ -f "$WORLD_ARG" ]; then
WORLD="$WORLD_ARG"
elif [ -f "${HOME}/ardupilot_gazebo/worlds/${WORLD_ARG}.sdf" ]; then
WORLD="${HOME}/ardupilot_gazebo/worlds/${WORLD_ARG}.sdf"
else
echo "[ERROR] World not found: $WORLD_ARG"
echo ""
echo "Available worlds:"
echo " runway - Outdoor runway (default)"
echo " warehouse - Indoor warehouse"
exit 1
fi
;;
esac
echo "[INFO] World: $(basename "$WORLD")"
echo ""
# =============================================================================
# INSTRUCTIONS
# =============================================================================
echo "=============================================="
echo " STEP 1: Gazebo Starting..."
echo "=============================================="
echo ""
echo "After Gazebo loads, run SITL in another terminal:"
echo ""
echo " source ~/venv-ardupilot/bin/activate"
echo " sim_vehicle.py -v ArduCopter -f gazebo-iris --model JSON --console"
echo ""
echo "Then run the flight controller:"
echo ""
echo " source ~/venv-ardupilot/bin/activate"
echo " cd ~/RDC_Simulation"
echo " python scripts/run_ardupilot.py --pattern square"
echo ""
echo "=============================================="
echo ""
# =============================================================================
# RUN GAZEBO
# =============================================================================
gz sim -v4 -r "$WORLD"