#!/bin/bash # ============================================================================= # Drone Simulation - macOS Installation Script # ============================================================================= # Installs PyBullet and Python dependencies (Gazebo not supported on macOS) # # Usage: ./install_macos.sh # ============================================================================= set -e echo "==============================================" echo " Drone Simulation - macOS Installation" echo "==============================================" echo "" # Get script directory and project root SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" VENV_DIR="$PROJECT_ROOT/venv" echo "[INFO] Project root: $PROJECT_ROOT" echo "[INFO] Virtual environment: $VENV_DIR" # ----------------------------------------------------------------------------- # Step 1: Check Homebrew # ----------------------------------------------------------------------------- echo "" echo "[STEP 1/5] Checking Homebrew..." if ! command -v brew &> /dev/null; then echo "[INFO] Installing Homebrew..." /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" else echo "[INFO] Homebrew already installed" fi # ----------------------------------------------------------------------------- # Step 2: Install Python # ----------------------------------------------------------------------------- echo "" echo "[STEP 2/5] Installing Python..." if ! command -v python3 &> /dev/null; then brew install python@3.11 else echo "[INFO] Python already installed: $(python3 --version)" fi # ----------------------------------------------------------------------------- # Step 3: Create Virtual Environment # ----------------------------------------------------------------------------- echo "" echo "[STEP 3/5] Creating Python virtual environment..." if [ -d "$VENV_DIR" ]; then rm -rf "$VENV_DIR" fi python3 -m venv "$VENV_DIR" echo "[INFO] Virtual environment created at: $VENV_DIR" # ----------------------------------------------------------------------------- # Step 4: Install Python Dependencies # ----------------------------------------------------------------------------- echo "" echo "[STEP 4/5] Installing Python dependencies..." source "$VENV_DIR/bin/activate" pip install --upgrade pip if [ -f "$PROJECT_ROOT/requirements.txt" ]; then echo "[INFO] Installing from requirements.txt..." pip install -r "$PROJECT_ROOT/requirements.txt" else echo "[INFO] Installing packages manually..." pip install pybullet numpy pillow pyinstaller fi echo "[INFO] Python packages installed" # ----------------------------------------------------------------------------- # Step 5: Create Activation Script # ----------------------------------------------------------------------------- echo "" echo "[STEP 5/5] Creating activation script..." cat > "$PROJECT_ROOT/activate.sh" << 'EOF' #!/bin/bash # Drone Simulation - Environment Activation (macOS) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # Activate Python venv if [ -f "$SCRIPT_DIR/venv/bin/activate" ]; then source "$SCRIPT_DIR/venv/bin/activate" echo "[OK] Python venv activated" fi echo "" echo "Environment ready!" echo "" echo "Note: ArduPilot SITL and Gazebo require Linux." echo " Use a Linux VM (UTM) or Docker for the full simulation." echo " See docs/installation.md for details." echo "" EOF chmod +x "$PROJECT_ROOT/activate.sh" echo "[INFO] Created: $PROJECT_ROOT/activate.sh" # ----------------------------------------------------------------------------- # Verification # ----------------------------------------------------------------------------- echo "" echo "Verifying installation..." source "$PROJECT_ROOT/activate.sh" echo "" echo "Checking Python packages:" python3 -c "import pybullet; print(' PyBullet: OK')" || echo " PyBullet: FAILED" python3 -c "import numpy; print(' NumPy: OK')" || echo " NumPy: FAILED" python3 -c "from PIL import Image; print(' Pillow: OK')" || echo " Pillow: FAILED" echo "" echo "==============================================" echo " Installation Complete!" echo "==============================================" echo "" echo "Note: ArduPilot SITL and Gazebo require Linux." echo "" echo "For the full simulation, use a Linux VM or Docker:" echo " - UTM (Apple Silicon): https://mac.getutm.app" echo " - Docker Desktop: docker run -it ubuntu:22.04" echo " - Then run: ./setup/install_ubuntu.sh --with-ardupilot" echo "" echo "Once in Linux, run (3 terminals):" echo "" echo " Terminal 1: ./scripts/run_ardupilot_sim.sh runway" echo " Terminal 2: sim_vehicle.py -v ArduCopter -f gazebo-iris --model JSON --console" echo " Terminal 3: python scripts/run_ardupilot.py --pattern square" echo "" echo "See docs/installation.md for detailed instructions." echo ""