ArduPilot+mavros+gazebo+QGC联合仿真初体验

2023-05-16

首先给出最终效果图:在这里插入图片描述
实现内容与PX4官网代码功能类似,四旋翼飞机自动起飞至2.5m高度,悬停一定时间,然后自主降落。
记录如下几个需要注意的地方:

  1. 一共使用到三个文件夹,其中第一个为源代码,第二个为参照官网下载的gazebo地图信息,第三个为ROS功能包。
    在这里插入图片描述

2.第二个gazebo地图需要在github上下载然后编译

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

然后,注意要把环境变量配置好,参照github上的说法如下

echo 'source /usr/share/gazebo/setup.sh' >> ~/.bashrc

Set Path of Gazebo Models (Adapt the path to where to clone the repo)

echo 'export GAZEBO_MODEL_PATH=~/ardupilot_gazebo/models' >> ~/.bashrc

Set Path of Gazebo Worlds (Adapt the path to where to clone the repo)

echo 'export GAZEBO_RESOURCE_PATH=~/ardupilot_gazebo/worlds:${GAZEBO_RESOURCE_PATH}' >> ~/.bashrc
source ~/.bashrc

配置好的环境变量截图如下
在这里插入图片描述
3. 启动gazebo 地图为

gazebo --verbose worlds/iris_arducopter_runway.world

注:1)在启动过程中,存在一直download的情况,需要下载gazebo的地图包(从百度云盘直接下载即可),然后解压到~/.gazebo下(若没有worlds文件夹,则创建文件夹)如下图所示
在这里插入图片描述2)启动gazebo地图的时候,发现 四轴云台链接件 需要下载,故在模型中直接选择屏蔽,即最终的仿真中该部件缺失。方法为找到下图中的model.sdf文件。在这里插入图片描述
将其中的云台相关部分屏蔽掉
在这里插入图片描述
此时,即可正常启动gazebo环境,如下图所示。
在这里插入图片描述
4. 按照官网方式,打开ArduPilot代码中的sitl模式,命令为(可以理解为ArduPilot中的sitl模式调用的为Tools/autotest/sim_vehicle.py文件)

cd ~/ardupilot/ArduCopter
../Tools/autotest/sim_vehicle.py -f gazebo-iris --console --map

后面的参数–console为打开显示端,–map为打开地图。如下图所示。在这里插入图片描述
此时,已经完成了ArduPilot的sitl模式与gezebo联合调试。(左下角的报错为地图未成功加载完毕,会不停的从网络上下载相应的地图)。
5. 此时,打开QGC会自动的链接上ArduPilot,即可完成直接的通信。同时可以在QGC上实现相应的动作。
在这里插入图片描述
6. 最后是ROS和mavros部分。功能包的创建和编译首先参照官网。和前面写的博客推文一致,增加了offboard模式的结点。(这里,对应ArduPilot代码,没有对应的offboard模式,我采用GUIDED模式进行,但是guide模式并非offboard模式)。按照官网说明,拷贝从mavros代码包中拷贝apm.launch到自己建的ROS功能包中
Let’s copy MAVROS default launchfile for ArduPilot :

roscp mavros apm.launch apm.launch

然后编辑apm.launch文件,修改对应的端口

<arg name="fcu_url" default="udp://127.0.0.1:14551@14555" />

在本次实验中,从下句输出信息可以看出,共打开了127.0.0.1:14550,14551端口。其中一个分配给QGC,另一个分配给mavros即可。

"--master" "tcp:127.0.0.1:5760" "--sitl" "127.0.0.1:5501" 
"--out" "127.0.0.1:14550" "--out" "127.0.0.1:14551" "--map" "--console"
  1. 最后,通过ROSlaunch启动对应的ros结点,完成四旋翼的起飞,悬停和降落功能。运行指令为:
roslaunch apm_mavros apm.launch 

在这里插入图片描述
其中ROS的代码部分,主要是为了实现功能,粘贴主要部分如下:

   if(!current_state.armed && tmp)
    {
        arming_client.call(arm_cmd);
        tmp = 1;
        ROS_INFO("Call for arm!");
    }
    if(arm_cmd.response.success)
    {
         take_off.request.altitude = 2.5;
         if(!take_off.response.success && tmp)
         {
             tmp = 0;
             set_takeoff_client.call(take_off);
             ROS_INFO("Call for takeoff");
                    // sleep(10);
         }
         if(take_off.response.success)
         {
           // ROS_INFO("Takeoff successfully!");
            count++;
         }
    }
    if(count>300)
    {
        mode_rtl_ok = 1;
        offb_set_mode.request.custom_mode = "RTL";
        set_mode_client.call(offb_set_mode);
    }  

总结:至此,ROS/Mavros + gazebo 与PX4 (PX4推文点击这里查看)和ArduPilot的 sitl 仿真均已经验证实现过了。个人感觉,PX4代码对这一套仿真流程支持要好一些,主要好在提供的代码全,讲解全,附带的诸如lidar, camera的插件多。而ArduPilot则没有将重心放在这里,需要各位程序员自己变成实现,这就要求对gazebo插件,mavros等内容有较好的理解。另外,ArduPilot的官网信息也有很多需要维护和修改,存在一定的坑(此处对大神无效)。
当然,这一套仿真流程主要是用在swarm, SLAM等上面,PX4的代码维护者很多也都是机器视觉方面的。ArduPilot的代码维护和变动感觉要大一些,后面会推出UAVCAN,还有Lua脚本等高端玩法,加入了无人船,Rover等。
向两个活跃社区的贡献者致敬!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ArduPilot+mavros+gazebo+QGC联合仿真初体验 的相关文章

  • RPMsg:协议简介

    RPMsg xff1a 协议简介 本篇文章转载于简书 xff0c 在此做个整理和备份 xff0c 方便查阅 在此感谢原博主SunnyZhou1024 RPMsg xff1a 协议简介0 起因1 AMP2 RPMsg2 1 Linux中的RP
  • GEM TSU Interface Details and IEEE 1588 Support

    GEM TSU Interface Details and IEEE 1588 Support Chapter 1 IntroductionChapter 2 GEM TSU Clock SourcePCW 中的 GEM TSU 时钟源选择
  • ZYNQ UltraScale+ MPSoC Linux + ThreadX AMP玩法

    ZYNQ UltraScale 43 MPSoC Linux 43 ThreadX AMP玩法 ZYNQ UltraScale 43 MPSoC与ZYNQ 7000架构比较目标 一 创建Linux1 修改kernel2 修改设备树编译 am
  • Zipwire

    文章目录 Chapter 55 Zipwire55 1 Chip specific Zipwire information52 2 Overview55 3 Introduction55 4 Zipwire Block Diagram55
  • arm启动过程详解

    ARM芯片的启动程序的分析和总结 2009 02 04 14 35 26 标签 xff1a 杂谈 分类 xff1a ARM 1 综述 xff1a 目前大多基于ARM芯片的系统都是一个比较复杂的片上系统 xff0c 多数硬件模块都是可配置的
  • 数据读写的乒乓操作

    数据读写的乒乓操作 文中一部分从其他博客中学习到 xff0c 加入了自己实际应用的过程 在重要数据的解帧与处理过程中 xff0c 为了确保数据的实时性与可靠性 xff0c 我们一般对收到的数据存储到芯片的RAM或Flash xff08 掉电
  • 生命在于学习——Linux提权

    本篇文章仅用于学习记录 xff0c 不得用于其他违规用途 一 内核漏洞提权 1 常规查找 查看内核版本信息 uname span class token operator span a uname span class token oper
  • 前入式JUC常用类源码分析

    CountDownLatch span class token keyword public span span class token keyword class span span class token class name Coun
  • dockerfile中的命令:run, cmd, entrypoint, copy和add

    总结一下 xff0c run 可以有多个 xff0c cmd 和entrypoint 只能有一个 xff08 常用来跑app xff09 cmd 可以被docker 指令overwrite xff0c entrypoint不可以 此命令会在
  • Qt类关系一览表

    Qt类关系一览表
  • ros之pid

    PID口诀 参数整定找最佳 xff0c 从小到 大顺序查 先是比例后积分 xff0c 最后再把微分加 曲线振荡很频繁 xff0c 比例度盘要放大 曲线漂浮绕大湾 xff0c 比例度盘往小扳 曲线偏离回复慢 xff0c 积分时间往下降 曲线波
  • 导 Kinect2库,opencv库,pcl库

    导 Kinect2库 opencv库 pcl库 Kinect2驱动安装 https blog csdn net qq 15204179 article details 107706758 ndfreenect2 cmake Kinect2
  • ros中订阅/map话题,获取地图尺寸,获取机器人原点origin,获取地图分辨率resolution (c++,python,waitForMessage,wait_for_message)

    ros中订阅 map话题 获取地图尺寸 获取机器人原点position 获取地图分辨率resolution 1 nbsp include lt ros ros h gt include lt nav msgs OccupancyGrid h
  • geometry_msgs::TransformStamped与geometry_msgs::PoseStamped消息互转

    geometry msgs TransformStamped与geometry msgs PoseStamped消息互转 下面是一个将geometry msgs TransformStamped转换为geometry msgs PoseSt
  • ros中获取小车当前位置

    ros中获取小车当前位置 一 tf2获取小车当前位置 xff1a include 34 tf2 ros transform listener h 34 include 34 tf2 ros buffer h 34 include 34 tf
  • 记一次被正点原子坑了的经历

    被正点原子坑 xff0c 不是买了他们的板子 xff0c 而是用了他们的一个Lwip的配置文件lwipopt h文件 xff0c 事情是这样的 xff0c 我现在开发的这个项目用lwip的库 xff0c 版本是1 4 1 xff0c 上手的
  • SecureCRT连接超时设置-The semaphore timeout period has expired

    设置 设置后就不会出现短时间没有操作连接超时的局面 xff0c 要求需要再次重连的问题 FR 徐海涛 xff08 hunk Xu xff09 QQ技术交流群 xff1a 386476712
  • CANoe-Trace-CAN Error

    CANoe软件CAN Error排查经验案例 系统模拟充电桩 xff0c 和实车车辆通过枪线连接 xff0c 启动充电流程 xff0c 在Trace界面看到CAN1有故障 xff0c CAN Error xff0c 并且是TxError 原
  • Makefile的使用

    Makefile规则 规则解析 一个简单的 Makefile 文件包含一系列的 规则 xff0c 样式如下 xff1a 目标 target 依赖 prerequiries lt tab gt 命令 command 目标 xff08 targ
  • STM32用一个定时器输出多路不同频率及占空比的PWM(输出比较模式)

    我们使用STM32输出PWM时会使用定时器的PWM输出模式来进行生成 xff0c 但是这样子生成PWM是有局限的 xff0c 它只能生成四路频率相同的PWM xff0c 当你设定了TIMx PSC xff08 预分频寄存器 xff09 和T

随机推荐

  • 虚拟机的安装与开发环境的配置

    前言 最近开始接触嵌入式 xff0c 之前也就学过C语言 xff0c 但是都是是非常基础的一些知识 知识最高峰的时期就是为了过国家计算机二级C 而一通猛学 下面就放入我最近学习笔记的内容 一 Linux开发环境的搭建 下载VirtualBo
  • C语言:基础知识

    基础C语言 基本知识 如何在虚拟机上写代码 1 打开终端 xff08 Ctrl xff0b Alt xff0b t xff09 xff0c mkdir day01 创建目录 cd 目录名 2 vim file c xff0c 进入vim文本
  • 详解scanf、gets、getchar和getch 使用及其原理。

    scanf gets getchar和getch 使用及其原理 一 说在最前 xff1a 回车及换行 概念 在计算机还没有出现之前 xff0c 有一种叫做电传打字机 在电传打字机打字时 xff0c 在每行后面加两个表示结束的字符 xff0c
  • 小项目:学生成绩管理系统

    学生成绩管理系统 前言 xff1a 此项目不具有商业价值 xff0c 旨在总结C语言所学知识点及各知识点在项目中的运用 xff0c 主要锻炼编码能力 xff0c 程序设计能力 xff0c 对业务逻辑的理解能力 文章目录 学生成绩管理系统系统
  • C语言:指针学习以及理解

    C语言 xff1a 关于指针学习以及理解 文章目录 C语言 xff1a 关于指针学习以及理解一 什么是指针二 为什么使用指针 什么情况下使用指针三 如何使用指针四 使用指针要注意的问题五 指针与数组的关系六 指针的运算七 指针与const配
  • 二叉树的性质及计算式

    二叉树的性质 1 一般二叉树的性质 2 完全二叉树的性质 3 满二叉树性质
  • 消息队列函数(msgget、msgctl、msgsnd、msgrcv)详细说明

    消息队列函数由msgget msgctl msgsnd msgrcv四个函数组成 下面的表格列出了这四个函数的函数原型及其具体说明 1 msgget函数原型 msgget 得到消息队列标识符或创建一个消息队列对象 所需头文件 include
  • 什么是C++

    什么是C 43 43 C 43 43 是一种使用广泛的计算机程序设计语言 它是一种通用程序设计语言 xff0c 支持多重编程模式 xff0c 例如过程化程序设计 数据抽象 面向对象程序设计 泛型程序设计和设计模式等 比雅尼 斯特劳斯特鲁普博
  • 小项目:网络版ATM(C)

    网络版ATM 设计结构体 span class token macro property span class token directive keyword ifndef span STRUCT H span span class tok
  • c++中 new的使用方法

    c 43 43 中 xff0c new的用法很灵活 xff0c 这里进行了简单的总结 1 new 分配这种类型的一个大小的内存空间 并以括号中的值来初始化这个变量 2 new 分配这种类型的n个大小的内存空间 并用默认构造函数来初始化这些变
  • C中表达式、语句、代码块

    表达式 Expression 表达式 61 运算符 43 操作数 表达式必须有一个执行结果 xff0c 这个结果必须是一个值 xff0c 例如 3 4 43 5 的结果 17 xff0c a 61 c 61 d 61 10 的结果是 10
  • #ifndef #define #endif 防止头文件被重复引用

    想必很多人都看过 头文件中的 ifndef define endif 防止该头文件被重复引用 但是是否能理解 被重复引用 是什么意思 是不能在不同的两个文件中使用include来包含这个头文件吗 xff1f 如果头文件被重复引用了 xff0
  • C/C++报错:全局变量重定义或是多次定义

    很多人可能直接把全局变量写进 h文件 xff0c 然后用多个文件包含这个头文件 xff0c 编译时就会报错 xff1a 变量重定义 头文件的作用就是要给外部提供接口使用的 xff0c 所以请记住 xff0c 只在 h中做声明 xff0c 在
  • 字符串查找函数:strchr、strrchr、strchrnul、strstr、strrstr

    strchr char strchr const char str int ch 功能 xff1a 寻找字符串中某字符第一次出现的位置 参数 str 要查找的字符串或字符串指针 ch 要查找的字符 返回值 成功返回一个指向在字符串str中第
  • PX4 代码中 position_estimator_inav(互补滤波)理解

    Local position estimator 为卡尔曼滤波估计 position estimator inav 需要解决三个问题 xff1a 如何由加速度进行速度和位置估计 xff1b 加速度偏差的计算 xff1b 如何使用融合过程 借
  • ArduPilot-sitl仿真-Mission Planner联合显示

    ArduPilot sitl仿真 Mission Planner联合显示 To start the simulator first change directory to the vehicle directory For example
  • Ros_PX4_Mavros从零入门--哪些坑

    写在前面的话 xff1a 一定要确保mavros安装成功 我在安装mavros的时候采用的是官网默认的安装方式 xff0c 期间一定有Error出现 xff0c 没有成功 xff0c 导致后面需要补充安装一些东西 验证是否安装成功 xff0
  • PX4-mavros之Roslaunch使用 及流程介绍

    首先在Ros工程目录src下 xff0c 创建新的功能包 使用命令 catkin create pkg px4 launch 注意此处不需要添加任何依赖了 然后建立一个launch文件夹 xff0c 如下图所示 2 改写launch文件即可
  • 聊一聊那些应该了解的大佬(飞控,人工智能方向)

    写在前面的话 xff1a 以下内容与图片大多来自于网络 xff0c 如有侵权 xff0c 请告知我进行修改 部分评论仅为个人观点 xff0c 无人机方面大牛很多 xff0c 无法一一评说 xff0c 在此随意发挥 也欢迎各位看官补充完善 R
  • ArduPilot+mavros+gazebo+QGC联合仿真初体验

    首先给出最终效果图 xff1a 实现内容与PX4官网代码功能类似 xff0c 四旋翼飞机自动起飞至2 5m高度 xff0c 悬停一定时间 xff0c 然后自主降落 记录如下几个需要注意的地方 xff1a 一共使用到三个文件夹 xff0c 其