只会Python,怎么用PC控制无人机自动飞行?

news2024/11/20 18:41:16

PC-SDK是阿木实验室 (AMOVLAB) 为了简化开源飞控的控制协议MAVLink,优化和维护的一个基于PC电脑运行MAVSDK(支持Windows和Ubuntu)的Python SDK库。

相对于传统的无人机控制开发,开发者无需掌握C/C++语言和ROS等相关知识,只要学会Python编程及懂得坐标系原理,在PC电脑上安装Python环境与功能包模块后,就可以地面端链路控制无人机飞行(开发),极大地降低了开发难度。

MAVSDK简介

添加图片注释,不超过 140 字(可选)

MAVSDK是各种编程语言的库集合,用于与无人机、摄像机或地面系统等MAVLink系统进行交互。这些库提供了一个简单的API,用于管理一个或多个车辆,提供对车辆信息和遥测的编程访问,以及对任务,移动和其他操作的控制。这些库可以在配套计算机上的无人机上使用,也可以在地面站或移动设备上使用。

MAVSDK的特点

跨平台

Linux、macOS、Windows、Android 和 iOS等。

多语言

C++、Swift、Python、Java、Go、JavaScript、CSharp、Rust等。

在使用时可以通过串口或者tcp或者udp建立连接然后就可以控制Pixhawk飞控。在此之前可以在Ubuntu下建立Pixhawk的源码然后并创建模拟器,然后在mavsdk控制模拟器里的飞机进行控制。

目前提供了自动起飞降落的Demo,指点飞行的Demo,和航点飞行的Demo。还提供了Ubuntu的仿真开发虚拟机,方便开发者进行算法开发,可以快速入手无人机的开发工作。

提示: 初学者在不了解无人机和控制坐标系概念的情况下,不要运行其他demo。建议在了解无人机及其控制坐标系之后,运行我们提供的仿真系统,熟悉无人机的操作特性,再运行其他仿真demo。

无人机控制坐标系基本概念(简介)

无人机中NED坐标理解

机体坐标系:机体坐标系固连飞机,其原点取在多旋翼的重心位置上。x轴在多旋翼对称平面内指向机头(机头方向与多旋+字形或X字形相关)。z轴在飞机对称平面内,垂直轴向下。然后,按右手定则确定y轴 。

地球固联坐标系:通常以多旋翼起飞位置作为坐标原点 ,先让x轴在水平面内指向某一方向,z轴垂直于地面向下。然后,按右手定则确定y轴,坐标原点取地球中心。比如NED坐标系为x轴为正北方向,y轴为正东方向,z轴指向下。

飞机的欧拉角就是基于上面两个坐标系的转换。“pitch+”为抬头,“roll+”为右旋转,“yaw+”为右偏航。

Yaw与指南针角度的关系

指南针的角度为固定不变(北朝向为0度,东朝向为90度,南朝向为180度,西朝向为270度)。

Yaw角是当前机头方向与正北方向的夹角(若地球固联坐标系为NED),当我们知道YAW角时就可以确定飞机当前的航向。比如我们的vision通过mavros给飞控的Yaw的角度是90度,而且飞机的地球固联坐标系为NED,那么我们就可以确定飞机机头当前指向为正东。即使我们没有磁力计测方向,但我们假设了一个方向,那么此时Yaw角与指南针的角度完全重合或相同。

但当Yaw角为90度,机头朝向为正北方向,那么可以确定飞机地球固联坐标系采用的是WND(W为西)。

在PX4中用到的地球固联坐标轴是NED坐标系,即x,y,z的方向固定不变(Offboard模式下除外,但是在offboard模式下,初始上电后其东北方向由Yaw角决定)。

本例程使用东北地坐标系,END,飞机上电位置为原点(坐标0.0.0)以84坐标系为基础,E为东方(Y轴),N为北方(X轴),D为高度向下(Z轴),均以正值为对应方向,负值为相反方向,例程内(Z轴)高度做了反向处理。

QGC右上角姿态球有坐标(机头朝向)与航向(度)及姿态信息。

ENU与NED区别

相关名称解释:

1. MAVLink:MAVLink是一种非常轻量级的消息传输协议, 用于地面控制终端(地面站)与无人机之间 (以及机载无人机组件之间) 进行通信。MAVLink遵循现代混合发布-订阅和点对点设计模式: 数据流作为 topics 发送/发布的, 而配置子协议 (如 路径点协议 或 参数协议)是基于重传机制的点对点模式。

2. MAVSDK:MAVSDK 是各种编程语言的库集合,用于与无人机、摄像机或地面系统等 MAVLink 系统进行交互。

3. 机体坐标系:机体坐标系与飞行器固联,坐标系符合右手法则,原点在飞行器重心处,x轴指向飞行器机头前进方向,y轴由原点指向飞行器右侧,z轴方向通过x,y由右手法则确定。机体坐标系是无人机惯性导航的基础坐标系,IMU中获得的加速度状态信息就是该坐标系下的数值。当我们获取IMU输出的x轴加速度信息时不能直接应用在NED坐标系下。 无人机中的坐标转换,即为NED坐标系(惯性系)与机体坐标系之间的转换。

4. 位置控制:位置控制同样是无人机控制系统中非常重要的控制系统。位置控制实际上就是用于控制无人机在控制飞行的位置。我们希望可以准确地控制无人机按预期的速度飞往指定的目标位置,这也是无人机全自动飞行的基础。为了确定无人机的位置,需要使用在本地坐标系下的x、y、z这3个维度的坐标。但是在控制方面上往往将x轴和y轴上的控制方法称为水平位置控制,而将z轴上的坐标控制方法称为高度控制。但是这里两个控制方法需要同时进行,最终达到对3维坐标系内无人机准确飞行控制目的。

5. 速度控制:内环PID控制器,其输入内容为速度期望减去测量速度,得到速度误差。然后通过“比例-积分-微分”控制方法对速度误差进行计算,得到其输出内容。速度控制器的输入为速度期望,而输出却是姿态角期望。

6. 姿态控制:包括俯仰角、滚转角和航向角。这3个角的期望值来源于其他模块。遥控器的控制杆量、位置控制模块的输出量、地面站系统的期望值等等。角度的期望值就是系统中希望无人机达到的某一个角度,这也就是姿态控制中的目标状态,并且我们希望无人机在这个目标状态下保持稳定。

快速使用(在windows11操作验证)

目的:快速验证无人机是否正常通讯及开发环境是否正常。

提示:

1. 建议开发者有一定基础后(例如会操控无人机,或对Ubuntu、Python有一定了解)再进行快速验证,否则请按照仿真等步骤逐步了解。

2. 请选择室外空旷地带进行测试验证,与无人机保持10米以上安全距离。

硬件及通讯示意图

1. 预装Python3.7及以上版本、pip、QGC、mrvsdk_server、vscode、git。然后打开终端,利用pip下载mavsdk。

2. 打开终端,在git安装好后,下载demo。

3.下载电脑与飞控通信节点终端mrvsdk_server。

4. 打开MFP450基础款的QGC,将地面端网线接入电脑,电脑ip固定192.168.1.123,将自动连接QGC地面站,双击运行mrvsdk_server,即可建立demo与飞控通信节点。具体设置参考拓展帮助部分的数传设置。

通讯成功如下图:

5. 进入vscode,打开takeoff-and-land.py文件,将注释放开(具体放开那个注释代码有介绍),在终端运行Python ./takeoff-and-land.py即可。将会执行无人机起飞与降落指令。过程中可使用遥控器进行干预。

具体操作如下视频:

MAVSDK-demo起飞降落

仿真环境安装

镜像安装和环境安装任选一种,建议镜像安装。对于无人机开发来说,我们比较建议先在仿真环境中进行测试,仿真是利用图形技术和数字模拟技术,在一个电脑的三维可视环境中,虚拟出了无人机和环境,类似一个三维游戏场景,在该场景中我们可以通过调用无人机的API控制接口,来在仿真环境中控制飞机,控制代码的实现效果和在真实物理环境中类似。提高了开发效率和减少了飞机因为代码逻辑问题带来的坠毁风险,对于新手开发者建议先在下面的仿真环境里做飞行试验,熟练之后再去真实场景做实验。

镜像安装

下载地址:https://dl.amovlab.com:30443/MFP450/pixhawk%206c/Ubuntu/

下载完毕后,可以选择虚拟机、双系统或者硬板安装。该镜像中已包含上文所述所有软件,开发者可直接运行仿真。具体安装方式可参考阿木实验室往期教程。

环境安装

1. 选择Ubuntu20.04版本系统,安装PX4-Autopilot。

2. 接着mkdir一个文件夹,在该文件夹下进行源码下载(由于在github下载很慢,所以后续到PX4-Autopilot目录下再单独下载子模块)。

git clone http://github.com/PX4/PX4-Autopilot

3. 下载完成后,前往PX4-Autopilot目录检查子模块是否下载完成。


cd PX4-Autopilot/
git submodule update --init --recursive

4. 可能出现执行3中命令没反应,但make的时候报错的情况,找到对应路径删掉,再执行上面那个命令。

5. 回到上一级目录,执行以下安装脚本。


cd     
bash ./PX4-Autopilot/Tools/setup/ubuntu.sh

6. 运行完后按提示重新登录或者重启,然后可以update一下。


sudo apt-get update
sudo apt-get upgrade

7. 进入目录编译源码进行仿真。


cd PX4-Autopilot/
make px4_sitl jmavsim

8. 安装并打开QGC地面站。下载地址:https://dl.amovlab.com:30443/MFP450/pixhawk%206c/UBUNTU20.04%E5%9C%B0%E9%9D%A2%E7%AB%99/

打开终端,安装依赖,给予权限:

sudo usermod -a -G dialout $USER
sudo apt-get remove modemmanager -y
sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y
sudo apt install libqt5gui5 -y
sudo apt install libfuse2 -y


chmod +x ./QGroundControl.AppImage
./QGroundControl.AppImage  (or double click)

9. 安装Python3.7以上版本后下载MAVSDK库(目前提供程序为Python版本)。


pip3 install mavsdk

10. 下载VScode,前往官网或应用商店下载。

https://code.visualstudio.com/Download

11. 下载demo。


git clone https://gitee.com/amovlab1/pcsdk

在VScode运行程序仿真(Python3 ./xxx.py)即可。

代码功能简介

提示:

真机与仿真操作一致,但真机需要注意遥控器各个拨杆的功能,确保处于定点模式下且有一键锁桨功能,防止意外。

以下是仿真模式使用, 请开发者务必熟悉后再上真机复现。

在VScode运行程序Python3 ./xxx.py即可 xxx.py为运行的文件名字。

demo1-起飞降落

起飞降落指令展示:运行后为飞机会起飞,悬停10秒后降落,期间会打印GPS信息,电池电量,百分比电量等,目的在于更好的展示SDK接口可用性。下图为仿真结果:

demo2-航线任务

任务模式:使用地面站中的航点飞行模式,运行该例程可执行航点任务设置,主要为END坐标系下输入X轴,Y轴,高度,速度,悬停时间,航向角六类参数,回车确认保存航点后可重复输入,结束后可选择是否清除航线。下图为仿真结果(此模式遥控器可随时介入):

demo3-指点飞行

Offboard模式:使用机载计算机或地面计算机控制,该模式一般用于智能飞行。运行该例程可执行指点飞行,主要为END坐标下,X轴,Y轴,高度,航向。下图为仿真结果:

提示:

1. 内含END坐标下机体系速度控制,姿态控制及速度控制。这三种控制模式较为危险,因此已经注释,切换控制模式需要解开和关闭相应注释。默认只开放位置控制,除仿真外,尽量不要使用其余控制。

2. offboard模式下,遥控器不可随时介入。

通讯连接

建议使用两路数传,QGC与MAVSDK各一路,方便更好的查看无人机状态以MFP450-V6C为例,在此基础上增加一个Mini Homer天空端,可增加MAVSDK使用时的安全性,同时也可以后续升级RTK版本硬件之一。具体方法:将新增加的Min Homer端口及目的端口设置为14540,可参考Mini Homer产品手册:https://docs.amovlab.com/minihomer-wiki/#/src/MINIHOMER/%E8%BF%9E%E6%8E%A5%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E

使用数传线与飞控的TELEM3相连,(若飞控TELEM3未打开需要到参数内打开),在参数栏搜索MAV, 找到MAV_2_CONEFIG,将其修改为telem3即打开。

默认Win为例

代码解开注释(仿真与真机有注释说明) MAVSDK默认UDP:14540;QGC端口UDP:8080。

如何与飞控进行通信

1. MAVSDK(默认):mrvsdk_server是飞控和电脑通信的桥梁,将飞控和电脑进行连接,转发相应的数据信息(MAVLink协议的封装)。

提示:

如遇突发情况,请使用“ctrl+c”断开mrvsdk_server的通讯连接。

https://github.com/mavlink/mavsdk/releases

下载对应的mrvsdk_server,双击运行(或者下载其源码,自定义连接方式) 运行后终端会打印相关MAVLink信息(绿色为mavsdk信息,红色为报错)。

Mavsdk默认UDP:14540

QGC:选择连接方式--UDP--8080--确认--连接 可运行代码进行飞行测试 之所以选择两种连接方式同时获取MAVLink信息,是因为可以通过QGC更好的观察飞机的状态以做出相应的判断。

2. 自定义链接修改(不建议):下载MAVLink MAVSDK源码。

https://github.com/mavlink/MAVSDK

具体工具链路、环境等需开发者自行摸索,本文暂不提供教程。

真机运行

运行mrvsdk_server后会打印相关的MAVLink消息,结合QGC地面站确认飞机进入定点后,遥控器拨杆解锁,解锁正常,手动飞行无异常降落,然后测试一键锁桨功能正常,即可尝试mavsdk控制飞行。

安装Python3.7以上版本后下载MAVSDK库。


pip3 install mavsdk

目前提供程序为Python版本。官网下载VScode,或者应用商店下载。

https://code.visualstudio.com/Download

demo下载:

https://gitee.com/amovlab1/pcsdk

具体操作如下视频:

MAVSDK

真机测试时,部分运行程序会有一次ARM指令发送,以测试指令是否正常发送,因此运行程序时注意不要对飞机进行围观和近距离接触。

提示:

真机与仿真操作一致,但真机需要注意遥控器各个拨杆的功能,需要保证处于定点模式下且有一键锁桨功能防止意外(位于左往右第二个(6通道)通道拨杆)。除offboard外,其余均可用遥控器接入操作。

常用API接口

- End -

阿木实验室:为机器人研发提供开源软硬件工具和课程服务,让研发更高效! 技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。

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

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

相关文章

百度最强大模型发布,百度网盘和文库的实测体验

🍁 展望:若本篇讲解内容帮助到您,请帮忙点个赞吧, 您的支持是我继续写作的最大动力. 关注我, 带您了解更多 AI 资讯和 AI 小技巧. 引言 2023年百度世界大会在10月17日的春光中于北京的首钢园精彩召开。这次大会的核心主题——“生成未来 PRO…

汽车屏类产品之CMS:流媒体后视镜Camera Monitoring System (CMS)

前言: CMS,有叫电子侧视镜,虚拟倒车镜,电子倒车镜, 电子取代镜等,ISO 国际标准组织称其为摄像头监控系统。电子后视镜由“摄像头+屏幕”组成,汽车外后视镜经历了光学镜面从平面镜到曲面镜的迭代进步,CMS也实现从商用车到乘用车的过渡。显示模式为外部摄像头采集图像,…

java的注解接口Retention

Java的注解接口java.lang.annotation.Retention定义注解保留多长时间。如果在注解接口的声明上没有Retention注解,那么默认的保留策略是RetentionPolicy.CLASS。 Retention只有一个元素value,类型是RetentionPolicy。 RetentionPolicy是一个枚举类型&am…

基于典型行业废水水质与处理工艺特点的吸附树脂产品—CH-87靶向除氟专用树脂

在工业上,含氟矿石开采、金属冶炼、铝加工、炼焦、玻璃、电子、电镀、化肥、农药、锂电池等行业排放的废水中常含有高浓度的氟化物。 所以,国家对于含氟废水的监测和排放也是出台了严格的制度标准。 含氟废水主要来源于氟化工、多晶硅、有色金属冶炼、…

android系统签名 V1,V2,V3

android系统签名 V1&#xff0c;V2&#xff0c;V3 7.1 之前V1 签名 文件路径&#xff08;build\target\product\security&#xff09; apk添加系统权限 <manifest xmlns:android"http://schemas.android.com/apk/res/android" android:sharedUserId"…

操作系统:进程的控制和通信(Windows2000)

文章目录 进程的控制和通信&#xff08;Windows2000&#xff09;一、实验目的二、实验要求与内容、过程与结果 进程的控制和通信&#xff08;Windows2000&#xff09; 一、实验目的 通过对Windows 2000编程&#xff0c;进一步熟悉操作系统的基本概念&#xff0c;并能较好地理…

百度智能云推出,国内首个大模型全链路生态支持体系

在10月17日举行的百度世界2023上&#xff0c;百度智能云宣布&#xff0c;百度智能云千帆大模型服务平台已服务17000多家客户&#xff0c;覆盖近500个场景。 同时&#xff0c;新的企业和开发者还正在不断地涌入千帆&#xff0c;大模型调用量高速攀升。平台上既有年龄仅14岁的小…

相似性搜索:第 6 部分--LSH 森林的随机投影

一、说明 相似性搜索是一个问题&#xff0c;给定一个查询&#xff0c;目标是在所有数据库文档中找到与其最相似的文档。 在数据科学中&#xff0c;相似性搜索经常出现在 NLP 领域、搜索引擎或推荐系统中&#xff0c;其中需要检索最相关的文档或项目以进行查询。有多种不同的方法…

RTOS(5)创建任务函数详解

动态内存使用 面向对象的编程思想 我们想要使用应该结构体&#xff0c;但又不想了解其内部时&#xff0c;一般使用句柄&#xff08;handle&#xff09;&#xff1b;句柄是指针指向结构体&#xff0c;只是同一个结构体类型的另外一种名称而已&#xff1b; 任务&#xff08;tas…

如何学习渗透测试?怎样才能入行?

学习实践&#xff0c;目前只有这路子&#xff0c;自学9月&#xff0c;成功入圈。下面说一下自己的学习路径&#xff0c;都是摸爬滚打&#xff0c;交了N份钱才学会的。 切记一定要先了解整个渗透测试的流程&#xff0c;记住整个流程口诀。 信息收集&打点&#xff0c;漏洞挖…

c语言中数组的四种创建方式和应用场景

数组是语言中常用的一种结构&#xff0c;在c语言中可以使用多种方式来创建数组&#xff0c;每种语法对应于不同的应用场景。 1、在声明数组时指定数组的长度 语法 <类型> <变量>[<长度>]; 当填充数组的内容为运行时动态加入时可以使用此语法&#xff0c;…

高压放大器在无线电能中应用有哪些

高压放大器是一种用于放大电信号的放大器&#xff0c;可以将输入的低电压信号放大到更高的输出电压水平。在无线电通信和其他相关领域中&#xff0c;高压放大器具有广泛的应用。本文将详细介绍高压放大器在无线电能中的应用。 无线电发射&#xff1a;高压放大器在无线电发射中起…

基于Delta Lake的Upserts数据湖方案

导读 基于HDFS的传统数据存储方案由于HDFS等存储平台的限制&#xff0c;只能增加文件不能修改文件中的内容。想要实现某条记录的变更&#xff0c;就需要读取对应的文件并进行重写&#xff0c;效率极低&#xff0c;而且容易引起数据不一致和冲突。Delta Lake是基于Apache Spark…

微前端四:qiankun在开发中遇到的问题

在qiankun开发中会遇到很多问题&#xff0c;上一篇微前端三&#xff1a;qiankun 协作开发和上线部署其实也是在解决一些经常遇到的问题&#xff0c;下面的两点也算是比较经典的了 1、子应用图片路径问题 2、基座是Vue2.0 element ui 配合 子应用 Vue3.0 element plus 导致的样…

idea Java代码格式化规范

引入 最近在公司开发中&#xff0c;遇到了一点小问题&#xff0c;组内各同事的格式化规范不一致。一来导致代码样式并不统一&#xff0c;二来有时候合并代码会出现冲突&#xff0c;因此做一套统一代码格式化规范很有必要。 基础知识 在idea中&#xff0c;可以通过快捷键Ctrl…

数字孪生技术:煤矿运输的未来革命

煤矿是我国能源工业的重要支柱&#xff0c;然而&#xff0c;煤矿运输过程中一直存在着诸多问题&#xff0c;如安全隐患、能源浪费、效率低下等&#xff0c;这不仅对煤矿行业的可持续发展构成威胁&#xff0c;也对环境造成负面影响。因此&#xff0c;数字孪生技术应运而生&#…

2023年中国有创呼吸机产量、需求量及行业市场规模分析[图]

有创呼吸机主要是通过气管插管或者气管切开&#xff0c;然后通过管道连接在呼吸机上&#xff0c;为患者提供呼吸支持&#xff0c;主要针对的患者是昏迷的&#xff0c;无自主呼吸或不能耐受无创呼吸机的患者。 有创呼吸机是高端医疗装备&#xff0c;设计、生产和临床验证都必须经…

element-ui中表格树类型数据的显示

项目场景&#xff1a; 1&#xff1a;非懒加载的情况 1&#xff1a;效果展示 2&#xff1a;问题描述以及解决 1&#xff1a;图片展示 2&#xff1a;html <-- default-expand-all 代表默认展开 如果不展开删除就行 --> <el-tableref"refsTable"v-loadin…

2023年中国热电厂发电装机量、热电厂发电量及市场需求分析[图]

热电厂是以热定电&#xff0c;以供热为主要目的发电厂。热电厂是同时生产供应热和电的工厂&#xff0c;既是可以对外供热的发电厂&#xff0c;也是可以发电上网的供热站&#xff0c;其核心技术就是“热电联产”。热电厂的主要应用领域涵盖了工业生产、城市供热、电力系统支撑等…

2023年中国液晶显示板产量、需求量、市场规模及价格趋势分析[图]

显示面板主要包括LCD和OLED&#xff0c;液晶显示技术&#xff08;LCD&#xff09;是利用电场改变液晶分子排列状态而调制外界背光源的一种非自发光性显示技术&#xff0c;液晶面板是决定液晶显示器亮度、对比度、色彩、可视角度的材料&#xff0c;目前液晶显示面板的主流为TFT-…