视频输入模块(VIM)

设置VIM

作为VIM使用的视频源定义在一个首选项文件里,文件名为"VideoInput.xml"(在"AL_DIR/preferences"里)。目前,三个视频器件可作为视频源使用:

  • NAOCam:标准NAO摄像头(只能在机器人上使用)
    注释:

    有关如何在摄像头之间进行切换,请参见修改摄像头参数 一节。

  • SimulatorCam:Webots里NAO看到的事物(只能在桌面上使用)
  • FileCam(测试版):重放从任一视频器件抓取的片断(可在机器人和桌面上使用)

访问VIM

VIM是唯一的,它向一个器件提供访问,并通过其名称来识别(默认名为NAOCam)。如果要求的VIM不存在,那么代理程序会返回一个错误信息,GVM必须对之进行处理。如果一切正常,就会返回一个该器件代理的指针。

VIM的状态

  • 通过调用startFrameGrabber,即便没有注册的GVM,VIM也可以采集视频源流。这样,必要时,就可以把视频器件设定为GVM将会需要的格式,来快速运行第一个GVM。
  • 一旦有一个GVM注册至VIM后,如果startFrameGrabber尚未运行,它就会自动开始运行。
  • 在注册一个新GVM或是改变其中一个GVM的参数时,VIM会分析最低共同要求。必要时,它可以改变视频源流的格式。在这一情况下,视频源器件和驱动程序可能会停止,以便使用新的设定、重新启动。
  • 运行了数据采集后,当不再有订阅的GVM时,需要显式调用stopFrameGrabber,才能停止采集(因为有时可能会需要继续运行采集,以便在以视频源格式订阅一个模块时,可以更快地开始运行)。

VIM的作用有哪些?

VIM管理视频源。例如,如果视频源是NAO的摄像头,那么VIM就会:

  • 通过I2C总线打开摄像头器件
  • 在流模式下运行V4L2驱动程序(驱动程序将创建一个n个元素的循环缓冲区来抓取视频流)
  • 接收来自GVM的订阅,为每个订阅创建一个存储原始数据的ALImage,以及一个存储转换数据的ALImage
  • 当一个GVM要求图像时,选择要提供的图像,这取决于另一个GVM在近期是否要求了同样类型的图像
  • 管理所有要求器件进行的改动(如新的增益设置),或修改GVM的参数(如一个新的色彩空间),以及管理这些变动给视频源和/或驱动程序带来的影响(如将QVGA改为VGA)
  • 当一个GVM注销时,删除相应的ALImages,并查看是否可以优化其余模块器件和驱动程序的设定
  • 当接到命令或不再有GVM订阅时,停止驱动程序,关闭视频器件

SimulatorCam和FileCam在运行时,除了没有I2C交流和V4L2驱动程序外,其它方面都与此相似(一个循环缓冲区被用来模拟V4L2驱动程序的缓冲区,SimulatorCam的视频流被转化为YUV422格式,以保持与运行中的视频器件的一个抽象层)。

要了解更多VIM如何根据GVM的需要调整视频流,请参见下节。





Copyright © 2010 Aldebaran-Robotics - 版权所有