Files
RDC_Simulation/scripts/run_ardupilot_sim.sh

128 lines
4.6 KiB
Bash
Executable File

#!/bin/bash
# =============================================================================
# ArduPilot Gazebo Simulation Launcher
# =============================================================================
# Launches Gazebo with the ArduPilot iris drone.
# 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 ""
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 directory not found!"
echo ""
echo "Install with: ./setup/install_ardupilot.sh"
exit 1
fi
if [ ! -f "${HOME}/ardupilot_gazebo/build/libArduPilotPlugin.so" ]; then
echo "[ERROR] ArduPilot Gazebo plugin not built!"
echo ""
echo "Build it:"
echo " cd ~/ardupilot_gazebo"
echo " mkdir -p build && cd build"
echo " 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 "[OK] World: $(basename "$WORLD")"
echo ""
# =============================================================================
# INSTRUCTIONS
# =============================================================================
echo "=============================================="
echo " NEXT STEPS"
echo "=============================================="
echo ""
echo "After Gazebo loads, open a NEW terminal and run:"
echo ""
echo " source ~/venv-ardupilot/bin/activate"
echo " sim_vehicle.py -v ArduCopter -f gazebo-iris --model JSON --console"
echo ""
echo "Then open ANOTHER terminal to run the controller:"
echo ""
echo " source ~/venv-ardupilot/bin/activate"
echo " cd ~/RDC_Simulation"
echo " python scripts/run_ardupilot.py --pattern square"
echo ""
echo "=============================================="
echo ""
echo "[INFO] Starting Gazebo..."
# =============================================================================
# RUN GAZEBO
# =============================================================================
gz sim -v4 -r "$WORLD"