一种基于异构操作系统的RTS2 CCD相机扩展方法
梁波1, 袁智1, 邓辉1, 卫守林1,2    
1. 昆明理工大学云南省计算机技术应用重点实验室, 云南昆明 650500;
2. 中国科学院云南天文台, 云南昆明 650011
摘要: RTS2 作为远程望远镜控制的开源框架, 在天文自主观测领域得到了广泛的应用,在观测仪器中, CCD 是天文望远镜系统中一个必不可少的组成部分。在实际工作环境中, 部分CCD 在Linux 操作系统下缺乏支持, 致使该设备无法在RTS2 框架中协同工作, 在无替代CCD 的情况下导致整个望远镜系统无法正常使用。借助Windows 下的DirectShow 技术对视频设备的支持, 在Linux 与Windows 异构操作系统间利用Socket 通信技术建立访问控制桥梁, 从而扩展出一种新的CCD 类型。通过测试, RTS2 能借助该设备控制Windows 下的CCD, 并实时获取图像, 研究取得了一定的成果:(1) 使用DirectShow 技术控制和访问Windows 驱动模型(Windows Driver Model, WDM)的所有CCD 获得一种通用的CCD 访问方式;(2) 借助Socket通信进行延伸对RTS2 框架下的其他类型设备在异构操作系统下扩展具有参考意义。
关键词: 异构操作系统     RTS2     CCD     DirectShow     Socket    
A Method to Extend CCD Operations across Different Operating Systems in the RTS2
Liang Bo1, Yuan Zhi1, Deng Hui1, Wei Shoulin1,2     
1. Key Laboratory of Applications of Computer Technologies of the Yunnan Province, Kunming University of Science and Technology, Kunming 650500, China;
2. Yunnan Observatories, Chinese Academy of Sciences, Kunming 650011, China
Abstract: As an open-source framework for remote telescope control with a Linux operating system, the RTS2 has been widely used in automatic observation using astronomical telescopes.Among various instruments a CCD is an essential part of an astronomical telescope system.However, there is a lack of technical support for operating CCD devices of a number of types under practical Linux environments, causing such a CCD device not functioning in the RTS2 framework.Without a replacement CCD the entire telescope system will be useless.Based on the function of the DirectShow technology in supporting video equipments under a WINDOWS operating system, we propose a method to use a Socket to establish communications between a Linux environment and a WINDOWS environment, so as to extend operations of a CCD into the LINUX environment.We have found from our test that a CCD device working under the WINDOWS but with its operations extended using our method can be controlled in the RTS2 to obtain real-time images.Our research has certain achievements:1) A commonly applicable method using the DirectShow is realized to access and control any CCD supported by a WINDOWS Driver Model.2) The extension of CCD operations within the RTS2 framework through Socket communication provides rather valuable reference for incorporating equipments of other types in a system with heterogeneous operating systems.
A system with heterogeneous operating systems     RTS2     CCD     DirectShow     Socket    

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 DirectShow

DirectShow[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 Socket

Socket[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

表 1 扩展CCD控制协议 Table 1 The control protocols for extending CCD operations
控制指令 协议 说明
注:‘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
2.2 SocketCCD实现

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.6ms,看到运行结果如图 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.
由中国科学院国家天文台主办。
0

文章信息

梁波, 袁智, 邓辉, 卫守林
Liang Bo, Yuan Zhi, Deng Hui, Wei Shoulin
一种基于异构操作系统的RTS2 CCD相机扩展方法
A Method to Extend CCD Operations across Different Operating Systems in the RTS2
天文研究与技术, 2015, 12(4): 466-472.
ASTRONOMICAL RESEARCH & TECHNOLOGY, 2015, 12(4): 466-472.

文章历史

收稿日期: 2014-11-19
修订日期: 2014-12-12

工作空间