it-swarm.cn

火星好奇号漫游车的内置软件是什么?

火星好奇号 漫游车成功着陆,其中一部宣传视频“恐怖的7分钟”吹嘘着有50万行代码。毫无疑问,这是一个复杂的问题。但这是很多代码,它背后肯定有相当大的编程工作。有人知道这个项目吗?我只能想象这是某种嵌入式C语言。

554
InfinitiesLoop

它在 [〜#〜] bae [〜#〜] 制造的 RAD750处理器 上运行 250万行C[〜#〜] jpl [〜#〜] 具有更多信息,但是我怀疑许多细节未公开。看来测试脚本是用Python编写的。

底层操作系统是 Wind River的VxWorks RTOS[〜#〜] rtos [〜#〜] 可以用C,C++,Ada或Java进行编程。但是,只有C和C++是操作系统的标准配置,扩展支持Ada和Java。风河提供了大量有关 VxWorks 的方式和原因的详细信息。

基本的芯片组几乎是荒谬的 健壮的 。一开始它的规格似乎不太好,但是每15年只允许一个“蓝屏”。请记住,这是受到辐射的轰炸,辐射会杀死人类很多次。在太空中,坚固性胜于速度。当然,这种鲁棒性是有代价的。在这种情况下,这是很酷的200,000美元至500,000美元。

一个Erlang程序员 谈论 关于好奇心的计算机和代码库的功能。

514
World Engineer

该代码基于MER的代码( SpiritOpportunity ),它们基于其第一个着陆器MPF( Sojourner )。它有350万行C(其中大部分是自动生成的),在 [〜#〜] bae [〜#〜]VxWorks 操作系统制造的RA50处理器上运行。手工编码了超过一百万行。

该代码实现为150个独立的模块,每个模块执行不同的功能。高度耦合的模块被组织成组件,这些组件对它们包含的模块进行抽象,并“指定特定的功能,活动或行为”。这些组件被进一步组织为层次,并且“不超过10个顶级组件”。

资料来源: Benjamin Cichy2010航天器飞行软件研讨会(FSW-10)上的主题演讲幻灯片,音频和视频 (开头任务概述,幻灯片80中的架构讨论)。


Hacker News上的某人问:“不确定大多数C代码是自动生成的。是什么?”

我不确定100%,尽管在该年或不同的年份可能有一个单独的介绍其自动生成过程的演示文稿。我知道这在FSW-11会议上是一个普遍的话题。

Simulink 是可能的。它是MATLAB组件,在机械工程师中,因此在大多数导航和控制工程师中也很流行,它使他们可以“编码”并模拟事物,而无需考虑他们正在编码。

基于模型的编程无疑是业界逐渐意识到的一件事,但是我不知道它在 [〜#〜] jpl [〜#〜] 上的流行程度如何在项目开始时会选择使用它。

第三种也是最有可能的可能性是通信代码。对于所有空间系统,您需要从地面软件向飞行软件发送命令,并从飞行软件接收遥测,并使用地面软件对其进行处理。每个命令/遥测数据包都是异构数据结构,并且有必要使双方都从完全相同的数据包定义中进行工作,并对数据包进行格式化,以便在一侧将其正确格式化,然后在另一侧进行解析。这涉及到正确处理很多事情,包括数据类型,大小和字节序(尽管后者通常是全局的;您可以在板载多个处理器时使用不同的字节序)。

但这仅仅是表面。双方都需要大量重复的代码来处理诸如日志记录,命令/遥测验证,限制检查和错误处理之类的事情。然后您可以做更复杂的事情。假设您有一条命令来设置硬件寄存器值,并且该值以遥测的形式发送回特定的数据包。您可以生成监视该遥测点的地面软件,以确保在设置该寄存器值时,最终遥测会更改以反映该更改。当然,某些遥测点比其他遥测点更重要(例如,主总线电流),并且指定为以多个数据包下降,这涉及在飞行侧进行额外的复制以及在地面侧进行重复数据删除。

有了所有这些,(在我看来)编写一组静态文本文件(以XML,CSV或某些DSL /您拥有的东西),通过Perl/Python脚本运行它们要容易得多,并且容易完成!码!

我不在JPL工作,因此除了一个例外,我无法提供视频中没有的任何细节。我听说自动生成的C代码是由Python)脚本编写的,并且项目中的自动编码量会因FSW负责人的不同而有很大差异)。

175
Nate Parsons