引言
随着社会生产技术的飞速发展,移动机械手的应用领域不断扩展,从自动化生产线到海洋资源的探索,乃至太空作业等领域,机械手已成为高科技领域内具有代表性的战略产品。然而,就目前的机械手技术水平而言,机械手在信息的获取、处理及控制能力等方面都是有限的,对于复杂的工作任务及多变的工作环境,机械手的能力更显不足[1]。随着移动互联网时代的到来、嵌入式技术及软件技术的快速发展,越来越多的高性能嵌入式芯片的出现,促进了移动机械手向更加智能化方向发展。本文以TI公司的OMAP4430异构多核处理器[2]为核心,Android手机为控制终端,实现了一款基于摇杆手柄操作的可视化移动机械手。
1 硬件平台
本次设计的可视化远程遥控移动机械手硬件部分主要分为OMAP4430开发板、Android手机、车体及机械手马达3部分。
1.1 OMAP4430开发板
OMAP4430是TI公司的异构多核处理器,其内部主要包括4个处理引擎:基于ARMv7l指令集的SMP CortexA9 1 GHz双核处理器,可编程多媒体硬件加速引擎IVAHD及协处理器核CortexM3,高性能的图像显卡Power SGX540及提供图像视频并行计算的ISP。其中IVAHD多媒体加速引擎[3]内部有7个针对各种视频编解码而设计的加速引擎,能够实现对720P视频的实时编解码。其内部示意图如图1所示。
图1 OMAP4430内部引擎示意图
1.2 Android平台
Android是一个以Linux为基础的开放源代码移动设备操作系统,主要用于移动设备,由Google成立的Open Handset Alliance持续领导与开发中。Android具有开源性和良好的可移植性,成为目前全球第一大智能手机操作系统。本设计中的Android手机采用联发科CortexA7处理器,支持无线网卡AP热点,支持H264硬解码。
1.3 移动机械手
移动机械手由运动小车和机械手组成,运动小车负责地面移动,机械手通过旋转6个马达关节来完成捉取地面目标任务。
1.3.1 移动小车
小车利用高性能ATmega128L芯片[4],通过传感器采集当前的状态及驱动DC马达进行移动。ATmega128L单片机为基于AVR RISC结构的8位低功耗CMOS微处理器。由于其先进的指令集以及单周期指令执行时间,ATmega128L单片机的数据吞吐率高达1 MIPS/MHz,小车采用4轮驱动车轮形成移动机器人,配有4个DC直流马达及多种传感器,具有卓越的旋转能力和可靠的稳定性。小车运动控制框架如图2所示。
图2 小车运动控制框架图
1.3.2 机械手
机械手由6个AX12马达组成,AX12马达具有180级别位置和速度控制、位置角度和速度的实时反馈、内部温度或力矩超出范围时给予警告提示等优点。第一个马达的关节负责机械手360°旋转,第二个关节同时控制两个马达,这个关节在提起和放下物体时提供了所需的扭矩,因此通过控制这两个马达补充扭矩大小的不足,而第3和第4个马达提供了机械手捉取目标时前伸和后缩所需的力矩,第5个马达则是手腕旋转马达,用于旋转最后一个马达的空中角度,最后一个马达的旋转将推动夹子张开和闭合来捉取地表目标。通过这6个马达的机械臂,可完成向所有方向移动并进行多样化的动作。
1.4 系统硬件框架
系统硬件框架如图3所示。
图3 系统硬件框架图
2 软件设计
系统软件设计包括Android手机应用、OMAP4430开发板Linux控制服务端和无线视频服务软件设计、AVR单片机程序设计,系统软件框架如图4所示。
图4 系统软件框架图
Android应用主要负责接收手柄水平、竖直方向的摇杆时间和手柄按键事件、实时分析处理事件、将结果通过Socket发送给OMAP4430开发板。同时Android将实时接收OMAP4430开发板通过H264算法压缩的720P视频流,通过硬解码技术将解码缓存绘制到控制界面上。
OMAP4430开发板搭载Linux3.9.11操作系统,通过无线网卡Socket编程与Android手机建立通信,它主要负责接收Android平台发过来的控制命令,进行处理后将数据通过无线蓝牙串口发送给AVR单片机,控制移动机械手的运动和马达操作。利用OMAP4430在视频编解码上的强大优势,USB摄像头采集720P分辨率的视频帧,通过libdce库利用内部的IVAHD多媒体硬件加速引擎进行H264编码,并将编码视频缓存流通过无线网卡Socket通信发送到Android手机进行显示。而底端AVR单片机则负责接收OMAP4430发过来的控制命令来操作4个直流电机进行运动,同时将通信数据解析为机械马达旋转速度及角度。
2.1 移动机械手单片机软件实现
移动机械手的控制核心为ATmega128L单片机,其内部通过时钟产生变换PWM来控制4个DC电机旋转从而实现机械手的移动。内部有两个UART串口,分别连接OMAP4430通信的蓝牙串口和控制AX12马达旋转的串口。其软件流程如下:
① 寄存器初始化,包括初始化时钟定时器、端口输入输出初始化、设置LED控制寄存器等。
② 打开蓝牙串口与AX12通信串口,设置串口的波特率、奇偶校验、停止位等属性。
③ 蓝牙串口接收OMAP4430发过来的控制参数,并进行参数解析处理。如果为运动控制参数,通过PWM_change()修改PWM来控制机械手运动方向,如果为机械手设置参数,通过Ctrl_Array_MT()设置每个AX12马达的旋转角度和旋转速度来完成捉取目标任务。
④ 读取AX12马达的温度及力矩,如果超出预定范围,则调整马达速度和力矩,并向OMAP4430开发板发出提示信息。机械手动作控制命令如表1所列。
表1 移动机械手操作命令
2.2 Android应用软件设计
2.2.1 摇杆手柄事件处理
摇杆手柄采用USB OTG方式连接到Android手机,Linux内核已经包括其驱动程序。手柄的水平竖直摇杆事件和按键事件都将触发MainActivity的onKeyDown()函数和onGenericMotionEvent()函数的调用,在函数中分析事件对象的属性(触发按键ID、事件类型)进而向OMAP4430发出不同控制命令。其参考代码略——编者注。
2.2.2 Android H264解码
Android在4.1版本加入了H264视频硬解码API,其MediaCodec内部封装了openMax库进行多媒体硬解码加速。openMax是一个开源、跨平台的多媒体编解码加速API[5],包括openMax应用层、openMax集成层、openMax开发层。其解码H264的步骤略——编者注。
2.3 Linux控制进程及无线视频服务
OMAP4430开发板运行Linux3.9.11操作系统,具有实时性强、移植性好等优点。利用Andriod手机无线网卡创建一个AP热点,OMAP4430 开发板的无线网卡将连接到AP上,二者通过网络进行数据通信。
控制进程将创建一个TCP Socket服务端,等待Android应用连接,同时打开无线蓝牙串口设备/dev/ttyUSB0,设置串口属性(115 200波特率、8位数据、无校验等)。在连接建立之后,循环接收Andriod发过来的控制命令并进行命令解析处理,处理结果将通过蓝牙串口发送给AVR单片机来控制移动机械手。
无线视频传输进程将通过V4L2编程接口调用USB摄像头采集1 280×720视频帧(采集速度为30 fps)。利用OMAP4430在多媒体视频编解码强大运算能力,通过libdce库的engine_open()、engine_create()、viddce_control()、viddec_procees()函数创建H264编码实例并通过RPMSG消息总线[6]远程调用协处理器核的IVAHD的加速引擎来提高视频编码效率。为了减小网络带宽需求、提高无线传输效率,本次采用Baseline、 Level3.2编码级别[7]。最后将H264编码缓存通过无线网卡Socket服务端发送到Android客户端进行解码显示[8]。控制进程和无线视频传输进程的流程如图5、图6所示。
图5 控制进程流程
图6 无线视频服务流程图
由图7、图8可知移动机械手可以完成捉取地面目标的任务,且Android控制界面可以实时显示机械手操作画面。由于借助OMAP4430内部的协处理器核CortexM3和IVAHD多媒体硬件引擎来实现H264编码加速,因此本次720P无线视频传输实时性较高,达到了28 fps。实验测试数据如表2所列。
图7 机械手操作示意图
图8 Android控制界面
表2 无线视频传输实时性测试
结语
针对移动机械手控制方式复杂、环境周围信息获取能力不足的缺点,采用Android手机为控制中心,摇杆手柄为输入设备实现了移动机械手的可视化实时操作。同时利用OMAP4430异构多核处理器内部协处理器核CortexM3、IVAHD 多媒体引擎加快720P H264视频编码效率,提高了无线视频服务的实时性。实践证明,系统具有人机交互方式友好、控制简单、多核间负债平衡、无线视频服务实时性强等优点。