在Windows环境下搭建无人机模拟器

最近要开发无人机地面站,但是没有无人机,开发无人机对我来说也是大姑娘坐花轿——头一回。我们要用 MAVLink 和无人机之间通信,看了几天 MAVLink,还是不得劲儿,没有实物实在是不好弄,所以想先装一个无人机模拟器来试试。

基本概念

首先要明确一些概念,将它们与具体事务之间建立起联系,明白这些名词是什么,干什么的。

  • 载具

    无人机,无人车,无人船,这些都叫做载具。

  • 载荷

    载具上安装的传感器,摄像头等都叫做载荷。

  • 地面站

    载具与地面站之前进行通信,地面站可以显示载具和载荷信息,并发送指令控制载具。

  • MAVLink

    载具与地面站之间进行通信的协议,它针对资源受限平台进行了优化,开源,轻量。

  • Pixhawk 和 PX4

    Pixhawk 是开源飞控硬件平台,PX4 是专为 Pixhawk 开发的固件。

  • ArduPilotMega 和 ArduPilot

    ArduPilotMega 也是飞控硬件平台,ArduPilot 是 ArduPilotMega 的固件,但是由于 ArduPilotMega 性能较低,所以 ArduPilot 也对 Pixhawk 做了兼容,可以运行在 Pixhawk 上。它们都叫 APM,所以看到 APM 的时候要明白它既是硬件平台,也是软件平台。

  • QGC 和 MP:

    QGC 是 QGroundControl,MP 是 Mission Planner,它们都是地面站。QGC 是 PX4 用的地面站,MP 是 APM 的地面站。当然,地面站没有什么专用的,APM 也可以用 QGC 作为地面站。

  • SITL

    全称 Software In The Loop,是一种用于测试和开发无人机的仿真环境,可以在没有硬件的情况下通过软件模拟无人机的飞行和传感器数据。

参考:

PX4(Pixhawk)和Audupilot(APM)的区别与联系_px4和pixhawk的区别-CSDN博客

搭建SITL仿真环境模拟APM

我选择了 APM 进行模拟仿真,因为它安装配置起来比较简单,目前只是用它来学习是试验。

SITL 是在 Linux 上开发的,但是也可以在 Windows 上编译运行。我现在没有时间来折腾 Ubuntu 系统了,所以直接在 Windows 上开搞,虽然官方并不推荐。

第一步:下载 ardupilot 源码

$ git clone https://github.com/ArduPilot/ardupilot
$ cd ardupilot/
$ git submodule update --init --recursiv

第1行是下载 ardupilot 源码,然后进入 ardupilot 目录,第3行是下载子模块。其实这里我感觉只需要执行第1行就可以了,因为我们最终要用到的其实是这个仓库下的一个脚本,后面的步骤我们会看到。所以这里应该不需要下载子模块,但是在之前的尝试中我已经下载了子模块,所以没去亲测不下载子模块是否也可以。而且后面还是要重新下载源码的。

第二步:安装运行环境

这里环境配置其实还是挺麻烦的,需要 Cygwin,GCC,MAVProxy,python等,我看了很多博客,没人讲清楚环境究竟该怎么配置好,实在是有点生气,浪费了不少时间,还是官网比较靠谱。

完整的环境配置步骤在官网有详细说明,我是在 Windows 上安装,所以参考👉这里👈。打开官方文档,我们看到有一个注意:

翻译过来就是:在 ardupilot 源码的 Tools/environment_install 目录下有一个 install-prereqs-windows.ps1 脚本可以自动帮我们自动执行下面的全部步骤,也就是自动帮我们配置好所有环境依赖。 .ps1 是 Windows 的 PowerShell 脚本,可以直接在 PowerShell 中执行。原来可以一键配置环境,这简直是太让人激动了。

不过大家先别急着执行这个脚本,我们可以先看一下这个脚本的内容:

#Powershell script to download and configure the APM SITL environment

Import-Module BitsTransfer

Write-Output "Starting Downloads"

Write-Output "Downloading MAVProxy (1/7)"
Start-BitsTransfer -Source "https://firmware.ardupilot.org/Tools/MAVProxy/MAVProxySetup-latest.exe" -Destination "$PSScriptRoot\MAVProxySetup-latest.exe"

Write-Output "Downloading Cygwin x64 (2/7)"
Start-BitsTransfer -Source "https://cygwin.com/setup-x86_64.exe" -Destination "$PSScriptRoot\setup-x86_64.exe"

Write-Output "Downloading ARM GCC Compiler 10-2020-Q4-Major (3/7)"
Start-BitsTransfer -Source "https://firmware.ardupilot.org/Tools/STM32-tools/gcc-arm-none-eabi-10-2020-q4-major-win32.exe" -Destination "$PSScriptRoot\gcc-arm-none-eabi-10-2020-q4-major-win32.exe"

Write-Output "Installing Cygwin x64 (4/7)"
Start-Process -wait -FilePath $PSScriptRoot\setup-x86_64.exe -ArgumentList "--root=C:\cygwin64 --no-startmenu --local-package-dir=$env:USERPROFILE\Downloads --site=http://cygwin.mirror.constant.com --packages autoconf,automake,ccache,cygwin32-gcc-g++,gcc-g++=7.4.0-1,libgcc1=7.4.0.1,gcc-core=7.4.0-1,git,libtool,make,gawk,libexpat-devel,libxml2-devel,python37,python37-future,python37-lxml,python37-pip,libxslt-devel,python37-devel,procps-ng,zip,gdb,ddd,xterm --quiet-mode"

Write-Output "Downloading extra Python packages (5/7)"
Start-Process -wait -FilePath "C:\cygwin64\bin\bash" -ArgumentList "--login -i -c 'python3.7 -m pip install empy==3.3.4 pyserial pymavlink intelhex dronecan pexpect'"

Write-Output "Installing ARM GCC Compiler 10-2020-Q4-Major (6/7)"
& $PSScriptRoot\gcc-arm-none-eabi-10-2020-q4-major-win32.exe /S /P /R

Write-Output "Installing MAVProxy (7/7)"
& $PSScriptRoot\MAVProxySetup-latest.exe /SILENT | Out-Null

Write-Host "Finished. Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

Write-Output 就跟 printecho 一样,用来向控制台打印内容。我们可以看到一共有7个步骤,他会帮我们:

  1. 下载 MAVProxy
  2. 下载 Cygwin
  3. 下载 ARM GCC 编译器
  4. 安装 Cygwin
  5. 下载需要的 Python 库
  6. 安装 ARM GCC 编译器
  7. 安装 MAVProxy

这就是完整的环境配置流程了,但是在我这里安装 Python 库似乎有些问题,因为后面运行仿真的时候还是提示我缺少 Python 库,也包括 empy 。但是这些都不是问题,后面后动安装一下就可以了,后面我们再看。

除了这个脚本,还有一个叫 install-prereqs-windows-andAPMSource.ps1 的脚本,它除了安装依赖环境外,还会帮你下载一份 ardupilot 源码。

#Powershell script to download and configure the APM SITL environment

Import-Module BitsTransfer

Write-Output "Starting Downloads"

Write-Output "Downloading MAVProxy (1/8)"
Start-BitsTransfer -Source "https://firmware.ardupilot.org/Tools/MAVProxy/MAVProxySetup-latest.exe" -Destination "$PSScriptRoot\MAVProxySetup-latest.exe"

Write-Output "Downloading Cygwin x64 (2/8)"
Start-BitsTransfer -Source "https://cygwin.com/setup-x86_64.exe" -Destination "$PSScriptRoot\setup-x86_64.exe"

Write-Output "Downloading ARM GCC Compiler 10-2020-Q4-Major (3/8)"
Start-BitsTransfer -Source "https://firmware.ardupilot.org/Tools/STM32-tools/gcc-arm-none-eabi-10-2020-q4-major-win32.exe" -Destination "$PSScriptRoot\gcc-arm-none-eabi-10-2020-q4-major-win32.exe"

Write-Output "Installing Cygwin x64 (4/8)"
Start-Process -wait -FilePath $PSScriptRoot\setup-x86_64.exe -ArgumentList "--root=C:\cygwin64 --no-startmenu --local-package-dir=$env:USERPROFILE\Downloads --site=http://cygwin.mirror.constant.com --packages autoconf,automake,ccache,cygwin32-gcc-g++,gcc-g++=7.4.0-1,libgcc1=7.4.0.1,gcc-core=7.4.0-1,git,libtool,make,gawk,libexpat-devel,libxml2-devel,python37,python37-future,python37-lxml,python37-pip,libxslt-devel,python37-devel,procps-ng,zip,gdb,ddd --quiet-mode"

Write-Output "Downloading extra Python packages (5/8)"
Start-Process -wait -FilePath "C:\cygwin64\bin\bash" -ArgumentList "--login -i -c 'python3.7 -m pip install empy==3.3.4 pyserial pymavlink intelhex dronecan pexpect'"

Write-Output "Downloading APM source (6/8)"
Copy-Item "APM_install.sh" -Destination "C:\cygwin64\home"
Start-Process -wait -FilePath "C:\cygwin64\bin\bash" -ArgumentList "--login -i -c ../APM_install.sh"

Write-Output "Installing ARM GCC Compiler 10-2020-Q4-Major (7/8)"
& $PSScriptRoot\gcc-arm-none-eabi-10-2020-q4-major-win32.exe /S /P /R

Write-Output "Installing MAVProxy (8/8)"
& $PSScriptRoot\MAVProxySetup-latest.exe /SILENT | Out-Null

Write-Host "Finished. Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

可以看到这里一共是 8 个步骤,多了第 6 步下载 APM 源码。它最后执行的是 APM_install.sh 这个脚本,它和 install-prereqs-windows-andAPMSource.ps1 在同一个目录下,我们看下它的内容:

#!/usr/bin/env bash

#A simple script to install the APM SITL environment into cygwin

git clone git://github.com/ArduPilot/ardupilot.git
cd ./ardupilot
git submodule update --init --recursive
./modules/waf/waf-light configure --board=sitl

其实就是我们第一步执行的下载源码的命令,但是这里它多了一步 ./modules/waf/waf-light configure --board=sitl ,在我的配置过程中没有手动执行过这个命令,但是我也成功了。

运行这两个脚本的任何一个都行,如果图省事可以运行 install-prereqs-windows-andAPMSource.ps1 一次把环境和源码都弄好。如果你的 Github 连接不稳定,或者你想自己决定源码放在哪里,可以执行 install-prereqs-windows.ps1 只安装依赖,然后自己下载源码。

因为我一开始不知道,所以执行的是 install-prereqs-windows.ps1 ,只安装了环境,所以下一步我就需要再下载一遍源码。

PS E:\project\c\ardupilot> .\Tools\environment_install\install-prereqs-windows.ps1
Starting Downloads
Downloading MAVProxy (1/7)
Downloading Cygwin x64 (2/7)
Downloading ARM GCC Compiler 10-2020-Q4-Major (3/7)
Installing Cygwin x64 (4/7)
User has NO backup/restore rights
User has NO symlink creation right
note: Hand installation over to elevated child process.
Downloading extra Python packages (5/7)
Installing ARM GCC Compiler 10-2020-Q4-Major (6/7)
Installing MAVProxy (7/7)
Finished. Press any key to continue ...

这个脚本执行需要一点时间,安装成功后,会提示我们按任意键结束。

第三步:打开Cygwin下载APM源码(可选)

在桌面上找到 Cygwin64 Terminal 图标,双击打开,或者按 win 键搜索一下打开。Cygwin 是 Windows 上的一个 Linux 终端模拟器,在这里我们可以执行 Linux shell 命令。

为什么我在这里又下载了一遍源码呢?因为当时我不知道怎么在 Cygwin 上访问 Windows 的文件系统,所以又在 Cygwin 上下载了一份源码。

$ git clone https://github.com/ArduPilot/ardupilot
$ cd ardupilot/
$ git submodule update --init --recursive

Windows 上的文件系统挂载在 Cygwin 的 cygdrive 目录下,比如我的代码放在 E:\project\c\ardupilot 目录下,那么在 Cygwin 上就是 /cygdrive/e/project/c/ardupilot 。如果在第一步已经下载了完整的源码,那么这里应该是可以直接用的,不用再重新下载,虽未亲测,但推测可行。

第四步:启动模拟

在开始之前我们要选择要模拟的载具,然后切换到相应的目录下执行 Tools/autotest/sim_vehicle.py 文件。比如我要模拟的是 ArduCopter,那么就执行:

$ cd ArduCopter
$ ../Tools/autotest/sim_vehicle.py  --map --console

这里我出现了缺少 Python 包的问题,一共是3个: pexpectempyfuture 。这里直接看错误提示跟着把缺少的包装上就可以了,因为我不确定是不是大家都是缺这3个库,所以也不推荐大家在这里先把这3个库装一遍。
在这里插入图片描述
在这里插入图片描述
pexpectfuture 都是用 pip3 install 直接安装就行。

在这里插入图片描述
empy 根据提示使用 python -m pip install empy=3.3.4 安装即可。

如果你的系统上安装了多个 Python 版本,还要注意下 pippip3 的区别,我们要用 Cygwin 上的 pip,比如我这里是这样的:

在这里插入图片描述

很明显,我的 Cygwin 上装的 Python 是 3.9.16,对应的 pip3,所以不能用 pip 去安装,否则就装错地方了。

以上问题都解决以后,再次执行 ../Tools/autotest/sim_vehicle.py --map --console 就会进入漫长的编译过程,最后编译成功,会弹出3个窗口。

在这里插入图片描述

到这里你的无人机就已经准备好起飞了。

右边是地图,上面有个无人机,左上是无人机的控制台,左下是 MAVProxy 的控制台。我可以在 MAVProxy 控制台中输入命令控制无人机起飞。

mode guided
arm throttle
takeoff 40

以上这些内容可以参考官方文档:在 Windows 上使用 Cygwin 进行 SITL 设置(不推荐)。别管推不推荐,反正这是目前我唯一运行成功的。

连接QGC

QGC 可以直接去官网下载安装,它有 Windows 的安装包。模拟器成功运行后,打开 QGC,其实它已经自动连上了。

在这里插入图片描述

应该都是默认端口,所以能自动连上。


现在只是把仿真环境配置好了,其实具体怎么用我还不太会,后面开发在说吧,咱们下期见。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安科瑞 Acrel-1000DP 分布式光伏监控系统在工业厂房分布式光伏发电项目中的应用

吕梦怡 18706162527 摘 要:常规能源以煤、石油、天然气为主,不仅资源有限,而且会造成严重的大气污染,开发清洁的可再生能源已经成为当今发展的重要任务,“节能优先,效率为本”的分布式发电能源符合社会发…

NAT 代理服务器

文章目录 1. NAT2. 内网穿透3. 内网打洞4. 代理服务器正向代理服务器反向代理服务器 5. DNS6. ICMP7.测试内网穿透 1. NAT 在ip协议章节,我们说报文转发给路由器时,由于私有IP地址不能出现在公网中,路由器会将报文源IP地址替换为路由器的WAN…

Python数据可视化-Pandas

文章目录 一. Pandas数据可视化简介二. Pandas 单变量可视化1. 柱状图2. 折线图3. 面积图4. 直方图5. 饼图 三. Pandas 双变量可视化1. 散点图2. 蜂巢图3. 堆叠图4. 折线图 一. Pandas数据可视化简介 pandas库是Python数据分析的核心库 它不仅可以加载和转换数据,还…

【NLP 18、新词发现和TF·IDF】

目录 一、新词发现 1.新词发现的衡量标准 ① 内部稳固 ② 外部多变 2.示例 ① 初始化类 NewWordDetect ② 加载语料信息,并进行统计 ③ 统计指定长度的词频及其左右邻居字符词频 ④ 计算熵 ⑤ 计算左右熵 ​编辑 ⑥ 统计词长总数 ⑦ 计算互信息 ⑧ 计算每个词…

【Elasticsearch】配置分片分配到指定节点

配置分片分配到指定节点 参考文章:https://www.elastic.co/guide/en/elasticsearch/reference/current/shard-allocation-filtering.html 两种方式:根据节点属性分配和根据节点名称分配。 测试环境 tar xvf elasticsearch-7.17.25-linux-x86_64.tar.gz…

1. Doris分布式环境搭建

一. 环境准备 本次测试集群采用3台机器hadoop1、hadoop2、hadoop3, Frontend和Backend部署在同一台机器上,Frontend部署3台组成高可用,Backend部署3个节点,组成3副本存储。 主机IP操作系统FrontendBackendhadoop1192.168.47.128Centos7Foll…

计算机毕业设计Python机器学习农作物健康识别系统 人工智能 图像识别 机器学习 大数据毕业设计 算法

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

gesp(C++四级)(11)洛谷:B4005:[GESP202406 四级] 黑白方块

gesp(C四级)(11)洛谷:B4005:[GESP202406 四级] 黑白方块 题目描述 小杨有一个 n n n 行 m m m 列的网格图,其中每个格子要么是白色,要么是黑色。对于网格图中的一个子矩形,小杨认为它是平衡的…

在Mac上使用 Docker 构建一个 noVNC 环境并运行 MyCobot

本文展示了Mycobot 280 M5 上的 Mycobot 280 M5 moveit2 模拟环境,以及详细介绍了使用 Docker 在 macOS(arm64)上构建 moveit2 环境的步骤。 一、引言 这篇文章主要内容是关于如何在 Ros2 环境中构建在 Mac 上模拟 Mycobot 280 M5 的环境。 …

c语言提供后端,提供页面显示跳转服务

后端代码: #define SERVER_IP_ADDR "0.0.0.0" // 服务器IP地址 #define SERVER_PORT 8080 // 服务器端口号 #define BACKLOG 10 #define BUF_SIZE 8192 #define OK 1 #define ERROR 0#include <stdio.h> #include <stdlib.h> #include <st…

AnaConda下载PyTorch慢的解决办法

使用Conda下载比较慢&#xff0c;改为pip下载 复制下载链接到迅雷下载 激活虚拟环境&#xff0c;安装whl&#xff0c;即可安装成功 pip install D:\openai.wiki\ChatGLM2-6B\torch-2.4.1cu121-cp38-cp38-win_amd64.whl

Sentinel服务保护 + Seata分布式事务

服务保护 【雪崩问题】微服务调用链路中某个服务&#xff0c;引起整个链路中所有微服务都不可用。 【原因】&#xff1a; 微服务相互调用&#xff0c;服务提供者出现故障。服务调用这没有做好异常处理&#xff0c;导致自身故障。调用链中所有服务级联失败&#xff0c;导致整个…

六、Angular 发送请求/ HttpClient 模块

一、应用 HttpClient 模块 angular/common/http 中的 HttpClient 类基于浏览器提供的 XMLHttpRequest 接口。要想使用 HtpClient 模块&#xff0c;就要先导入 Anqular 的 HttpClientModule。大多数 Web 应用程序都会在根模块 AppModule 中导入它。 编辑 src/app/app.module.ts…

CompletableFuture // todo

相比较所有代码都在主线程执行&#xff0c;使用Future的好处&#xff1a;利用服务器多核、并发的优势。 不足&#xff1a; 开启没有返回值的异步线程&#xff1a; 1、runAsync 使用lambda表达式&#xff1a; 开启有返回值的异步线程&#xff1a; 1、supplyAsync 异步任务中的…

css面试常考布局(圣杯布局、双飞翼布局、三栏布局、两栏布局、三角形)

两栏布局 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> &…

arcgisPro加载天地图(CGCS2000)影像

1、注册天地图账号&#xff1b; 2、申请key&#xff1b; 3、添加WMTS服务器。 这里已经办好了前两步&#xff0c;下面详细介绍最后一步。 添加WMTS服务器。 在天地图网站&#xff0c;找到如下页面&#xff0c; 复制网址&#xff0c;如&#xff1a;http://t0.tianditu.gov.cn…

继承(7)

大家好&#xff0c;今天我们继续来学习一下继承的知识&#xff0c;这方面需要大家勤动脑才能理解&#xff0c;那么我们来看。 1.9 protected关键字 在类和对象章节中&#xff0c;为了实现封装特性,java中引入访向限定符,主要限定:类或者类中成员能否在类外和其他包中被访问. …

ModuleNotFoundError: No module named ‘podm.metrics‘报错等解决方法

ModuleNotFoundError: No module named podm.metrics’报错等解决方法 podm.metrics 在运行时报错&#xff1a; ModuleNotFoundError: No module named ‘podm.metrics’ 安装了podm后还是报错 解决方法&#xff1a; 查看安装位置 查看podm的安装位置&#xff0c;并打开到该…

HDFS异构存储和存储策略

一、HDFS异构存储类型 1.1 冷、热、温、冻数据 通常&#xff0c;公司或者组织总是有相当多的历史数据占用昂贵的存储空间。典型的数据使用模式是新传入的数据被应用程序大量使用&#xff0c;从而该数据被标记为"热"数据。随着时间的推移&#xff0c;存储的数据每周…

sklearn-逻辑回归-制作评分卡

目录 数据集处理 分箱 分多少个箱子合适 分箱要达成什么样的效果 对一个特征进行分箱的步骤 分箱的实现 封装计算 WOE 值和 IV值函数 画IV曲线&#xff0c;判断最佳分箱数量 结论 pd.qcut 执行报错 功能函数封装 判断分箱个数 在银行借贷场景中&#xff0c;评分卡是…