用户案例

NASA Ames研究中心为月球大气尘埃环境探测器(LADEE)开发飞行软件

挑战

为LADEE开发飞行软件

解决方案

使用基于模型设计对控制系统和飞行器建模,生成26,000行C代码;执行硬件在环(HIL)和处理器在环(PIL)测试;创建任务训练模拟器

结果

  • 训练和指令验证可重用模型
  • 飞行软件在轨无缝升级
  • 改进形式化代码检查流程

“与基于模型设计相比,手工代码要花更长的时间,相互协作更困难。管理者和硬件子系统工程师都能理解Simulink模型,这让他们更容易形成共识,因为每个人都知道在软件中如何运作。”

Dr. Karen Gundy-Burlet, NASA Ames Research Center

NASA LADEE 航天器贴近月球表面环绕的艺术渲染图。图像由 NASA 提供。


NASA的月球大气尘埃环境探测器(LADEE)已发射升空,其目的是收集月球尘埃环境的密度、组成和变化情况等信息。搭载的光谱仪和其他仪器收集的数据和月球尘埃将帮助研究人员了解月球和太阳系中的其他天体。

为了在有限的项目成本和时间条件下开发航天器的飞行软件,NASA Ames研究中心的工程师们采用了基于模型设计的低成本、快速原型方法。

NASA Ames研究中心的LADEE飞行软件负责人Karen Gundy-Burlet博士说:“在Simulink中进行航天器高级控制功能建模、仿真,然后从模型生成C代码,最大限度地减少了算法设计人员和软件开发人员之间的沟通差错。基于模型设计使我们能在早期实现需求的原型,以及在开发的初期进行确认和验证。”

挑战

LADEE在其设计过程和任务周期中面临一些挑战。首先,LADEE有多种可能的发射轨道;第二,搭载的任务仪器需要精确定点,而且月球的环境条件也需要探测器在轨道上频繁地滚动和翻转。

为应对这些挑战,NASA的工程师们想要在开发过程的早期模拟各种任务场景和故障状态。为了满足NASA软件开发流程的需求,他们需要在需求、模型、测试和测试结果之间建立双向可跟踪性。

解决方案

NASA Ames 借助MATLAB®和Simulink®,用基于模型设计的方法完成了LADEE机载飞行软件的开发。开发过程由一系列构建周期组成,每个周期都包括建模、仿真、代码生成和测试。

NASA Ames工程师在Simulink中开发了飞行软件的模型,包括姿态控制、电源管理、热控制、导航、通信和指令处理等不同模型。该团队还开发了LADEE探测器的Simulink模型,包括它的推进系统、环境和重力场。这些模型确保了飞行软件可以在现实环境下快速完成开发。

使用Simulink Check™,项目团队确认模型符合他们自定义建模要求,该要求源于MAAB(MathWorks汽车顾问委员会)的指导原则。

在Simulink中运行单元级仿真,确认子系统满足要求后,该团队使用Simulink Coder™和Embedded Coder®,从Simulink控制器模型生成生超过26000行C代码。

为查找设计错误,工程师使用了Polyspace Bug Finder™和Polyspace Code Prover™执行静态分析。

通过Simulink Coder,他们从产品模型中生成代码,用于处理器在环(PIL)和硬件在环(HIL)测试。他们将控制器代码与NASA的核心飞行执行器框架 (cFE)和核心飞行系统(cFS)软件包进行集成,并将其部署到Broad Reach PowerPC处理器上。

该团队开展了大量的实时、系统级 PIL 和 HIL 测试,包括环月轨道进入、任务序列、科研任务和故障管理情形。

该团队在整个项目范围内使用 Simulink Report Generator™,依照 NPR 7150 规范跟踪需求和每个需求的测试结果。

他们按预定时间和成本估算完成了软件开发。

结果

  • 训练和指令验证可重用模型。Gundy-Burlet 表示:“我们使用源自 Simulink 模型的仿真来训练我们自己进行任务操作。另外在我们将指令信号发送到航天器之前,我们使用源自模型的仿真,验证指令信号是否已完成其预期要做的事情,并在将指令信号发送到航天器之前确保没有负面的意外后果。”
  • 飞行软件在轨道中无缝更新。Gundy-Burlet 称:“在执行任务过程中,我们发现了航天器的星体跟踪仪问题和一些较小的软件问题。我们在 Simulink 中更新了造成这些问题的状态估测模型,重新生成了代码,在新软件上运行了有针对性的测试组件,并将其上传到航天器,航天器又飞行了一个月,再没有发现其它缺陷。”
  • 改进了形式化代码检查过程。Gundy-Burlet 指出:“Polyspace Code Prover 识别出了我们生成的代码中的死代码以及我们手工编写代码中的问题。它还识别了没有错误的代码,以及需要我们密切注意的代码。利用这些结果,我们在形式化检查过程中对代码进行了有针对性的评估。”