无人机控制服务器

Crazyflie MCP Server是一个用于控制Crazyflie 2.1+无人机的服务器,支持运动捕捉和AI Deck功能。

  • by Remenby31
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Remenby31/crazyflight_mcp

使用说明

Crazyflie MCP服务器

MCP(模型上下文协议)服务器,用于控制Crazyflie 2.1+无人机,支持运动捕捉和AI甲板。

🚀 快速启动

先决条件

  • Python 3.8+
  • Crazyradio 2.0(cléUSB Bitcraze)
  • Crazyflie 2.1+无人机

安装

  1. 克隆或下载此项目
  2. 安装依赖项:
pip install -r requirements.txt
  1. 安装USB驱动程序(平台专用):

窗户:

# Les drivers libusb1 sont généralement installés automatiquement
# Si besoin: télécharger depuis https://github.com/libusb/libusb/releases

Linux:

sudo apt-get install libusb-1.0-0-dev

macOS:

brew install libusb

使用

  1. 插入 Crazyradio 2.0 版本 在USB端口上
  2. 启动服务器:
python mcp_server.py

服务器将自动:

  • 检测CrazyRadio 2.0
  • 扫描可用的无人机
  • 向Claude Code公开所有MCP工具

📚 建筑

该项目分为以下模块:

crazyflight_mcp/
├── core/                      # Modules principaux
│   ├── usb_detector.py       # Détection USB Crazyradio
│   ├── connection_manager.py # Gestion des connexions
│   ├── state_manager.py      # État persistant
│   └── error_handler.py      # Gestion d'erreurs
│
├── controllers/              # Contrôleurs métier
│   ├── flight_controller.py # Contrôle de vol
│   ├── logging_controller.py # Télémétrie
│   ├── param_controller.py  # Paramètres
│   ├── mocap_controller.py  # Motion Capture
│   └── ai_controller.py     # AI Deck
│
├── utils/                   # Utilitaires
│   ├── validators.py       # Validation des paramètres
│   ├── converters.py       # Conversions mathématiques
│   └── safety.py           # Vérifications de sécurité
│
├── tools/                  # Tools MCP (à venir)
├── mcp_server.py          # Serveur principal
└── config.yaml            # Configuration

🛠️ 可用的 MCP 工具

连接(cf_*)

  • cf_scan_drones -扫描可用的无人机
  • cf_connect -连接到无人机
  • cf_disconnect -断开与无人机的连接
  • cf_list_connected -列出连接的无人机
  • cf_get_radio_status -CrazyRadio 2.0的状态

飞行控制(Flight_*)

  • flight_takeoff -自动起飞
  • flight_land -自动着陆
  • flight_goto -移动到一个位置
  • flight_emergency_stop -紧急停止
  • flight_get_position -位置执行器

遥测(log_*)

  • log_get_telemetry -遥测的完整快照
  • log_get_variables -可用于日志记录的变量
  • log_start_streaming -变量流(即将推出)

参数( 参数_*)

  • param_list -列出参数
  • param_get -恢复参数
  • param_set -更改参数(即将发布)

动作捕捉(mocap_*)

  • mocap_send_position -发送位置运动捕获
  • mocap_start_stream -Mocap流媒体(即将推出)
  • mocap_get_quality -跟踪质量(即将推出)

AI甲板(AI_*)

  • ai_deck_detect -检测AI甲板
  • ai_camera_start_stream -流媒体摄像机(即将推出)
  • ai_gap8_upload_model -上传模板(即将推出)
  • ai_gap8_start_inference -开始推理(即将到来)

诊断(diag_*)

  • diag_get_error_log -错误历史
  • diag_run_health_check -完整诊断(即将发布)

📋 Claude代码的示例用法

示例1:简单起飞和着陆

Claude: "Scanne les drones disponibles"
→ Utilise: cf_scan_drones()

Claude: "Connecte-toi au premier drone et fais-le décoller"
→ Utilise: cf_connect(uri="radio://0/80/2M/E7E7E7E7E7")
→ Utilise: flight_takeoff(uri="...", height_m=0.5)

Claude: "Montre-moi sa position"
→ Utilise: flight_get_position(uri="...")

Claude: "Fais-le atterrir"
→ Utilise: flight_land(uri="...")

示例2:运动捕获飞行

Claude: "Récupère la position du drone depuis mocap et envoie-la"
→ Utilise: mocap_send_position(uri="...", x=1.0, y=0.5, z=0.8)

Claude: "Fais voler le drone jusqu'à (2, 1, 1)"
→ Utilise: flight_goto(uri="...", x=2, y=1, z=1)

示例3:遥测和诊断

Claude: "Montre-moi la télémétrie complète"
→ Utilise: log_get_telemetry(uri="...")

Claude: "Y a-t-il des erreurs?"
→ Utilise: diag_get_error_log(max_errors=10)

⚙️ 配置

修饰符 config.yaml 要个性化:

mcp_crazyflie:
  radio:
    auto_detect: true
    vendor_id: 0x1915  # Bitcraze

  connection:
    auto_scan_on_start: true
    reconnect_attempts: 5

  safety:
    emergency_stop_on_low_battery: true
    battery_warning_threshold_v: 3.2
    max_flight_height_m: 2.5

  mocap:
    enabled: false
    system: "custom"  # optitrack, vicon, qualisys

  ai_deck:
    auto_detect: true
    default_camera_fps: 15

🔒 安全

服务器包括几个安全措施:

  • 起飞前检查电池
  • 可配置飞行高度限制
  • 无线电质量检查
  • 紧急停止始终可用
  • 发送位置的验证
  • 完整错误日志记录

🐛 故障排除

未检测到CrazyRadio

# Vérifier que le dongle est bien branché
# Windows: Vérifier dans le gestionnaire de périphériques
# Linux: lsusb | grep Bitcraze
# macOS: system_profiler SPUSBDataType | grep Bitcraze

连接问题

# Vérifier que cflib est installé
python -c "import cflib; print(cflib.__version__)"

# Vérifier les logs
tail -f crazyflie_mcp.log

找不到无人机

  1. 确保无人机已打开
  2. 增加扫描超时时间(默认为5s)
  3. 尝试指定特定频道

📖 完整文档

看 doc.md 有关Crazyflie、运动捕捉和AI甲板的完整文档。

🤝 贡献

欢迎捐款!查看问题以查看当前任务。

📄 许可证

MIT许可证-voir许可证文件

🔗 资源

🎯 路线图

  • []实施所有计划的50多个MCP工具
  • []AI Deck视频流
  • []实时推理
  • []协调多无人机控制
  • []界面web去监控
  • []支持ROS2
  • []会话记录
  • []模拟模式
  • []避障
  • []高级路径规划