147 lines
4.8 KiB
Bash
Executable File
147 lines
4.8 KiB
Bash
Executable File
#!/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 ""
|
|
|