docs: Improve quick start, ArduPilot setup, and troubleshooting, and add GPS mode option.
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
# Run Gazebo FIRST in another terminal!
|
||||
#
|
||||
# Usage:
|
||||
# Terminal 1: ./scripts/run_ardupilot_sim.sh
|
||||
# Terminal 1: ./scripts/run_ardupilot_sim.sh runway
|
||||
# Terminal 2: ./scripts/run_ardupilot_controller.sh --pattern square
|
||||
# =============================================================================
|
||||
|
||||
@@ -15,6 +15,10 @@ set -e
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
|
||||
# =============================================================================
|
||||
# ENVIRONMENT SETUP
|
||||
# =============================================================================
|
||||
|
||||
# Deactivate any existing venv
|
||||
if [ -n "$VIRTUAL_ENV" ]; then
|
||||
deactivate 2>/dev/null || true
|
||||
@@ -34,7 +38,10 @@ echo " ArduPilot SITL + Controller"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
|
||||
# Check sim_vehicle.py
|
||||
# =============================================================================
|
||||
# CHECKS
|
||||
# =============================================================================
|
||||
|
||||
if ! command -v sim_vehicle.py &> /dev/null; then
|
||||
echo "[ERROR] sim_vehicle.py not found"
|
||||
echo ""
|
||||
@@ -43,7 +50,6 @@ if ! command -v sim_vehicle.py &> /dev/null; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check empy
|
||||
if ! python3 -c "import em" 2>/dev/null; then
|
||||
echo "[ERROR] empy not found"
|
||||
echo ""
|
||||
@@ -52,13 +58,18 @@ if ! python3 -c "import em" 2>/dev/null; then
|
||||
fi
|
||||
|
||||
echo "[OK] Environment ready"
|
||||
echo "[INFO] Python: $(which python3)"
|
||||
echo ""
|
||||
|
||||
# Start SITL with console
|
||||
echo "[INFO] Starting SITL..."
|
||||
# =============================================================================
|
||||
# START SITL
|
||||
# =============================================================================
|
||||
|
||||
echo "[INFO] Starting ArduCopter SITL..."
|
||||
echo "[INFO] Make sure Gazebo is running first!"
|
||||
echo ""
|
||||
|
||||
cd ~/ardupilot
|
||||
sim_vehicle.py -v ArduCopter -f gazebo-iris --model JSON --console &
|
||||
SITL_PID=$!
|
||||
|
||||
@@ -68,32 +79,42 @@ TRIES=0
|
||||
while ! nc -z 127.0.0.1 5760 2>/dev/null; do
|
||||
sleep 1
|
||||
TRIES=$((TRIES + 1))
|
||||
if [ $TRIES -ge 60 ]; then
|
||||
echo "[ERROR] SITL timeout"
|
||||
if [ $TRIES -ge 90 ]; then
|
||||
echo ""
|
||||
echo "[ERROR] SITL timeout (90s)"
|
||||
kill $SITL_PID 2>/dev/null || true
|
||||
exit 1
|
||||
fi
|
||||
if ! kill -0 $SITL_PID 2>/dev/null; then
|
||||
echo "[ERROR] SITL died - is Gazebo running?"
|
||||
echo ""
|
||||
echo "[ERROR] SITL process died"
|
||||
echo "[TIP] Is Gazebo running? Start it first with:"
|
||||
echo " ./scripts/run_ardupilot_sim.sh runway"
|
||||
exit 1
|
||||
fi
|
||||
echo -n "."
|
||||
done
|
||||
echo ""
|
||||
echo "[OK] SITL ready"
|
||||
echo "[OK] SITL ready on port 5760"
|
||||
echo ""
|
||||
|
||||
# Cleanup on exit
|
||||
trap "echo ''; echo '[INFO] Stopping...'; kill $SITL_PID 2>/dev/null; exit 0" INT TERM
|
||||
# =============================================================================
|
||||
# CLEANUP
|
||||
# =============================================================================
|
||||
|
||||
# Wait a moment for SITL to stabilize
|
||||
sleep 2
|
||||
trap "echo ''; echo '[INFO] Stopping SITL...'; kill $SITL_PID 2>/dev/null; exit 0" INT TERM
|
||||
|
||||
# Run the controller
|
||||
echo "[INFO] Starting flight controller..."
|
||||
# Wait for SITL to stabilize
|
||||
sleep 3
|
||||
|
||||
# =============================================================================
|
||||
# RUN CONTROLLER
|
||||
# =============================================================================
|
||||
|
||||
echo "[INFO] Starting drone controller..."
|
||||
echo ""
|
||||
cd "$PROJECT_DIR"
|
||||
python scripts/run_ardupilot.py "$@"
|
||||
|
||||
# Cleanup
|
||||
kill $SITL_PID 2>/dev/null
|
||||
kill $SITL_PID 2>/dev/null || true
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# =============================================================================
|
||||
# ArduPilot Gazebo Simulation Launcher
|
||||
# =============================================================================
|
||||
# Launches Gazebo with the ArduPilot iris drone model.
|
||||
# Start this FIRST, then run SITL in another terminal.
|
||||
# Launches Gazebo with the ArduPilot iris drone.
|
||||
# START THIS FIRST, then run SITL in another terminal.
|
||||
#
|
||||
# Usage:
|
||||
# ./scripts/run_ardupilot_sim.sh # Default runway
|
||||
@@ -17,7 +17,6 @@ echo " Gazebo + ArduPilot Simulation"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
|
||||
# Get script directory
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
|
||||
@@ -53,14 +52,19 @@ export GZ_SIM_RESOURCE_PATH="${PROJECT_DIR}/gazebo/models:${GZ_SIM_RESOURCE_PATH
|
||||
# CHECK INSTALLATION
|
||||
# =============================================================================
|
||||
if [ ! -d "${HOME}/ardupilot_gazebo" ]; then
|
||||
echo "[ERROR] ardupilot_gazebo not found!"
|
||||
echo "Run: ./setup/install_ardupilot.sh"
|
||||
echo "[ERROR] ardupilot_gazebo directory not found!"
|
||||
echo ""
|
||||
echo "Install with: ./setup/install_ardupilot.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "${HOME}/ardupilot_gazebo/build/libArduPilotPlugin.so" ]; then
|
||||
echo "[ERROR] ArduPilot plugin not built!"
|
||||
echo "Run: cd ~/ardupilot_gazebo && mkdir -p build && cd build && cmake .. && make -j4"
|
||||
echo "[ERROR] ArduPilot Gazebo plugin not built!"
|
||||
echo ""
|
||||
echo "Build it:"
|
||||
echo " cd ~/ardupilot_gazebo"
|
||||
echo " mkdir -p build && cd build"
|
||||
echo " cmake .. && make -j4"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -92,22 +96,22 @@ case "$WORLD_ARG" in
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "[INFO] World: $(basename "$WORLD")"
|
||||
echo "[OK] World: $(basename "$WORLD")"
|
||||
echo ""
|
||||
|
||||
# =============================================================================
|
||||
# INSTRUCTIONS
|
||||
# =============================================================================
|
||||
echo "=============================================="
|
||||
echo " STEP 1: Gazebo Starting..."
|
||||
echo " NEXT STEPS"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
echo "After Gazebo loads, run SITL in another terminal:"
|
||||
echo "After Gazebo loads, open a NEW terminal and run:"
|
||||
echo ""
|
||||
echo " source ~/venv-ardupilot/bin/activate"
|
||||
echo " sim_vehicle.py -v ArduCopter -f gazebo-iris --model JSON --console"
|
||||
echo ""
|
||||
echo "Then run the flight controller:"
|
||||
echo "Then open ANOTHER terminal to run the controller:"
|
||||
echo ""
|
||||
echo " source ~/venv-ardupilot/bin/activate"
|
||||
echo " cd ~/RDC_Simulation"
|
||||
@@ -115,6 +119,7 @@ echo " python scripts/run_ardupilot.py --pattern square"
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
echo "[INFO] Starting Gazebo..."
|
||||
|
||||
# =============================================================================
|
||||
# RUN GAZEBO
|
||||
|
||||
Reference in New Issue
Block a user