新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 可视化远程遥控移动机械手设计与实现

可视化远程遥控移动机械手设计与实现

作者:时间:2015-03-04来源:网络收藏

  2.1移动单片机软件实现

本文引用地址:http://www.eepw.com.cn/article/270440.htm

  移动的控制核心为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显示接口将图像绘制到控制界面上



关键词: 机械手 远程遥控

评论


相关推荐

技术专区

关闭