Crazyflie MCP服务器
MCP(模型上下文协议)服务器,用于控制Crazyflie 2.1+无人机,支持运动捕捉和AI甲板。
🚀 快速启动
先决条件
- Python 3.8+
- Crazyradio 2.0(cléUSB Bitcraze)
- Crazyflie 2.1+无人机
安装
- 克隆或下载此项目
- 安装依赖项:
pip install -r requirements.txt- 安装USB驱动程序(平台专用):
窗户:
# Les drivers libusb1 sont généralement installés automatiquement
# Si besoin: télécharger depuis https://github.com/libusb/libusb/releasesLinux:
sudo apt-get install libusb-1.0-0-devmacOS:
brew install libusb使用
- 插入 Crazyradio 2.0 版本 在USB端口上
- 启动服务器:
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找不到无人机
- 确保无人机已打开
- 增加扫描超时时间(默认为5s)
- 尝试指定特定频道
📖 完整文档
看 doc.md 有关Crazyflie、运动捕捉和AI甲板的完整文档。
🤝 贡献
欢迎捐款!查看问题以查看当前任务。
📄 许可证
MIT许可证-voir许可证文件
🔗 资源
🎯 路线图
- \[\]实施所有计划的50多个MCP工具
- \[\]AI Deck视频流
- \[\]实时推理
- \[\]协调多无人机控制
- \[\]界面web去监控
- \[\]支持ROS2
- \[\]会话记录
- \[\]模拟模式
- \[\]避障
- \[\]高级路径规划
