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