2. 中国科学院云南天文台, 云南昆明 650011
2. Yunnan Observatories, Chinese Academy of Sciences, Kunming 650011, China
1 前 言
望远镜远程控制系统第二版[1, 2, 3](The Remote Telescope System 2nd version,RTS2)为Linux环境下开源的天文远程望远镜控制平台,由面向对象的C++语言开发,整个体系以服务和设备(设备本身是一个能驱动硬件的守护服务进程)为单元组成,紧紧围绕一个Centrald的中心控制程序,设备和服务与中心控制之间通过TCP/IP协议进行通信,向Centrald报告或者获取相应设备和服务的地址,同时将控制和访问指令发送给具体承办的进程,此类方式有助于搭建一个分布式环境,为不同环境下的设备拓展提供方便。
目前,RTS2 在框架中支持SBIG、Apogee、FLI、Andor等几种天文领域常见的CCD,在天文领域,还存在另外一些CCD无Linux环境下的支持,导致不能在RTS2框架中使用或者扩展,为了解决这一问题,本文利用Windows下DirectShow[4]的应用程序接口实现对CCD[5]的访问,借助Socket通信实现两种不同操作环境下的访问桥梁,从而实现一种新的基于异构操作系统环境下RTS2 CCD相机扩展。 1.1 DirectShowDirectShow[6]是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于组件对象模型(Component Object Model,COM)的主流媒体处理的开发包,曾与DirectX开发包一起发布,2005年4月从DirectSDK中移除,正式成为Windows的一个组件,部分DirectShow应用仍然需要Direct SDK支持。
DirectShow 使用一种叫过滤器图表(Filter Graph)的模型管理整个数据流的处理过程,运用DirectShow可以很方便地支持从Windows驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中,DirectShow组件、应用程序与Windows驱动模型图像获取设备之间的关系如图 1。
|
| 图 1 DirectShow 组件、应用程序与Windows驱动模型图像获取设备之间示意图 Fig. 1 A schematic diagram showing the connections between the DirectShow components,application routines,and WDM-supported image-acquisition devices |
通过这一技术,DirectShow能识别任何一款Windows驱动模型流类驱动的图像生成设备,由DirectShow提供各种滤镜实现基于Windows驱动模型的图像采集设备视频捕捉和设置的功能,并能对其进行控制。
1.2 SocketSocket[7]是一种基于TCP/IP协议的通信接口,可以实现进程之间稳定连接的点对点通信。套接字用于描述IP地址和端口,是一个通信链的句柄,一个套接字描述为一个通信连接的一端,在一个通信连接中的两端通信程序各自有一个套接字描述他们自己那一端。Socket利用客户/服务器模式巧妙地解决了进程之间通信连接的问题。
根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为3个步骤:服务器监听,客户端请求,连接确认。
(1)服务器监听:是服务器端套接字,不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态并等待响应。
(2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后向服务器端套接字提出连接请求。
(3)连接确认:是指当服务器端套接字监听到或者接收到客户端套接字的连接请求,就对客户端套接字的请求做出响应,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,就确定建立了连接,而服务器端套接字仍处于监听状态,继续接收其他客户端套接字的连接请求。
2 异构系统下CCD相机拓展实现在传统RTS2 中,CCD的控制是针对具体元器件在设备层的访问,包括对CCD参数的扩展以及设备的操作:开始曝光、结束曝光、判断曝光状态、读出数据。改变传统针对具体CCD设备的访问方式,继承原有属性及方法,借助Socket的通信功能,扩展一种基于异构操作系统的RTS2 CCD相机控制方法。RTS2中的虚拟组件SocketCCD并没有实际访问设备层的能力,只是通过网络连接并访问另一环境中的Socket通信的服务端,通过Socket通信控制访问具体的CCD,并获取采集的图像,在系统设计中,将带Socket通信客户端功能的虚拟RTS2 CCD名SocketCCD(下同),其框架如图 2 。
|
| 图 2 异构操作系统CCD扩展框架图 Fig. 2 A block diagram of extending CCD operations across different operating systems |
通过Socket通信技术可以实现不同机器、异构操作系统环境之间的通信,扩展Linux中的RTS2对Windows下CCD相机的控制。在Windows中,通过DirectShow开发技术,直接访问控制具有Windows驱动的CCD设备并获得实时采集图像。
2.1 异构操作系统CCD控制间通信协议SocketCCD与Socket通信的服务端之间建立Socket连接,中间通过协议进行访问,具体协议如表 1。
| 控制指令 | 协议 | 说明 | |
| 注:‘L’表示RTS2 SocketCCD;‘W’表示Windows CCD Server Note: In the second column ‘L’ represents the RTS2 SocketCCD and‘W’ represents the WINDOWS CCD Server | |||
| 开始曝光 | L->W | exp exposure=? gain=? xoffset=?yoffset=? width=? height=? | exposure为曝光时间;gain表示增益; xoffset为 x偏移;yoffset为 y偏移; width为图像宽度;height为图像高度 |
| W->L | exec ok/Failed | K表示执行成功;Failed 表示执行失败 | |
| 查询状态 | L->W | qry status | 查询状态指令 |
| W->L | isexposeing True/False | 为False时方可重新发送曝光指令或者获取图像,True时表示正在曝光 | |
| 获取图像 | L->W | get data | 获取图像指令 |
| W->L | binarydata\EOF | Binarydata为二进制图像 | |
L->W表示从Linux中运行的RTS2向Windows下的CCD控制程序发送指令,控制指令可以携带设定的曝光时间、增益、x偏移、y偏移、图像宽度、图像高度等参数;W->L表示Windows接收Linux发送的控制指令后执行相应的操作,并对处理的结果作出回应。框架的各个组成部分的时序图如图 3。
|
| 图 3 整体时序图 Fig. 3 The complete sequence diagram of CCD operations |
RTS2针对目前支持的CCD设备的组件继承关系[8, 9]如图 4 ,其中Apogee、Alta、andor、Fli、SBigUsb为具体的CCD型号。
|
| 图 4 CCD组件的继承关系 Fig. 4 The RTS2 inheritance relationships of CCD components |
Daemon为设备的守护进程,负责获取进程与进程间的通信,具体控制指令层层传递到终点(具体的设备)。在Rts2Core∷Camera中存在3个虚拟函数以备具体设备重新定义其实现,主要是针对具体的CCD进行曝光、状态判断、获取图像3个操作:
startExposure:检查曝光条件(判断CCD是否正在曝光,底座是否在移动),如果满足则发送曝光指令,否则继续等待;
isExposing:判断CCD是否处在曝光状态;
doReadout:读取CCD采集的图像,并且将获取的裸数据转换为fits文件或者其他格式的图像文件。
为了保证RTS2体系架构的完整性,扩展虚拟SocketCCD与其他具体的CCD控制程序一样继承于Rts2Core∷Camera,继承关系如图 5。
|
| 图 5 SocketCCD的继承关系 Fig. 5 The inheritance relationships for the SocketCCD |
在实现中为了满足与控制CCD的服务端的通信,需要在整个守护进程中增加两个参数,以保存控制CCD的服务端的IP地址和访问端口。
addOption (OPT_VIRTUALSERVER,"serveraddress",1,"控制CCD的服务端的IP地址");
addOption (OPT_VIRTUALSERVERPORT,"serverport",1,"控制CCD的服务端口");
在etc/rts2/devices中配置对应的CCD设备,camd rts2-SocketCCD增加--serveraddress IP地址--serverport端口号,保证SocketCCD能使用对应的IP地址以及端口访问具体CCD控制服务器。
实现步骤如下:
(1)启动SocketCCD时创建一个sockfd,与后面提到的控制CCD的服务端建立连接,减少程序中途建立连接造成的延迟;
(2)开始曝光startExposure函数实例化为向控制CCD的服务端发送曝光指令;
(3)查询曝光状态isExposing函数实例化为向控制CCD的服务端发送查询曝光状态;
(4)从控制CCD的服务端读取实时图像函数doReadout实例化。
2.3 利用DirectShow控制CCD的Socket通信服务端实现(1)枚举系统中的CCD 设备和过虑器。
(2)初始化接口并且创建Capture filter,设置CCD的状态值isExposing为假。
(3)启动端口进行监听。
(4)对于每一个连接访问,验证其合法性后分配一个线程为客户端服务。
(5)如果服务线程收到SocketCCD的曝光指令,则连接访问的CCD,开始启动视频流,设置isExposing状态为真,DirectShow获取视频流进行分解,并处理[10]其中的一帧作为采集的图像,存放于临时缓冲区,同时设置isExposing为假。
(6)如果服务线程收到SocketCCD的查询状态指令,则返回isExposing当前值,只有当isExposing为假时表示可以发送获取数据指令。
(7)如果服务线程收到SocketCCD的获取数据指令,则将目前采集的放在临时缓冲区的图像传回给SocketCCD,同时清空临时缓冲区。
3 测 试测试工作中,工作组有一台LX200-ACF天文望远镜,其主镜CCD型号为Lumenera SKYnyx USB 2.0 Camera。为了使SKYnyx Camera加入RTS2框架中,采用一台计算机进行部署,主机安装Windows系统,系统中运行安装有RTS2的Linux虚拟机,CCD设备直接接入计算机的USB口,这样可以验证CCD扩展框架是否可行。
具体设置为:(1)主机配置IP地址为192.168.10.2,控制CCD的服务端在端口8000监听; (2)在Linux中修改配置文件etc/rts2/devices,在camd rts2-SocketCCD的后面增加--serveraddress 192.168.10.2--serverport 8000,表示SocketCCD的服务程序在192.168.10.2机器的8000端口进行监听。设置C0里面的参数为:--width 640--height 480,表示读出的图像窗口大小为640 × 480,与Windows下CCD采集的图像大小一致;(3)将Lumenera SKYnyx USB 2.0 Camera指定为DirectShow控制的CCD设备。
调好望远镜的焦距,并启动系统,在Linux的终端下输入/etc/rts2 start命令启动整体框架,RTS2的所有设备或者服务启动正常,然后在Terminal 命令行中输入rts2-xfocusc -d C0 -e 1.6命令,其中-e 1.6表示设置曝光时间为1.6ms,看到运行结果如图 6 (2014年9月6日22点49分51秒拍摄于云南-昆明-呈贡),在Terminal左边的窗口显示实时采集的图像。
|
| 图 6 运行效果图 Fig. 6 screenshot showing running the CCD operations in the test |
在多次测试过程中,发现DirectShow技术控制CCD曝光时间的有效区间窄于此CCD物理支持的曝光时间区间,这说明此种技术框架在观测暗天体时存在不足。但在曝光时间有效区间内,通过RTS2命令行修改CCD的采集图像窗口大小、原点坐标、曝光时间等参数,最终获取的图像与其在Windows下自带的控制软件获取的图像保持一致,从而验证了框架能满足部分天文领域观测的需要。
4 结 论RTS2作为一个开源天文望远镜自主控制框架,稳定且易于扩展的特性使其应用更广泛。针对具体的CCD来说如果不再满足厂商驱动对异于Windows操作系统支持的情况,使其可用便成了一个难题。本文正是为了解决这一问题,在分析RTS2的源代码框架的基础上,设计一种基于异构操作系统的RTS2 CCD相机拓展方法:(1)DirectShow的广泛应用可以实现通用的CCD的控制和图像采集;(2)Socket通信扩展的CCD访问和控制也为对RTS2框架下异构操作系统中的设备控制具有参考意义;(3)在测试过程中发现采用DirectShow技术访问CCD在观测中存在一定的局限,有效曝光时间区间窄于其物理支持区间,无法发挥设备的最大效用,在暗天体观测中需要寻找新的实现手段。
总的说来,本文所实现的基于异构操作系统的RTS2 CCD相机扩展方法能满足部分天文观测的需要,其实现方式也对该框架下其他设备在异构操作系统下或者集群环境下的拓展有重要的参考价值。
| [1] | Kubánek P. RTS2: lessons learned from a widely distributed telescope network[J]. Astronomische Nachrichten, 2008, 329(3): 271-274. |
| [2] | Kubánek P, Jelínek M, Vítek S, et al. RTS2: a powerful robotic observatory manager[C] //Proceedings of the SPIE.2006. |
| [3] | Kubánek P, Prouza M, Cunniffe R, et al. Design of modular C++ observatory control system: from observatories to laboratories and back[C] //Proceedings of the SPIE.2010. |
| [4] | 刘波, 王建华, 倪鹏. 基于DirectShow的视频采集和传输[J]. 哈尔滨师范大学自然科学学报, 2009, 25(4): 72-74+85. Liu Bo, Wang Jianhua, Ni Peng. Video capture and transmission based on DirectShow[J]. Natural Science Journal of Harbin Normal University, 2009, 25(4): 72-74+85. |
| [5] | 程祖桥, 邓辉, 王锋, 等. 云南1米红外太阳塔分布式CCD实时控制与图像采集系统软件研制[J]. 天文研究与技术——国家天文台台刊, 2012, 9(4): 426-431. Cheng Zuqiao, Deng Hui, Wang Feng, et al. Design of the distributed real-time control and image-acquisiton software system for the YNAO 1m solar telescope[J]. Astronomical Research & Technology——Publications of National Astronomical Observatories of China, 2012, 9(4): 426-431. |
| [6] | 汪春杰, 李明禄, 吴凡. 基于DirectShow的虚拟摄像头开发框架[J]. 计算机工程, 2009, 35(16): 253-255. Wang Chunjie, Li Minglu, Wu Fan. Development framework of virtual camera based on Direct Show[J]. Computer Engineering, 2009, 35(16): 253-255. |
| [7] | 周西峰, 陆鹏, 郭前岗. 利用socket实现Windows与Linux平台间的网络通信[J]. 微型机与应用, 2013(18): 49-51. Zhou Xifeng, Lu Peng, Guo Qiangang. Realization of network communication between Windowsand Linux based on socket[J]. Microcomputer & Its Applications, 2013(18): 49-51. |
| [8] | Kubánek P, Prouza M, Kotov I, et al. Use of RTS2 for LSST multiple channel CCD characterisation[C] //Proceedings of the SPIE.2012. |
| [9] | 卫守林, 陈亚杰, 梁波, 等. RTS2中新CCD类型扩展方法[J]. 天文研究与技术——国家天文台台刊, 2014, 11(3): 281-286. Wei Shoulin, Chen Yajie, Liang Bo, et al. Methods of constructing new CCD classes in the RTS2[J]. Astronomical Research & Technology——Publications of National Astronomical Observatories of China, 2014, 11(3): 281-286. |
| [10] | 陈勇, 杨佳义, 谢正祥, 等. DirectShow框架下对比度分辨率补偿的视频挖掘[J]. 激光与红外, 2011, 41(8): 932-935. Chen Yong, Yang Jiayi, Xie Zhengxiang, et al. Video mining based on DirectShow and contrastresolution compensation[J]. Laser & Infrared, 2011, 41(8): 932-935. |


