Skip to main content

AI Drone (Chinese)

AI 无人机

简介

AI 无人机, 通过机载电脑 实现边缘AI运算。 让无人机可以自主飞行,并且通过AI实时控制和调整飞机作业。外加地面站实时反馈。

提前准备

  • 可以安装 Ardupilot飞控
  • 无人机
  • 机载电脑
  • 摄像头
  • 地面站 ( 笔记本电脑)

第一步 : 准备无人机 | Setup the Drone

caution

上电前,请 务必移除螺旋桨! Remove all propellers before powering on for safety.

  • 准备一套 ArduPilot 支持的飞控(如 Pixhawk 6C)
  • 组装好电调、电机、飞控、GPS、遥控接收器等
  • 连接电源模块(如 Holybro PM02D)确保安全供电
  • 飞控初始化配置:
    • 使用 Ardupilot 飞控设置
    • 设置飞行模式、校准遥控器、加速度计、指南针、GPS 等

第二步: 准备机载电脑 | Prepare the Onboard Computer

安装系统:

使用 Raspberry Pi Imager 安装系统 建议选择 64-bit,无桌面版本: Rasbarry Pi OS Lite (64-bit) ⚙️ 设置时启用 SSH, WIFI, 和摄像头

🛠️系统准备必要工具:

bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y git python3-pip python3-venv python3-opencv
sudo apt install -y libatlas-base-dev libjpeg-dev libtiff5-dev libqtgui4 libqt4-test

配置摄像头:

bash
# 启用摄像头、SSH、跳过GUI登录、启用I2C/UART
sudo raspi-config

第三步:准备地面站

  1. 安装 Ardupilot 地面站 Mission Planning (可选)
  2. 安装 Linux 系统, 这里推荐在Windows下安装 WSL

第四步 测试人体识别

安装 OpenCV(如未安装):

bash
    pip install opencv-python

运行测试脚本:

Pi OS Lite (64-bit)
# face_detect.py 示例
import cv2

cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
cv2.imshow('Face', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()

第五步: 连接飞控与机载电脑 | Connect Flight Controller to Computer via MAVLink

  1. 安装虚拟环境(推荐) 为了隔离依赖,使用 Python 虚拟环境运行 MAVLink 脚本:

    bash
        sudo apt update
    sudo apt install -y python3-venv python3-pip

    # 创建并进入虚拟环境
    python3 -m venv ~/mav-env
    source ~/mav-env/bin/activate

    # 安装 MAVLink 相关包
    pip install pymavlink MAVProxy
  2. 确定MavProxy工具包已经安装

    bash
    mavproxy.py --version

    或在 Python 中测试:

    python
    from pymavlink import mavutil
    print("✅ pymavlink installed")
  3. 确定正确接线:

    • 飞控 TX → USB 转串口的 RX
    • 飞控 RX → USB 转串口的 TX
    • 波特率建议使用:57600, 115200, 或 921600
    • 查看串口号:
    bash
        ls /dev/ttyACM*     # USB 直连
    ls /dev/serial0 # GPIO UART
  4. 检测是否连接成功

    • 查看飞控连接:
    bash
    ls /dev/ttyACM*
    • 使用 MAVProxy 测试:
    bash
    mavproxy.py --master=/dev/ttyACM0 --baudrate 115200 --aircraft test-drone
    • 出现如下输出表示连接成功:
    bash
    Waiting for heartbeat from /dev/ttyACM0
    MAV>
  5. 连接后在 MAVProxy 控制台输入命令:

    bash
        status         # 查看飞控状态(模式、电压、GPSRC 输入等)
    gpsstatus # 查看 GPS 卫星数量与位置
    rc # 实时查看遥控器各通道值
    param show # 查看飞控参数
  6. 简单通过电脑控制飞控

    Mavlink
        # 解锁电机
    arm throttle

    # 锁定电机
    disarm throttle

    # 查看电压、电流、电源状态
    battery

    # 查看当前 GPS 位置
    gpsstatus

    # 设置模式(如:定高、巡航)
    mode ALT_HOLD
    mode GUIDED

    # 设置参数(例如:关闭 ARM 检查)
    param set ARMING_CHECK 0

    # 控制特定通道输出(测试马达旋转)
    servo set 1 1700
    servo set 2 1500

    # 保存当前参数
    param save

第六步: 获取 GPS 数据

在人脸识别脚本中添加获取 GPS 坐标:

python
    from pymavlink import mavutil

# 连接飞控
master = mavutil.mavlink_connection('/dev/ttyACM0', baud=115200)
master.wait_heartbeat()

# 获取 GPS 信息
msg = master.recv_match(type='GLOBAL_POSITION_INT', blocking=True)
lat = msg.lat / 1e7
lon = msg.lon / 1e7

第七步:保存图像并记录数据

示例逻辑: 检测到人脸时

保存图像 ~/captures/YYYY-MM-DD_HH-MM-SS.jpg

记录当前 GPS 与时间戳至 CSV

示例代码片段:

python
    import csv
from datetime import datetime

def log_data(lat, lon):
with open('~/log/location.csv', 'a') as f:
writer = csv.writer(f)
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
writer.writerow([timestamp, lat, lon])