APM固件编译和仿真

事情起因

主要想对无人机APM固件进行仿真的算法验证,因实际飞行的过程实际验证太浪费飞机了,所以就先试用仿真对算法进行仿真开发。

一,环境搭建

环境搭建我建议参考官方英文教程,英文教程写的比较全,不懂可以自己使用软件翻译。

#安装git工具和相关依赖项
sudo apt-get updatesudo apt-get install gitsudo apt-get install gitk git-gui

(2)下载官方源码

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

(3)安装编译环境,源码里面提供了脚本,运行脚本即可安装好编译环境

Tools/environment_install/install-prereqs-ubuntu.sh -y

执行完结果如下所示
在这里插入图片描述
接着运行

. ~/.profile

情况提示:这里建议使用最新版的apm固件的环境安装脚本,因为旧版固件的安装脚本安装完环境后,能编译旧版固件,但不一定能编译新版固件
---------------------------------分界线-----------------------------------------------------------------------------------------------------
到这里我直接按照README.md进行运行

./waf configure --board sitl  
./waf copter #编译的是四旋翼,你也可以选择固定翼

直接给我报错,我也不知道什么原因,找了很多博客没有找到解决办法。报错如下:

Caught exception! 'dict' object has no attribute 'unknownScriptName'
Caught exception! 'dict' object has no attribute 'unknownScriptName'
.................此处省略很多字
Traceback (most recent call last):File "/home/mawei/ardupilot/modules/DroneCAN/dronecan_dsdlc/dronecan_dsdlc.py", line 195, in <module>assert not buildlist-builtlist, "%s not built" % (buildlist-builtlist,)
AssertionError: {'uavcan.tunnel.Protocol', 'uavcan.equipment.hardpoint.Status', 'com.hobbywing.esc.StatusMsg2', 'uavcan.equipment.gnss.Auxiliary', 'uavcan.protocol.NodeStatus', 'uavcan.equipment.camera_gimbal.GEOPOICommand', 'uavcan.equipment.air_data.AngleOfAttack', 'uavcan.equipment.air_data.Sideslip', 'ardupilot.gnss
dr
.................此处省略很多字
onecangen returned 1 error code
Waf: Leaving directory `/home/mawei/ardupilot/build/sitl'
Build failed-> task in 'dronecan' failed (exit status 1): {task 140138241604968: dronecangen .github,ardupilot,com,cuav,dronecan,mppt,tests,uavcan -> }(run with -v to display more information)	
git

checkout Copter-4.1
切换分支
git submodule update --init --recursive
在这里插入图片描述
再运行就可以
在这里插入图片描述

编译对应飞机的固件代码

./waf copter

开始正式仿真

前面都是对仿真环境的配置,接下来就是我们真正的仿真环境,因为我们需要使用gazebo仿真平台,所以打开终端,在下面运行如下语句。

#联合gazebo仿真的环境,如果你不使用gazebo,可以不需要
../Tools/autotest/sim_vehicle.py -f gazebo-iris --console --map

不用gazebo仿真,一样可以完成仿真,因为你的数据会在QGC地面站实时显示,如下方式
在这里插入图片描述
打开了仿真之后,我们换一个终端打开gazebo的仿真地图。

 gazebo --verbose worlds/iris_arducopter_runwayorld

在这里插入图片描述
输入起飞指令

mode guided # 引导模式
arm throttle # 解锁油门
takeoff 10 #起飞至10m高度
Land #降落

在这里插入图片描述

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

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

相关文章

contentType及MIME类型详细说明

ContentType及 MIME详解 contentType 是用于指定 HTTP 请求或响应中主体数据的媒体类型&#xff08;Media Type&#xff09;或 MIME 类型&#xff08;Multipurpose Internet Mail Extensions&#xff09;。它通常作为请求头&#xff08;Request Header&#xff09;或响应头&am…

智能 GPT 图书馆又重生了

智能 GPT 图书馆又重生了 作者&#xff1a;程序员小白条 1&#xff09;概述 自从大二寒假准备开始筹备这个项目&#xff0c;到现在已经一年了&#xff0c;这个项目能维护一年&#xff0c;不愧是我.jpg。本来这个项目只是想练练手&#xff0c;因为那时候刚学完 Spring Boot2 V…

如何将门脸图片文字识别为excel表格数据?

对于市场调查人员而言&#xff0c;最烦的事莫过于对路边的小店进行逐一记录了&#xff0c;有没有效率高点的办法&#xff0c;不用人工录入呢&#xff1f;我来告诉你一个秘密&#xff1a;先将小店的牌子&#xff08;门脸&#xff09;拍下来&#xff0c;然后用OCR软件批量转成exc…

安卓自动化 APP:轻松关闭任意开屏广告 | 开源日报 No.116

gkd-kit/gkd Stars: 8.7k License: GPL-3.0 基于无障碍 高级选择器 订阅规则的自定义屏幕点击 APP&#xff0c;主要功能包括实现跳过任意开屏广告、关闭应用内部弹窗广告以及一些快捷操作&#xff0c;如微信电脑登录自动同意和领取红包等。其核心优势和特点包括&#xff1a;…

github入门基础操作

GitHub是一个基于Git版本控制系统的代码托管平台&#xff0c;它提供了一个方便的平台&#xff0c;让开发者可以在上面存储、管理和分享代码。如果你是一个开发者&#xff0c;那么学习如何使用GitHub是非常重要的&#xff0c;因为它可以帮助你更好地管理你的代码和协作开发。 在…

【Kotlin】集合操作

Kotlin 集合操作篇 背景集合类型集合操作加减操作并集交集集合分组集合转换flatMapflatMapIndexedflatMapTomapIndexedmapIndexedToreduceIndexedflatten 背景 在经过一段时间的kotlin实践后&#xff0c;发现它真的很适合我们当前的业务场景&#xff0c;一方面它可以和Java无缝…

SpringBoot Whitelabel Error Page 报错--【已解决】

springboot 报错信息如下 这个报错页面就是个404 &#xff0c;代表你访问的url 没有对应的的requestmapping 其实没啥影响的一个问题&#xff0c;但是看到Error 就是不爽&#xff0c;改了他丫的 解决方法如下 一、调整application.properties配置【治标不治本】 server.err…

GPT与ArcGISPro结合编程,地理空间分析,图绘制、渲染

在地学领域&#xff0c;ArcGIS几乎成为了每位科研工作者作图、数据分析的必备工具&#xff0c;而ArcGIS Pro3除了良好地继承了ArcMap强大的数据管理、制图、空间分析等能力&#xff0c;还具有二三维融合、大数据、矢量切片制作及发布、任务工作流、时空立方体等特色功能&#x…

测试中调用别人的服务,单元测试写法

在Java中&#xff0c;进行单元测试时调用别人的服务&#xff0c;可以使用单元测试框架如JUnit&#xff0c;并结合模拟框架如Mockito来模拟或替代外部服务。 以下是一个示例&#xff0c;展示了在Java中进行单元测试时调用外部服务的写法&#xff1a; java import org.junit.Te…

JVM虚拟机运行时数据区程序计数器和元空间和线程控制块

阅读前提是对虚拟机有一定的理解 文章目录 阅读前提是对虚拟机有一定的理解16.堆、(方法区)元空间、虚拟机栈、程序计数器、本地方法栈16.1每个线程私有pc、vms、nms,共享 堆和堆外空间&#xff08;元空间等&#xff09; 1.虚拟机中运行时数据区中的方法区被元空间取代2. 用于存…

Jmeter自动判定运行结果(断言)

大家知道在jmeter中如果要查看运行结果可以通过添加监听器里面的查看结果树进行验证&#xff0c;但是这种方式查看结果依然是通过人眼进行比对的&#xff0c;为了能够解放双眼&#xff0c;可以通过jmeter自带的断言功能进行结果的自动判定&#xff0c;这样也算是进行一个简单的…

Apache Seatunnel本地源码构建编译运行调试

Apache Seatunnel本地源码构建编译运行调试 文章目录 1. 环境准备1.1 Java环境1.2 Maven1.3 IDEA1.4 Docker环境1.5 Mysql8.0.281.6 其它环境准备 2. 源码包下载3. idea项目配置3.1 项目导入3.2 maven配置3.3 项目JDK配置3.4 项目启动参数配置3.4.1 seatunnel项目启动参数配置3…

检查指定的进程(默认为java.exe)是否正在运行

echo off set "processNamejava.exe" REM 替换为您要检查的进程名称REM 使用 tasklist 命令获取进程列表&#xff0c;并使用 findstr 命令搜索指定的进程名称 for /f "tokens1-3 delims " %%a in (tasklist ^| findstr /i "%processName%") do …

Qt之使用QListView加载相册(富文本ToolTip)

一.效果 二.实现 #include "mainwindow.h" #include "ui_mainwindow.h"#include <QStandardItemModel> #include <QFont>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);QFont…

内衣洗衣机好用吗?专门洗内衣内裤的热门小型洗衣机

随着人们的生活水平的提升&#xff0c;越来越多小伙伴来开始追求更高的生活水平&#xff0c;一些智能化的小家电就被发明出来&#xff0c;而且内衣洗衣机是其中一个。现在通过内衣裤感染到细菌真的是越来越多&#xff0c;所以我们对内衣裤的清洗频次会高于普通衣服&#xff0c;…

【赠书活动】OpenCV4工业缺陷检测的六种方法

文章目录 前言机器视觉缺陷检测工业上常见缺陷检测方法延伸阅读推荐语 赠书活动 前言 随着工业制造的发展&#xff0c;对产品质量的要求越来越高。工业缺陷检测是确保产品质量的重要环节&#xff0c;而计算机视觉技术的应用能够有效提升工业缺陷检测的效率和精度。 OpenCV是一…

【数据结构】八大排序之简单选择排序算法

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 一.简单选择排序简介及思路 二.简单选择排序的代码实现 三.简单选择排序的优化 四.简单选择排序的时间复杂度分析 结语 一.简单选择排序简介及思路 简单选择排序算法…

Koa.js 入门手册:洋葱模型插件机制详解以及常用中间件

前言 Nodejs 提供了 http 能力&#xff0c;我们通过如下代码可以快速创建一个http server服务 const http require(http);http.createServer((req, res) > {res.write(hello\n);res.end();}).listen(3000);使用nodejs提供的原生能力启动一个http server并不麻烦&#xff…

css 2D转换

转换&#xff08;transorm&#xff09;是css3中具有颠覆性的特征之一&#xff0c;可以实现元素的位移、旋转、缩放等效果。 1.移动&#xff1a;translate 语法&#xff1a; transform:translate(x,y)或者分开写 transform:translateX&#xff08;n&#xff09; ​transform:t…

【合并两个pandas的DataFrame】

如果你想合并两个pandas DataFrame&#xff0c;可以使用concat、merge或join函数。 1、 使用concat函数: 这个函数用于沿着一条轴将多个对象堆叠到一起。 import pandas as pd # 创建两个示例的DataFrame df1 pd.DataFrame({A: [1, 2], B: [3, 4]}) df2 pd.DataFrame({A: […