在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 environmentImport-Module BitsTransferWrite-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 /RWrite-Output "Installing MAVProxy (7/7)"
& $PSScriptRoot\MAVProxySetup-latest.exe /SILENT | Out-NullWrite-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 environmentImport-Module BitsTransferWrite-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 /RWrite-Output "Installing MAVProxy (8/8)"
& $PSScriptRoot\MAVProxySetup-latest.exe /SILENT | Out-NullWrite-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 cygwingit 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,其实它已经自动连上了。

在这里插入图片描述

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


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

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

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

相关文章

HTB:Topology[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 提取并保存靶机TCP开放端口号 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用浏览器访问靶…

【 Verdi实用技巧-Part-3】

Verdi实用技巧-Part-3 3 Verdi实用技巧-Part-33.1 nWave window(看波形窗口)3.2 收集coverage3.3 nWave window3.4 Verdi-->app3.5 Force信号用Verdi去debug 本篇文章继续介绍Verdi实用技巧–Part-3; 3 Verdi实用技巧-Part-3 3.1 nWave window(看波形窗口) nWave window …

Vue sm3国密 IE模式报错处理

1、sm-crypto 转义错误 查看报错信息包名 在vue.config.js的transpileDependencies中把依赖包添加进去,让babel能够转译sm-crypto包 babel.config.js module.exports {presets: [[vue/app, {useBuiltIns: entry}]] }2、exports.destroy (() > { … }&a…

docker 基本使用

-do1.安装docker: Redirecting… 0. docker内使用gpu, 安装nvidia-docker: https://github.com/NVIDIA/nvidia-docker, 安装后使用:nvidia-container-cli -k -d /dev/tty list, 验证正确,无报错,即为正确 1. docker 启动image,如…

手机的ip地址是根据电话卡归属地定吗

在智能手机普及的今天,IP地址作为我们连接互联网的“门牌号”,其来源和确定方式常常引发用户的好奇。特别是关于手机IP地址是否与电话卡的归属地直接相关,这一话题更是众说纷纭。本文将深入探讨这一问题,为您揭开手机IP地址与电话…

计算机网络 (32)用户数据报协议UDP

前言 用户数据报协议(UDP,User Datagram Protocol)是计算机网络中的一种重要传输层协议,它提供了无连接的、不可靠的、面向报文的通信服务。 一、基本概念 UDP协议位于传输层,介于应用层和网络层之间。它不像TCP那样提…

YOLOv5改进 | CARAFE提高精度的上采样方法

目录 1 CARAFE模块原理 1.1 上采样的表示 1.2 Motivation 2 YOLOv5中加入CARAFE模块 2.1 ultralytics/nn/modules/block.py文件配置 2.2 ultralytics/nn/tasks.py配置 2.3 创建添加优化点模块的yolov5x-CARAFE.yaml 参考文献 1 CARAFE模块原理 上采样操作可以表示为…

高通,联发科(MTK)等手机平台调优汇总

一、常见手机型号介绍: ISP除了用在安防行业,还有手机市场,以及目前新型的A/VR眼睛,机器3D视觉机器人,医疗内窥镜这些行业。 下面是一些最近几年发布的,,,旗舰SOC型号: 1.联发科:天玑92…

windows从0开始配置llamafactory微调chatglm3-6b

后续会更新 从0学习LLaMaFactory参数解释说明 ,请期待~ 文章目录 一、准备工作1、创建python虚拟环境(annoconda)2、配置pytorch傻瓜版3、llamafactory配置4、微调数据准备5、开始微调5.1 webui启动微调5.2 指令启动微调 一、准备工作 1、创建python虚拟环境(annoc…

某漫画网站JS逆向反混淆流程分析

文章目录 1. 写在前面1. 接口分析2. 反混淆分析 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Pyth…

netplan apply报错No module named ‘netifaces‘

Ubuntu 20.04.5 LTS \n \l,ctrlaltf2切换字符登录f1切换图形 处理办法: root登录执行 rootnode37:/disk1/Qwen2.5-72B-Instruct-GPTQ-Int4# cat /etc/netplan/01-network-manager-all.yaml # Let NetworkManager manage all devices on this system …

LabVIEW 系统诊断

LabVIEW 系统诊断是指通过各种工具和方法检测、评估、分析和解决 LabVIEW 程序和硬件系统中可能存在的故障和性能问题。系统诊断不仅涵盖软件层面的调试与优化,还包括硬件交互、数据传输、实时性能等方面的检查和分析。一个成功的系统诊断能够显著提升LabVIEW应用程…

【Docker】docker compose 安装 Redis Stack

注:整理不易,请不要吝啬你的赞和收藏。 前文 Redis Stack 什么是? 简单来说,Redis Stack 是增强版的 Redis ,它在传统的 Redis 数据库基础上增加了一些高级功能和模块,以支持更多的使用场景和需求。Redis…

慧集通(DataLinkX)iPaaS集成平台-数据流程之流程透明化调试功能简介

在线运行流程 查看运行状态 流程第一次执行状态显示 流程第二次执行状态显示(由于订单已同步到七星ERP中,由于还是这些订单所以第二次同步时就报错了) 点击查看节点组件的详细入参与出参信息 U8C销售订单读取组件执行时详情 入参-查询条件…

数据集-目标检测系列- 电话 测数据集 call_phone >> DataBall

数据集-目标检测系列- 电话 测数据集 call DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(free)” 贵在坚持! …

【PPTist】公式编辑、插入音视频、添加动画

一、插入公式 点击公式的时候 latexEditorVisible 会变成 true src/views/Editor/CanvasTool/index.vue <Modalv-model:visible"latexEditorVisible" :width"880" ><LaTeXEditor close"latexEditorVisible false"update"data &…

istio-proxy oom问题排查步骤

1. 查看cluster数量 cluster数量太多会导致istio-proxy占用比较大的内存&#xff0c;此时需检查是否dr资源的host设置有配置为* 2. 查看链路数据采样率 若采样率设置过高&#xff0c;在压测时需要很大的内存来维护链路数据。可以调低采样率或增大istio-proxy内存。 检查iop中…

【数据库】四、数据库管理与维护

文章目录 四、数据库管理与维护1 安全性管理2 事务概述3 并发控制4 备份与恢复管理 四、数据库管理与维护 1 安全性管理 安全性管理是指保护数据库&#xff0c;以避免非法用户进行窃取数据、篡改数据、删除数据和破坏数据库结构等操作 三个级别认证&#xff1a; 服务器级别…

rhcsa练习(3)

1 、创建文件命令练习&#xff1a; &#xff08; 1 &#xff09; 在 / 目录下创建一个临时目录 test &#xff1b; mkdir /test &#xff08; 2 &#xff09;在临时目录 test 下创建五个文件&#xff0c;文件名分别为 passwd &#xff0c; group &#xff0c; bashrc &#x…

如何设计一个注册中心?以Zookeeper为例

这是小卷对分布式系统架构学习的第8篇文章&#xff0c;在写第2篇文章已经讲过服务发现了&#xff0c;现在就从组件工作原理入手&#xff0c;讲讲注册中心 以下是面试题&#xff1a; 某团面试官&#xff1a;你来说说怎么设计一个注册中心&#xff1f; 我&#xff1a;注册中心嘛&…