导语

如果要学习PX4二次开发最重要的什么?肯定是需要了解整体源码框架。同样的,AirSim架构和设计框架也是学习AirSim比较重要的一步。组件结构图能让开发者了解各个模块之间是如何进行交互,而代码结构能更加清晰明确物理引擎,物理模型,传感器模型等等文件位置,方便修改。所以本期为大家带来AirSim整体设计和架构,方便大家去开发研究。

一、组件结构图

二、代码结构 1.AirLib AirSim的大部分代码都放在AirLib中,它是一个自包含库,支持任何C++11的编译器进行编译。

AirLib 有以下几个组件: (1)物理引擎:可以快速扩展实现不同的物理模型。 代码:https://github.com/microsoft/AirSim/tree/master/AirLib/include/physics

(2)传感器模型:气压计、IMU、GPS 和磁力计的仅标头模型。 代码:https://github.com/microsoft/AirSim/tree/master/AirLib/include/sensors

(3)物理模型:车辆配置和模型的仅标题模型。目前已经在X配置中实现了MultiRotor的模型和PX4 QuadRotor的配置。例如:MultiRotorParams.hpp 中定义了几种不同的多旋翼模型,包括六轴飞行器。 代码:https://github.com/microsoft/AirSim/tree/master/AirLib/include/vehiclesr

(4)API 相关文件: 这一部分主要为API提供抽象基类,并为特定物理平台(如 MavLink)提供具体实现方式。它还拥有类似于RPC客户端和服务器的类。 代码:https://github.com/microsoft/AirSim/tree/master/AirLib/include/api

除此之外,所有常用的实用程序都在【common/】子文件夹中进行定义。而【AirSimSettings.hpp】是一个重要文件,如果要在settings.json中添加任何新字段,则需要修改这个文件内容。

AirSim支持无人机飞控的各种固件,例如它自己的 SimpleFlight、PX4 和 ArduPilot。每个固件通信的文件位于【multirotor/firmwares】文件。特定的 API接口被放在了

【api/】子文件夹中。【AirLib/src/】包含“.cpp” 文件和“.hpp”文件,其中包含“.hpp” 文件中定义的是各种可实现的实验方法代码。例如,【MultirotorApiBase.cpp】中包含多转子API的基本实现,如果需要,也可以在特定固件文件中覆盖它。

2.Unreal/Plugins/AirSim

由于AirSim需要和虚幻引擎一起结合使用,所以在【source/】文件下有一个C++文件【Content/】,该文件夹包含有blueprints和assets,一些重要组件描述如下:

(1)[SimMode_ classes]:SimMode类有助于实现许多不同的模式,例如纯计算机视觉模式(Computer Vision mode),车辆或无人机类别位于【Vehicles/】文件中。

(2)[PawnSimApi]:这是所有车辆或无人机可视化的基类。每辆车都有自己的子级 (比如Multirotor,Car或者ComputerVision)Pawn 类。

(3)[UnrealSensors]:包含距离和激光雷达传感器的实现。

(4)[WorldSimApi]:实现大多数和物理模型无关的环境API。

除了这些,【PIPCamera】中包含了相机初始化,【UnrealImageCapture】与【RenderRequest】这两个文件是图像渲染代码。【AirBlueprintLib】文件中有许多用于与UE4引擎交互的实用程序和包装方法。

3.MAVLinkCom 这是由AirSim团队成员Chris Lovett开发的库,它提供C++类来与 MavLink 设备通信。这个库是独立的,可以在任何项目中使用。 更多信息,请参阅:https://microsoft.github.io/AirSim/mavlinkcom/。

三、示例程序 AirSim 团队为了方便用户使用,专门创建了一些示例程序来演示如何使用 API。比如我们前几期讲到的HelloDrone和HelloCar:(请参考:你离学会AirSim还差最后一步!这一期)都是官方提供给我们的实例。除此之外官方还提供了一个DroneShell,DroneShell 演示了模拟器正在运行一个服务器时(类似于 DroneServer),如何使用 UDP 连接到模拟器。

四、PythonClient 在最开始几期阿木所写安装教程和效果展示都是通过Python API展示的,那么PythonClient是什么呢?PythonClient包含有Python API包装文件和演示其用法的实例程序,让可以用户使用Python编程在AirSim中进行仿真。

五、虚幻框架 下面节点图说明了虚幻游戏引擎如何加载和调用 AirSim:

官方资料: AirSim设计官方介绍: https://microsoft.github.io/AirSim/design/

AirSim代码结构介绍: https://microsoft.github.io/AirSim/code_structure/

  • End -

技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。 阿木实验室致力于前沿IT科技的教育和智能装备,让机器人研发更高效!

Airsim动态 | 带你了解Airsim结构框架相关推荐

  1. AirSim动态 | 安装配置AirSim环境(一)

    前言 本篇内容会带大家在Windows环境下进行Airsim的环境配置,是根据知乎大佬宁子安的文档进行操作的.有问题可以进微信群和大家一起讨论.AirSim这个软件很大并且对电脑配置要求也很高,所以建 ...

  2. labview实例_手把手以实例教你学LabVIEW编程,事件结构框架

    LabVIEW又称为G语言,简单易学.形象直观,采用图形化的编程方式,是专为测试.测量和控制应用而设计的系统工程软件. 前面几篇文章中依次讲解了LabVIEW中顺序顺序结构.条件结构及循环结构的编程方 ...

  3. 静态、动态、伪静态的URL结构到底哪种更利于SEO

    静态.动态.伪静态的URL结构到底哪种更利于SEO 如果对SEO有了解的朋友都应该比较清楚,常见的URL表现形式有静态.动态.伪静态三种.如果是严格分类来说,伪静态也是动态的一种,只是表现形式为静态U ...

  4. PX4官方动态 | 带你走进官方教学(二)

    本期是我们第二期官方教学,不知道大家有没有跟着我们一起学习第一期的教学呢,如果没有看过的同学可以点击链接进行第一期的学习后再来看我们第二期内容.在第一期我们告诉了大家学习方法,以及如果从零开始使用PX ...

  5. soa框架_SOA之外:动态业务应用程序的新型框架-第二部分

    soa框架 第二部分–在实践中构建动态业务应用程序–两个自适应系统的故事 生产力的提高是提高生活水平的基石. 美国的经验表明,长期强劲的生产率增长的特征是技术创新,伴随着组织结构和商业融资安排的变化以 ...

  6. html网页的结构框架代码

    推荐使用Notepad++编辑器写HTML代码 Notepad++官网下载地址 html学习网址: w3school在线教程 html网页的结构框架.html <!--文档声明,声明当前网页的版 ...

  7. atitit.研发企业与团队文化的结构框架 企业文化建设方案3.0

    atitit.研发企业与团队文化的结构框架 企业文化建设方案3.0 1 什么是企业文化 1 2 团队文化的重要性 2 3 企业文化由三个层次构成:  3 4 企业文化整个理论系统概述为5个要素,即企业 ...

  8. 四、V4L2 control结构框架图

    一.V4L2应用层调用流程 二.V4L2设备注册 三.video设备初始化 四.V4L2 control结构框架图 五.v4l2 ctrl 函数初始化-增加标准接口v4l2_ctrl_new_std ...

  9. linux hub设备,USB在Linux里的结构框架是什么样的?USB Core和Hub是什么?

    USB博大精深不是一篇文章就能够解释清楚的.想要深入研究USB的话,USB协议(外加Host和OTG协议)是必要的知识,另外,国内有本<>也写的很好很详细(点击阅读原文,21ic嵌入式论坛 ...

最新文章

  1. JoVE微生物组专刊征稿,写方法拍视频教程发SCI
  2. 使用 ftrace 调试 Linux 内核【转】
  3. 分享一个java对xml,excel,jdbc.properties,读写文件,读写图片等实现(1)
  4. MySQL MHA: 一种master高可用的主从复制解决方案
  5. matlab编程选择语句,matlab编程控制语句
  6. 计算机网络工程实验分析与体会_《软件工程》面向对象分析实验
  7. 牛客题霸 SQL4 查找所有已经分配部门的员工的last_name和first_name以及dept_no
  8. Zookeeper与paxos算法
  9. c++矩阵类_数据结构-JavaScript矩阵类的设计与实现
  10. 使用linux_使用 AppImage 进行 Linux 软件包管理 | Linux 中国
  11. 用nodejs搭建一个简单的服务器
  12. 华为全款买了块支付牌照
  13. 深入理解line-height
  14. pthread_create()在C和C++使用区别
  15. 【秋招毕业】自由奔赴的行者2021年终总结
  16. lattice若干bug
  17. android局域网打印机共享文件夹,如何设置电脑使安卓手机能访问局域网共享的文件...
  18. 前端展示m3u8视频
  19. java练习04|银行利率表如下表所示,请计算存款10000元,活期1年、活期2年,定期1年,定期2年后的本息合计。
  20. ApiCloud使用小结图文示例-简单的认识

热门文章

  1. 由量变到质变 写出高质量代码
  2. java发布jkd版本更新日期(截至2019)
  3. ISO13485医疗器械质量管理体系认证意义
  4. emwin入门第二课 界面之间的切换
  5. 权游播完了, 你在骂烂尾, 有人却悄悄解锁了新操作……
  6. ERROR: You appear to be running an X server; please exit X before installing.
  7. 姚前最新发文:区块链与央行数字货币
  8. SAP工具箱 自动生成发出接口程序(二 接口定义表)
  9. WebSocket 实现页面数据实时更新
  10. NYOJ - [第八届河南省程序设计大赛]引水工程(最小生成树)