APM联合gazebo进行固定翼仿真

一、事情起因

由于项目使用的是固定翼飞机,然后又要求使用的是APM固件,所以之前对PX4固件就需要从新来过。

1.1 APM的飞行模式

固定翼常见的飞行模式

  • MANUAL:手动模式
    等效于不加飞控直接使用遥控器控制飞机。
  • FBWA:fly by wire_a
    这是固定翼中最常用的模式;
    遥控器摇杆控制飞机横滚和俯仰的角度,摇杆回中后飞机自动维持零位姿态;
    方向舵还是手动控制;
    油门还是通过遥控器手动控制,飞机不会自动调整油门以维持高度(如果油门过大或者过低,即使俯仰姿态角为0,高度依然有可能发生变化)。
  • FBWB:fly by wire_b
    与FBWA类似,但是飞机会主动维持高度;
    横滚控制与FBWA一样,是由遥控器控制目标横滚角;
    遥控器升降摇杆控制飞机的高度,摇杆回中后飞机会自动调整升降舵以维持当前高度;
    遥控器油门摇杆控制的是目标空速。
  • Stablize:增稳模式
    APM官方文档明确表示不建议使用此模式,推荐使用FBWA。
  • TAKEOFF:起飞模式
    飞机将爬升到“TKOFF_ALT”参数定义的高度,然后开始盘旋。
    参考文章,最好请参考官方文章

二、仿真环境配置

配置请你参考前面一篇文章:点击这里

2.1 配置过程中问题出现及其解决办法

(1)

#终端输如下行命令报错
gazebo --verbose zephyr_ardupilot_demo.world

报错:无法找到world文件
解决办法:

sudo gedit /usr/share/gazebo/setup.sh
sudo gedit /usr/share/gazebo-9/setup.sh

将export GAZEBO_MODEL_DATABASE_URI=http://gazebosim.org/models修改为:

export GAZEBO_MODEL_DATABASE_URI=http://models.gazebosim.org/

然后:

cd ~/ardupilot_gazebo/models
打开终端
wget http://models.gazebosim.org/manifest.xml

(2)map和终端不显示
原因:mavproxy未安装好,参考官方链接安装参考地址
解决办法:

sudo apt-get install python3-dev python3-opencv python3-wxgtk4.0 python3-pip python3-matplotlib python3-lxml python-pygame
pip3 install PyYAML mavproxy --user
echo 'export PATH="$PATH:$HOME/.local/bin"' >> ~/.bashrc

常见错误请参考链接](https://blog.csdn.net/Dojinz/article/details/134872301)

2.2 固定翼gazebo模型构建

在上一个文章中,我们构建自己的gazebo模型,然后进行编译,但是那个没有包含固定翼模型,所以我们需要更换。

git clone https://github.com/SwiftGust/ardupilot_gazebo
cd ardupilot_gazebo
mkdir build
cd build
cmake ..
make -j4
sudo make install

在这里插入图片描述

更换之前里面的模型如下所示:

在这里插入图片描述

上述就是全部的环境配置

2.3 APM固件编译

接下来可以按照BUILD.md中的进行waf编译。
确保~/.bashrc的环境变量都设置好了,没有就请你参考我的第一篇文章点击这里

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

运行仿真:

sim_vehicle.py -v ArduPlane -f gazebo-zephyr --map --console -I0

换另外一个终端

gazebo --verbose zephyr_ardupilot_demo.world

开始起飞:

#切换到takeoff模式
mode takeoff
#解锁油门 
arm throttle

固定翼会默认起飞到10m高度进行circle动作。
在这里插入图片描述

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

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

相关文章

深度学习 Day19——P8YOLOv5-C3模块实现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU(如果设备上支持GPU就使用GPU,否则使用C…

RuoYi-Vue分离版集成MQTT客户端,超详细版

一:前言 1、使用场景:最近对接物联网开发需要集成MQTT进行消息订阅 2、前置准备:首先需要下载部署好MQTT服务(推荐emqx),在我上一条博客里面有详细步骤,官方文档部署的也非常详细(…

【QT】C++/Qt使用Qt自带工具windeployqt打包

基本操作 运行项目debug或者release 将运行后的可执行文件单独放到一个文件夹中 根据项目使用的kits来选择Qt的打包工具 打开工具后移动到exe文件夹下执行windeployqt xxx.exe 预览图 问题 打包后再其他电脑上运行出现下图错误 将自己电脑的这个文件拷到可执行文件夹中既…

一文读懂什么是智能工厂?

引言 在当今快速变革的制造业中,智能工厂如一盏明灯,照亮着未来生产的道路。它们不仅代表着技术的进步,更是制造业向前迈进的里程碑。智能工厂利用先进的技术和创新方法,将传统工厂转化为高度自动化、数字化和智能化的生产中心。…

SpringMVC01

SpringMVC 1. 学习⽬标2. 什么叫MVC?3. SpringMVC 框架概念与特点4. SpringMVC 请求流程5. Spring MVC 环境搭建6. URL 地址映射配置7. 参数绑定8. JSON 数据开发JSON普通数组步骤1:pom.xml添加依赖步骤2: 修改配置⽂件步骤3. 注解使⽤ 1. 学习⽬标 2. 什…

LeetCode Hot100 79.单词搜索

题目: 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那…

[C++] 多态(下) -- 多态原理 -- 动静态绑定

文章目录 1、多态原理2、动态绑定和静态绑定3、单继承和多继承关系的虚函数表3.1 单继承中的虚函数表5.2 多继承中的虚函数表 上一篇文章我们了解了虚函数表,虚函数表指针,本篇文章我们来了解多态的底层原理,更好的理解多态的机制。 [C] 多态…

文件操作(下)

标题的顺序是接着之前写的,希望这篇博客对你有帮助 七. 随机读写函数 实际上,无论是读还是写,在一次调用顺序读写函数,文件指针会移到已经读过或者写过的下一个位置,从那个位置开始下一次读和写(在文件没有…

Jenkins插件安装失败时这么做就搞定啦!

1.网络或墙的问题导致插件下载安装失败 这种错误提示很明显,就是无法连接到插件下载地址,导致插件下载失败。 解决方法 为Jenkins更换源 点击Jenkins主页面左侧列表中【系统管理】—— 下拉找到【管理插件】 选择【高级】选项卡 替换最下方【升级站点…

JS基础之模块化

JS基础之模块化 JS模块化模块化前端发展 什么是模块?怎么定义模块化IIFE匿名函数自调用IIFE模式增强模块化的好处 JS模块化 模块化 JS DOM操作 代码规范管理的标准 不同模块间的管理模块内部自组织 标准bundler (模块构建工具) ESNext TS -> ES5 前端发展 生态 …

第二百一十六回 分享一种更新页面数据的方法

文章目录 1. 概念介绍2. 实现方法2.1 实现思路2.2 实现方法3. 示例代码4. 内容总结我们在上一章回中介绍了"如何创建单例模式"相关的内容,本章回中将 分享一种更新页面数据的方法.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍一种更新页…

【Maven-Helper】利用 Maven-Helper 解决依赖冲突问题

【Maven-Helper】利用 Maven-Helper 解决依赖冲突问题 1)安装 Maven-Helper 插件2)Maven Helper 插件使用方法3)Idea-Maven 可视化依赖树 1)安装 Maven-Helper 插件 这里我们已经安装过了,如果没有安装过,点…

【JUC】三十一、AQS源码

📕前置笔记:【AQS核心概念与核心类】 文章目录 1、ReentrantLock与AQS类的联系2、lock方法3、acquire方法4、源码分析Demo背景案例5、tryAcquire方法6、addWaiter方法7、acquireQueued方法8、unlock方法9、cancelAcquire方法 AQS是JUC的基石,…

智能优化算法应用:基于寄生捕食算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于寄生捕食算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于寄生捕食算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.寄生捕食算法4.实验参数设定5.算法结果6.…

数字化技术助力英语习得 iEnglish成智慧化学习新选择

日前,美剧《老友记》中钱德勒的扮演者马修派瑞去世的消息引发不少人的回忆杀。《老友记》官方发文悼念马修派瑞:“对于马修派瑞去世的消息,我们深感悲痛,他是给我们所有人的真正礼物,我们的心和他的家人、爱人、所有的粉丝在一起。” 作为不少国人刷剧学习英语的首选,《老友记…

C语言-数组指针笔试题讲解(1)-干货满满!!!

文章目录 ▶️1.sizeof和strlen的对比💯➡️1.1 sizeof是什么?💯➡️1.2sizeof用法举例💯▶️1.3strlen是什么?💯▶️1.4 strlen函数用法举例:💯▶️1.5 strlen和sizeof的对比&#…

优化问题笔记(2)

目录 3. 约束优化问题的全局解3.1 凸优化问题3.2 二次优化问题3.3 无约束二次优化问题3.4 一个典型的二次等式约束二次优化问题 Reference 3. 约束优化问题的全局解 3.1 凸优化问题 局部解成为全局解的一类重要的优化问题是所谓凸优化问题. 我们称优化问题 ( f , D ) (f,\ma…

性能测试之全链路压测流量模型你了解多少

前言 现在全链路越来越火,各大厂商也纷纷推出了自己的全链路压测测试方案。特别是针对全链路压测流量模型,各家方案都有所不同。最近我看了一些这方面的资料,有一些感悟。分享给大家。 全链路压测流量模型的梳理呢,这里就先不讲…

Gemini Pro API 详细申请步骤

Gemini Pro API 详细申请步骤 什么是 Gemini ? 上周,谷歌发布了 Gemini(双子座),它是谷歌最新、最强大的人工智能模型,旨在迎头痛击 OpenAI 的 GPT。Gemini 在构建时考虑到了多模态性,这意味着它能够理解…

【日常总结】连接Mysql,打开数据表非常慢

问题 Navicat 连接mysql时,第二次打开非常慢 原因 Mysql服务器端会定时清理长时间不活跃空闲的数据库连接,以此优化数据库的性能。 解决方案 数据库右键---编辑连接--高级---保持连接间隔30秒 带来的问题 每次打开Navicat时,设置设置自动…
最新文章