【PX4-AutoPilot教程-仿真环境架构】梳理PX4GazeboMAVLinkMAVROSROSROS2之间的关系

梳理PX4&Gazebo&MAVLink&MAVROS&ROS&ROS2之间的关系

    • PX4与仿真器
      • PX4支持的仿真器
      • PX4与除Gazebo之外的仿真器的连接
      • PX4与Gazebo仿真器的连接
    • PX4默认的MAVLink UDP端口
    • PX4 SITL软件在环仿真的架构
    • Gazebo仿真
    • PX4启动仿真的launch文件
    • ROS与PX4的关系

PX4与仿真器

在仿真器中可以让PX4代码来控制无人机飞行。仿真是在尝试现实世界中飞行之前测试PX4代码的一种快速、简单且安全的方法。当你还没有可以试验的飞行器时,这也是一个开始使用PX4代码飞行的好方法。

PX4支持的仿真器

仿真器描述支持的载具
Gazebo强烈建议使用此仿真器。Gazebo取代了Gazebo Classic,具有更先进的渲染、物理和传感器模型。这是Ubuntu Linux 22.04提供的Gazebo的唯一版本。它具有功能强大的3D仿真环境,特别适用于测试对象避障和计算机视觉。支持多无人机仿真,通常伴随 ROS使用。四旋翼、标准垂直起降固定翼、尾座事垂直起降固定翼、固定翼、四驱车、水下航行器
Gazebo Classic强烈建议使用此仿真器。一个强大的3D模拟环境,特别适合测试物体回避和计算机视觉。支持多无人机仿真,通常伴随ROS一起使用。四旋翼、标准垂直起降固定翼、尾座事垂直起降固定翼、固定翼、四驱车、水下航行器
jMAVSim一个简单的多旋翼仿真器,允许您在模拟的世界中控制无人机飞行。它易于设置,可用于测试您的车辆是否可以起飞、飞行、着陆,并对各种故障条件(如GPS故障)做出适当响应。支持多无人机仿真。四旋翼
FlightGear提供物理和视觉逼真模拟的仿真器。特别是,它可以模拟许多天气条件,包括雷暴、雪、雨和冰雹,还可以模拟热流和不同类型的大气流。支持多无人机仿真。四旋翼、固定翼、四驱车
JSBSim提供高级飞行动力学模型的仿真器。这可以用于基于风洞数据对真实的飞行动力学进行建模。四旋翼、固定翼
AirSim提供物理和视觉逼真模拟的跨平台仿真器。这个仿真器是资源密集型的,需要一台比这里描述的其他仿真器功能强大得多的计算机。四旋翼、固定翼
Simulation-In-Hardware(SIH)硬件在环仿真HITL的一种替代方案,直接在硬件自动驾驶仪上提供硬实时仿真。该仿真器在C++中作为PX4模块直接在固件代码中实现四旋翼、固定翼、尾座事垂直起降固定翼

PX4与除Gazebo之外的仿真器的连接

除了Gazebo之外的所有仿真器都使用仿真器的MAVLink API接口与PX4通信。此API接口定义了一组MAVLink消息,这些消息将来自模拟世界的传感器数据提供给PX4,并返回将应用于模拟无人机的飞行代码中的电机和执行器的值。下图显示了PX4与仿真器之间的消息流。

在这里插入图片描述

PX4的SITL软件在环仿真时,使用SimulatorMavlink.cpp处理这些消息。

代码位置:Firmware/src/modules/simulation/simulator_mavlink/SimulatorMavlink.cpp

PX4的HITL硬件在环仿真时,使用mavlink_receiver.cpp处理这些消息,将来自模拟器的传感器数据写入PX4 uORB话题。所有的电机和执行器都被禁用,但其他的应用程序(姿态估计、姿态控制等)正常运行。

代码位置:Firmware/src/modules/mavlink/mavlink_receiver.cpp

消息流的具体信息在下表中。

消息名称传输方向描述
MAV_MODE:MAV_MODE_FLAG_HIL_ENABLED使用仿真时的模式标志。所有电机和执行器都被禁止,但其他的应用程序(姿态估计、姿态控制等)正常运行。
HIL_ACTUATOR_CONTROLSPX4到仿真器PX4至电机、执行器的控制输出。
HIL_SENSOR仿真器到PX4NED坐标系下模拟IMU传感器数据,单位为国际单位制。
HIL_GPS仿真器到PX4模拟的GPS数据。
HIL_OPTICAL_FLOW仿真器到PX4模拟的光流传感器数据。
HIL_STATE_QUATERNION仿真器到PX4包含无人机在仿真环境中的位置、姿态、速度等。可以将其记录下来,并与PX4的估计值进行比较,以进行分析和调试(例如,测试估计器对有传感器噪声的输入的工作情况)。
HIL_RC_INPUTS_RAW仿真器到PX4接收到的RC通道的数据。

PX4与Gazebo仿真器的连接

PX4与Gazebo仿真器的连接直接使用Gazebo API接口,不需要使用MAVlink API接口。

PX4默认的MAVLink UDP端口

默认情况下,PX4使用固定的UDP端口与地面站(如QGroundControl)、机载电脑(如MAVSDK、MAVROS)和仿真器(如Gazebo)进行MAVLink通信。

PX4的UDP端口14550用于与地面站进行通信。地面站侦听此端口上的连接,QGroundControl默认侦听此端口。

PX4的UDP端口14540用于与Offboard模式板外电脑进行通信。Offboard模式板外电脑应侦听此端口上的连接。

仿真器的本地TCP端口4560用于与PX4通信。仿真器监听这个端口,PX4启动到这个端口的TCP连接。

这些端口的定义都是在PX4系统启动文件中定义的。

System Startup

PX4 SITL软件在环仿真的架构

下图显示了使用MAVLink API接口的仿真器的典型SITL软件在环仿真的架构。

在这里插入图片描述

系统的不同部分通过UDP连接,可以在同一台计算机或同一局域网上的另一台计算机上运行。

PX4的UDP端口14540用于与Offboard模式板外电脑进行通信。

PX4的UDP端口14550用于与地面站进行通信。

PX4的TCP端口4560用于与仿真器的通信。

当使用make px4_sitl gazebomake px4_sitl gazebo-classicmake px4_sitl jmavsim等命令运行SITL软件在环仿真时,PX4和仿真器将在同一台计算机上启动,并且将自动配置上述端口。

可以配置其他MAVLink UDP连接,也可以在构建配置和初始化文件中修改模拟环境。

Gazebo仿真

PX4固件中有一个文件夹Firmware/Tools/sitl_gazebo存放Gazebo仿真相关文件。

Firmware/Tools/sitl_gazebo/src文件夹,存放核心插件。比如GPS、IMU的数据如何产生就是这里的代码负责的。Gazebo自身也会提供一些默认插件,或者第三方也会提供插件,如果要新增一个传感器,可以在这里找到相应的插件。

Firmware/Tools/sitl_gazebo/models文件夹,存放各种Gazebo模型文件。

Firmware/Tools/sitl_gazebo/worlds文件夹,存放各种Gazebo世界环境文件。

PX4启动仿真的launch文件

PX4固件用于启动仿真的launch文件在Firmware/launch文件夹中。

  • px4.launch:只加载PX4 SITL软件在环仿真的节点。

  • posix_sitl.launch:加载PX4 SITL软件在环仿真、打开Gazebo、使用spawn_model加载sdf格式的飞机模型。

  • mavros_posix_sitl.launch:加载PX4 SITL软件在环仿真、打开Gazebo、使用spawn_model加载sdf格式的飞机模型。启动MAVROS通信。相当于新建一个终端运行命令roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"

  • single_vehicle_spawn.launch:加载PX4 SITL软件在环仿真、打开Gazebo、使用spawn_model加载sdf格式的飞机模型。

  • multi_uav_mavros_sitl.launch:加载PX4 SITL软件在环仿真、打开Gazebo、使用spawn_model加载sdf格式的飞机模型。模型的生成方式调用了single_vehicle_spawn.launch中的格式,并传入不同的mavlink_udp_port和mavlink_tcp_port用于不同飞机mavlink连接。每架飞机的MAVROS传入不同的fcu_url和tgt_system参数,便于启动不同的MAVROS。

make px4_sitl gazeboroslaunch px4 posix_sitl.launch基本是等效的。

观察posix_sitl.launch文件中的内容,可以看到调用Gazebo模型文件的代码<arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/$(arg vehicle)/$(arg vehicle).sdf"/>,调用Gazebo世界环境文件的代码<arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/empty.world"/>

<?xml version="1.0"?>
<launch><!-- Posix SITL environment launch script --><!-- launches PX4 SITL, Gazebo environment, and spawns vehicle --><!-- vehicle pose --><arg name="x" default="0"/><arg name="y" default="0"/><arg name="z" default="0"/><arg name="R" default="0"/><arg name="P" default="0"/><arg name="Y" default="0"/><!-- vehicle model and world --><arg name="est" default="ekf2"/><arg name="vehicle" default="iris"/><arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/empty.world"/><arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/$(arg vehicle)/$(arg vehicle).sdf"/><env name="PX4_SIM_MODEL" value="$(arg vehicle)" /><env name="PX4_ESTIMATOR" value="$(arg est)" /><!-- gazebo configs --><arg name="gui" default="true"/><arg name="debug" default="false"/><arg name="verbose" default="false"/><arg name="paused" default="false"/><arg name="respawn_gazebo" default="false"/><!-- PX4 configs --><arg name="interactive" default="true"/><!-- PX4 SITL --><arg unless="$(arg interactive)" name="px4_command_arg1" value="-d"/><arg     if="$(arg interactive)" name="px4_command_arg1" value=""/><node name="sitl" pkg="px4" type="px4" output="screen"args="$(find px4)/build/px4_sitl_default/etc -s etc/init.d-posix/rcS $(arg px4_command_arg1)" required="true"/><!-- Gazebo sim --><include file="$(find gazebo_ros)/launch/empty_world.launch"><arg name="gui" value="$(arg gui)"/><arg name="world_name" value="$(arg world)"/><arg name="debug" value="$(arg debug)"/><arg name="verbose" value="$(arg verbose)"/><arg name="paused" value="$(arg paused)"/><arg name="respawn_gazebo" value="$(arg respawn_gazebo)"/></include><!-- gazebo model --><node name="$(anon vehicle_spawn)" pkg="gazebo_ros" type="spawn_model" output="screen" args="-sdf -file $(arg sdf) -model $(arg vehicle) -x $(arg x) -y $(arg y) -z $(arg z) -R $(arg R) -P $(arg P) -Y $(arg Y)"/>
</launch>

ROS与PX4的关系

ROS是一个通用机器人库,可与PX4一起用于无人机应用程序开发。ROS得益于开发人员解决常见机器人问题的活跃生态系统,以及对其他为Linux编写的软件库的访问。例如,它已被用作PX4计算机视觉解决方案的一部分,包括避障和碰撞预防。

PX4支持ROS2和ROS1。

对于ROS2:PX4和ROS2通过PX4-ROS2桥接工具(PX4 v1.13之前是microRTPS,PX4 v1.13之后是micro XRCE-DDS)进行通信,该接口在PX4 uORB话题和ROS2 DDS话题/类型之间提供直接桥接。这有效地允许实时从ROS2工作流和节点直接访问PX4内部。

对于ROS1:PX4和ROS1通过MAVLink进行通信,使用MAVROS包将ROS主题桥接到MAVLink。

在这里插入图片描述

使用ROS1时,PX4需要先接受MAVLink消息,内部应用程序再根据消息内容更改PX4 uORB话题中的参数值,但ROS2通过PX4-ROS2桥接工具可以直接更改PX4 uORB话题中的参数值,省略了一个步骤,所以是官方推荐的。


参考资料:

PX4官方文档-仿真

PX4-Gazebo仿真学习笔记

PX4在GAZEBO仿真中加载iris模型问题

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

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

相关文章

Java 面向对象进阶 18 JDK8、9开始新增的方法;接口的应用;适配器设计模式;内部类(黑马)

一、JDK8开始新增的方法 默认方法不是抽象方法&#xff0c;所以不强制被重写&#xff1a; 但是如果被重写&#xff0c;就要去掉default关键字&#xff1a; public可以省略&#xff0c;但是default不可以省略&#xff1a; public是灰色的&#xff0c;代表可以省略 但是default是…

解除网页复制限制

chrome 中右击点检查&#xff0c; 找到要复制的文字块 把如图所示右边的 copy里的事件全部remove 然后就可以右击复制了

四年小红书热搜数据,一次性拿走

从2020年开始&#xff0c;就养成了定时备份各大平台热搜数据的习惯&#xff0c;微博&#xff0c;知乎都在备份&#xff0c;今天给大家看一下从2020年到2023年的小红书热搜数据情况 这是2022年的备份数据&#xff0c;每天的热搜数据一个文件&#xff0c;数据绝对全 文件内部数据…

微信小程序自制动态导航栏

写在前面 关于微信小程序导航栏的问题以及解决办法我已经在先前的文章中有提到&#xff0c;点击下面的链接即可跳转~ &#x1f90f;微信小程序自定义的导航栏&#x1f90f; 在这篇文章中我们需要做一个这样的导航栏&#xff01;先上效果图 &#x1f447;&#x1f447;&#x1f…

AI新纪元:可能的盈利之道

本文来源于Twitter大神宝玉&#xff08;dotey&#xff09;在聊 Sora 的时候&#xff0c;总结了 Sora 的价值和可能的盈利方向&#xff0c;我把这部分内容单独摘出来再整理一下。现在的生成式 AI 大家应该不陌生&#xff0c;用它总结文章、翻译、写作、画图&#xff0c;当然真正…

Python实用技巧:处理JSON文件写入换行问题

Python实用技巧&#xff1a;处理JSON文件写入换行问题 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 &#x1f448; 希望得到您的订阅…

轮转数组详解

题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/rotate-array/?envTypelist&envIdQJxfEzqo 题…

Windows通过脚本打开自带的IE浏览器

1、桌面右键新建一个 txt 的文档 2、打开文档并且复制粘贴下面代码 CreateObject("InternetExplorer.Application").Visibletrue3、 保存并且关闭&#xff0c;修改文件后缀名为 vbs 4、双击打开即可。

【可申请试用】RT-Thread专业版全面支持瑞芯微RK3568系列平台并可实现混合部署...

RT-Thread 专业版是面向任务关键领域的高安全实时操作系统&#xff0c;已被广泛应用于航空航天&#xff0c;电力&#xff0c;轨交&#xff0c;车载&#xff0c;工业控制&#xff0c;新能源&#xff0c;医疗等国家重要领域&#xff0c;是各领域高可靠装备的基础核心软件。该版本…

Redis7

摘录 https://github.com/Romantic-Lei/Learning-in-practice/blob/master/Redis/ 官网地址: 英文&#xff1a;Redis 中文&#xff1a;CRUG网站 redis中文文档 安装包&#xff1a;https://redis.io/download/&#xff0c;选择redis7.0版本即可 Redis在线测试地址(不用下载也…

辉辉数码:目前电视盒子哪个最好?目前性能最好的电视盒子

大家好&#xff0c;我是辉辉&#xff0c;上期测评发布后我收到了很多粉丝的反馈希望我这期能分享电视盒子推荐&#xff0c;看看目前电视盒子哪个最好。我购入了市面上最热门的十几款电视盒子对比配置、系统后整理了五款目前性能最好的电视盒子推荐给大家。 品牌型号&#xff1…

C++ //练习 9.18 编写程序,从标准输入中读取string序列,存入一个deque中。编写一个循环,用迭代器打印deque中的元素。

C Primer&#xff08;第5版&#xff09; 练习 9.18 练习 9.18 编写程序&#xff0c;从标准输入中读取string序列&#xff0c;存入一个deque中。编写一个循环&#xff0c;用迭代器打印deque中的元素。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&am…