APP下载

基于Android的桥检车机械臂三维模型显示系统设计

2012-08-02任建新王秀敏

中国计量大学学报 2012年4期
关键词:线程串口倾角

任建新,王秀敏,张 麒

(中国计量学院 信息工程学院,浙江 杭州 310018)

桥梁检测车是用于桥梁安全性检测和桥梁维护的专用车辆,以下简称为桥检车.当桥检车进行实际工程操作时,其机械臂动作位于桥梁下方,故操作人员无法准确掌握桥检车机械臂的动作角度,使得操作人员无法准确判断应对桥检车进行何种操作,从而使桥检车的操作存在安全隐患.目前已有的桥检车安全监控系统无法实时跟踪显示桥检车的工作状态,只能显示桥检车某些特殊状态下动作状态.因此,设计一款能够实时跟踪反馈显示桥检车机械臂动作角度,及将该角度值采用桥检车三维模型的形式显示于操作人员的监控系统是十分必要的.

本文即为桥梁检测车机械臂动作角度的三维模型反馈控制显示.要实现桥检车机械臂动作角度的三维模型反馈控制显示,必须实现桥检车三维模型[1]的建立(该三维模型已实现).该反馈控制显示以ARM11作为硬件开发平台,其支持Android操作系统的三维图形显示,故可实现三维模型的动态显示.在本设计中采用Android2.3操作系统,其提供了丰富的硬件接口操作包,供用户方便调用;桥检车机械臂动作角度反馈控制显示即通过倾角传感器与ARM11的串口通信予以实现.其中倾角传感器角度值通过读串口线程实现,因读串口线程相对耗时,且读取数据的过程中易出现数据错误从而导致线程的终止,故读取串口数据线程与主界面线程分为两个线程,主界面线程可调用读数据线程用于更新主界面的角度值显示.为使操作人员掌握桥检车机械臂的动作状态,该方法通过将读取的倾角传感器角度值设置为桥检车三维模型相应机械臂动作角度值,从而使得桥检车三维模型可以实时跟踪显示桥检车动作状态.

1 桥检车机械臂动作状态反馈控制系统

桥检车机械臂动作状态反馈控制系统可由2个模块予以实现:倾角传感器串口通信模块及桥检车机械臂动作角度反馈控制显示模块.倾角传感器串口通信模块,通过调用Android开发包提供的HardwareControler接口,实现串口通信,为后续反馈显示机械臂动作角度做准备;桥检车机械臂动作角度反馈控制显示模块,通过调用ReadData的读数据线程,然后在显示界面反馈显示机械臂动作的角度值,最后通过读取的倾角传感器角度值控制桥检车三维模型机械臂进行相应角度的动作.各模块之间相互关系,如图1.

图1 各模块关系图Figure 1 Relation schema of Each module

图1中线1表示桥检车机械臂固定角度动作显示及动作角度反馈控制显示均需调用桥检车三维模型构建模块,以实现桥检车三维模型[1]的显示;线2表示桥检车机械臂动作角度反馈显示模块通过调用倾角传感器模块获得机械臂动作角度(倾角传感器固定于机械臂上);线3表示桥检车机械臂动作角度反馈控制显示均需基于ARM11,以实现串口通信操作;线4表示倾角传感器模块的实现必须使用ARM11的CON1接口,且由其Android操作系统提供的串口函数,以实现机械臂动作角度的反馈显示.

2 桥检车机械臂动作状态显示控制系统设计与实现

桥检车机械臂动作状态显示控制系统由读取传感器角度值线程、角度值反馈显示,及桥检车三维模型机械臂相应角度值的动作3个部分予以实现.

2.1 倾角传感器通信模块设计

倾角传感器通信模块的正常通信是实现桥检车机械臂动作反馈控制显示的重要基础.其正常通信的实现包括:倾角传感器硬件连接实现,倾角传感器与ARM11的串口通信的实现,以及倾角传感器角度值数据异常处理.

2.1.1 倾角传感器硬件接口配置 进行任何硬件操作之前,硬件测试工作是必不可少的环节;若无硬件保证,后续软件开发则失去硬件操作平台.串口助手可准确判断硬件数据传输是否正确,故在此使用串口助手测试倾角传感器角度值反馈是否正确.倾角传感器通过串口线与计算机串口相连接;串口助手波特率设置为9600;启动数据接收功能,若数据接收窗口显示倾角传感器的型号及正常的角度值,则说明倾角传感器可正常工作.此即为测试倾角传感器能否正常工作.

硬件与操作平台的准确连接是实现硬件通信的基础.此处硬件操作平台为 Mini6410(ARM11),在此选择其CON1串口与倾角传感器进行连接,倾角传感器与CON1需共地连接,否则无法正常通信;倾角传感器的电源、发送数据和接收数据引角,分别与CON1的电源、接收数据和发送数据引角相连接,接收与发送数据引角必须相对应,否则仍将导致通信失败.此为倾角传感器与ARM11的连接.

2.1.2 串口通信的设计 以上完成倾角传感器硬件部分的连接,只有软硬件相结合才能实现倾角传感器角度值的读取,以下即为软件部分的介绍.

串口通信[2]的实现,必然存在串口的选择、打开、关闭、读串口与写串口操作.传统的Android串口通信的设计实现涉及到Android系统底层Linux内核的API,而Android系统底层内核由C语言实现.Android SDK基于java的应用第三方插件,故此处串口通信的实现基于Android NDK与JNI接口;在Windows平台下进行NDK开发需采用Cygwin,即要实现serialPort.so与SerialPort.java实现串口的驱动及串口数据的读取写入操作等.故基于Android2.3的串口通信接口,即串口通信封装包[3](该封装包的实现)使得串口通信的可移值大大提高.在本课题的研究中,Android2.3提供了丰富的硬件接口驱动函数,故可封装名为com.friendlyarm.androidSDK的通信包(HardwareControler函数).

目前为提高软件运行效率,多采用多线程[4]操作.多线程操作可将相对耗时操作与主线程实现分离,这样,即使子线程出现阻塞,也不会影响主线程及其他子线程的运行,从而使程序运行效率大大提高.在倾角传感器串口通信实现过程中,若将倾角传感器角度值[5,6]读取线程并入主线程中实现,则由于硬件连接的不稳定性及倾角传感器本身数据传输的不稳定性会导致主线程的中止,从而影响主线程中其他部分操作的进行,降低用户体验,导致该监控系统的推广应用受到极大的限制,故在此采用多线程操作.

在本课题中,串口通信的数据采集线程为ReadData(Arm arm1,int readFd,Handler myhandler)线程.该线程的成员函数中定义了机械臂ID号、串口ID及Handler等参数传递信息,机械臂ID用于确定传感器数据采集哪个机械臂的动作信息,串口ID用于确定实现串口通信的串口号,Handler参数用于实现子串口处理数据的传输;通过串口通信包的调用实现角度值读取,其中HardwareControler.select()用于传递串口ID信息,HardwareControler.read()用于实现传感器数据的读取;由该接口函数读取的角度值,其数据类型为String类型,无法实现数据传递,故需将其转换为Float类型数据,以便后续角度值调用.

2.1.3 串口通信数据读取的稳定性 该串口通信仅采用多线程方式仍无法彻底解决串口通信无故中止的问题.多线程技术仅能解决硬件连接的不稳定及倾角传感器数据的不稳定性的问题;倾角传感器数据误读问题则无法解决,这种误读虽不影响整个线程的正常运行,但其严重影响后续机械臂的正确动作,从而使得该监控系统的稳定性极差.在此采用异常捕捉,即设置符合实际的读数条件,以此判断由倾角传感器反馈回的数据是否符合要求.若满足条件,则进行读数的反馈;否则捕捉该数据错误并将该数据抛出,且放弃该数据的操作以便读数的继续进行.

经过以上异常处理,串口通信可实现稳定数据通信,不会出现应用程序的异常终止,即实现了该监控系统的稳定性.

2.2 桥检车机械臂显示控制的设计与实现

桥检车机械臂显示控制实现:倾角传感器反馈角度值显示与桥检车三维模型机械臂动作反馈显示.在此倾角传感器角度值显示通过设置获取传感器角度值按钮的单击事件,以此启动读取角度值线程,并通过handler方法以实现不同线程间数据的传递;桥检车三维模型机械臂动作反馈显示通过将倾角传感器反馈角度值设置为桥检车三维模型机械臂的旋转角度值,即可实现桥检车三维模型实时跟踪显示桥检车机械臂动作状态.注意:本文仅采用一个倾角传感器,并将其反馈角度值设置为桥检车三维模型机械臂一的旋转角度值.桥检车机械臂反馈控制显示的程序流程图,如图2.

2.2.1 倾角传感器反馈角度值显示 倾角传感器角度值读取线程为子线程,而角度值显示界面为主线程(UI线程),故为实现主线程UI的更新,必须借助于Handler方法,以完成主线程与子线程之间的数据传递.Handler方法的作用为接受子线程发送的数据,并用此数据配合主线程更新UI,其中数据传递通过 Message对象来实现.

图2 桥检车机械臂反馈控制显示程序流程图Figure 2 Program flowchort of feedback control of Bridge-detection vehicle Arm

在主线程中设置获取桥检车动作的角度值按钮,启动按钮监听事件即启动读数据线程以获得倾角传感器角度值.将获得的角度添加到 Message消息队列中,通过handler.sendMessage()方法将角度值传递给主线程;主线程通过HandleMessage()成员方法中的SetText()函数实现UI界面的更新;故操作人员可以TextView的形式观察到倾角传感器反馈的角度值.注意,在Set-Text()的实现过程中,其中数据类型为String类型,若设置数据错误仍会导致程序的异常终止,故要通过String.valueOf()函数实现数据类型的正确转换;其反馈角度值显示如图3.

2.2.2 桥检车三维模型机械臂动作反馈显示桥检车三维模型机械臂旋转通过gl.glRotate(angle,x,y,z)设置.通过 Generate Getters and Setters函数,为角度参数angle定义GetAngle()和SetAngle()函数.这两个函数可以实现将获取及设置机械臂动作角度值的功能.在主线程的HandlerMessage()成员方法中通过SetAngle()函数将机械臂旋转角度值设置为倾角传感器反馈角度值,且将动作角度通过GLSurfaceView显示于操作人员.通过以上操作即可实现桥检车三维模型机械臂实时跟踪显示桥检车机械臂的动作状态.桥检车机械臂三维模型机械臂一的动作状态显示,如图3.

图3 桥检车机械臂动作角度反馈显示结果图Figure 3 Realization of feedback control of Bridge-detection vehicle Arm

图3整个界面主要由4部分构成,分别为TextView主题显示,Button按钮启动串口通信传感器数据采集线程,TextView显示反馈的的桥检车机械臂回转角度值,GLSurfaceView显示桥检车三维模型及模型控制显示.点击获取桥检车的动作的角度值按钮即可启动读取倾角传感器角度值线程,通过Handler方法中的Message方法实现将该线程读取的角度值传递予主线程用于更新主线程显示界面.图3中数据值272即为获取的回转的角度值的显示;图3中下方即为桥检车三维模型,该图即为桥检车机械臂一臂动作到272度时的三维模型显示,且该桥检车三维模型实现了触摸控制,可通过触控方式实现对桥检车三维模型不同角度的显示,便于操作人员对桥检车全方位的监控,使得该监控系统实现真正实时及无死角监控.

3 结 语

介绍了桥检车三维模型实时跟踪显示桥检车机械臂动作状态的方法,基于已实现的桥检车三维模型进行后续桥检车反馈监控系统的实现.其中通过倾角传感器采集机械臂动作回转角度,且通过串口通信的实现,启动读数据线程以实现角度值的读取;由Handler方法实现将子线程获得的角度值传递予主线程,以实现主界面角度显示更新,且以此角度值更新机械臂三维模型动作状态.该方法的实现不仅可以实现操作人员实时观测桥检车机械臂的动作状态,而且还可以使操作人员准确掌握机械臂动作角度,从而使桥检车工程作业的安全性大大提高.

[1]王秀敏,任建新,张 麒.Eclipse环境下桥梁检测车三维模型的构建与控制[J].浙江大学学报:理学版,2012-06-08录用,待刊登.

[2]金智义,张 戟.基于Android平台的串口通信实现[J].电脑知识与技术,2011,7(13):2983-2985.

[3]PREETHAM C,BO L.Efficient Java native interface for Android based mobile devices[J].International Joint Conference of IEEE,2011,10:1202-1209.

[4]闫 伟,叶建栲.多线程技术在android手机开发中的应用[J].信息通信,2012,1(7):46-47.

[5]DOUNG S,KENJI Y.Wireless sensor networks using Android virtual devices and near field communication Peer-To-Peer emulation[J].IEEE,2012,5(3):978-981.

[6]OOKURA H,YAMAMMOTO H,YAMAMZAKI K.Development and evaluation of walking path estimation system using sensors of Android device and vector map matching[J].International Conference on Information Networking,2012,10(9):25-29.

猜你喜欢

线程串口倾角
基于NPORT的地面综合气象观测系统通信测试方法及故障处理
地球轴倾角的改斜归正
车轮外倾角和前束角匹配研究
基于C#线程实验探究
浅谈AB PLC串口跟RFID传感器的通讯应用
系列长篇科幻故事,《月球少年》之八:地球轴倾角的改邪归正
基于EM9000工控板高性能双串口通信模型设计与实现
基于国产化环境的线程池模型研究与实现
线程池调度对服务器性能影响的研究*
船舶电子设备串口数据的软件共享方法