[原]JSBSim 自动驾驶(浅出)

jsbsim的脚本文件分为几大类:

系统脚本:

systems  包含通用飞机各部分功能模块组件以及自动飞行控件:Autopilot.xml  和 自动飞行的算法控件:GNCUtilities.xml

引擎脚本:

engine:包含各个飞机的发动机控件

飞机脚本:

aircraft:包含各个飞机的控件、输入输出、初始化参数

控制脚本:

scripts:一次飞行模拟的全过程

下面我来分析一次自动飞行使用的部分脚本,以及脚本中的参数意义。

C172

脚本文件scripts中找到c1722.xml文件

 1   <use aircraft="c172x" initialize="reset01"/>
 2   <run start="0.0" end="200" dt="0.00833333">
 3
 4     <event name="Engine start">
 5       <condition>simulation/sim-time-sec  ge  0.25</condition>
 6       <set name="fcs/throttle-cmd-norm" value="0.65"/>
 7       <set name="fcs/mixture-cmd-norm" value="0.87"/>
 8       <set name="propulsion/magneto_cmd" value="3"/>
 9       <set name="propulsion/starter_cmd" value="1"/>
10       <set name="ap/heading_hold" value="0"/>
11       <notify>
12         <property>velocities/vc-kts</property>
13         <property>position/h-agl-ft</property>
14       </notify>
15     </event>
16
17     <event name="Trim">
18       <condition>simulation/sim-time-sec  ge  0.50</condition>
19       <set name="simulation/do_simple_trim" value="0"/>
20       <notify>
21         <property>velocities/vc-kts</property>
22         <property>position/h-agl-ft</property>
23       </notify>
24     </event>
25
26     <event name="Set roll autopilot">
27       <condition>simulation/sim-time-sec  ge  5.0</condition>
28       <set name="ap/attitude_hold" value="1"/>
29       <notify>
30         <property>velocities/vc-kts</property>
31         <property>position/h-agl-ft</property>
32       </notify>
33     </event>
34
35   </run>

第一行:可以看到飞机文件用的是c172x.xml  初始化文件用的是:reset01.xml

第二行:表示执行的过程,0到200秒,间隔帧数是0.008秒

第四行:event代表事件处理:

    遇到condition的条件成立就执行后面的set步骤

以上是整体框架。

下面开启我们的疑问列表:

  1.飞机文件c172x.xml是干什么的?初始化文件又初始化哪些东西?

  2.第五行中的  sim-time-sec是什么意思?表达式是完成什么条件?

  3.哪些和自动飞行控制有关?

   。。。。。。

1.飞机文件c172x.xml是干什么的?初始化文件又初始化哪些东西?

答1:飞机文件c172x.xml是在“飞机脚本aircraft”文件夹下的c172x文件夹中,

初始化文件reset01.xml也在这个文件夹中。

初始化文件很简单:

<initialize name="reset00">
  <vt unit="KTS">        100.0  </vt>
  <latitude unit="DEG">   28.0  </latitude>
  <longitude unit="DEG"> -90.0  </longitude>
  <psi unit="DEG">       200.0  </psi>
  <altitude unit="FT">   4000.0  </altitude>
  <running>                0    </running>
</initialize>

初始化了飞机的位置,姿态等信息

飞机定义文件c172x.xml包含了很多东西,我们只关心部分代码:

。。。
   <system file="GNCUtilities"/>

    <system file="Autopilot">
      <property value="0.523"> guidance/roll-angle-limit </property>
      <property value="0.174"> guidance/roll-rate-limit </property>
    </system>

    <autopilot file="c172ap"/>

    <flight_control name="c172">
        <channel name="Pitch">
            <summer name="fcs/pitch-trim-sum">
                <input>ap/elevator_cmd</input>
                <input>fcs/elevator-cmd-norm</input>
                <input>fcs/pitch-trim-cmd-norm</input>
                <clipto>
                    <min>-1</min>
                    <max> 1</max>
                </clipto>
            </summer>

            <aerosurface_scale name="fcs/elevator-control">
                <input>fcs/pitch-trim-sum</input>
                <range>
                    <min>-28</min>
                    <max> 23</max>
                </range>
                <gain>0.01745</gain>
            </aerosurface_scale>

            <actuator name="fcs/elevator-actuator">
              <input> fcs/elevator-control </input>
              <lag> 60 </lag>
              <bias> 0.002 </bias>
              <hysteresis_width> 0.05 </hysteresis_width>
              <clipto>
                <!-- +/- 20 degrees -->
                <min> -0.34 </min>
                <max>  0.34 </max>
              </clipto>
              <output>fcs/elevator-pos-rad</output>
            </actuator>

        </channel>
。。。

这里我们看到:飞机文件引用了两个和自动飞行相关的系统文件:GNCUtilities和 Autopilot

这个两个文件提供通用的自动飞行算法和组件

接着我们又看到这个c172飞机自定义了一个自动飞行的文件:c172ap

我们的问题列表又多了一个问题:4.自定义自动飞行文件c172ap做了哪些事情?

问题保留,我们接着看这个飞机文件:

它提供了自己的飞行控制组件

<flight_control name="c172">

这个里面又分成很多部分,我们只看一个通道:Pitch

里面有一个加法器定义一个属性值 <summer name="fcs/pitch-trim-sum">

这个值由三方输入参数构成:

1.ap/elevator_cmd

2.fcs/elevator-cmd-norm

3.fcs/pitch-trim-cmd-norm

其中的2和3都是在jsbsim中有明确绑定的 “成员变量”

只有1我们没见过

我们的问题列表又多了一个问题:5.输入参数ap/elevator_cmd在哪里定义?由什么提供输入?

似乎问题总在加多,但其实都在抽丝剥茧中变少变得更加具体,继续把Pitch通道看完:

我们看到这个加法器属性值fcs/pitch-trim-sum又作为输入参数被下一个算法使用,得到值fcs/elevator-control

这个值fcs/elevator-control又被fcs/elevator-actuator继续输入使用算出最终的输出fcs/elevator-pos-rad

这个通道Pitch就此结束。

这个通道是干什么的?为了计算飞机一个姿态参数的!(此文仅讨论自动驾驶部分)

先跳过其他问题,我们看4.自定义自动飞行文件c172ap做了哪些事情?

答4 这个是一个自定义的c172自动驾驶脚本

打开c172ap.xml文件发现自定义输出输出的地方:答5

<!-- INTERFACE PROPERTIES -->

  <property>ap/attitude_hold</property>
  <property>ap/altitude_hold</property>
  <property>ap/heading_hold</property>
  <property>ap/altitude_setpoint</property>
  <property>ap/heading_setpoint</property>
  <property>ap/aileron_cmd</property>
  <property>ap/elevator_cmd</property>
  <property>ap/airspeed_setpoint</property>
  <property>ap/airspeed_hold</property>
  <property>ap/throttle-cmd-norm</property>

<!-- INITIAL GAIN VALUES -->

  <property value="0.5"> ap/hdg-roll-err-c1 </property>
  <property value="50.0"> ap/roll-pid-kp </property>
  <property value="5.0"> ap/roll-pid-ki </property>
  <property value="17.0"> ap/roll-pid-kd </property>

  <!--  <property>attitude/sensor/phi-rad</property> -->

原文地址:https://www.cnblogs.com/lyggqm/p/10285526.html

时间: 2024-08-30 01:15:52

[原]JSBSim 自动驾驶(浅出)的相关文章

线控CRV,最高性价比的自动驾驶开发平台

高性价比的线控改装乘用车解决方案可以促进自动驾驶的发展和落地,降低自动驾驶初创,研究机构,高校等的进入门槛,这是PIX一直在追求的. PIX改装过的线控乘用车已有近十款,包括MKZ,蒙迪欧,EU400,思域等,其中性能最佳,价格最合适的即为CRV,带有APA自动泊车,ACC自适应巡航以及混动的版本.线控性能与Autonomous stuff所改装的MKZ对标,而价格远低于其方案. 线控改装的乘用车是自动驾驶产业最理想的测试开发平台,因为乘用车具备通过车规级认证的零部件和性能,同时可以上路收集数据

优达学城自动驾驶课程项目——车道检测

汽车在道路上行驶需要遵循一定的行驶规则,路面的车道则起到规范汽车行驶规则的作用.车道的种类有很多种,如单行线.双行线,虚线.网格线等,不同颜色.形状的车道线代表着不同的行驶规则,汽车和行人可以根据这些规则来使用道路,避免冲突.因此,准确检测并识别车道类型,并按照相应规则正确行驶,是汽车实现自动驾驶的基础. 优达学城的自动驾驶项目课程包含了一个车道线检测项目,其主要目的就是教给无人车如何检测并识别车道,本文档将该项目内容进行总结整理. 车道线检测方法主要分为两类:(1)基于道路特征的车道线检测:(

包学会之浅入浅出Vue.js:升学篇

上一篇<包学会之浅入浅出Vue.js:开学篇>中,我们初步了解单页面组件这个概念,现在通过一个项目,来进一步解析组件的应用吧,Go~ 需求背景 组件库是做UI和前端日常需求中经常用到的,把一个按钮,导航,列表之类的元素封装起来,方便日常使用,调用方法只需直接写上<qui-button></qui-button>或者<qui-nav></qui-nav>这样的代码就可以,是不是很方便呢,接下来我们将要完成以下页面: 这是我们组件库的首页,包含三个子

国内首次深度学习自动驾驶,阿波罗不再只是计划:来自百度开发者中心的观察报告

导读:从世界上首个可在真实道路上实现端到端模式的高级自动驾驶模型Road Hackers,到百度和汽车零部件厂商合作开发的车载可计算平台 BCU,从诞生之初就备受关注的"阿波罗计划"逐渐揭开了它神秘的面纱.而正如百度智能汽车事业部总经理顾维灏在主题演讲中所说,这些,不过仍是阿波罗计划的凤毛麟角. 2017年6月8日,上海 CES Asia 现场. 作为新智元特派员,我置身于上海新国际展览中心 N3 智能驾驶主题馆,被众多汽车品牌的未来炫酷车型所包围.一瞬间,仿佛回到了一个多月前同样在这

深度|余凯:基于深度学习的自动驾驶之路

2016年是一个非常重要的历史节点,标志着知行合一的人工智能系统将走向历史舞台.它改变的不光是下围棋,会改变很多很多事情.——余凯 在“2016年智能汽车•上海论坛”之“ADAS与自动驾驶趋势论坛”上,地平线机器人创始人兼CEO余凯博士发表了题为“基于深度学习的自动驾驶之路”的主题演讲. 这里有技术普及,有行业观察,还有对未来生活的美好展望.你想知道的有关深度学习和自动驾驶的一切,我们今天都告诉你. 1深度学习 · 诞生与成长 每个人都在讲大数据,就像每个中学生都在讲“性”,但是他们从来没有经历

是时候停止自动驾驶汽车上路了

全世界每天都会发生很多的车祸,车撞车.人撞车.车撞人的事故层出不穷,有的车祸惨不忍睹,有的只是小打小闹,然而所有的车祸都不及这一次的车祸意义重大,这是因为司机在使用特斯拉的自动驾驶功能时,车辆无故出现车祸,显然给大行其道的自动驾驶汽车蒙上了一层巨大的阴影. 国家公路交通安全管理局向媒体公布了一项调查结果,他们发现特斯拉出现的两次车祸都是因为司机采用了自动驾驶功能.特斯拉的自动驾驶功能是较为主流和先进的技术,采用摄像头.雷达和传感器来引导车辆变道或者直行,甚至于停车.调整车速依靠的都是这个系统.在

Git浅出归纳理解

Git是一个分布式的版本控制工具,本篇文章从介绍Git开始,重点在于介绍Git的基本命令和使用技巧,让你尝试使用Git的同时,体验到原来一个版 本控制工具可以对开发产生如此之多的影响,文章分为两部分,第一部分介绍Git的一些常用命令,其中穿插介绍Git的基本概念和原理,第二篇重点介绍 Git的使用技巧,最后会在Git Hub上创建一个开源项目开启你的Git实战之旅 1.Git是什么 Git在Wikipedia上的定义:它是一个免费的.分布式的版本控制工具,或是一个强调了速度快的源代码管理工具.G

Mysql----浅入浅出之视图、存储过程、触发器

一.视图 VIEW 视图是虚拟的表,本身不存储任何数据.只有运行时,才包含动态检索出来的数据. eg:SELECT sid, name, sex, s_num FROM  student, school WHERE sid = 2 AND student.sid = scholl.sid ; 这个简单的查询涉及到两个表.所以任何需要这个数据的人都必须熟悉两个表以及之间的关系.想检索其他学生信息,就必须修改WHERE子句.如果可以把整个查询包装成一个虚拟表studentinfo,那么就可以这样得到

浅入浅出触发器

1.触发器的使用背景 做完机房收费系统个人重构之后只用了存储过程,最近在看牛腩视频讲到触发器的使用,当时就遇到过外键约束不能删除.有关联的表记录的问题,当时的解决方法有的使用了存储过程,或者是标记相关联的约束键不可用.其实触发器和存储过程的使用的相似的,可以说触发器就是一种特殊类型的存储过程. 举个机房收费系统中的例子: 截取一部分数据库关系图: 当想要删除一个用户时,该用户充值和退卡的记录就会受到影响.这时就会出现外键约束的错误. 这是因为充值和退卡表都和用户表的用户ID属性有关系,当删除用户