引言
科学技术的飞速发展推动了机器人技术的不断发展和广泛应用。在现代社会生活中复杂的应用需求越来越多,如军事侦查、高危环境巡逻、特殊环境拍摄等。远程遥控侦察定位机器人系统可以胜任特殊环境中的特殊需求。本系统以PandaBoard开发板作为机器人的控制核心,能够实现网络通信、机器人姿态控制、机器人位置信息处理。远程遥控终端由PC机和北通阿修罗遥控手柄构成,PC机获取遥控手柄的遥控数据并打包,通过网络发送给机器人,并且获取视频图像数据和机器人地理位置信息,实现机器人的控制、视频监控和地理位置监视。
1 硬件平台
系统硬件部分主要由PandaBoard开发板、GPS定位开发板、立体视频监控云台、PC机构成。
1.1 机器人整体结构
机器人整体由机器人车体、摄像头云台、电源控制板、电机驱动控制板、PandaBoard核心控制板5部分组成。机器人车体为飞思卡尔智能车竞赛指定车模。摄像头云台有两组MG946R舵机构成,可以实现上下左右四维角度调节。摄像头为奥尼ANC网络摄像头,可以采集YUV和RGB格式的图像数据。电源模块主要完成将8 V电池电压降为5 V和6 V电压,分别供给PandaBoard开发板和MG946R舵机。电机驱动模块用BTS7960电机驱动芯片设计。机器人整体结构如图1所示。
图1 机器人整体结构
1.2 PandaBoard开发板
PandaBoard开发板是TI公司的SoC开发板,其内部主要包括4个处理引擎,包括基于ARMv7I指令集的SMP CortexA9 1 GHz双核处理器、可编程多媒体硬件加速引擎IVAHD及协处理器CortexM3、图像显卡Power SGX540及提供图像视频并行计算的ISP。其中IVAHD多媒体加速引擎内部有7个针对各种视频编解码而设计的加速引擎,能够实现对720P视频的实时编解码,并且拥有1 GB的RAM,可以流畅运行Ubuntu开源操作系统。PandaBoard开发板如图2所示。
图2 PandaBoard开发板
1.3 北通神鹰阿修罗遥控手柄
北通神鹰阿修罗遥控手柄用来控制机器人的运动状态,可以前进、后退、加速、减速,还可控制摄像头云台的角度控制,如摇摆头、点头、抬头。北通神鹰阿修罗遥控手柄如图3所示。
图3 北通神鹰阿修罗遥控手柄
1.4 系统硬件架构图
系统硬件架构图如图4所示,游戏手柄通过USB接口同PC连接,PC通过无线热点与遥控机器人建立通信连接。PC机将游戏手柄的数据打包后通过网络发送给移动机器人,这样就可以控制机器人的运动行为。机器人获取的GPS地图数据和摄像头数据打包压缩后通过无线网络传送到PC控制终端,这样PC就可以获得机器人当前环境状况和地理位置信息。
图4 系统硬件架构图
2 软件设计
系统软件设计包括PC控制服务程序和PandaBoard开发板应用程序。PC控制服务程序包括视频数据处理软件设计、GPS地理位置信息处理软件设计和遥控移动手柄软件设计。PandaBoard开发板应用程序,包括视频服务软件设计、机器人运动状态控制软件设计和GPS地理位置信息服务软件设计。系统软件架构如图5所示。
图5 系统软件架构
PC视频数据处理软件将实时接收机器人通过网络传输过来的mjpeg视频数据,通过ffmpeg解压缩成为位图后绘制到屏幕上。GPS地理位置信息处理软件将实时接收机器人的GPS数据,解析之后在开源网络地图中进行标定。遥控移动手柄软件主要负责接收北通神鹰手柄的命令信息,并且将机器人控制命令和摄像头云台控制命令通过网络传输到机器人并控制机器人。
机器人核心控制板搭载Ubuntu系统。视频服务软件采集USB摄像头YUV422数据,压缩成mjpeg通过无线网络传输到PC控制终端。机器人运动状态控制通过PandaBoard开发板中的5路PWM端口分别控制机器人的前进、后退、方向舵机控制、摄像头云台的左右摇头控制和摄像头云台的点头抬头控制。GPS地理位置信息服务通过串口获取GPS地理位置信息,分析打包后传输到PC控制终端。
2.1 PC控制终端软件设计
2.1.1 北通神鹰手柄按键处理
对于遥控手柄数据采集处理,在Linux下的编程框架为JoyStick。JoyStick可以直接采集北通手柄事件,将手柄的事件值赋予特定的命令含义后就可以控制机器人的运动状态。将北通手柄接入PC后,在Linux系统下就成生了/dev/input/js0设备,js0就是遥控手柄设备,为了操作js设备,编写设计了tagJoyStickEvent结构体,这个结构体中拥有手柄按键发生时间、键值、按键类型、按键号码4个成员结构,如下所示:
typedef struct tagJoyStickEvent{
unsigned int time;/*发生时间毫秒级*/
short value;/*键值*/
unsigned char type;/*键值类型*/
unsigned char number;/*键位Num*/
tagJoyStickEvent& operator=(const tagJoyStickEvent&
JseTemp){
this->time = JseTemp.time;
this->value = JseTemp.value;
this->type = JseTemp.type;
this->number = JseTemp.number;
return *this;
}
}stJoyStickEvent;
北通神鹰手柄按键类型一共有两种,Type=1和Type = 2,共14个按键。一共需要4个按键来控制机器人的前进、后退、转向、摄像头云台摆动。同Linux下其他设备一样,首先打开js设备文件,建立按键设备监听函数,当手柄按键按下后,触发设备监听函数,读取stJoyStickEvent结构体,解析按键结构体并通过网络发送给机器人。
2.1.2 mjpeg视频数据处理
ffmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据选择的组件),提供了解码、编码、录制、转换以及流化音视频的完整解决方案。mjpeg图像解码过程:读入mjpeg图像→解码→逆量化→反离散余弦变换→原图像。ffmpeg解码过程如下:
① 调用avcodec_init(),这个库函数只需调用一次。avcodec_init主要包括dsp_static_init函数,负责静态查找表结构的初始化。
② avcodec_register_all(),注册所有的编码器,使它们处于工作状态。
③ avcodec_find_decoder()函数用于查找一个与codec ID相匹配的已注册的解码器。
④ avcodec_alloc_context()函数用于分配一个AVCodecContext并设置默认值,如果失败返回NULL,并可用av_free()进行释放。
⑤ avcodec_alloc_frame()函数用于分配一个AVFrame并设置默认值,如果失败返回NULL,并可用av_free()进行释放。
⑥ avcodec_open()函数用给定的AVCodec来初始化AVCodecContext。
⑦ video_decode_video2()函数用于视频解码,所有的解码工作都在该函数内完成。
解码完成之后形成位图,即可直接显示在计算机屏幕上。
2.1.3 GPS数据处理
在QT下QWebView类提供了一个可以展现和编辑网页文档的widget。QWebView是QtWebKit网页浏览模块的一个主要widget组件,可以用它来展现互联网网页。在Qt Designer中创建一个QWebView,可以使用QWebView的load()方法来加载一个网站,如load(QUrl("googlemap.html")),和其他所有QT的widget一样,需要调用show()方法才会显示出QWebView。QWebView除了用load()方法设定网页路径外,也可以使用setHtml()方法加载HTML格式的网页,如setUrl(QUrl("baidumap.html"))。网页文件加载之后,开启QWebView的JS功能,就可以同网页文件进行JS交互应用了。机器人通过网络将GPS地理位置数据传输到PC控制终端,解析GPS数据包后,在地图中标定机器人的位置信息。
2.2 机器人软件设计
2.2.1 机器人运动状态控制
机器人运动状态控制包括前进、后退、转向、摄像头云台转动。而这些动作的共同之处在于都需要应用PWM信号进行控制。脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种技术,广泛应用在测量、通信、功率控制与变换等许多领域中。舵机主要由外壳、电路板、无核心马达、齿轮与位置检测器构成。其工作原理是接收机发出信号给舵机,经由电路板上的 IC判断转动方向,再驱动无核心马达开始转动,通过减速齿轮将动力传至摆臂,同时由位置检测器送回信号,判断是否已经到达定位。整个机器人一共有3个舵机,其中两个舵机作为摄像头云台,第3个舵机控制机器人的转向。机器人的前后运动由电机提供动力,电机的驱动由电机驱动电路管理控制,电机驱动电路需要PWM控制信号来控制电机的前后转动。配置PandaBoard开发板PWM信号驱动功能,利用Linux设备树技术将相应的设备引脚配置成PWM功能,使设备引脚在Linux中形成设备文件,这样操作PWM设备文件就可以产生PWM输出信号。
2.2.2 视频图像获取
视频图像获取需要借助V4L2编程框架,应用ffmpeg压缩成mjpeg图像,通过WiFi网络传输到PC控制终端,V4L2设置过程如下:
① 打开设备文件int fd=open(”/dev/video0″,O_RDWR);
② 取得设备的capability,看看设备具有哪些功能,比如是否具有视频输入,或者音频输入输出等,VIDIOC_QUERYCAP,struct v4l2_capability;
③ 设置视频的制式和帧格式,制式包括PAL、NTSC,帧的格式包括宽度和高度等,VIDIOC_S_STD,VIDIOC_S_FMT,struct v4l2_std_id,struct v4l2_format;
④ 向驱动申请帧缓冲,一般不超过5个;
⑤ 将申请到的帧缓冲映射到用户空间,就可以直接操作采集到的帧了,而不必去复制;
⑥ 将申请到的帧缓冲全部入队列,以便存放采集到的数据;
⑦ 开始视频采集;
⑧ 出队列以取得已采集数据的帧缓冲,取得原始采集数据;
⑨ 将缓冲重新入队列尾,这样可以循环采集;
⑩ 停止视频的采集;
关闭视频设备。
2.2.3GPS地图数据获取
打开串口,读取SIM908开发板的GPS数据并解析,获取有用的GPS经度纬度数据,通过无线网络发送给PC控制终端。
3测试
实验证明,远程遥控巡逻侦察机器人系统可以将实时视频图像和GPS地理位置数据流畅地传输到PC远程控制终端,而PC远程控制终端将控制命令发送给机器人以灵活控制机器人的运动,达到了设计要求。PC控制终端运行效果如图6所示。
图6 PC控制终端运行效果图
结语
远程遥控巡逻侦察机器人系统使用WiFi作为网络通信手段,将视频、GPS地理位置信息传输到PC远程控制终端。PC远程控制终端可以实时监控机器人所处的环境和地理位置信息。实验证明,应用遥控手柄控制,操作简单方便,机器人系统工作稳定,能够完成巡逻侦察任务。