可视化远程遥控移动机械手设计与实现
强大优势,通过USB摄像头采集720P分辨力的视频帧通过libdce库利用内部的IVA-HD多媒体硬件加速引擎进行H264编码,并将编码视频缓存流通过无线网卡Socket通信发送到Android手机进行显示。
而底端AVR单片机则负责接收OMAP4430发过来的控制命令来操作4个直流电机进行运动、同时将通信数据进行解析成机械马达旋转速度及角度械手的动作来完成任务。
图4 系统软件框架图
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消息总线远程
- LT3751如何使高压电容器充电变得简单(08-12)
- 三路输出LED驱动器可驱动共阳极LED串(08-17)
- 浪涌抑制器IC简化了危险环境中电子设备的本质安全势垒设计(08-19)
- 严酷的汽车环境要求高性能电源转换(08-17)
- 适用于工业能源采集的技术 (08-10)
- 单片式电池充电器简化太阳能供电设计(08-20)