ETSIIT技术挑战赛:从学生到创业者的Locaviewer之路
一年前我们踏上IV ETSIIT技术挑战赛(视频)。我们是谁?西班牙格拉纳达大学电气工程与计算机科学专业四名学生。
团队Prometheus赢得RTI赞助的Tech Challenge。4-5人团队需针对外部合作伙伴提出的真实问题创建产品。当年主题:"多智能体视频分布式系统"。
参赛初衷是获取实战经验。一年后,仍在就读的我们发现商机,设计竞品Locaviewer,制定市场策略,构建工作原型——除完成学业外全额外完成。
Locaviewer
许多家长担心孩子在幼儿园健康与进展。Locaviewer给家长提供孩子实时可视化。我们制作宣传视频展示方案,源码MIT许可开源于GitHub。
团队组织与进度
项目耗时约250小时。每周固定4小时会议,冲刺月增至周20小时。为效率分两子团队:一组攻室内蓝牙定位算法,一组负责视频采集、编解码、通过RTI Connext DDS分发。
定位算法
核心是定位幼儿园内每个孩子。每童佩戴蓝牙传感器腕带,持续向墙壁固定接收器上报接收信号强度指示(RSSI)。我们将RSSI映射为距离,建立可靠关系。
RSSI读数传至微型计算机(树莓派或MK802 III)运行三角测量算法定位每童。知晓摄像头位置,可为每童选择最优摄像头。
视频录制应用
采用GStreamer for Java处理实时视频采集、编解码、显示。替代方案vlcj不支持树莓派或不满足延迟需求。经大量调研,GStreamer合适,允许通过AppSink和AppSource元素访问编码视频缓冲并发布至DDS主题。
选用VP8 (WebM)编码器。因Java封装兼容GStreamer 0.10,降低分辨率适配平台约束。测试配置用树莓派,计划迁移MK802 III获更强算力保持成本相当。
创建VP8编码器Java片段:
Element codec = ElementFactory.make("vp8enc", null); codec.set("threads", 5); codec.set("max-keyframe-distance", 20); codec.set("speed", 5); Element capsDst = ElementFactory.make("capsfilter", null); capsDst.setCaps(Caps.fromString("video/x-vp8 profile=(string)2"));
客户端管线配置:
VP8解码器Java代码:
String caps = "video/x-vp8, width=(int)320, height=(int)240, framerate=15/1"; Element capsSrc = ElementFactory.make("capsfilter", null); capsSrc.setCaps(Caps.fromString(caps)); Element queue = ElementFactory.make("queue2", null); Element codec = ElementFactory.make("vp8dec", null); Element convert = ElementFactory.make("ffmpegcolorspace", null);
尝试JPEG编码,但包体积大导致实时流不切实际。
DDS架构
发布订阅模型为核心,免去手动管理Socket连接。我们通过自研封装库DDStheus抽象DDS交互。
最终系统包含六程序共享三主题,用三语言实现:
- Python处理底层蓝牙。
- MATLAB/Octave跑三角测量脚本。
- Java集成RTI Connext DDS与GUI开发。
需获取房间内所有RSSI值,编写脚本配置接收器采集数据。经本地Socket转发至Java程序,发布至传感器数据主题,含儿童ID(传感器MAC)、接收器ID、位置、当前房间(过滤键)、RSSI值、过期时间。
视频采集编码后,Java程序Gava通过视频数据主题传流,标记摄像头ID与房间信息。利用ContentFilteredTopic按摄像头位置和房间过滤流。
摄像头元数据——ID、房间、位置——存储在各发布者USER_DATA QoS字段。三角测量微机可发现房间内所有摄像头,实时检测新增/离线摄像头,动态调整选择算法。
最后将传感器与视频数据聚合至儿童数据主题。房间服务器(树莓派或MK802 III)三角测量定位并选最优摄像头。按房间过滤传感器,获取摄像头信息,运行Octave脚本计算儿童位置与最优摄像头,发布至云端。儿童ID与视频质量作过滤键实现高效订阅。
为优化资源,房间服务仅当订阅者请求特定儿童数据时执行三角测量脚本,通过订阅者发现与ContentFilteredTopic过滤器判定。
还实现容错机制:各微机在USER_DATA发布优先级ID。最低ID节点成活动服务器,直到更低ID节点加入。
用户应用
开发两个终端应用。一供家长实时查看孩子。二供幼儿园员工监控所有摄像头、管理家长权限、自动考勤。
结语
面临两大挑战:
- 从低成本蓝牙设备(~$5)获准确RSSI。开发算法将定位误差从3米降至0.5米。Java缺底层蓝牙支持,通过Python(pybluez)与Java交换数据解决。
- 优化视频编码。难找暴露编码缓冲的库,树莓派上调优GStreamer 0.10具挑战。最终配置达3-5秒延迟。替换为MK802 III(Wi-Fi+双核Cortex-A9)将提升性能。
RTI Connext DDS处理网络、序列化、QoS为我们节省大量精力。感谢工程学院与RTI提供机会与资源,让我们成功攻克此商业挑战。
了解更多:
自动驾驶汽车生产 »
自动驾驶系统连接性 »
什么是IIoT? »
什么是DDS? »
物联网技术