如图3所示,本地控制系统将采集的一帧视频数据使用MPEG4或M-JPEG协议进行压缩编码;然后按照一定的大小(一般比MTU稍微小点,因为IP和UDP包头要占用一定的字节数)对编码后的视频数据进行分块,并使用视频数据协议进行数据块的封装;最后使用UDP协议发送到远程控制平台。其中时间戳用于表明这些数据块属于同一视频帧,数据块序号用于表明该数据块在此帧中的位置。
由于UDP协议的不可靠性会引发包的乱序、重复包以及丢包等情况,所以远程控制平台采用多级缓存池接收视频数据。该缓存池是一个可以容纳0。2s~0。4s视频数据的多级缓存,每一级是一个缓存链表,用于存储具有相同时间戳的所有数据块。
该多级缓存池的基本算法是:
(1)当接收到的数据块的时间戳在多级缓存中不存在时:如果该时间戳比缓存中最旧的时间戳要新,则在多级缓存池中插入属于该时间戳的缓存链表,在该链表中加入该数据块,并删除时间戳最旧的数据链表;如果该时间戳比缓存中最旧的时间戳还要旧,就丢弃该数据块。
(2)当接收到的视频数据块的时间戳在多级缓存中存在时:检查该时间戳对应缓存链表,通过该数据块序号判断该数据块是否存在该时间戳的缓存链表中。若不存在就加入该数据块,否则丢弃。
(3)当接收到的数据块使得同一时间戳的视频数据完全收到,就将其解码并显示,然后释放包括该时间戳在内的、所有小于该时间戳的缓存链表。
视频的压缩标准采用MJPEG或者MPEG4。MJPEG属于帧内编码,传输中发生丢帧不会影响其他的帧;而MPEG4属于帧间编码,传输中发生丢帧,特别是关键帧的丢失将严重影响其他帧的完整。所以在实际的系统设计中,如果网络的通信状况很好,则选择MPEG4,因为它的压缩比高;如果网络的通信状况很差,则选择MJPEG,虽然压缩比相对较小,但是发生丢帧时不会影响其他帧。
在接收视频数据的同时,应根据时间戳和序列等进行视频传输状况统计,主要是丢包及延时统计。根据统计信息,当视频传输状况发生了明显变化时,就发送调节视频质量的命令给本地控制系统:
(1)当传输的状况变差(如丢包、延时严重等)时就给本地控制系统发送降低视频质量的命令,使其降低视频采集的频率或者提高压缩比率。至于是降低视频采集的频率还是提高压缩比率,将根据当前机器人的移动速度来决定:当机器人移动较快时,并不需要非常高的画面质量,所以优先采用提高图像压缩比率的方法。当只提高压缩比率效果不明显时,再同时采用降低视频采集频率的方法;当机器人移动速度很慢时如抓取东西时,需要更高的视频清晰度,此时优先采用降低视频采集频率的方法。当只降低视频采集频率效果不明显时,再同时采用提高压缩比率的方法。
(2)同理,如果传输的状况较好,则可以发送提高视频质量的命令给本地控制系统,根据移动速度决定采取优先提高视频采集的频率或者优先降低压缩比率的方法来提高视频的质量。
4机器人远程控制系统开发库
4。1目的与用处
提供一套使开发者摆脱编程细节的、快速开发的、模块化的、可扩展的机器人远程控制开发库,可以方便研究人员进行软件的开发,降低其在软件编程方面的重复劳动。
4。2设计原则
(1)采用面向对象的思想,以C++类进行设计,并将类封装到动态链接库中。
(2)开发库具有多选择性,使开发库的使用者有多种技术可选,如提供多种视频编码库。
(3)在类中对多线程进行封装,并加入线程的同步,使类具有线程安全性。
(4)函数中的算法要力求效率高、运算速度快,以减少因为占用过多的计算时间造成的网络时延。
(5)类中定义的接口应设计完整,不可随便改动,以保证今后升级和扩展时接口的一致性。
(6)类的代码要多采用基本C/C++标准库函数来开发,而尽量不要使用依靠平台的如MFC库,以方便移植到Linux平台。
4。3开发库CyLib介绍
图4是依照以上设计原则设计的机器人远程控制系统开发库CyLib的类层次图。该库由4个动态链接库文件组成:CyCore。dll、CyTools。dll、CyRobot。dll、CyGUI。dll。其中基类加阴影显示,其他的为派生类。
图4开发库的类层次图
图5远程控制平台
CyCore。dll封装了应用层数据包协议、远程控制命令、数据传输接口、延时及丢包模拟等。
CyRobot。dll包含了对机器人编程接口ARIA的封装、控制指令的执行、状态数据的轮询和发送、视频的采集压缩发送以及色彩识别、漫游等智能控制功能等。
CyTools。dll提供了一系列的工具类用于辅助研究人员的程序开发。其中包含线程进程同步类、时间类、算术类、日志功能、压缩解压缩、加密解密、视频采集等。
CyGUI。dll提供了图形化显示类,如多功能按钮、地图生成、声纳图形显示等。
5开发实例
根据以上的系统结构设计并利用开发库CyLib,开发了一套P3-DX机器人远程控制系统。图5展示了机器人远程控制平台的控制现场。该平台实现了机器人本体、机械臂和摄像头的控制、状态数据的显示、声纳罗盘数据图形化显示、视频监控以及自动漫游、色彩识别等智能控制功能。机器人本地控制系统的软件开发为车载计算机的一个Windows2000常驻服务程序。它实现了命令的解析和中转、智能任务控制的执行、状态及视频数据的采集、打包、发送等功能。
本机器人远程控制系统开发库目前还不够完善,需要继续改进和扩展。最后介绍的开发实例基本达到了设计的要求,但是部分高级任务如机械臂智能控制、自主控制等尚未完成,需要进一步加以研究和开发。