天体高度观测App 设计与实现

2022-02-13 11:53吴浩周爱军
传感器世界 2022年11期
关键词:天体加速度观测

吴浩 周爱军

1.海军大连舰艇学院学员五大队,辽宁大连 116018;2.海军大连舰艇学院航海系,辽宁大连 116018

0 前言

传统天文航海定位方法通常是利用六分仪测量某一时刻多个天体的高度,或某个天体多个时刻的高度,然后通过“高度差法”得到测者位置经纬度。这种定位方法的信标为自然天体,具有设备简单、不受电磁干扰等优点。现在电磁环境日趋复杂,卫星导航和无线电导航等系统容易受到干扰,天文定位因其自主性好的独特优点具有重要保底作用。但是,传统六分仪观测天体高度存在以下不足:一是六分仪观测天体高度必须要能同时看清天体和水天线,观测时机大为受限,如测星只能在晨光昏影时段;二是对观测的高度值需要进行蒙气差、眼高差等一系列修正,且靠手工查算表册,过程繁杂,容易出错,观测天体高度的速度和精度非常依赖测者的业务能力,需要花费较大精力进行经常性训练。移动智能平台(手机或平板电脑)和传感器技术的快速发展,为实现开发天体高度观测App 提供了软硬件支持。针对传统方法用六分仪观测天体高度的存在问题,开发了一款基于Android 平台的天体高度方位观测App,在不借助手机基站信号和卫星导航信号的前提下,利用手机传感器观测天体得到高度值。

1 天体高度观测原理

Android 手机以价格低廉,便于携带,硬件性能良好等特点被广泛使用,其带有加速度、磁场、陀螺仪、光学和压力等多种传感器[1]。手机或平板内的传感器一般都是大规模集成电路芯片,除了传感器还包括信号调节、数据处理和通信电路。其中,加速度传感器常被用于测量物体受到重力在内的外力所产生的加速度[2]。单轴加速度传感器计算角度采用正弦或余弦函数,灵敏度是非线性的。三轴加速度传感器计算角度采用反正切函数,某个轴的输出与另两轴的输出平方根进行比较,可以稳定灵敏度[3]。

以华为P20Pro 手机为例,加速度传感器和陀螺仪的芯片为ICM-20690。ICM-20690 芯片尺寸为2.5 mm ×3 mm×0.91 mm,集成了一个三轴陀螺仪和一个三轴加速度计,在不需要参照静止坐标系前提下,可分别测量角速度和线加速度,并可通过处理测量所得数据跟踪运动物体的位置和方向,其加速度传感器的性能指标如表1 所示[4]。

表1 ICM-20690 加速度传感器性能指标

手机内置的加速度传感器一般使用三维坐标来确定角度和方向。当手机屏幕朝上平放时,与手机屏幕垂直的为z轴,与手机屏幕在同一平面且互相垂直的分别为x、y轴,如图1 所示。加速度传感器在x、y、z轴的输出分别为AX、AY和AZ。

天体高度观测的实质是角度测量,因此可使用手机内置加速度传感器测量天体高度。首先通过光学摄像头瞄准天体,并使其位于十字准星点上;调整手机姿态,使手机的上下边缘与水平面基本平行,相当于手机摄像头的CCD 平面垂直于天体光线;采用反正切函数进行角度计算,计算公式为:

其中,θ为加速度传感器内部轴线(y轴)与铅垂线的夹角;AX、AY和AZ分别为加速度传感器在x、y、z轴的输出。同时,程序检测重力在手机坐标系x轴方向上加速度分量AX是否近似为0,当AX近似为0 时,进行角度计算,计算公式简化为:

观测天体高度原理如图2 所示,手机坐标系z轴与铅垂线的夹角α为天体顶距,天体高度h和θ均为α的余角,因此天体高度h等于θ。

2 观测天体高度功能设计与实现

天体高度测量功能主要利用手机内置光学传感器(相机)、加速度传感器来实现。程序框图如图3 所示,首先选择所观测的天体,便于数据存储;然后实例化相机和加速度传感器;将手机对准天体,计算并显示天体高度。

Android 系统中调用加速度传感器是通过调用getSystemService 函数,传递TYPE_ACCELEROMETER参数,并设置传感器事件监听器来回传加速度传感器的值,具体分为四个步骤:

第一步是获取传感器实例,在Activity 中声明一个sensorManager 传感器管理对象为mSensorMgr,并调用getSystemService 函数,从系统服务SENSOR_SERVICE 中获取传感器实例;

第二步是注册传感器监听器,重写Activity 的onResume 函数,在该函数中注册加速度传感器,指定监听的传感器类型为加速度传感器,关键代码如下:

mSensorMgr.registerListener(this,

mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),

SensorManager.SENSOR_DELAY_NORMAL);

第三步是编写传感器事件监听器,传感器事件监听器是继承自SensorEventListener 的类,该类需实现2 个函数,分别是onSensorChanged 和onAccuracyChanged。onSensorChanged 函数用来感应加速度传感器的输出变化,并将业务逻辑包含在内,即依据加速度的值计算天体高度。onAccuracyChanged函数在加速度的精度改变时触发,一般不处理;

第四步是重写Activity 的onPause 函数,在该方法中注销加速度传感器监听事件。

Android 手机光学摄像头的调用采用了Camera 类联合表面视图SurfaceView 的方法,即使用Camera 类调用光学摄像头,并将获取的图像呈现在SurfaceView上。手机上传感器的实例化方法是通过Sensor 类定义一个传感器的对象,创建sensorManager 类的对象进行实例化,再创建一个继承SensorEventListener 类的OrientationListener 类,以实时回传传感器的数据变化。

3 数据存储功能设计与实现

Android 手机数据库主要是通过SQLite 语句实现的。SQLite 语句是嵌入式的轻型数据库,不涉及复杂的数据控制操作,只需用到数据定义和数据操纵两类语句[5]。SQLite 语句可以不声明具体数据类型,支持整型INTEGER、长整型LONG、字符串VARCHAR、浮点型FLOAT,但是不支持布尔类型数据,布尔型可以采用整型保存。通过SQLiteOpenHelper 类来具体使用SQLite 语句进行数据库操作。新建一个继承自SQLiteOpenHelper 的数据库操作类,并重写onCreate方法,以创建一个新的表结构。数据库读连接可调用getReadableDatabase 方法获得,数据库写连接可调用getWritableDatabase 方法获得,调用数据库实例的close 方法关闭数据库。

4 使用方法和测试结果分析

4.1 使用方法

观测天体高度应在海况良好,天气晴朗,光污染足够小的情况下进行。首先,点击“预览”按钮,屏幕显示光学摄像头获取的画面;再点击“十字准星”按钮,屏幕中央显示十字准星;然后将十字准星对准需要观测的星体;点击测星界面的“记录”按钮,天体的高度信息将被记录在数据库内,点击App 下方的“记录”按钮即可查看已经记录的高度信息;在天文定位计算界面,输入推算船位、时间等信息;然后点击“计算”,即可得出观测者的经纬度。天体高度测量界面如图4 所示。

4.2 测试结果分析

在天气晴朗,能见度良好,光污染足够小的情况下,用华为P20Pro 手机安装App,并多次对恒星进行观测。考虑天体高度观测时间及间隔较短,忽略因周日视运动会引起天体高度随时间的变化。对比星图模拟软件Stellarium 与天文定位App 观测天体高度的测量数据,平均误差为3'~4'左右。因篇幅限制,选取高度为低、中、高的三组典型观测结果为例,测者经纬度为38°52.5'N、121°40'E,观测结果如表2 所示。

表2 观测天体高度部分数据

4.3 误差产生原因与后续提高准确度的措施

实践证明,用手机及其内置传感器测量天体高度是可行的,但与用六分仪相比,误差偏大,分析原因如下:

(1)手机内置方向传感器精度偏低。手机不是专业的测量工具,从用户需求和控制成本的角度出发,生产商没有采用高精度器件。未来可以考虑外置高精度传感器,传感器模块体积很小,功耗很低,可以用专用夹具固定在手机上,需要做好与摄像头等组件的校准配合工作,Type-C 接口可用于数据传输和为模块供电;

(2)尽可能地提高光学摄像头工作时的姿态稳定度,可以更快、更准地捕捉天体。一方面,在持握手机时,最好双手持握,手肘或身体依靠固定物体;另一方面,选用摄像防抖效果好的手机,最好具有光学(OIS)和电子(EIS)双重防抖功能,有条件时可使用手持式手机稳定平台;

(3)尽量使用上中天附近的天体。这时天体高度的变化速度最慢,可以短时间内多次测量,对测量值进行适当滤波,提高测量值准确度;

(4)注意高度校准。可以利用高度比较固定的天体,如北极星(勾陈一),测量其高度值与标准值比对,得到零位误差,类似六分仪的指标差,用于修正测量高度。

4.4 数据滤波处理

考虑到天体高度观测时间及间隔较短,忽略因周日视运动引起天体高度随时间的变化,将观测时的天体高度视为恒值。因此可采用线性卡尔曼滤波方法对观测高度进行数据处理,以每秒为单位对高度进行采样。引入过程噪声W(k),其方差为Q,Q为0.01。因为系统是一维且高度近似不变,所以状态转移矩阵为1,噪声驱动矩阵为1,系统的状态方程为:

其中,状态X(k)是k时刻的天体高度;状态X(k-1)是k-1 时刻的天体高度;W(k)为过程噪声。

由积累的测量数据可得测量平均误差大概为0.07°(4'),平均方差为0.5。测量噪声为V(k),其方差R=0.5。观测矩阵H为1,测量方程为:

其中,Z(k)是k时刻天体高度的观测值;V(k)是测量噪声。

状态预测方程、增益方程、偏差方程分别为:

其中,(k)为k时刻天体高度的估计值;(k-1)为k-1时刻天体高度的估计值;K为卡尔曼增益。

其中,P(k|k- 1)=为天体高度预计偏差值;Q为过程噪声W(k)的方差。

其中,P(k)为k时刻的天体高度偏差值。

以2022 年4 月10 日对大犬座α观测结果为例,使用MATLAB 进行编程验证,如图5 所示。从仿真结果可知,卡尔曼滤波可以有效降低噪声对高度测量的影响。

4.5 其他注意事项

观测太阳时,应在镜头前加装巴德膜进行减光,避免强光损坏光学摄像头组件。高度修正时,太阳、月亮当日视半径来自PyEphem 星历表[6]给出并由程序自动进行。PyEphem 库是一个Python 环境下天文历法计算的第三方库,由埃尔伍德·查尔斯·唐尼(Elwood Charles Downey)编写,采用VSOP87 行星理论,其精度在1 角秒左右,足以满足天文航海所要求的0.1角分的精度。

5 结束语

基于Android 手机传感器开发了天体高度观测App。原理上,高度值是利用天体与测者铅垂线之间的夹角得到的,克服了对水天线的依赖,观测时机大大增加,测星不再局限于晨光昏影时间;观测区域更加广泛,在看不到水天线的陆地也可进行。App 嵌入了星历库,可以对天体高度观测值自动修正。由于是以测者铅垂线为基准,没有眼高差,折光差也大幅减小,而这两项修正量在传统方法中占了很大比重。

未来,App 还有进一步提高精度,增加更多功能的潜力,伴随传感器技术及相关理论算法的不断进步,最终,智能移动平台(手机或平板电脑)将可能成为有一定实用价值的天文定位仪。

猜你喜欢
天体加速度观测
小天体环的轨道动力学
“鳖”不住了!从26元/斤飙至38元/斤,2022年甲鱼能否再跑出“加速度”?
太阳系中的小天体
测量遥远天体的秘籍
一分钟认识深空天体
天际加速度
天文动手做——观测活动(21) 软件模拟观测星空
创新,动能转换的“加速度”
死亡加速度
2018年18个值得观测的营销趋势