Files
RDC_Simulation/setup/install_macos.sh

139 lines
4.4 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 "Run: python standalone_simulation.py"
echo ""
echo "Note: ROS 2 and Gazebo are not supported on macOS."
echo " Use standalone_simulation.py for the complete experience."
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 "Quick start:"
echo " source activate.sh"
echo " python standalone_simulation.py"
echo ""
echo "With moving rover:"
echo " python standalone_simulation.py --pattern circular --speed 0.3"
echo ""