基于智能移动终端的天文定位APP设计与实现
2022-02-03周爱军
吴 浩,周爱军
(海军大连舰艇学院 航海系,辽宁大连 116018)
0 引言
现代战场电磁环境日趋复杂,卫星导航和无线电导航等系统容易受到干扰,具有自主性特点的天文定位越来越重要。目前天文定位系统主要有3类:基于六分仪的天文定位系统、基于星敏感器的天文定位系统和基于射电的天文定位系统[1-3]。基于六分仪的天文定位系统存在查算表册步骤繁琐、依赖水天线等局限性;基于星敏感器和射电的天文定位系统虽然定位精度高,但是设备体积质量都较大,无法随身携带,设备操作复杂且价格昂贵。智能电子终端及内置传感器的快速发展,为实现开发天文定位APP提供硬件支持,天文定位APP可在不借助基站信号和卫星导航信息的前提下进行天文定位。
1 天文定位算法原理
天文定位算法有传统高度差法、直接解算法和迭代法等[4]。传统高度差法原理简单,便于手工绘图。测者位于同一地点,测算2个夹角合适的天体,即可得出一组天文舰位线方程。
式(5)和式(6)中:φC和λC分别为推算纬度和推算经度。
船位圆弧方程是超越方程,直接联立求解较为困难。传统高度差法用直线近似船位圆弧,则会引入曲率误差。2个天文船位圆相交形成球面三角形,利用球面三角形的边角关系可直接解算天文船位。直接解算法有2个近似解,需要对照推测船位进行取舍。
迭代法是通过观测天体可得同一时刻、同一天顶2个天体的观测真高度h1和h2。2个天体的赤纬和格林时角分别为δ1、δ2和tG1、tG2,所求观测船位的经纬度为(λ,φ),可得2个船位圆方程为:
式(11)和式(12)中:Δφ和Δλ分别为纬度和经度变化量;hC1和hC2分别为2个天体在推算船位的计算高度;AC1、AC2分别为两天体的计算方位。可由船位圆方程求得:
再将近似解(φ,λ)作为新的推算船位进行迭代求解,得到新的Δφ和Δλ。当Δφ和Δλ的绝对值小于0′.1时,迭代计算结束。
综合比较高度差法、直接解析法和迭代法:当观测天体高度超过70°时,高度差法的船位线曲率误差比较大,因此定位误差也较大;直接解算法编程较为复杂,而且结果需要取舍;迭代法计算编程简单,既避免了高度差法原理性误差,又容易编程实现,可选取迭代法进行天文定位计算。
2 天文定位APP 设计与实现
天文定位APP的设计与实现主要包括天文定位计算、PyEphem星历库、人机交互等内容,见图1。
图1 天文定位APP 系统组成框图
2.1 星历计算
天文定位APP计算所用星历库为PyEphem。PyEphem库是一个Python环境下天文历法计算的第三方库,由埃尔伍德·查尔斯·唐尼(Elwood Charles Downey)编写,采用VSOP87行星理论,其精度在1角秒左右,足以满足天文航海所要求的0.1角分的精度。PyEphem库中部分函数功能见表1。PyEphem星历库使用语言是Python,而天文定位APP开发所使用的软件为Android Studio,其开发语言为Java。在Android Studio中调用Python语言的PyEphem星历库需使用Python Community Edition插件。首先对项目框架build.gradle进行配置,加入Python程序的运行路径,然后在Android Studio中下载插件,最后在项目中创建Python文件,调用Python文件的方法见表2。
表1 PyEphem 库部分函数功能表
表2 调用Python 的方法
2.2 人机交互界面
天文定位APP输入数据是通过EditText控件实现,并可设置输入数据的类型、提示内容和最大长度等属性;显示数据是通过TextView控件实现,可设置显示数据的颜色和字号等属性;下拉菜单是通过Spinner控件实现,可设置下拉菜单的标题、内容和下拉模式等属性[5],见图2和图3。
图2 人机交互界面图
图3 迭代法程序框图
3 使用方法和测试结果分析
3.1 使用方法
在天文定位计算界面,输入推算船位、观测时间、时区和观测高度等信息,然后点击“计算”,即可得出观测者的经纬度。
3.2 测试结果分析
在天气晴朗、能见度良好的情况下,在华为P20Pro手机上安装天文定位APP,多次对恒星进行观测,并进行定位计算。对比GPS定位信息与天文定位APP 的定位数据,平均误差约为3 n mile~4 n mile。定位计算选取3月~4月部分数据为例,定位结果见表3,推测经纬度为38°52.5′N、121°40′E。
表3 定位计算结果部分数据
表3 定位计算结果部分数据(续)
4 结论
针对天文定位手动查算表册的缺点,基于Android开发了天文定位APP,可快速方便比较准确进行天文定位。天文定位APP相较于高度差法方便快捷;相较于星敏感器、射电天文定位,天体定位APP在Android手机或平板上即装即用,价格低廉、便于携带。对比GPS定位信息与天文定位APP的定位数据,天文定位APP定位数据的平均误差为3 n mile~4 n mile左右。天文定位APP适用于在无基站信号和卫星导航信息情况下快速得到较为准确的定位信息。下步打算实现太阳移线定位和三天体定位功能。