内容
estrel

访问,观看实时任务重放ajnieves1.github.io/Kestrel](https://ajnieves1.github.io/Kestrel/).

无人机围绕一个结构飞行。它和机载视觉模型发现飞近每个缺陷以确认缺陷。它以纯文本编写检查## 工作原理
```mermaid
flowchart TB
subgraphazebo Harmonic]
world[世界:塔结构和缺陷标记]
copter[无人机模型]
end
sitArduCopter SITL mavros[MAVROS 2]
subgraph nodes[2 图,Kestrel 节点]
telemetry[遥测监视器:监视状态]
commander[飞行指挥,起飞,前往落]
guard[安全防护:地理围栏,电池,RTL]
detector[缺陷检测器:摄像头流上的 YOLOv8n 腐蚀检测]
planner[检查规划器:测量网格和近距离观察]
director[任务指挥:状态机,运行作业]
writer[报告编写器:LLM API,编写报告cp[mcp_server:stdio 上的 MCP 工具]
end
sim -- 物理和电机 --> sitl
sim -- 摄像头帧 --> detector
sitl -- MAVLink udp 14550 --> mavros
mavros -- ROS 2 主题和服务 --> nodes
director --> planner
director --> commander
detector --> director
director --> mcp
mcp --> commander
mcp --> guard
```
在一次任务中会发生以下步骤:
1. `mission_director` 向 `inspection_planner` 请求围绕结构的测量路径。
2. `mission_director` 向 `flight_commander` 发送每个航点。
3. 在整个飞行过程中,`defect_detector` 向 `mission_director` 发送检测结果。
4. 当检测到缺陷时,`mission_director` 暂停测量飞行。它将无人机发送到缺陷周围的近距离轨道。
5. 系统存储每个照片和每个检测结果。
6. 无人机着陆后,`report_writer` 以 markdown 格式编写报告。报告包括存储的照片。
## 快速入门
```bash
git clone https://github.com/ajnieves1/Kestrel.git
docker compose -f docker/compose dev
docker compose -f docker/compose.yaml run --rm dev ros2 launch kestrel mission.launch.py headless:=true
```
要使用 Gazebo GUI,请从命令中删除 `headless`。在运行命令之前,请在主机上运行一次 `xhost +local:`。
## 与其对话
飞行栈也作为一个 MCP 服务器运行。LLM 客户端可以通过此服务器控制模拟。客户端可以请求遥测数据。客户端可以发送起飞命令。客户端可以将无人机发送到某个位置。客户端可以发送降落命令。每个命令都经过与自主任务相同的受保护服务。安全防护节点始终保持最终控制权。
使用以下命令在名为 `kestrel` 的容器中启动飞行栈:
```bash
docker compose -f docker/compose.yaml --profile headless run --rm --name kestrel headless \
bash -c "source install/setup.bash && ros2 launch kestrel sitl.launch.py headless:=true & \
sleep 5 && ros2 run kestrel flight_commander & \
sleep 2 && ros2 run kestrel safety_guard & wait"
```
如果您在 Mac 或 Windows 计算机上使用 Claude Desktop,请将以下代码添加到 `claude_desktop_config.json` 文件中:
```json
{
"mcpServers": {
"kestrel": {
"command": "docker",
"args": ["exec", "-i", "kestrel", "bash", "-c",
"source /opt/ros/jazzy/setup.bash && source /ws/install/setup.bash && ros2 run kestrel mcp_server"]
}
}
}
```
如果您在任何计算机上使用 Claude Code,请改用以下命令:
```bash
claude mcp add kestrel -- docker exec -i kestrel bash -c \
"source /opt/ros/jazzy/setup.bash && source /ws/install/setup.bash && ros2 run kestrel mcp_server"
```
完成此步骤后,打开一个新会话。要求客户端检查遥测数据。要求客户端将无人机发送到 3 米的高度。要求客户端降落无人机。可用工具包括 `takeoff`、`goto`、`land`、`abort`、`get_telemetry`get_mission_state`。系统将已完成的任务报告 资源提供。在 `kestrel://reports` 中找到它们。
## 示例报告
没有设置 LLM API 密钥,则完整的任务运行会编写一份仅包含附录的报告。在 [docs/sample_report.md](docs/sample_report.md) 中查看示例## 模型和数据集
腐蚀检测器使用 YOLOv8n 模型。训练数据集是 [`Francesco/corrosion-bi3q3`](https://huggingface.co/datasets/Francesco/corrosion-bi3q3),它是 Roboflow 100 基准测试的一部分。该数据集使用 CC BY 4.0 许可证。有关训练步骤,请参见 [`models/vision/TRAINING.md`](models/vision/TRAINING.md)。
模拟中的四个标记板显示了来自数据集验证拆分的真实腐蚀照片。检测器并未针对这些特定照片进行训练。在保留的测试拆分上,预训练的 ONNX 模型达到了 0.621 的 mAP50 分数。在生产置信度阈值下,精度为 0.966,召回率为 0.530。这些是 `scripts/eval_model.py` 在真实照片上的真实测量结果。
模拟中的实时检测存在一个已知限制。在模拟渲染为平面纹理和模拟光照的情况下,神经网络在照片上训练后无法可靠地识别同一张照片。这是模拟数据和真实数据之间的一个真实差距。请参见 [docs/benchmarks.md](docs/benchmarks.md)。
也可以使用 OpenCV ArUco 检测。设置参数 `detector_backend` 为 `aruco` 即可使用它。标记板现在显示腐蚀 ArUco 模式。因此,在当前模拟中,ArUco 检测器也找不到标记。 该项目早期版本证明了 ArUco 检测器对 ArUco 标记板是可靠的。
## 机载智能
无人机在机载运行多个 AI 系统。每个模型都导出为 ONNX 并在 CPU 上使用 ONNX Runtime 运行。每个系统都是咨询性的。安全防护节点保持最终控制权。
| 系统 | 模型 | 输入 | 功能 |
|---|---|---|---|
| 健康监测 | PyTorch 自编码器 | 推进系统遥测数据 | 在电机故障发生前警告 |
| 障碍感知 | 点云分析 | 激光雷达 | 在接近结构时警告 |
| 深度导航 | MiDaS 单目深度 | 摄像头 | 建议在结构接近时更安全的航向 |
| 腐蚀检测器 | YOLOv8n | 摄像头 | 查找结构上的缺陷 |
健康监测器是一个在正常飞行遥测数据上训练的小型自编码器。它在持续异常时触发,而不是在单个噪声读数时触发,并且在注入电机故障时触发。模型从数据中学习正常状态,因此必须在与运行条件相同的遥测数据上训练。有关运行点和灵敏度数字,请参见 [docs/health_benchmarks.md](docs/health_benchmarks.md)。
每个模型都在边缘进行测量。INT8 量化将检测器从 11.7 MB 缩小到 3.2 MB,而 mAP50 仅从 0.621 更改为 0.613。请参见 [docs/edge_benchmarks.md](docs/edge_benchmarks.md)。
## 技术栈
| 组件 | 角色 |
|---|---|
| ROS 2 Jazzy | 节点图、主题和服务 |
| ArduPilot SITL | 飞行控制器模拟 |
| MAVROS 2 | MAVLink 桥接 ROS 2 |
| Gazebo Harmonic | 物理模拟和摄像头 |
| YOLOv8n(ONNX) | 缺陷检测器。OpenCV ArUco 作为备用 |
| LLM 报告编写器 | Claude、OpenAI 或 Gemini。参数选择提供商 |
| FastMCP | 用于 LLM 客户端的对话式控制 MCP 服务器 |
| Docker | 每个计算机的开发镜像 |
| GitHub Actions | CI 在每次推送时运行真实 SITL 飞行测试 |
## 许可证
MIT