星途重启:244亿公里外的「旅行者1号」,修好了

2024年4月20日,旅行者1号工程团队时隔5个月,终于重新收到了来自47年前所发射的探测器传回的有效数据。

▲收到数据当天,工程团队成员在NASA喷气动力实验室的会议室中欢呼。

01.关于旅行者1号

在当下5G和WIFI已经普及的时代,NASA喷气动力实验室中掌握着最前沿航天技术的工程师们依然在顽强地使用相当于5G通信百万分之一的带宽与旅行者1号这台上世纪70年代出厂的老爷机保持联络,绞尽脑汁地维护其正常运转,并试图从传回的数据中找出一些能发表在《自然(Nature)》和《科学(Science)》上的发现。之所以能让工程师们如此倾情,只因它已经突破了太阳风所能影响的范围,看到了人类从未看到的景象。

旅行者1号是距离地球最远的人造航天器,发射于1977年,是一艘无人外太阳系核动力太空探测器,携带有105千克的科学探测仪器。它在1980年就已完成其原先的主要目标:探测木星、土星及其卫星与环,同年起开始了一项拓展任务:探索日球层顶的区域和边界。截至2024年5月10日15时,旅行者一号已距离地球244亿公里(162.73425755 AU)。

▲1990年2月14日,在探测任务全部完成后,工程师们决定关闭相机以节约能源。旅行者1号在离地球60亿公里外最后一次拍下了它眼中的地球。这张有史以来拍摄距离最遥远的地球肖像,被命名为“黯淡蓝点”(地球甚至没有占据一个完整的像素)。

02.故障及修复

在漫长的47年中,旅行者1号曾遭遇过「拒绝执行命令」、「二进制位翻转」等多次故障,但最终都化险为夷。

本文开头所提到的故障最早被发现于2023年11月19日。按原有设定,旅行者1号的飞行数据系统(Flight Data Subsystem,FDS)负责打包探测与状态数据,通过遥测调制装置(Telemetry Modulation Unit,TMU)和无线电发射器将数据以二进制代码的形式发回地球。故障发生后,旅行者1号不断发送重复的“1”和“0”乱码,不再携带任何有效的数据。

经过一系列检查,工程团队在今年3月证实,本次故障的原因在于负责存储FDS内存的3块芯片之一出现了故障,故障原因则可能是芯片老化或宇宙射线撞击。尽管因故障芯片而受损的内存仅占约3%,但这个47岁的老爷机已经没有足够大的空间来容纳完整代码,因此只能将这些受损代码划分为多个部分,分散存储在剩余芯片中。为了保证位置调整后的代码仍能作为一个整体来运行,FDS内存其他部分中对受损代码位置的引用也都需要同步更新,难度不低。

尤其是受到带宽影响,从地球发出的指令需要22.5小时才能到达探测器,也就是说每次发出的指令需要等待45小时才能收到回应。2024年4月18日位置调整代码发出后,在4月20日,历时5个月,工程团队终于成功接收到了旅行者1号发回的状态数据,这表明故障修复已经生效。后续,NASA将重新调整FDS的代码和其他受影响部分,使其恢复探测数据的发送。

可以说,这台当前人类仍在使用的最慢的电脑,被成功修复了。

03.修复方式及创新

在修复方式的选择上,由于这台年代久远的旅行者1号大部分的原始设计文档仍是尚未数字化的纸质文档,因此只能使用最为原始的方法。“看代码真的是只用眼睛看,”NASA 喷气推进实验室旅行者项目航天器科学家Linda Spilker说道,“所以我们必须进行三次检查,以确保将所有链接放在一起”。

然而,对于当下代码量庞大的各类探测器或其他航天设备来说,显然已有更优解:大部分航天设备都在地面配备有硬件和软件模拟器,如近几年大热的“数字卫星”。数字孪生的技术支持工程师在脱离硬件环境的情况下测试新程序,以确保程序上传至真实设备时不会造成伤害。

天目全数字实时仿真软件SkyEye,是一款基于可视化建模的硬件行为及仿真平台,在航天领域,已实现基于AT697、龙芯等嵌入式处理器的空间站载荷软件的全数字仿真,支持代码在虚拟仿真平台上运行,同时支持代码质量分析等测试任务;在“数字卫星”实践中,基于SkyEye的卫星超实时仿真子系统是一套基于SPARC处理器的姿轨控嵌入式软件的开发、仿真和验证系统,支持与Simulink协同仿真,可实现全数字高速闭环仿真运行,适用于姿轨控软件的开发调试、系统测试。

04.重启后的星途

实际上,旅行者1号已经时日无多。

由于已经无法依靠太阳光来提供电力,旅行者1号只能靠着自带的放射性热核电池来供电。虽然已经为了延长使用时间而关闭了大部分仪器,但随着热核电池输出功率的不断衰减,预计维持探测器最基本系统运行的电能将在2025年耗尽。届时,进入静默状态的旅行者1号仍将继续向银河系中心前进,但再也无法向地球发回任何数据。

最后,值得一提的是,作为人造飞行器的先驱者,旅行者1号还携带着一张铜制镀金唱片,包括用55种人类语言录制的问候语:“行星地球的孩子(向你们)问好”。尽管机会已经微乎其微,但我们仍可畅想:许多光年之外,会有另外的文明发现了旅行者1号,解码了金唱片,兴奋地发现地球人类的存在,欣慰地得知他们在宇宙中并不孤单。

参考文献

[1] https://blogs.nasa.gov/voyager/2024/03/15/nasa-engineers-make-progress-toward-understanding-voyager-1-issue/

[2] https://mp.weixin.qq.com/s/OWIQ2WCJEWYN7lbQXwcShg

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

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

相关文章

【QT教程】QT6硬件数据库编程 QT硬件数据库

QT6硬件数据库编程 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免…

Oracle中blob和clob的区别和例子

在Oracle数据库中,BLOB(Binary Large Object)和CLOB(Character Large Object)是用于存储大量数据的两种大型对象(LOB)类型,但它们之间存在一些关键的区别。 数据存储方式&#xff1…

FFmpeg常用API与示例学习(二)

封装层 封装格式(container format)可以看作是编码流(音频流、视频流等)数据的一层外壳,将编码后的数据存储于此封装格式的文件之内。 封装又称容器,容器的称法更为形象,所谓容器,就是存放内容的器具,饮料是内容&…

vue3速览

在您的Vue.js 3应用中,createApp 是用于创建一个Vue应用实例的函数。您已经正确地引入了它并开始创建应用,但目前根组件内部是空的。下面我将为您展示一个更完整的例子,说明如何设置根组件的模板、数据、方法等选项,并挂载到DOM上…

流媒体学习之路(WebRTC)——GCC中ProbeBitrateEstimator和AcknowledgedBitrateEstimator的大作用(7)

流媒体学习之路(WebRTC)——GCC中ProbeBitrateEstimator和AcknowledgedBitrateEstimator的大作用(7) —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标:可以让大家熟悉各类Qos能力、带宽估计能力&a…

Python | Leetcode Python题解之第71题简化路径

题目: 题解: class Solution:def simplifyPath(self, path: str) -> str:names path.split("/")stack list()for name in names:if name "..":if stack:stack.pop()elif name and name ! ".":stack.append(name)re…

W801学习笔记二十四:NES模拟器游戏

之前已经实现了NES模拟器玩游戏。W801学习笔记九:HLK-W801制作学习机/NES游戏机(模拟器) 现在要在新版本掌机中移植过来。 1、把NES文件都拷贝到SD卡中。 这回不会受内存大小限制了。我这里拷贝了4个,还可以拷贝更多。 2、应用初始化中,加载…

React 学习-7-组件API

设置状态:setState setState(object nextState[, function callback]) nextState,将要设置的新状态,该状态会和当前的state合并 callback,可选参数,回调函数。该函数会在setState设置成功,且组件重新渲染后调用。 替…

FFmpeg常用API与示例学习(一)

工具层 1.av_log 可以设置日志的级别,这个看看名字就明白了,也不用过多的解释。 AV_LOG_PANICAV_LOG_FATALAV_LOG_ERRORAV_LOG_WARNINGAV_LOG_INFOAV_LOG_VERBOSEAV_LOG_DEBUG void test_log() {/ av_register_all();AVFormatContext *pAVFmtCtx NU…

如何使用 await-to-js 库优雅的处理 async await 错误

通过阅读优秀的源码并从中学习如何写出让人觉得赏心悦目的代码最后再写文章进行总结对整个学习的过程进行一个梳理同时分享给其他人。 JS 异步编程进化之路 回调地狱阶段 在正式介绍 await-to-js 这个库之前,让我们先简单的回顾一下有关于在 JavaScript 这门语言…

ctfshow web入门 php反序列化 web275--web278(无web276)

web275 这道题和序列化一点关系都没有 整个代码并没有说filename(f)怎么传参只有fn并且屏蔽了flag highlight_file(__FILE__);class filter{public $filename;public $filecontent;public $evilfilefalse;public function __construct($f,$fn){$this->filename$f;$this-&g…

bash: docker-compose: 未找到命令

bash: docker-compose: 未找到命令 在一台新的服务器上使用 docker-compose 命令时,报错说 docker-compose 命令找不到,在网上试了一些安装方法,良莠不齐,所以在这块整理一下,如何正确快速的安装 docker-compose cd…

STM32入门周边知识(为什么要装MDK,启动文件是什么,为什么要配置时钟等等)

目录 MDKMDK与C51共存为什么要安装MDK 启动文件是什么,为什么要添加许多文件为什么要添加头文件路径为什么是寄存器配置魔术棒中的define为什么必须先配置时钟杂例 MDK MDK与C51共存 在最开始学习51单片机的时候,当时安装keil的时候,认为就是…

Web实时通信的学习之旅:WebSocket入门指南及示例演示

文章目录 WebSocket的特点1、工作原理2、特点3、WebSocket 协议介绍4、安全性 WebSocket的使用一、服务端1、创建实例:创建一个webScoket实例对象1.1、WebSocket.Server(options[,callback])方法中options对象所支持的参数1.2、同样也有一个加密的 wss:/…

C++ NetworkToHostOrder、HostToNetworkOrder 模板函数

其作用类型&#xff1a;ntohl、htonl、ntohs、htons 函数的作用&#xff0c;因为要考虑兼容 int128、int64 等数据类型。 IPV6 肯定是 int128 了&#xff0c;使用这两个函数可以帮助人们计算IPV6的地址范围等。 template <class T> static T …

在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?

在 Hibernate 中&#xff0c;getCurrentSession 和 openSession 是两种不同的方法来获取 Session 对象&#xff0c;它们之间存在一些关键的区别。 事务管理方式&#xff1a; getCurrentSession&#xff1a;它依赖于当前的事务上下文&#xff0c;通常与 Spring 等框架集成&…

报表-设计器的使用

1、设计器目录结构 报表设计器以压缩包的方式提供&#xff0c;解压后&#xff0c;目录结构如下&#xff1a; 目录说明&#xff1a; 1、jdk-17&#xff1a;压缩包中自带的windows平台下的jdk17 2、lite-report&#xff1a;报表文件和数据源配置文件的保存位置 3、lite-repor…

Spring MVC(三) 参数传递

1 Controller到View的参数传递 在Spring MVC中&#xff0c;把值从Controller传递到View共有5中操作方法&#xff0c;分别是。 使用HttpServletRequest或HttpSession。使用ModelAndView。使用Map集合使用Model使用ModelMap 使用HttpServletRequest或HttpSession传值 使用HttpSe…

在AI大模型中全精度和半精度参数是什么意思?

环境&#xff1a; 大模型中 问题描述&#xff1a; 在AI大模型中全精度和半精度参数是什么意思&#xff1f; 解决方案&#xff1a; 在深度学习和高性能计算领域&#xff0c;"全精度"和"半精度"通常指的是模型中使用的数值表示的精度&#xff0c;具体涉…

hadoop学习---基于Sqoop的文件导入导出操作

在本地数据库创建数据库表&#xff1a; create database sqoop_test default character set utf8; use sqoop_test; CREATE TABLE emp ( EMPNO int(4) NOT NULL, ENAME varchar(10), JOB varchar(9), MGR int(4), HIREDATE date, SAL int(7), COMM int(7), DEPTNO int(2), PRI…