当前位置: 首页 > 科技观察

我,我17天用600行代码拍了400公里外的国际空间站

时间:2023-03-15 22:59:54 科技观察

400公里外的空间站如何拍出这样的照片?作为太空中最大的人造物体,国际空间站一直是无数天文爱好者梦寐以求的对象。大多数人采用的方法是根据自己的经纬度计算出空间站的中转时间(几秒到几分钟不等),然后用手机或者微单相机拍照,然后点击——得到这么小的光点:稍微高级一点的会用“凌日和月亮”的拍摄方式,即在空间站飞越太阳或月球之前,以这两个天体为背景源,确定一个面积较小。然后在中线上等待,手持几公斤到几十公斤重的大口径长焦望远镜,进行长时间稳定跟踪,直到空间站在1秒内经过月球或太阳,按下快门开枪。这样的拍摄效果会更清晰,但致命的问题依然存在:空间站平均每90分钟可以绕地球一圈。与著名的恒星观测和模拟工具Stellarium相比,金星和火星与空间站相比就像是“静物”(实时模拟,没有加速):总之,空间站跑得太快了。因此,不仅1秒内拍摄的帧数有限(无法通过多帧叠加来克服大气抖动),只能拍摄剪影,甚至有可能因为计算失误而错过拍摄机会。要想拍出更高精度的照片,不仅要有过人的耐心,还要有深厚、经验丰富的手动控制功底。比如一旦有大风,拍摄的效果就会“模糊成一团”:△图片来源王卓晓,授权所以这时候有人灵机一动:没有独角兽手臂,用代码让望远镜自己移动会更好吗?说到做到,这个“业余程序员”立马炸了17天,想出了一个自动跟踪系统。在这个自动跟踪系统的加持下,望远镜不再只能在特定的几秒钟内拍摄几张静态图像,而是一直连续跟踪空间站2分钟。最后将多张图片叠加后处理,合成了一张高精度的三维GIF图片:(也就是我们入手的那张图)就是这样一张图片,让网友发出“直接入手人造天体”追踪摄影“时代”感叹。于是,我们找到了开发者本人,北大天文学校友,天体物理学博士刘博阳,聊了聊。拍摄高精度空间站有什么难的?首先首先,我们需要简单了解一下拍摄空间站的“时机”,空间站虽然移动速度极快,但平均每90分钟就可以绕地球一圈,而且它的高度距离地球只有400公里左右平均,在肉眼可见的范围内,但我们不能随时观察,主要有两个限制:视野和观察时间。视场是指空间站飞入我们视野可见范围的时间,也就是刚好“过境”的时间段;观测时间是指我们可以观测空间站的时间。空间站本身不发光。每天只有日落后两小时或日出前两小时内,空间站反射的阳光最亮,最适合拍摄。只有同时满足这两个条件,我们才有机会在地面上观察和拍摄空间站,但效果还受到天气等因素的影响(图为多云天气):△来源:朱Yijing&XuChengcheng,authorized然而,目前常见的几种天体拍摄方法并不适合拍摄更高精度的空间站照片。第一种方法是通过“手摇”望远镜直接拍摄,即推动望远镜跟踪天体。这种方法的一个缺点是无法捕获空间站的超高清图像。由于拍摄必须靠手动追踪,不可能用长焦镜头直接找到它,否则就像用显微镜捕捉高速移动的蚂蚁,空间站不经意间就会消失在镜头之外注意。第二种方法是像“守兔”一样架设各种高清镜头和设备,原地等待空间站“擦身而过”。这种方式不需要移动相机,而是等待空间站自己“过去”。但它面临一些新的问题。比如,空间站“擦身而过”的时间很短,有时只有几秒钟,很可能无法捕捉;不能保证。那么,为什么不使用望远镜内置的跟踪功能进行拍摄呢?该功能通常只适用于跟踪因地球自转而产生的日月星辰等天体的升落。毕竟,它们的移动速度并不快,基本与地球自转同步。但对于空间站这样的高速运动物体,望远镜本身是追不上的。因此,最终还是要依靠程序的辅助来实现高精度空间站的跟踪拍摄。第三种方法是利用轨道要素(即轨道参数)进行跟踪,即利用各种天文网站(如Heavens-Above等)查到的天体信息,调整望远镜的跟踪路径,进行手动校正:目前大多数天文爱好者都是采用这种方式来实现跟踪+微调。网上已经有一些比较成熟的方案。例如,这是用电子经纬仪根据轨道参数跟踪空间站的效果:△图片来源王卓晓,授权BUT,这些天文网站更新与否你永远不知道。有时候空间站临时调整轨道,但是如果网站不更新,你的程序就会失败。采用光学识别,误差控制在4个像素以内。作为一个老天文迷,刘伯阳不可能把上述问题都看个明白。他最初的想法是利用现有的一些软件来寻找镜头中的“光点”,基于光学识别的方法来识别和跟踪目标。然而,当他寻找合适的程序时,却发现这些程序没有维护(甚至Windows版本太旧无法使用),或者更新不及时、系统复杂,或者干脆闭源收费。于是,刘博阳最终决定自己动手,写一个光学识别的自动跟踪脚本,手动寻找空间站,基于PID控制跟踪。他的计划分为两步:第一步是编写程序,实现望远镜对空间站的自动识别和跟踪,需要5天时间完成。值得一提的是,光学识别并不是刘博阳的“第一手选择”。他还真想过参数跟踪+手动微调,包括摇杆无级控制赤道仪转速,粗跟用轨道元数,手柄无级微调等等,但是测试结果不理想(微调时手不够稳)。因此,他根据PID控制原理编写了一种光学跟踪方法。这是一个非常经典的控制算法。PID分别指比例、积分和微分单元。该算法用于使两轮机器人小车保持平衡。刘伯阳以前没有学过这方面的知识,但为了建立一个稳定的自动控制系统,他自然而然地引入了比例元件(P)和积分元件(I)来减少系统的误差。刘伯阳的望远镜分为视场较大的寻星镜和视场较小的主镜两部分。这套算法的基本目标是根据空间站在寻星镜中的当前位置,计算其偏离主镜视场的大小,从而调整望远镜的跟踪速度纠正存在的偏差,使空间站落在主镜中间的视野范围内。使用这个程序,取景器可以快速跟随移动的空间站“光源”,使空间站始终保持在视野的中心。刘博阳曾尝试用激光笔在自家墙壁上打出一个匀速移动的亮点来模拟空间站的运动,效果还不错:程序本身是基于一个名为ASCOM。它可以将天文设备的所有配置,如控制望远镜的调焦器、滤光片的旋转、相机的打开和关闭,集成到一个软件中。是天文领域应用非常广泛的软件接口标准:硬件准备,除了笔记本电脑,还包括:11英寸口径,焦比f/10,折反射CelestronEdgeHD望远镜,配备CGEM赤道仪佳能EOSR5相机QHY5III462c相机,作为导游相机TumasterT16000M游戏手柄中,望远镜约4万元,佳能EOSR5相机租用两周2200元(市场价25000元),462c相机是不到1000元,手柄是和朋友以物易物得到的(市场价500元以上)。整个成本不到45000元。据刘博阳介绍,如果精度要求不是那么高,整套不到1万元就可以完成。然后进入第二步,实地实拍,成功使用设备拍摄空间站高精度照片。但没想到的是,实际拍摄比想象的还要难。这期间,刘伯阳“一直在反复尝试修复漏洞”。他最初的目标是攻占中国空间站,但接连出现了两次BUG,导致两次观测都错过了最佳时机。3月23日,由于未能及时对焦,自动光学追踪未能发挥作用;3月27日,因寻星器视场角只有3°左右,视场太小导致初次捕捉失败,自动光学跟踪再次失败。跟踪过程。此时距离中国空间站下一次可见凌日还有很长一段时间。因此,在解决操作问题(将取景器视场角提升至15°)后,刘博阳决定到即将迎来数次出色凌日的国际空间站“练练”。因此,在将自动跟踪程序中的“捕捉”改为手动触发后,刘博阳于4月2日成功验证了该程序的功能。虽然还存在一些不完善的地方,比如软件崩溃导致取景器的位置校准数据瞄准镜和主镜丢失。为了解决这个问题,刘博阳增加了标定数据记录功能。这时候代码已经从原来的400行变成了600行。终于在4月3日晚上,在紧急修复bug后,刘伯洋成功攻占国际空间站。具体来说,望远镜对空间站的捕捉分为x轴和y轴。按下catch后,y轴快速稳定的追上目标,而x轴稍慢10秒。在大约30秒时,两个轴都保持在稳定的误差范围内(大约四个像素)。此次高精度跟踪共持续120秒,完整记录了国际空间站从接近到远离的全过程:初始原始图像约100像素,最后经过多帧叠加超采样处理,图像的像素增加到200多个像素。最终,经过处理,成功输出了一系列300×300像素的图片(合成GIF图片):而这已经是刘伯洋开始这个项目的第17天了。之后,将发射一枚小型火箭。谈到整个项目中最困难的阶段,刘博阳印象最深的是如何让望远镜被Python代码调用:对于我这种不擅长编程的人来说,开发完全是一个黑盒子开始。刘博阳先后就读于北京大学和西澳大学,攻读天体物理学专业的本科和博士学位。这个专业要求掌握基本的编程技能,但刘博阳在大学时的相关课程,如计算机概论、数据结构等,都出现了低分或延期考试的情况。博士阶段,有很多数据处理工作需要用脚本来完成,他开始深入学习编程语言。这次之所以选择自己写代码来控制望远镜,是因为没有找到现成的软件,但也想继续锻炼自己的编程能力。那么这段代码会开源吗?当我们问到这个问题时,刘博阳说:至少在调试的范围内,把代码优化到满意的程度,再考虑下一步。他最近的目标之一是在两周内再次通过中国空间站。在与国际空间站“练功”成功后,刘博阳信心满满,还在考虑在接下来的抓拍中是否适当缩小视野,以提高拍摄的准确性。如果中国空间站拍摄顺利的话,4月21日前结束。之后,他将第一时间赶往青海,开始新的项目:发射一枚自带摄像头的小型火箭。更进一步,刘伯阳还提到了神舟系列火箭的发射以及可能在今年下半年发射的实验舱。他会用自己的程序跟踪空间站,然后再去跟踪大火箭。如此硬核的“备战”计划,无疑是狂热的航天爱好者的心头好。刘伯阳最后说:我从小就对天文学很感兴趣,所以本科、硕士、博士都学了天体物理学。不过随着国内的航天任务越来越多,接触相关活动的机会也越来越多,所以我对太空的兴趣也逐渐产生了,现在已经发展成了一大爱好。