feat: Simplify drone controller to basic flight pattern, overhaul installation guide, and update related scripts.
This commit is contained in:
114
scripts/run_flight_demo.sh
Executable file
114
scripts/run_flight_demo.sh
Executable file
@@ -0,0 +1,114 @@
|
||||
#!/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!"
|
||||
Reference in New Issue
Block a user