Files
RDC_Simulation/scripts/run_flight_demo.sh

115 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
# =============================================================================
# ArduPilot Flight Demo with Camera Viewer
# =============================================================================
# Runs the drone controller and camera viewer together.
#
# Usage: ./scripts/run_flight_demo.sh [options]
#
# Options:
# --pattern square|circle|hover Flight pattern (default: square)
# --altitude HEIGHT Flight altitude in meters (default: 5)
# --size SIZE Pattern size in meters (default: 5)
# --no-camera Skip camera viewer
# =============================================================================
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
# Parse arguments
PATTERN="square"
ALTITUDE="5"
SIZE="5"
SHOW_CAMERA=true
while [[ $# -gt 0 ]]; do
case $1 in
--pattern|-p)
PATTERN="$2"
shift 2
;;
--altitude|-a)
ALTITUDE="$2"
shift 2
;;
--size|-s)
SIZE="$2"
shift 2
;;
--no-camera)
SHOW_CAMERA=false
shift
;;
*)
shift
;;
esac
done
# Deactivate any existing venv
if [ -n "$VIRTUAL_ENV" ]; then
deactivate 2>/dev/null || true
fi
# Source ArduPilot environment
if [ -f "$HOME/.ardupilot_env" ]; then
source "$HOME/.ardupilot_env"
fi
if [ -f "$HOME/venv-ardupilot/bin/activate" ]; then
source "$HOME/venv-ardupilot/bin/activate"
fi
echo "=============================================="
echo " ArduPilot Flight Demo"
echo "=============================================="
echo ""
echo " Pattern: $PATTERN"
echo " Altitude: ${ALTITUDE}m"
echo " Size: ${SIZE}m"
echo " Camera: $SHOW_CAMERA"
echo ""
echo "=============================================="
echo ""
# Check if ROS 2 is available for camera viewer
ROS2_AVAILABLE=false
if command -v ros2 &> /dev/null; then
ROS2_AVAILABLE=true
fi
# Start camera viewer in background if requested and ROS 2 is available
CAMERA_PID=""
if [ "$SHOW_CAMERA" = true ]; then
if [ "$ROS2_AVAILABLE" = true ]; then
echo "[INFO] Starting camera viewer..."
source /opt/ros/humble/setup.bash 2>/dev/null || source /opt/ros/jazzy/setup.bash 2>/dev/null || true
python "$PROJECT_DIR/src/camera_viewer.py" --topic /camera/image_raw &
CAMERA_PID=$!
sleep 2
else
echo "[WARN] ROS 2 not available - camera viewer disabled"
echo "[INFO] To view camera, run Gazebo with camera in the world"
fi
fi
# Cleanup function
cleanup() {
echo ""
echo "[INFO] Cleaning up..."
if [ -n "$CAMERA_PID" ]; then
kill $CAMERA_PID 2>/dev/null || true
fi
}
trap cleanup EXIT INT TERM
# Run the flight controller
echo "[INFO] Starting flight controller..."
cd "$PROJECT_DIR"
python scripts/run_ardupilot.py --pattern "$PATTERN" --altitude "$ALTITUDE" --size "$SIZE"
echo ""
echo "[OK] Flight demo complete!"