Skyboy 直播! 🎉

我非常满意地介绍我最新的编码/云/爱好项目,Skyboy App!

Skyboy 是一款 FPV 四轴飞行器飞行后遥测可视化工具,提供关键的飞行指标、配备 GPS 的四轴地图以及用于分析相关数据子集的图表。它将我对飞行 FPV 四轴飞行器的热爱与我对编码和云基础设施的热情结合在一起。

什么是FPV? 🤔

[我的第一个 FPV quad](https://res.cloudinary.com/practicaldev/image/fetch/s--OZE4PblX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/d32nom6yu78fqfkubqle.png)

FPV 代表 First-Person View,在“无人机”的上下文中,是指特定类型的四轴飞行器(也称为“四轴”)的简写,它在四轴上的摄像头和佩戴的护目镜之间具有实时视频链接飞行员。 Quad 运营商可以是业余爱好者、内容创作者或为广告、电视和电影拍摄的付费专业人士。 FPV 飞行的各种风格包括竞速、自由式、电影式和远程飞行。无论他们如何飞行,飞行员都能从四眼观察动作,并且通常可以完全控制飞机的运动。这与商业生产的 DJI 无人机的飞行方式(缓慢而稳定,或沿着预定义的飞行路径自主飞行)形成鲜明对比。

Quad 上的飞行控制器板可以配置为将有关 Quad 及其系统的遥测数据发送到飞行员的手持无线电发射器,在那里可以记录数据以供将来参考。我最初在我的收音机上设置了遥测记录,以在我的 quad 崩溃时帮助恢复。在下载了我最初的几个飞行日志后,我开始思考如何使用捕获的数据。我查看了几个现有的可视化和仪表板应用程序,但它们都是针对 DJI 无人机的。那么......如果我自己做点什么呢?

Streamlit 数据可视化📊

对数据可视化工具的搜索使我找到了Streamlit,这是一个基于 Python 浏览器的应用程序,可以灵活地以多种方式显示数据。它支持多个 Python 图形模块,以及与Mapbox的映射。

[Skyboy 应用程序中的图表和侧边栏](https://res.cloudinary.com/practicaldev/image/fetch/s--qWsNhktS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:/ /dev-to-uploads.s3.amazonaws.com/uploads/articles/lnbs96nhef24j07f8gt5.jpg)

我首先获取导入的遥测日志 - 一个逗号分隔值文件 - 并使用 Pandas 对其进行转换。将数据加载到数据框中后,我构建了多个带有选定列的绘图图表。 GPS 数据被处理并加载到卫星图像顶部的图层中,以在交互式地图小部件中生成跟踪的飞行路径。我还提取并计算了关键的飞行指标,例如时间、距离和电池消耗。

[Skyboy 应用程序中的指标和地图](https://res.cloudinary.com/practicaldev/image/fetch/s--gkO3k8St--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:// /dev-to-uploads.s3.amazonaws.com/uploads/articles/nkszfw6p141qqm9hphmf.jpg)

一旦应用程序从 IDE 运行,就该决定如何最好地将其打包以进行基于云的部署。我决定为应用程序创建一个 Docker 容器,以便它可以在任何平台上的浏览器中运行。考虑到这是我的第一个 Docker 项目(在指导课程和教程之后),构建映像相当顺利。我使用 GitHub 操作自动化了构建和存储库上传过程,我在这篇博文中对此进行了介绍。

在 AWS 上部署 Terraform 📡

此初始产品推出的最后一步是将应用程序部署到云中。我首先手动部署了必要的基础设施:虚拟私有云 (VPC) 环境;弹性容器服务 (ECS) 集群、服务和任务定义;负载均衡器;以及相关的安全组和服务角色。我还注册了一个域并为 DNS 路由创建了一个 Route 53 托管区域。

这是我第一次使用 AWS 的容器编排服务,所以我通过使用无服务器 Fargate 部署来保持简单(这意味着我不需要管理任何实例)。设置一切都相当简单,我向大喊大叫本教程系列我用作指南。当我开始构建 Terraform 代码以自动化我的基础架构时,手动部署配置成为我的参考。

我计划很快写一篇关于 Terraform 开发过程的文章,所以我不会在这里详细介绍,只是说这是一个比我以前自己处理的更复杂的项目。在 Terraform 方面以及在 GitHub Actions 方面有很多事情要弄清楚,以创建另一组依赖于分支的工作流。经过相当多的工作——以及一些让我发疯的时刻——我取消了手动部署,我的 Terraform 配置在 Skyboy 生产帐户中启动了所有必要的资源,以成功重新部署应用程序。

MVP 🏆

Skyboy在这一点上是 MVP(最小可行产品)。它目前仅处理具有一组特定标头的遥测日志。在我最新的 quad 版本上更改了一些硬件后,我发现一些遥测数据要么已更改,要么已从日志文件中省略。这会在应用程序中引发错误,下一步是处理这些错误以适应各种数据集。

其他待办事项包括:

  • 认证

  • 将遥测日志存储在 S3 而不是内存中

  • 使用映射选项

  • 布局与美学

关于使用 ECS 进行云容器编排和使用众多可用选项之一(也许是 Datadog)进行监控,我还有很多学习要做。开发和部署我的第一个本土应用程序的过程令人谦卑和激动,我很高兴看到我可以将这个项目带到哪里!

所有代码(Python、Terraform 和 GitHub Actions 工作流)都可以在Skyboy GitHub 存储库中找到。

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐