本文的三位作者正阳、海洋、阿力,是来自不同公司的工程师,在Agora RTC Hack 上海站编程马拉松上,开发了一款可实时视频远程看房的智能小车。本文将从方案设计、硬件开发、Android 端开发、服务端部署,详实分享他们的开发经历。
创意构思
此前听到多很多次“黑客马拉松”这样的活动,一群来自不同地方的人聚在一起,组队、构思、开发,在48小时内做出产品雏形。我们三人抱着去听听别人的创意,重在参与的想法参加了这次比赛。对于想要做的东西,在比赛前也只是有一个大概的方向:
- 构思的方向依据我们擅长的部分来组合拼接,这就得说到我的两位给力队友海洋、阿力;海洋是嵌入式软件工程师,汽车电子方向,写个驱动做个小车手到擒来。阿力是后端工程师,具备处理服务器端和前端页面的能力。
- 于是队伍有了嵌入式和云端两部分的能力,技术构思的方向是云端为嵌入式赋能。希望有一个小车,小车可以传递回视频图像,视频图像可以实时传给多个用户,用户在得到授权之后,实现远程对小车的操控。
方案设计与分工
出于这样的构思,实现架构如上图所示。现在有了一个基本架构,也清楚了我们要实现的功能,接下来就是分工了。考虑到我们各有所长,分工如下:
分工 | 人物 | 实现目标1 | 实现目标2 |
---|---|---|---|
小车驱动与摄像头端 | 海洋 | 使用 Android系统,完成摄像头驱动 | 在 Android系统中加入驱动,解析运动控制信号,实现小车运动 |
车载APP与用户APP | 正阳 | 将摄像头采集的视频传递出去,解析服务器信令,给小车发送运动信号 | 用户可以通过手机查看小车视频,并控制小车 |
服务器端与web前端 | 阿力 | 将视频传输服务器挂到公网上,用户可以用输入网址的方式查看小车视频 | 提供web前端,用户可以通过网页控制小车 |
从硬件开发开始
小车采用了是4轮伺服电机驱动,搭配有视频采集模块、伺服电机驱动模块、STM32控制模块和摄像头云台模块,安装后整体效果图如下:
用户在远程操控小车各种动作之前,需要小车通过wifi连接到互联网。用户可以通过上位机(Android APP 或网页前端)控制小车前后左右移动或控制云台调整摄像头方向。
视频采集模块包含有wifi模块,可以连接到wifi热点为视频传输提供网络基础。也提供HDMI接口与显示器连接,方便用户调试。摄像头通过USB的方式与视频采集模块连接,我们采用免驱动的天敏6602型号摄像头,分辨率可以达到640*480,并能够自动调焦。
STM32控制模块采用 Arduino 接口与伺服电机驱动模块连接,STM32模块负责控制电机、云台信号的产生,并由伺服电机驱动模块直接驱动电机工作。伺服电机输入电压为6~12V,直流驱动。
工作原理
小车上的视频采集模块采用了定制的 Android 系统,提供网络连接、指令转发和视频流采集、传输功能。当上位机通过远程服务连接到小车后,上位机可以请求到当前小车摄像头上的视频信息;同时,视频采集模块也将上位机上传来的控制信号解析为指定格式和功能的协议数据,并通过串口发送到 STM32控制模块。
小车上的STM32控制模块在接收到相关控制信号后,调整输出脉冲信号的占空比,由驱动板转换输出电平后直接控制伺服电机或云台模块做出相应的动作,从而完成上位机用户想要的操控功能。
控制信号协议
对于只需要实现简单的小车控制的话,我们只需要实现通过串口向 STM32控制模块发送控制信号即可,简单的控制信号协议如下:
命令类型 | 包头 | 类型 | 命令 | 数据 | 包尾 |
---|---|---|---|---|---|
停止 | FF | 00 | 00 | 00 | FF |
前进 | FF | 00 | 01 | 00 | FF |
后退 | FF | 00</ |