郝冠男,王凌云,李光茜,穆思达
(长春理工大学 光电工程学院,长春 130022)
星敏感器是在航天航空、军事等任务中进行航天器姿态测量的视觉传感器,星敏感器的高精度姿态信息对航天器姿态精确控制有着十分重要的作用[1-2]。动态星模拟器是星敏感器地面测试的标定设备,考虑到航天实验经费的成本问题,星敏感器的调试由动态星模拟器实时模拟生成的星图来完成[3]。
星敏感器在进行航天器姿态测量时,需要将当前视场中的恒星与导航星表进行比较匹配,这一过程称为星图识别[4]。恒星在导航星表中的匹配效率决定了星图识别的效率[5],为了在地面较理想地模拟星图识别的过程,对于动态星模拟器星图的刷新率有较高要求[6]。在全天星表识别时,若直接对整个导航星表进行逐一检索,其效率非常低,为加快导航星表的检索速度,需要对导航星表的检索算法进行研究改进,以提高星模拟器的星图刷新率[7]。
近年来航空航天事业及其技术高速发展,普通的遍历星表搜索导航星的方法已经满足不了对动态星模拟器高刷新率的需求,故近年来有很多针对星图视场分区算法的研究,主要分为两类,一是天球均匀划分方法,该类方法完全抛弃了天球的经纬度信息,得到了天球表面的均匀划分,这类方法划分的子区较多,占用设备的存储空间非常大,且检索方式不够直观。主要有Ju等人[8]采用圆锥的方法,将天球表面分成11 000个区域,这种方法分成的圆锥体区域会互相重叠,会造成同一颗导航星出现在不同的圆锥体区域内。李星等人[9]采用四棱锥分区的方法,将天球表面分成大约60 000个子区,这种方法会使一个导航星可能出现在多个子分区内,会需要大量的存储空间来进行数据存储;二是将全天星图基于赤经、赤纬来进行空间划分。比较经典的赤经赤纬划分法主要有陈元枝等人[10]采用的球形矩阵分割的方法,将天球表面分成 800 个区域;Bone J W[11]采用赤纬带法,这种方法对导航星进行检索时,可以直接搜索赤纬值;胡宜宁[12]将星表按赤经、赤纬分割为等大划12°×12°的450个子区。这些方法所使用的导航星数相对较少,而且比较适用于视场较小的星模拟器系统。
本文提出的外切圆形分区检索导航星算法,是基于赤经、赤纬来进行空间划分,利用相同的外切圆形将天球均匀划分,应用于星模拟器星图显示算法测试系统软件上,提高了星图刷新率,同时减少星图软件及数据库的内存占用。
星图模拟算法是在一定的视场大小、星敏感器旋转角度的条件下,找出以光轴为中心的视场范围内的恒星,根据坐标变换得到所要模拟的星图。
本文以史密斯天体物理观测站(SAO)的星表作为原始星表,选取星表中视星等-2.0~7.0的15 914颗星作为导航星,将星点的经纬信息存入对应的分区内并计算出其空间坐标。通过软件输入光轴指向,确定视场所占子区并筛选导航星,最后在软件界面上显示星图,图1为算法系统的流程框图。
图1 算法系统流程框图
初次用软件加载SAO星表后对其进行分区,并将导航星数据储存在对应的子区分组内。在某一星等时,视场中导航星数量随着视场增大而增加[13],已知所用的星模拟器视场较大为20°×20°,考虑到减少导航星的筛选数量,尽量减少视轴所占子区个数,保证视场可完全落在1个子区内,需取视场的对角线28°,考虑到姿态误差偏移,故取外切圆直径为30°,圆心为横坐标Xo=15n(n=1,3,5,…,23),纵坐标Yo=15m(m=5,3,1,-1,-3,-5)的 72个外切圆进行分区,将 72个圆形分区O由从左到右、从上到下的顺序编号为1~72号,每四个外切圆会形成一个由四个圆弧围成的区域,称之为H区域,每有一个圆形分区就会有一个H区域,规定H区域的编号为H=O+72,O为该H区域相邻的左上方圆形分区编号。算法共将星图分为144个区,其中位于赤经0°与 360°,赤纬+90°与-90°的H区域合为同一区域,如图2所示。
图2 外切圆星表分区示意图
当星模拟器接收到视轴指向坐标的输入值时,设视轴指向的赤经、赤纬为(X,Y),判断该点距离其最近圆心的距离L,若L≤15,则规定视轴落入该圆形分区O,若L>15,则规定视轴落入不规则分区H。当光轴指向圆形分区O内时,星模拟器视场可能占据1~7个分区;若光轴指向H分区内时,星模拟器视场可能占据4~6个分区,具体如图3所示。
图 3(b)为图3(a)在以圆形分区O为圆心建立直角坐标系的第一象限的放大,其中由红色曲线与蓝色直线所围成的区域之中的数字表示:当视轴指向该区域时视场所占据的星图分区个数。由于该分区算法的对称性,其他三象限均与图3轴对称或中心对称。图3内红色曲线共有16条,曲线均为圆弧,在以圆形分区O为圆心建立直角坐标系,16条圆弧的圆心均匀分布在其四个象限内,图3内已标注的圆心在其第一象限红色1、2、3、4号圆弧公式对应如下:
其中,圆弧半径R=15;R1=10;R2=20;(xi,yi)为离视轴坐标最近的圆形分区O圆心坐标。由于分区对称性,在第二象限圆弧圆心坐标为(xi-R1,yi+R1),(xi-R2,yi+R2),(xi-R1,yi+R2),(xi-R2,yi+R1),第三象限为(xi-R1,yi-R1),(xi-R2,yi-R2),(xi-R1,yi-R2),(xi-R2,yi-R1),第四象限为(xi+R1,yi-R1),(xi+R2,yi-R2),(xi+R1,yi-R2),(xi+R2,yi-R1)。全天球星点数据按照对应的星图分区存储,当视轴落入对应区域时,即可快速调用相应星图分区数据。例如视轴落入图2中25号分区的7号区域内,根据图2、图3判断视场所占据所有的星图分区,需要索引的子区有13、14、25、26、85、96、97。
图3 视场所占子区个数示意图
星模拟器最终通过星图显示算法测试系统软件显示星图,需要以天球坐标系为基础的星表中恒星的坐标,旋转变换得到星敏感器坐标系中坐标,通过投影变换为CCD成像面的平面坐标[14]。以天球为基准建立三维直角坐标系,恒星在天球坐标系下的位置为赤经α和赤纬β,如图4所示。
图4 天球坐标系
实际中星敏感器的光学坐标中心和地球球心默认为重合,按照X-Y-Z轴的顺序将天球坐标系旋转与星敏感器坐标系重合,可以得出3×3的旋转矩阵H,该方法为先绕X轴逆时针旋转α得到Rx,再绕Y轴逆时针旋转β得到Ry,最后绕Z轴逆时针旋转γ得到Rz,对应XYZ轴的旋转矩阵如下:
图4中恒星在天球坐标系下的坐标s(λ,θ)在天球空间直角坐标系中的单位方向矢量[XsYsZs]T可以表示为:
则星敏感器坐标系下的方向矢量[X1Y1Z1]T,可以用天球坐标系下的方向矢量[XsYsZs]T表示,如下:
最后再将星敏感器坐标系下的坐标[X1Y1Z1]T转化为液晶光阀上的坐标(X,Y):
式中,n和m为液晶光阀每行和每列像素点个数;R为视场角大小。
因为星空被视为球面,赤经为0°和360°实际是重合的,若视轴落在边界区域上则要考虑越界问题[15],但与查找子区步骤不同的是,导航星的查找,只考虑赤经方向的越界,而不考虑赤纬方向上的[16]。查找到视场所在分区后,只需在分区内筛选位于视场内的导航星即可,设某星点在分区内的坐标为(xs,ys),视轴指向为(X,Y),则:
当满足上式时,即可判断该星点在星模拟器视场内可作为导航星。
首次载入星表时,星图显示算法测试系统软件会自动对星表进行处理并更新数据库,将星表进行分区,计算出星表中所有导航星的空间坐标并储存,之后只需通过给出光轴的赤经、赤纬坐标即可快速检索导航星并显示,经多次测试可算出平均刷新时间。软件界面左侧上方可显示视轴指向,星图生成星点数量和刷新时间,左侧下方可显示当前显示星图中各个星点的赤经、赤纬及星点个数。图5为使用Visual Studio2015编写的星图显示算法测试系统软件界面。
图5 星图显示算法测试系统软件
使用积分计算出图3各区面积可得到视场所占子区数量的概率,通过对含有15 914颗导航星的SAO星表进行检索,对1 000次星图刷新的时间进行统计,如表1所示,并附上视场所占子区个数时,对应生成的星图。
表1 视场所占子区个数与对应刷新时间
图6—图12对应表1中视场占据1~7个子区时所生成的星图,图13为使用经典遍历星表算法生成的星图,图14为星图软件Stellarium生成的星图。使用经典遍历算法进行1 000次生成模拟星图的测试,得出平均检索时间为78.45 ms。根据表1中数据可得视场所占子区越少时,所调用搜索子区就越少,星图的刷新率就越快。算得整体平均检索时间为9.43 ms,平均刷新率为106 Hz;当视场占据子区个数小于6时,平均检索时间达到8.81 ms,即有76%的概率星图刷新率超过110 Hz,与不分区的星图检索时间对比缩短了近8倍;视场占据子区个数为6、7时,平均刷新时间为11.09 ms,平均刷新率为90 Hz,不会对系统整体的稳定性产生较大影响。
图6 (75.4465,16.0143)178颗星
图7 (253.1012,-43.3765)170颗星
图8 (199.6887,-42.9752)142颗星
图9 (345.5706,58.6441)115颗星
图10 (268.4118,57.1547)61颗星
图11 (51.1319,-68.2899)45颗星
图12 (24.5137,-75.0705)27颗星 算法生成
图13 (24.5137,-75.0705)27颗星经典遍历星表算法生成
图14 (24.5137,-75.0705)27颗星Stellarium星图
图12—图14为视轴指向相同赤经、赤纬时,由外切圆形分区检索导航星算法、经典遍历星表算法与星图软件Stellarium所生成视场大小相同的对应星图,经对比可以看出三幅星图生成的模拟星图星点位置一致,验证了算法的准确性。同时软件本身与数据库大小约为200 MB,比目前常用的多星点数据检索算法存储量有所减少。
本文通过提出了一种外切圆星表分区算法,将星表分为比星模拟器视场略大的圆形区域O,与不规则区域H共144个子区,使用Visul Studio2015编写出的星图显示测试系统软件,载入15 941颗导航星的SAO星表,通过加载星表时处理数据库,输入视轴坐标锁定所需检测子区及其个数,刷新率达到110 Hz的概率有76%,总体的平均刷新率可达106 Hz,缩短了星图刷新时间。通过在相同的视轴坐标下,算法生成的星图与经典遍历算法生成的星图、Stellarium星图软件的星图进行对比,结果表明三幅星图的星点位置相同,验证了算法的准确性。该算法的刷新速率与目前较先进的高刷新率算法水平相近,且算法是基于20°×20°的视场提出的,理论上可以向下兼容更小的视场,具备了一定的通用性。处理的数据库大小约为200 MB,达到了节省存储空间的目的。