当前位置: 首页 > news >正文

简述大疆无人机对接

文章目录

  • 概述
  • MSDK对接
    • MSDK简介
    • MSDK集成步骤
    • 直播推流
    • 获取飞机实时数据
  • UX SDK
  • 上云API
    • 上云API简介
    • 上云API对接步骤
    • Pilot上云
      • Pilot怎么安装
      • 配置三方云平台地址
      • 直播
      • 获取飞机数据
    • Dock上云
      • Dock上云简介
      • 直播方案
      • 设备管理
  • 如何对接多个飞机
  • 引用

概述

一般而言,对接大疆的无人机的目的有如下方面:

  • 获取无人机飞行过程中的实时画面,用来直播
  • 获取飞机飞行数据(如实时高度,实时经纬度,实时飞机姿态等)
  • 获取飞机静态数据(如飞机基本信息、飞行记录、电池信息等)
  • 操控飞机飞行(如起飞、降落,改变高度,操作操控杆,设定航飞任务,拍照,录视频等)
  • 媒体管理(下载飞机记载内存卡中的文件等)
  • 其它业务功能开发(如态势感知,固件升级,多飞机集中管控等)

至于应用场景,那就太广泛了,如消防、测绘、林业等等,可以赋能各行各业。

从开发者官网可以看到对接方式有如下:

  • 应用开发:MobileSDK,UXSDK,WindowsSDK
  • 设备开发:PayloadSDK,EdgeSDK,OnBoardSDK
  • 云开发:大疆智图API,上云API
  • 私有化服务:4G私有化增强图传服务

其中有些已经过时,停止维护(如WindowsSDK,IOSSDK,OnBoardSDK),本文着重介绍MobileSDK和上云API,MobileSDK也仅仅围绕Android,因为IOS版本已经废弃。

大疆无人机的构成由飞机和遥控器组成,对接大疆的无人机本质是对接遥控器,因为无人机和遥控器通信是私有协议而且是近场通信,官方叫法是“图传”。大致的流程如下:

飞机 <—> 遥控器 <—> 三方平台

其中:

  • 飞机和遥控器是私有协议进行近场通信
  • 遥控器和三方平台是IP链路进行通信,遥控器中有一个定制版的安卓系统
  • 三方平台指非大疆软件系统,即对接方系统

另外,还有一个叫大疆机场(dock)的产品,它是一个硬件产品,顾名思义就是用来停放飞机的,一个机场对应一个飞机。那么这种情况下流程就变成了:

飞机 <—> 机场(dock) <—> 三方平台

MSDK对接

MSDK简介

Mobile SDK是一款软件开发套件,旨在让开发者能够访问DJI无人机和手持相机产品的丰富功能。该SDK通过兼顾更底层的功能,诸如飞行稳定,电池管理,信号传输和通信等,简化了应用程序开发的过程。这样,开发者就不需要具备丰富的机器人或嵌入式系统背景知识,而可以专注于DJI产品相关的行业应用开发。适用于基于android和ios的应用软件集成,目的是使用android/ios应用软件控制飞行器;获取飞行器数据(视频、图片、传感器数据)。移动应用、飞机遥控器、飞机的连接方式如下:

在这里插入图片描述

MSDK集成步骤

● sdk版本:V4和V5不兼容,自20220321开始主推V5,V4将封存仅修改严重bug
● V5仅支持android,需要android studio IDE
● 申请appkey:https://developer.dji.com/user/apps/#all
● 将官方Sample 跑起来:用来学习和理解(github地址:https://github.com/dji-sdk/Mobile-SDK-Android-V5)
● 将MSDK集成到自己的android项目中
● 编写代码和MSDK的接口进行交互
● 打包成APK,安装到遥控器上面使用
● APK可以通过ip链路和私有云服务交互

直播推流

  • V4\V5不可以后台推流,当前页面必须有Surface画面渲染,不得最小化,跳转页面。
  • V5支持RTMP(不支持RTMPS)、国标GB28181、RTSP和Agora声网(WebRTC),V4仅支持RTMP
  • 直播协议设置
    • RTMP,需要setUrl。
    • GB28181,需要setServerIP,setServerPort,setServerID,setAgentID,setPassword,setLocalPort和setChannel。
    • RTSP,需要setUserName,setPassword和setPort(需要设置为8554)。
    • Agora,需要setChannelId,setUid,setToken和enableSafety。
  • 拓展:本身DJI的H.264码流中的SEI字段在行业版V3固件以前是空的,在V3固件之后添加了信息,由于维护成本等诸多因素,我们不对外开放DJI的H.264码流的SEI的解析。我们了解到有的用户希望在H.264码流中的SEI中解析出无人机的地理位置和姿态信息,我们提供了更好的解决方案。
    • 如果你使用Mobile SDK与私有云连接,你可以通过Mobile SDK的接口获取这些信息通过移动设备的网络传输到私有云平台。
    • 如果你使用DJI Pilot 2与私有云连接,你可以通过上云API将这些信息通过移动设备的网络传输到私有云平台。

获取飞机实时数据

  • 通过KeyAircraftLocation3D可以获取飞行器的三维坐标,坐标系为WGS84,高度为相对起飞点高度。
  • 通过KeyAircraftAttitude和KeyAircraftVelocity可以获取飞行器的姿态和速度,坐标系为NED。
  • 通过KeyTakeoffLocationAltitude可以获取起飞点的海拔高度,该数据不精确。
  • 通过KeyUltrasonicHeight可以获取飞行器底部的超声波模块的测距高度
  • 调用KeyStartTakeoff将使飞行器起飞。
  • 调用KeyStartAutoLanding将开始降落,飞行器降落到离地0.7米左右悬停。此时KeyIsLandingConfirmationNeeded将变为true,调用KeyConfirmLanding确认最终降落。

UX SDK

仅适用于android,ios,旨在加快移动应用的开发,提供了UI元素及开箱即用的组件。UXSDK实际上是使用MSDK的接口封装出来的具备MSDK功能的UI控件,所以它同样依赖MSDK。

制作UXSDK的目的是为了缩短开发者开发MSDK相关app的开发周期,通过我们预先制作好的控件,可以让开发者快速地开发出类似DJI Pilot的app。UXSDK 4.X,这个版本的UXSDK使用了很多MSDK内部(未开放)的方法,所以这个版本的UXSDK无法开源,由于UI控件无法做到高度的定制化,所以只能给啥用啥,4.16将会成为它的最后一个版本,后续再发版本只会发4.16.X的维护版本。

UXSDK 5.X,这个版本的UXSDK会被设置为开源版本,它将使用MSDK 5.X版本的所有对外接口、Key来实现。未来我们也会持续更新UXSDK 5.X版本,为其提供更加丰富的控件,由于其为开源版本,欢迎开发者对其进行定制化或者制作新的UI控件更新到公共社区。

UXSDK V5将会以开源框架的形式存在于官方Sample中,以后不再有UXSDK V5这个概念存在,开发者可以在MSDK V5的官方Sample中看到一个开源的类似DJI Pilot 2的UI开源框架。

上云API

上云API简介

DJI 上云 API 主要是采用业界通用的 MQTT、HTTPS 和 WebSocket 协议,把飞机的能力抽象成物联网设备的物模型,开发者可以很方便的基于这个物模型进行业务开发,同时不用去关心飞机本身复杂的飞行控制问题。此外,上云 API 内置到 DJI Pilot 2 和大疆机场中,开发者无需重新开发 App,即可把无人机接入云平台。

业务架构图

在这里插入图片描述

目前对于 DJI 无人机接入第三方云平台,主要是基于 MSDK 开发定制 App,然后自己定义私有上云通信协议连接到云平台中。这样对于核心业务是开发云平台,无人机只是其中一个接入硬件设备的开发者来说,重新基于 MSDK 开发 App 工作量大、成本高,同时还需要花很多精力在无人机功能接口适配上,从而导致整体的方案开发进度较为缓慢。

在这里插入图片描述

上云 API 的推出主要期望解决开发者重新造轮子的苦恼。对于没有 App 深度定制需求的开发者,直接可以采用 DJI Pilot 2 来和云平台通信,使开发商可以更加专注于上云业务接口的开发与实现。

在这里插入图片描述

软件架构图

在这里插入图片描述

上云API主要用来对接专业级、行业级无人机,消费级无人机并不支持,机型支持如下:

在这里插入图片描述

上云API对接步骤

  • 类型:目前有两种方式可以和三方云进行对接,第一个是pilot2,它是遥控器上面的一个安卓程序;第二个是dock,它是大疆机场。
  • 信息传递流程为:飞机—>网关(带pilot2的遥控器 or 机场)—>三方云
  • 环境清单;
    • 前端(ts,vue,websocker,linux,高德地图开放平台js api)
    • 后端(java,mysql,mqtt,redis,websocket);
    • 版本(java >=11,mysql8.0.26,EMQX4.4.0,redis6.2,nginx1.20.2,vue3.0.5,nodejs17.8);
    • docker可选
  • 在大疆开发者网站注册成为开发者(https://developer.dji.com/cn/user/apps/#all)
  • 在大疆开发者网站创建应用,拿到API交互所需的APP ID、APP 秘钥、APP License
  • 将官方Sample 跑起来:用来学习和理解(github地址:https://github.com/dji-sdk/Cloud-API-Demo-Web,https://github.com/dji-sdk/ DJI-Cloud-API-Demo)
  • 开发三方云平台(登录页面;http服务;mqtt服务;推拉流服务等)
  • 在pilot中配置第三方云平台登录地址,并登录,token会存储到pilot中
  • 在pilot中配置其它第三方云平台的信息
  • pilot和第三方云进行数据的传输和业务功能的处理;dock和第三方云进行数据的传输和业务功能的处理
  • pilot程序退出或者飞机下线,断开和第三方云的链接
  • 目前一个机场只能用一个飞机,当飞机下线后,dock和三方云平台的链接也将终止

Pilot上云

Pilot怎么安装

Pilot2 不提供单独的安装包,无法单独获取安装包,只能通过升级固件安装Pilot。目前Pilot2 不提供单独的安装包,需要升级遥控器固件到指定的版本,遥控器固件中提供了内置的安装包。如果升级了遥控器,但是Pilot2 没有升级,需要进入遥控器的设置,手动卸载当前Pilot2 版本。升级方式:通过上方下载地址下载离线安装包进行离线升级,通过调参软件DJI Assistant 2(行业系列)升级对应的遥控器固件版本。

配置三方云平台地址

如下图所示,在DJI Pilot 2的主页面云服务栏目中有“开放平台”入口,然后在开放平台页面中输入访问的URL链接即可发起连接。由于首次请求H5页面,并没有Token信息,所以需要服务器端开发一个H5登录页面,DJI Pilot 2在每次配置完访问链接,都先去拉取该页面,然后后续的获取Token动作均由该H5页面完成

在这里插入图片描述

在这里插入图片描述

直播

仅关注 DJI PILOT 交互流程,先不用理会“机场”交互流程,机场的交互流程下面会详细讲

在这里插入图片描述

获取飞机数据

Dock上云

Dock上云简介

机场上云需要借助遥控器内安装的 DJI Pilot 2。如下图示,开发者可按照 Pilot 内的指示一步步操作完成上云。在上云过程中,需要完成设备的检查(如急停按钮的检查、网络是否已经连接等)、将飞行器与机场对频、填写上云配置信息(如填写 MQTT 账号密码以实现 MQTT 连接)等操作。

目前一个机场只能用一个飞机

dock上云需要先通过Pilot2配置三方云平台登录界面,登录完成后拿到了三方云平台信息(mqtt服务地址,流媒体服务地址等),这些信息下发到dock,后续dock和三方云平台进行交互。

直播方案

直播功能主要是把无人机相机负载和大疆机场的监控视频码流发给第三方云平台进行播放,用户可以方便的在远程web页面点击直播。直播功能支持直播的开始、停止、清晰度设置、镜头切换。第三方云平台需要预先部署MQTT网关以及流媒体服务器,DJI推流协议支持 Agora/RTMP/GB28181 等模式,其中MQTT网关主要用来做消息通信,配置信息设置和读取。

在这里插入图片描述

设备管理

设备管理功能支持设备向云端上报拓扑信息、推送设备属性、以及云端对设备的属性进行设置。让用户可以在云端查看以及调整设备状态,更为方便地展开工作。mqtt协议进行通信,通过此方式三方云平台可以获取到飞机的实时经纬度高度,云台三个角度等数据。

在这里插入图片描述

其中设备属性中可以获取到高度、云台三个角度信息、飞机三个角度信息、经纬度等,详见:https://developer.dji.com/doc/cloud-api-tutorial/cn/api-reference/dock-to-cloud/mqtt/aircraft/properties.html

如何对接多个飞机

  • 上云api:每一个飞机都通过各自的网关(Pilot2app或者dock)连接到三方云平台
  • MSDK:每一个飞机都通过与之配对的遥控器中的app(此app由非大疆公司开发)和私有云服务连接
  • 对接现成的平台:大疆司空2平台(目前为公有云产品无法私有化部署);已经实现了GBT28181的平台

引用

  • 大疆开发者平台:https://developer.dji.com/cn/
  • 开发者支持中心:https://sdk-forum.dji.net/hc/zh-cn
  • 在线客服:https://www.dji.com/cn/support?site=brandsite&from=nav
  • 新空安消防案例:https://www.bilibili.com/video/BV1FD4y1a7Ax/?spm_id_from=333.1350.jump_directly&vd_source=5a0bdb26f67e959b0ff9c8e5954d0070
  • DJI SDK停止更新公告:https://sdk-forum.dji.net/hc/zh-cn/articles/25786229596057-%E9%83%A8%E5%88%86DJI-SDK%E5%81%9C%E6%AD%A2%E6%9B%B4%E6%96%B0%E5%85%AC%E5%91%8A

相关文章:

简述大疆无人机对接

文章目录 概述MSDK对接MSDK简介MSDK集成步骤直播推流获取飞机实时数据 UX SDK上云API上云API简介上云API对接步骤Pilot上云Pilot怎么安装配置三方云平台地址直播获取飞机数据 Dock上云Dock上云简介直播方案设备管理 如何对接多个飞机引用 概述 一般而言&#xff0c;对接大疆的…...

docker-compose搭建kafka

1、单节点docker-compose.yml version: 3 services:zookeeper:image: zookeeper:3.8container_name: zookeeperports:- "2181:2181"volumes:- ./data/zookeeper:/dataenvironment:ZOO_MY_ID: 1ZOO_MAX_CLIENT_CNXNS: 100kafka:image: bitnami/kafka:3.7container_na…...

FramePack V2版 - 支持首尾帧生成,支持LoRA,支持批量,支持50系显卡,一个强大的AI视频生成软件 本地一键整合包下载

FramePack 是斯坦福大学主导开发的视频生成框架&#xff0c;是一种用于视频生成的下一帧&#xff08;下一帧部分&#xff09;预测神经网络结构&#xff0c;可以逐步生成视频。FramePack 主要开发者之一&#xff0c;就是业内大名鼎鼎的张吕敏大佬&#xff0c;AI领域的“赛博佛祖…...

开发网页程序时预览时遇到跨域问题解决方法

CocosCreator 开发h5游戏要用接口、开发html程序网页程序在chrome中预览时都会遇到跨域问题,怎么办? 网上有很多方法,主要是通过服务器端去配置,但那个相对来说消弱安全问题,这个不建议,因为是开发,个人行业,我们知道问题所以,简单点就主要是通过chrome的参数来禁用: 关闭 Ch…...

【音视频】FFmpeg内存模型

FFmpeg内存模型 从现有的Packet拷贝一个新Packet的时候&#xff0c;有两种情况&#xff1a; 两个Packet的buf引用的是同一数据缓存空间&#xff0c;这时候要注意数据缓存空间的释放问题&#xff1b;两个Packet的buf引用不同的数据缓存空间&#xff0c;每个Packet都有数据缓存…...

基于nlohmann/json 实现 从C++对象转换成JSON数据格式

C对象的JSON序列化与反序列化 基于JsonCpp库实现C对象序列化与反序列化 JSON 介绍 JSON作为一种轻量级的数据交换格式&#xff0c;在Web服务和应用程序中广泛使用。 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读…...

在线视频转 AVI 的便捷之选,便捷操作,无需下载软件,在线使用

在视频处理的众多需求中&#xff0c;将视频转换为 AVI 格式是不少用户的刚需。小白工具网&#xff08;https://www.xiaobaitool.net/videos/convert-to-avi/ &#xff09;的在线视频转 AVI 功能&#xff0c;以其显著优势&#xff0c;多格式支持、便捷操作、数据安全保障以及广泛…...

【MCP Node.js SDK 全栈进阶指南】初级篇(3):MCP资源开发基础

引言 在前两篇文章中,我们已经详细介绍了MCP开发环境的搭建以及基础服务器开发。本文作为MCP TypeScript-SDK系列的第三篇,将聚焦于MCP资源开发基础,包括静态资源与动态资源的开发、资源模板设计与参数提取、资源列表与发现机制,以及常见资源类型与最佳实践。通过本文的学…...

L2-1、打造稳定可控的 AI 输出 —— Prompt 模板与格式控制

一、为什么需要 Prompt 模板&#xff1f; 在与 AI 模型交互时&#xff0c;我们经常会遇到输出不稳定、格式混乱的问题。Prompt 模板帮助我们解决这些问题&#xff0c;通过结构化的输入指令来获得可预测且一致的输出结果。 模板的作用主要体现在&#xff1a; 固定输出格式&am…...

Java集成Zxing和OpenCV实现二维码生成与识别工具类

Java集成Zxing和OpenCV实现二维码生成与识别工具类 本文将介绍如何使用Java集成Zxing和OpenCV库&#xff0c;实现二维码的生成和识别功能。识别方法支持多种输入形式&#xff0c;包括File对象、文件路径和Base64编码。 一、环境准备 添加Maven依赖 <dependencies><…...

jenkins pipeline ssh协议报错处理

一、jenkins版本 jenkins&#xff1a;2.492.3 openssh&#xff1a;OpenSSH_9.8p1, OpenSSL 3.3.1 # grep jenkins /etc/passwd jenkins:x:996:994:Jenkins Automation Server:/var/lib/jenkins:/bin/false 二、报错 三、处理 步骤1&#xff1a;手动添加目标主机密钥到Jenk…...

当OCR遇上“幻觉”:如何让AI更靠谱地“看懂”文字?

在数字化的世界里&#xff0c;OCR&#xff08;光学字符识别&#xff09;技术就像给机器装上了“电子眼”。但当这项技术遇上大语言模型&#xff0c;一个意想不到的问题出现了——AI竟然会像人类一样产生“幻觉”。想象一下&#xff0c;当你拿着模糊的财务报表扫描件时&#xff…...

vue watch监听路由,第一次进入不触发解决办法

“第一次进入的时候没触发&#xff0c;第二次就触发了”非常典型&#xff0c;它印证了路由监听&#xff08;无论是 watch $route 还是 beforeRouteUpdate&#xff09;主要是为了监听变化&#xff0c;而不是处理首次加载时的初始状态。 当你通过 this.$router.push 导航到一个新…...

JVM考古现场(二十四):逆熵者·时间晶体的永恒之战

"警告&#xff01;时间晶体正在吞噬GC日志&#xff01;" 我腰间的太极八卦镜突然迸发出刺目的量子辉光&#xff0c;终南山之巅的星宿大阵浮现出诡异的四维克莱因瓶拓扑——这是逆熵者文明穿越时空的拜帖&#xff01; 楔子&#xff1a;时间晶体的觉醒 &#x1f56f;️…...

spring中使用netty-socketio部署到服务器(SSL、nginx转发)

spring中使用netty-socketio部署到服务器&#xff08;SSL、nginx转发&#xff09; 本文实现前端socket.io-client连接后端netty-socketio&#xff0c;并且部署到服务器上的示例&#xff0c;以及说明一些实现过程中可能遇到的错误。 socketio默认基于的路径是/socket.io 传输…...

qt.tlsbackend.ossl: Failed to load libssl/libcrypto.

我的环境是windows&#xff0c;QT6.3.2&#xff08;msvc2019_64/mingw_64&#xff09; 出错原因 QT没有正确加载OpenSSL。 解决过程 1、确保安装的有openssl。 文章结尾有个注意&#xff0c;是其他方式安装过openssl&#xff0c;环境变量有&#xff0c;但是QT找不到的问题。…...

【Python爬虫基础篇】--3.cookie和session

目录 1.cookie 1.1.定义 1.2.参数 1.3.分类 2.session 3.使用cookie登录微博 4.使用session登录 1.cookie 由于http是一个无状态的协议&#xff0c;请求与请求之间无法相互传递或者记录一些信息&#xff0c;cookie和session正是为了解决这个问题而产生。 例子&#xff1…...

uView的u-modal不显示问题

问题分析&#xff1a;在项目中&#xff0c;其他页面显示正常&#xff0c;在这个页面显示不正常。 问题解决&#xff1a; 一般的原因&#xff0c;诸如层级遮挡控制器true后&#xff0c;被其他逻辑又改为了false最可恨的一个原因 :showshow被编辑器的提示功能误写成了v-modal&qu…...

联易融科技:以科技赋能驱动经营反转与价值重估

行业去重周期下,轻量化发展成破局关键。当前,供应链金融行业正经历从"规模扩张"到"价值深耕"的转型期,降本增效、轻资产运营成为行业共识。联易融公告表示&#xff0c;截至2024年末,公司现金储备高达51亿元,显示出财务状况健康良好,流动资金持续充裕。 董…...

Office文档图片批量提取工具

Office.Files.Images 是一款专注于从 Word、Excel、PPT 等 Office 文档中批量提取图片的轻量级工具&#xff0c;支持 .docx、.xlsx、.pptx 格式文件。该软件体积仅 ‌343KB‌&#xff0c;无需安装即可运行&#xff0c;通过拖拽操作实现快速解析与导出&#xff0c;尤其适合需批量…...

Python 设计模式:回调模式

1. 什么是回调函数&#xff1f; 回调函数是指作为参数传递给另一个函数的函数。当这个函数执行到某个特定的点时&#xff0c;它会调用这个回调函数。回调函数通常用于处理异步操作、事件处理或在某些条件下执行特定的操作。 回调函数的特点&#xff1a; 作为参数传递&#x…...

DCDC芯片,boost升压电路设计,MT3608 芯片深度解析:从架构到设计的全维度技术手册

一、硬件架构解析:电流模式升压 converter 的核心设计 (一)电路拓扑与核心组件 MT3608 采用恒定频率峰值电流模式升压(Boost)转换器架构,核心由以下模块构成: 集成功率 MOSFET 内置 80mΩ 导通电阻的 N 沟道 MOSFET,漏极(Drain)对应引脚 SW,源极(Source)内部接…...

大数据学习(112)-HIVE中的窗口函数

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…...

Hive学习

一、Hive 核心原理 1. Hive 架构与执行流程 Hive 是基于 Hadoop 的数据仓库工具&#xff0c;将 SQL 转化为分布式计算任务&#xff08;MapReduce/Tez/Spark&#xff09;&#xff0c;核心组件如下&#xff1a; 元数据存储&#xff08;Metastore&#xff09;&#xff1a;存储表…...

前端开发核心知识详解:Vue2、JavaScript 与 CSS

一、Vue2 核心知识点 1. Vue2 的双向绑定原理 Vue2 实现双向绑定主要依赖数据劫持与发布 - 订阅者模式。 利用Object.defineProperty方法对数据对象的属性进行劫持&#xff0c;为每个属性定义getter和setter。getter用于收集依赖&#xff0c;当视图中使用到该属性时&#xf…...

仅追加KV数据库

仅追加KV数据库 6.1 我们将要做什么 在本章中&#xff0c;我们将创建一个基于文件的键值存储&#xff08;KV Store&#xff09;&#xff0c;其核心是一个写时复制&#xff08;Copy-on-Write, CoW&#xff09;B 树。这种设计的目标是实现数据的持久性和原子性。 1. 设计概述 …...

【Java面试笔记:基础】8.对比Vector、ArrayList、LinkedList有何区别?

在Java中&#xff0c;Vector、ArrayList和LinkedList均实现了List接口&#xff0c;但它们在线程安全、数据结构、性能特性及应用场景上存在显著差异。 1. Vector、ArrayList 和 LinkedList 的区别 Vector&#xff1a; 线程安全&#xff1a;Vector 是线程安全的动态数组&#…...

Git分支管理方案

成都众望智慧有限公司Git分支管理方案 采用 轻量级Git Flow 敏捷版本控制策略&#xff0c;在保证稳定性的同时提升开发效率。以下是优化后的方案&#xff1a; 1. 精简分支模型&#xff08;相比6-8人团队减少分支层级&#xff09; 分支类型作用生命周期devops生产环境代码&am…...

SQL Tuning Advisor

什么是SQL Tuning Advisor STA可以用来优化那些已经被发现的高负载SQL. 默认情况下, Oracle数据库在自动维护窗口中自动认证那些有问题的SQL并且执行优化建议&#xff0c;找寻提升高负载SQL执行计划性能的方法. ** 如何查看自动优化维护窗口产生的报告? ** SQL> set ser…...

联易融出席深圳链主企业供应链金融座谈会,加速对接票交所系统

近日&#xff0c;深圳市委金融办组织召开全市链主企业供应链金融高质量发展座谈会。联易融作为供应链金融企业代表&#xff0c;与虾皮信息科技、电子元器件和集成电路国际交易中心等代表性机构以及行业协会、金融机构参加了会议。 发展供应链金融是破解中小微企业融资难、融资…...

【前端记事】关于electron的入门使用

electron入门使用 背景how to start第一步 创建一个vite-vue3项目第二步 装各种依赖第三步 配置vite.config.jspackage.jsonelectron入口 启动重写关闭、隐藏、最大化最小化 背景 最近对electron比较感兴趣&#xff0c;折腾一段时间后有了点眉目&#xff0c;记录一下 how to …...

Qt绘制可选择范围的日历

【日历控件设计】 #include <QApplication> #include <QWidget> #include <QVBoxLayout> #include <QCalendarWidget> #include <QHBoxLayout> #include <QSpinBox> #include <QPushButton> #include <QLabel> #include <Q…...

Pycharm(十五)面向对象程序设计基础

目录 一、定义类及使用类的成员 二、self关键字介绍 三、在类内部调用类中的函数 class 类名&#xff1a; 属性&#xff08;类似于定义变量&#xff09; 行为&#xff08;类似于定义函数&#xff0c;只不过第一个形参要写self&#xff09; 一、面向对象基本概述 属性&…...

【C++游戏引擎开发】第21篇:基于物理渲染(PBR)——统计学解构材质与光影

引言 宏观现象:人眼观察到的材质表面特性(如金属的高光锐利、石膏的漫反射柔和),本质上是微观结构对光线的统计平均结果。 微观真相:任何看似平整的表面在放大后都呈现崎岖的微观几何。每个微表面(Microfacet)均为完美镜面,但大量微表面以不同朝向分布时,宏观上会表…...

flutter_slidable 插件使用

简介 flutter_slidable 是一个用于创建可滑动列表项的 Flutter 插件&#xff0c;它允许用户通过滑动来显示隐藏的操作按钮&#xff0c;比如删除、分享等功能。 安装 在 pubspec.yaml 中添加依赖&#xff08;并运行 flutter pub get&#xff09;&#xff1a; dependencies:fl…...

[论文阅读]ConfusedPilot: Confused Deputy Risks in RAG-based LLMs

ConfusedPilot: Confused Deputy Risks in RAG-based LLMs [2408.04870] ConfusedPilot: Confused Deputy Risks in RAG-based LLMs DEFCON AI Village 2024 文章是针对Copilot这样一个RAG服务提供平台的攻击 在企业环境中整合人工智能工具&#xff08;如 RAG&#xff09;会…...

诠视科技MR眼镜如何使用头瞄点和UGUI交互

诠视科技MR眼镜如何使用头瞄点和UGUI交互 要实现头瞄点计算单元确认键操作UGUI,最快捷的方式&#xff0c;右键直接添加XvHeadGazeInputController。 添加以后会自动生成XvHeadGazeInputController到Head节点下面去。 重要的几个参数讲解&#xff1a; scaleFactor&#xff1a…...

数据赋能(204)——原则与原理——原理方法

原理更多地关注事物本身的客观规律&#xff0c;而原则侧重于指导人们的行为和决策。原则与原理是两个常常被提及&#xff0c;但有所区别的概念。原则和原理在各个领域中都发挥着重要的作用。 原理概念 原理&#xff0c;则通常指的是自然科学和社会科学中具有普遍意义的基本规…...

代码随想录算法训练营第五十六天 | 108.冗余连接 109.冗余连接II

108.冗余连接 题目链接&#xff1a;108. 冗余的边 文章讲解&#xff1a;代码随想录 思路&#xff1a; 题目说是无向图&#xff0c;返回一条可以删去的边&#xff0c;使得结果图是一个有着N个节点的树&#xff0c;如果有多个答案&#xff0c;则返回二维数组中最后出现的边。 …...

Git入门

一、Git 基础概念 1. 版本控制系统分类 本地版本控制&#xff1a;如RCS&#xff0c;仅在本机保存历史版本集中式版本控制&#xff1a;如SVN&#xff0c;单一中央服务器管理代码分布式版本控制&#xff1a;如Git&#xff0c;每个开发者都有完整的仓库副本 2. Git 核心概念 概…...

5G + 物联网:智能世界的催化剂,如何用Python打造下一代IoT应用?

5G 物联网&#xff1a;智能世界的催化剂&#xff0c;如何用Python打造下一代IoT应用&#xff1f; 在数字化时代&#xff0c;物联网&#xff08;IoT&#xff09; 已成为智能产业的关键技术。从智能家居到智慧城市&#xff0c;再到工业4.0&#xff0c;我们的世界正在变得越来越…...

从单点突破到链式攻击:XSS 的渗透全路径解析

在网络安全领域&#xff0c;跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;简称 XSS&#xff09;早已不是新鲜话题。然而&#xff0c;随着网络技术的迭代与应用场景的复杂化&#xff0c;攻击者不再满足于单一的 XSS 漏洞利用&#xff0c;而是将 XSS 与其他安全漏洞…...

spark和hadoop的对比和联系

一、Apache Hadoop 简介 Hadoop是一个由Apache基金会开发的开源分布式计算平台。它主要由Hadoop分布式文件系统&#xff08;HDFS&#xff09;和MapReduce计算框架组成。HDFS是为大规模数据存储而设计的&#xff0c;它将文件分割成多个数据块&#xff08;block&#xff09;&…...

【Vue3 / TypeScript】 项目兼容低版本浏览器的全面指南

在当今前端开发领域&#xff0c;Vue3 和 TypeScript 已成为主流技术栈。然而&#xff0c;随着 JavaScript 语言的快速演进&#xff0c;许多现代特性在低版本浏览器中无法运行。本文将详细介绍如何使 Vue3 TypeScript 项目完美兼容 IE11 等低版本浏览器。 一、理解兼容性挑战 …...

从零开始搭建你的个人博客:使用 GitHub Pages 免费部署静态网站

&#x1f310; 从零开始搭建你的个人博客&#xff1a;使用 GitHub Pages 免费部署静态网站 在互联网时代&#xff0c;拥有一个属于自己的网站不仅是一种展示方式&#xff0c;更是一种技术能力的体现。今天我们将一步步学习如何通过 GitHub Pages 搭建一个免费的个人博客或简历…...

java 设计模式 原型模式

简介 原型模式&#xff08;Prototype Pattern&#xff09; 是一种创建型设计模式&#xff0c;它通过复制现有对象来生成新对象&#xff0c;而不是通过 new 关键字创建。核心思想是减少对象创建的开销&#xff0c;尤其是当对象初始化过程复杂或代价较高时。 原型模式的核心实现…...

分别配置Github,Gitee的SSH链接

文章目录 前言一、为第二个账号生成新的密钥对二、 配置 SSH config 文件1.引入库使用 Host 别名进行 clone/push/pull注意扩展 前言 之前已经在电脑配置过Github一个仓库ssh链接&#xff0c;今天想配一个Gitee仓库的ssh链接。运行 ssh-keygen -t rsa提示已经存在&#xff0c…...

从零开始搭建Django博客②--Django的服务器内容搭建

本文主要在Ubuntu环境上搭建&#xff0c;为便于研究理解&#xff0c;采用SSH连接在虚拟机里的ubuntu-24.04.2-desktop系统搭建&#xff0c;当涉及一些文件操作部分便于通过桌面化进行理解&#xff0c;通过Nginx代理绑定域名&#xff0c;对外发布。 此为从零开始搭建Django博客…...

如何用python脚本读取本地excel表格Workbook.xlsx将里面B2:B8内容,发给本地ollama大模型改写内容后写入对应C2:C8?

环境: python3.10 Win10专业版 ollama 火山引擎 影刀 问题描述: 如何用python脚本读取本地excel表格Workbook.xlsx将里面B2:B8内容,发给本地ollama大模型改写内容后写入对应C2:C8? 解决方案: 1.制作一个python脚本如下: import openpyxl import requests import…...

webpack详细打包配置,包含性能优化、资源处理...

以下是一个详细的 Webpack 5 配置示例&#xff0c;包含常见资源处理和性能优化方案&#xff1a; const path require(path); const webpack require(webpack); const { BundleAnalyzerPlugin } require(webpack-bundle-analyzer); const TerserPlugin require(terser-webp…...