# 2019华为杯数学建模b题
# 天文导航中的星图识别
# 题目描述
天文导航(Celestial Navigation)是基于天体已知的坐标位置和运动规律,应用观测天体的天文坐标值来确定航行体的空间位置等导航参数。与其他导航技术相比,天文导航是一种自主式导航,不需要地面设备,不受人工或自然形成的电磁场的干扰,不向外界辐射能量,隐蔽性好,而且定姿、定向、定位精度高,定位误差与时间无关,已被广泛用于卫星、航天飞机、远程弹道导弹等航天器。天文导航的若干背景知识可参阅附件1。
星敏感器是实现航行体自主姿态测量的核心部件,是通过观测太空中的恒星来实现高精度姿态测量。恒星是用于天文导航最重要的一类天体。对天文导航而言,恒星可以看成是位于无穷远处的,近似静止不动的,具有一定光谱特性的理想点光源。
借助天球坐标系,可用赤经与赤纬来描述恒星在某一时刻位置信息(相关定义和概念可参考附件1)。恒星在天球球面上的投影点称为恒星的位置。将星空中恒星的相关数据,按不同的需求编制而成的表册,称为星表。星表是星图识别的主要依据,也是姿态确定的基准。常用的星表中通常列有恒星的位置、自行、星等(亮度)、颜色和距离等丰富的信息。对于天文导航而言,感兴趣的信息主要是恒星的位置和星等。附件2提供了一个简易的星表,提供了部分恒星在天球坐标系下的位置(以赤经、赤纬来标记,单位:角度)和星等信息。
全天自主的星图识别是星敏感器技术中的一项关键技术。星图识别是将星敏感器当前视场中的恒星(星图)与导航星库中的参考星进行对应匹配,以完成视场中恒星的识别。星图识别一般包括图像采集及预处理、特征提取、匹配识别等过程。
图像预处理包括去除噪声和星点质心提取。为简化,本赛题暂不考虑具体的去除噪声和质心提取等问题,认为所讨论的星图图像已经完成了图像预处理。
导航数据库一般包括两部分:导航星表和导航星特征数据库。导航星表是从基本星表中挑选一定亮度范围的导航星,利用其位置(赤经、赤纬)和亮度信息编制而成的简易星表。星敏感器除了需要构建导航星表外,还需要按照特征提取算法,构造导航星的特征向量,存储由特征向量构成的导航星特征数据库。
提取出观测星的特征后,就可以寻找特征类似的导航星。如果找到特征惟一接近的导航星,即可认为二者匹配。匹配识别过程和提取特征的方法紧密相关。本赛题暂不考虑后续的航行体定姿定位问题。
在星图识别的相关工作中需要用到天球坐标系、星敏感器坐标系、星敏感器图像坐标系等。其简单定义为:
- 天球坐标系。以天赤道为基圈,过春分点的时圈为主圈,春分点为主点。天球坐标系采用赤经、赤纬作为坐标量。参见附件1相关叙述。
星敏感器坐标系。以投影中心
O
(光轴上与感光面距离为f
的点,即光心,参见图)为坐标原点,以光轴为z
轴(后面的讨论中,光轴OO'
与天球面的交点记D
点),过O
点平行于感光面两边的直线作为x
轴和y
轴。上图为星敏感器坐标系、图像坐标系及前视投影成像示意图。图像坐标系。以感光面的中心
O'
(O
点在该平面上的投影点)为坐标原点,平行于感光面两边的直线为X
轴和Y
轴的平面坐标系,参见图1。
# 问题1
P1、P2、P3
是3颗已知位置的恒星,即它们在天球坐标系下的赤经和赤纬已知;Q1、Q2、Q3
是来自恒星P1、P2、P3
的平行光经过星敏感器光学系统成像在感光面上的星像点质心中心位置(参见图1); 记O'Q1 = a1, O'Q2 = a2, O'Q3 = a3, OO' = f
# 问题1.1
建立由焦距f
, 星敏感器坐标ai
, 赤径赤纬等参数解算D
点在天球坐标系的位置信息的数学模型,并给出具体的求解算法
# 问题1.2
不利用焦距f
,只利用星敏感器坐标ai
, 赤径赤纬等参数解算D
点在天球坐标系的位置信息的数学模型,并给出具体的求解算法
# 问题1.3
一般来说,星敏感器视场内的恒星数量多于3颗,请讨论如何选择不同几何位置的三颗星,提高解算D
点在天球坐标系中的位置信息的精度,并分析相应的误差
# 问题2
传统的星图识别方法主要是以角距(即星与星之间的球心角,可直观理解为两颗恒星分别与地心连线之间的夹角)或其衍生的形式为特征,这类方法比较简单,但一般需要较大的存储空间,识别算法实时性不好,且识别率普遍不高。通过对星图中的星点信息进行更为精细的特征提取,构建更高层次的特征,可能会提高星图识别算法的实时性和降低误匹配率。基于附件2提供的简易星表信息,请构建相应的特征提取模型,设计对应的星图识别算法,确定出附件3给出的8幅星图中每一个星像点所对应的恒星编号(对应附件2简易星表的恒星编号),并对算法的性能进行评估。
# 历程
# Day1
第一天上午拿到题目,三个人开始逐题分析
- A题:无线智能传播模型。背景是无线通信,其实题目核心是机器学习算法建模,不难。
- B题:星图识别。背景介绍一大堆,很容易把人吓到,其实仔细阅读后,感觉还是可做的。
- C题:图像题,前面好做,后面的视频处理难,舍弃
- D题:汽车工况构建:题目简单易懂,比较建模能力,简单舍弃
- E题:全球变暖:开放性题目,比较建模分析能力,太开放,舍弃
- F题飞行器航迹规划:规划航迹,航迹误差校正,可做
经过排除后,初步确定做B、D、F中的一个,回去反复读题后,并查找相关知识和论文后
中午午饭决定做B题。
下午开始搜集论文,确定题目的几个关键词:星图识别、星敏感器
然后去图书馆借了一堆相关的书(其实并没有什么卵用)
用下午大部分时间看论文,幸运的是找到了一篇论文,与做的题目非常契合,找到了解答第1.1题的思路,并开始思考后面的题目
(晚上思考出了题1.2,但是后面化简结果后,发现结果是错的)
结束第一天
# Day2
第二天上午,从论文中确定了传统的星图识别算法——利用角距构造同构三角形,从而实现匹配
下午,开始编写代码,实现传统识别算法
我开始写传统算法的代码
老徐开始写基于角距欧式距离的匹配算法
科神看论文找思路,并基本完成论文的排版
晚上,各自完成第一版代码,但存在一些bug,效果不好
第二天结束
# Day3
第三天开始,上午继续修改代码。
中午老徐的代码跑出了第二问的结果,但是速度精度都不够,科神提出一些优化手段,开始对算法优化,继续修改代码。
我继续修改传统算法的代码
下午,我的算法跑通,可以秒出结果,跟老徐的算法得到的结果相同
此时科神找论文找到题目1.3的思路和一些其他算法
由于想做一个算法的对比,于是我完成代码后继续看论文,找新算法
题目中要求脱离角距进行“高层次特征的提取”,因此我们对于高层次特征进行了讨论
晚上老徐算法优化完成,算法大幅提速,至此两种算法已经实现,并基本确定第二题的答案
科神编写第一题的论文内容
晚上确定了要做的新算法
第三天结束
# Day4
第四天上午,我和老徐每人开始编写一套新算法的代码
中午,我和老徐的代码完成
感觉还是没有脱离角距的限制,于是下午看论文,继续找新算法,最终找到了一个通过数学变换进行星图匹配的算法
我开始编写算法,老徐对之前的算法调优
我与科神对算法进行分析,讨论算法的实现过程
晚饭后完成代码编写,但是算法效果一般,能进行识别,但精度一般
之后开始整理代码
编写论文第二部分
凌晨完成整个代码的编写和整理
之后三个人集中整理数据、写论文
大约上午十点左右,完成整个论文部分
...
12点左右,回到寝室,陷入昏迷...
# 感受
等出结果在写
哈哈~
2019.12.14更新
结果已经出来近半个月了,终于抽出时间来写一下赛后感受
比赛结果在意料之中,保二争一,本来还想冲一下一等奖,奈何实力有限,名额不足等系列原因(说白了还是太菜QAQ),最终在"上海落户大赛"中成功拿下全国二等奖,赛题排名30
(其实拿不拿奖问题不大,主要还是为了参与一下)
说实话,这个比赛难度不是很大,只需要精确找几篇领域的论文(毕竟大部分参赛人员的研究领域都不跟题目相关),然后总结一下方法,把论文写的漂亮一点,就基本能拿奖(最差也能拿个三等8)
但是要拿好的名次,还是需要有一点创新(强烈感觉我们是吃了没有创新的亏,不过要创新是挺有难度的)
几天下来,感觉最重要的还是团队协作,因为这种比赛其实不太难,只要完成度足够高,基本就能拿个奖,这就很考验几个人的配合和分工
(在此先致谢一下两个大佬队友~)
其实在比赛过程中,还跟某位大佬出现了一些小矛盾,不过出现这些问题是很正常的事情,大家都是为了更好地完成这个比赛,初心都是一致的,只要及时调整好,效率还会更高~
现在想想,这还是第一次为了学习搞通宵(以前基本上也没通宵过),不行了,老了,肝不动了
其实前两三天都还好,主要是最后一晚的时候,是可以提升一下论文或者多做几种尝试
这时候可以熬一次夜,不然前两天就开始肝,后边的效率会越来越低,还是要保持白天充沛的精力~
在这次比赛中,收获还是蛮大的,读研之后很久没有这么专注做过这种事情了(我导师应该看不到)
最重要的我感觉还是"参与"吧,体验一次这种真正比赛的感觉,体验团队合作的感觉(前提你得找个好队友哈哈哈),然后剩下的就是尽力去完成了
总的来说,是一次很棒的体验~
(拿奖了当然很棒,还能水简历,没拿奖就丢人了哈哈哈,还好还好)
最后补一张获奖图,dangdangdang~
# 代码
← Pycharm远程调试 Logging模块 →