AWS设计和实现无人机图形显示和控制系统

设计 无人机图形显示和控制系统 涉及多个组件,这些组件组合在一起以确保实时监控和精确控制。
要使用 AWS 实施 无人机图形显示和控制系统,您需要通过云基础设施将实时视频流、遥测监控和远程控制相结合。AWS 提供了 IoT Core、Kinesis 和 Lambda 等强大的工具,有助于构建此系统,而 Python 可用于控制无人机和处理流。
该系统可以通过高级 AI/ML 等功能进行扩展,以实现自主飞行,或与其他 AWS 服务(如 SageMaker)集成以进行实时分析。
以下是系统设计的细分、AWS 实施的技术堆栈、实施的详细步骤,以及用于控制无人机和显示视频源的关键 Python 代码。

系统设计概述

该系统由两个主要组件组成:

  1. 实时无人机数据显示:

    • 显示来自无人机摄像头的实时视频源。
    • 在地图上叠加显示遥测数据(GPS、海拔高度、电池、方向等)。
  2. 控制界面:

    • 提供对无人机的远程控制。
    • 允许输入以控制移动、高度和摄像机角度。

关键系统组件

  1. 无人机:

    • 配备摄像头(用于视频馈送)和遥测传感器(GPS、IMU、高度传感器等)。
    • 使用飞行控制器(例如 PX4 或 ArduPilot)与传感器和执行器连接。
  2. 地面站(客户端接口):

    • 显示实时视频源(带有遥测等叠加层)。
    • 控制界面允许操作员发出飞行命令。
  3. 云基础设施 (AWS):

    • 使用 AWS 服务存储数据、处理视频源并确保与无人机的可靠通信。

适用于无人机系统的 AWS 架构

  1. AWS IoT Core: 用于无人机和云之间的通信。它支持与设备进行安全可靠的通信。

    • 无人机可以通过 MQTT 连接到 AWS IoT Core,以获取遥测数据和控制消息。
  2. AWS Kinesis Video Streams (KVS): 用于将视频从无人机流式传输到云中。KVS 可以提取和存储实时视频流,并支持对视频数据的低延迟访问。

    • 用于处理来自无人机的实时视频源。
  3. AWS Lambda: 用于处理和分析遥测数据。

    • Lambda 函数可以处理来自无人机的遥测数据、提取关键指标并触发操作(例如,警报、处理)。
  4. AWS S3 (Simple Storage Service): 用于存储视频片段、遥测数据和其他日志以供日后检索。

5.Amazon DynamoDB 或 RDS: 用于存储飞行数据和日志。

  • 遥测数据(如飞行坐标、电池电量和其他指标)可以存储在 DynamoDB 中。
  1. AWS API Gateway: 用于构建与无人机通信的控制接口 API。

    • 提供地面站(客户端)用于向无人机发送控制命令的 RESTful API。
  2. Amazon CloudWatch: 用于监控和日志记录。

    • 用于跟踪无人机的状态、遥测数据和潜在的系统故障。

实施的高级步骤

第 1 步:设置 AWS IoT Core 以进行无人机通信
  1. 在 AWS IoT Core 中创建 IoT 事物:

    • 将每架无人机注册为 IoT 事物,以在无人机和 AWS 服务之间建立安全连接。
  2. 配置 MQTT 主题:

    • 设置遥测主题(例如,“drone/telemetry/”)、控制命令(例如,“drone/control/”)和状态消息。
  3. 实施安全身份验证和授权:**

    • 使用证书或 Amazon Cognito 进行安全身份验证。
第 2 步:设置 AWS Kinesis Video Streams
  1. 创建 Kinesis 视频流:

    • 设置 Kinesis 流以接收和传输来自无人机的实时视频源。
  2. 无人机相机接口:

    • 使用 GStreamerOpenCV 等库将相机源从无人机流式传输到 Kinesis。
  3. 视频流处理:**

    • 使用 AWS Lambda 处理视频源,以添加叠加、注释或任何所需的转换。
第 3 步:控制界面和遥测
  1. 使用 AWS API Gateway 构建控制 API:

    • 创建 RESTful API 以向无人机发送控制命令。
    • 示例 API: ‘POST /drone/control’ (数据如 ‘{“pitch”: 10, “roll”: 5, “yaw”: 2, “altitude”: 50}’)。
  2. 云到无人机通信:

    • 使用 AWS IoT Core 将控制命令从客户端发送到无人机。
第 4 步:实现实时遥测显示
  1. 收集遥测数据:

    • 使用 Lambda 处理无人机发送的遥测数据。
    • 将其存储在 DynamoDB 中以供检索和显示。
  2. 用于遥测和视频显示的 Web 应用程序:

    • 使用 WebSockets 进行持久连接,以流式传输遥测和视频源。
    • 使用 React.jsVue.js 创建仪表板,以显示遥测数据、视频源和地图叠加层。
第 5 步:监控和存储数据
  1. 在 S3/DynamoDB 中记录飞行数据:

    • 应保存遥测数据、视频片段和控制日志以供将来分析。
  2. 使用 CloudWatch 进行监控:

    • 设置 CloudWatch 以监控系统、视频流和 API 调用的运行状况。

用于无人机控制和视频馈送的 Python 代码**

1.无人机遥测收集(使用 MQTT)
import paho.mqtt.client as mqtt
import json# AWS IoT Core credentials
aws_endpoint = "your-aws-endpoint.iot.us-west-2.amazonaws.com"
port = 8883
client_id = "drone-1"
thing_name = "drone1"# MQTT callback function for receiving telemetry
def on_message(client, userdata, message):telemetry = json.loads(message.payload)print(f"Received telemetry data: {telemetry}")# Initialize MQTT client
client = mqtt.Client(client_id)
client.tls_set()  # Set TLS for secure connection
client.username_pw_set(username="AWS_ACCESS_KEY", password="AWS_SECRET_KEY")
client.on_message = on_message# Connect to AWS IoT Core
client.connect(aws_endpoint, port)# Subscribe to the telemetry topic
client.subscribe("drone/telemetry")# Start the loop to listen for messages
client.loop_start()
2.视频源流式传输到 Kinesis
import cv2
import boto3
import json
import base64
import time# Initialize Kinesis Video Stream client
kvs_client = boto3.client('kinesisvideo', region_name='us-west-2')
stream_name = "drone-stream"# Get stream endpoint for Kinesis Video Streams
response = kvs_client.describe_stream(StreamName=stream_name)
stream_endpoint = response['StreamInfo']['Endpoint']# Initialize video capture
cap = cv2.VideoCapture(0)  # 0 is the default camera IDwhile True:ret, frame = cap.read()if not ret:break# Convert the frame to base64 for sending_, encoded_frame = cv2.imencode('.jpg', frame)base64_frame = base64.b64encode(encoded_frame).decode('utf-8')# Send frame to Kinesis Video Streamkinesis_client = boto3.client('kinesis', endpoint_url=stream_endpoint)kinesis_client.put_record(StreamName=stream_name,Data=base64.b64decode(base64_frame),PartitionKey='partitionkey')time.sleep(0.033)  # Delay for ~30 FPScap.release()
3.通过 API 控制命令(包含请求的示例)
import requests
import jsonurl = "https://your-api-id.execute-api.us-west-2.amazonaws.com/dev/drone/control"data = {"pitch": 10,"roll": 5,"yaw": 2,"altitude": 50
}response = requests.post(url, json=data)if response.status_code == 200:print("Command sent successfully")
else:print("Failed to send command", response.status_code)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/892811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openharmony display

https://github.com/openharmony/drivers_peripheral/blob/master/display/README_zh.md 源码路径,这里是对rk3588的display层适配 device/soc/rockchip/rk3588/hardware/display ├── include └── src ├── display_device (代码量最大的部分&…

如何在linux系统上完成定时任务

任务背景 1.需要每小时更新一次github的host端口; 2.需要每天早上七点半准时启动电脑。 更新github的host端口 在/past/to/路径里新建一个host_update.sh文件,运行以下命令获得访问,运行和修改这个文件路径的权限: sudo chmod…

osg中实现模型的大小、颜色、透明度的动态变化

以博饼状模型为对象,实现了模型大小、颜色、透明度的动态变化。 需要注意的是一点: // 创建材质对象osg::ref_ptr<osg::Material> material = new osg::Material;material->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4(0.0, 1.0, 0.0, 0.5));// 获取模型的…

golang之数据库操作

1.导入必要的包 import("database/sql"_ "github.com/go-sql-driver/mysql" //使用此作为数据库驱动 ) 2.相关操作 连接数据库 使用sql.Open()函数进行数据库的连接 db, err : sql.Open("mysql", "user:passwordtcp(127.0.0.1:3306)/db…

为ARM64架构移植Ubuntu20.04换源的发现

在为ARM64架构(RK3566)移植ubuntu20.04的时候发现在更换为国内源之后&#xff0c;无法正常完成apt update,报错为: Ign:25 http://mirrors.aliyun.com/ubuntu focal-updates/main arm64 Packages …

源码编译安装httpd 2.4,提供系统服务管理脚本并测试

总结需要安装的包 sudo yum groupinstall "Development Tools" -y #httpd的依赖包yum install tar -y #tar压缩包sudo yum install apr-devel apr-util-devel #APR库 提供跨平台接口的库sudo yum install pcre pcre-devel # PCRE库和 pcre-config工具--提供PCRE库…

【混合开发】CefSharp+Vue桌面应用程序开发

为什么选择CefSharpVue做桌面应用程序 CefSharp 基于 Chromium Embedded Framework (CEF) &#xff0c;它可以将 Chromium 浏览器的功能嵌入到 .NET 应用程序中。通过 CefSharp&#xff0c;开发者可以在桌面应用程序中集成 Web 技术&#xff0c;包括 HTML、JavaScript、CSS 等…

从0开始学习搭网站第二天

前言&#xff1a;今天比较惭愧&#xff0c;中午打铲吃了一把&#xff0c;看着也到钻二了&#xff0c;干脆顺手把这个赛季的大师上了&#xff0c;于是乎一直到网上才开始工作&#xff0c;同样&#xff0c;今天的学习内容大多来自mdn社区mdn 目录 怎么把文件上传到web服务器采用S…

nacos环境搭建以及SpringCloudAlibaba脚手架启动环境映射开发程序

1&#xff1a;下载nacos 地址&#xff1a;https://github.com/alibaba/nacos/tags 2:选择server的zip包下载 3:启动mysql服务&#xff0c;新建数据库&#xff1a;nacos_yh 4&#xff1a;解压下载的nacos_server 进入conf目录 5&#xff1a;mysql运行sql脚本变得到下面的表 6&a…

Spring MVC流程一张图理解

由于现在项目中大部分都是使用springboot了&#xff0c;但是ssm中的springmvc还是可以了解一下 1 、用户发送请求至前端控制器 DispatcherServlet 。 2 、 DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。 3 、处理器映射器找到具体的处理器 ( 可以根据 xml 配…

数据分析如何正确使用ChatGPT进行辅助?

目录 1.数据介绍 2.特征工程 3.EDA分析 4.数据相关性分析 5.分析总结 一篇优秀的学术论文&#xff0c;肯定有新颖、适当的论证视角&#xff0c;选择恰当的研究方法&#xff0c;搭建逻辑严密、平衡的论证框架&#xff0c;把有力的数据分析紧密结合起来&#xff0c;这样一篇…

学习 Git 的工作原理,而不仅仅是命令

Git 是常用的去中心化源代码存储库。它是由 Linux 创建者 Linus Torvalds 创建的&#xff0c;用于管理 Linux 内核源代码。像 GitHub 这样的整个服务都是基于它的。因此&#xff0c;如果您想在 Linux 世界中进行编程或将 IBM 的 DevOps Services 与 Git 结合使用&#xff0c;那…

赛灵思(Xilinx)公司Artix-7系列FPGA

苦难从不值得歌颂&#xff0c;在苦难中萃取的坚韧才值得珍视&#xff1b; 痛苦同样不必美化&#xff0c;从痛苦中开掘出希望才是壮举。 没有人是绝对意义的主角&#xff0c; 但每个人又都是自己生活剧本里的英雄。滑雪&#xff0c;是姿态优雅的“贴地飞行”&#xff0c;也有着成…

openplant实时数据库(二次开发)

资源地址 我的网盘〉软件>数据库>openplant>openplant实时数据库(二次开发)

SpringBoot链接Kafka

一、SpringBoot生产者 &#xff08;1&#xff09;修改SpringBoot核心配置文件application.propeties, 添加生产者相关信息 # 连接 Kafka 集群 spring.kafka.bootstrap-servers192.168.134.47:9093# SASL_PLAINTEXT 和 SCRAM-SHA-512 认证配置 spring.kafka.properties.securi…

Win11下python 调用C++动态链接库dll

这里写自定义目录标题 Win11下python 调用C动态链接库dll环境修改C语言代码Visual Studio 2019生成dllPython 加载DLLpython 数据类型适配python调用函数 Win11下python 调用C动态链接库dll 在一些耗时的函数上考虑使用C进行加速&#xff0c;涉及把cpp文件转为dll&#xff0c;…

探索 Transformer²:大语言模型自适应的新突破

目录 一、来源&#xff1a; 论文链接&#xff1a;https://arxiv.org/pdf/2501.06252 代码链接&#xff1a;SakanaAI/self-adaptive-llms 论文发布时间&#xff1a;2025年1月14日 二、论文概述&#xff1a; 图1 Transformer 概述 图2 训练及推理方法概述 图3 基于提示的…

CSRF(跨站请求伪造)深度解析

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

5、docker-compose和docker-harbor

安装部署docker-compose 自动编排工具&#xff0c;可以根据dockerfile自动化的部署docker容器。是yaml文件格式&#xff0c;注意缩进。 1、安装docker-compose 2、配置compose配置文件docker-compose.yml 3、运行docker-compose.yml -f&#xff1a;指定文件&#xff0c;up&…

QNAP 上常用的几款软件

当我们谈到 NAS&#xff08;Network Attached Storage&#xff09;时&#xff0c;QNAP 凭借多年的产品迭代、稳定的硬件性能和不断丰富的软件生态&#xff0c;已成为很多家庭及中小型企业的首选。除了存储本身&#xff0c;QNAP 提供的各种官方软件和应用&#xff0c;也为用户带…