XBOX 360是世界最大的电脑软件公司微软所开发的第二代家用视频游戏软硬件系统,其中的电玩手柄是一种USB接口的人机输入设备,而Labview软件里有读取人机输入设备数据的功能组件,所以可以方便地读取手柄数据到Labview软件里进行处理。
XBOX手柄上有2个X、Y轴向摇杆,它的每个轴向摇杆能控制各自的X轴和Y轴坐标,当操作轴向摇杆时,由LabVIEW的输入数据采集模块(LabVIEW的程序模块称为VI)模数转换产生的轴向坐标数据也发生相应变化。电玩手柄把轴向摇杆的坐标分为65536个刻度,摇杆的一个轴的正负方向刚好各是32768个刻度。操纵输入设备,可以产生从-32768到32768连续变化的数字,这种设备习惯上称为模拟量设备,或者说这种摇杆称为模拟摇杆。XBOX手柄上表面有两个显而易见的X、Y轴向摇杆,另外还有2个模拟量推杆在手柄的前端面上,它可以控制Z轴的正负坐标。XBOX手柄一共可以控制5个轴向坐标,一个模拟摇杆控制X、Y两个轴,两个摇杆就控制4个轴,2个模拟量推杆控制1个轴,一共5个轴。
值得注意的是:XBOX电玩手柄上表面的两个摇杆,若不摇动它,而是按下它,两个摇杆就变成了两个数位按键。所谓数位按键,就是按下按键,产生的值为“true”,松开按键,则值为“false”,手柄上还有其它8个数位按键。除了数位按键,还有一个POV视角单元,包括4个方向按键,按下这4个按键,会分别产生0、90、180、270数字。
看图1所示电玩手柄,可以看到2个X、Y轴向摇杆,2个Z轴推杆,10个数位按键和4个方向按键。
图1 微软XBOX 360电玩手柄的输入部件指示图
要把操纵微软XBOX手柄的摇杆、推杆和按键所产生的信息以数字的形式读到PC机的LabVIEW软件中进行处理,需用到4个VI,它们是“查询输入设备”VI、“初始化操纵杆”VI、“输入设备采集”VI和“关闭输入设备”VI。如何找到这些VI,首先打开“框图程序”界面,在界面工作页面空白处,点击鼠标右键,出现“函数”库面板,接着点击“互连接口”图标,在随之出现的“互连接口”面板里,再点击“输入设备控制”图标,就出现了“输入设备控制”子面板,在这个子面板中可以找到这4个与手柄数据采集相关的VI。如图2。
图2 四个与电玩手柄数据采集相关的LabVIEW软件VI
下面是XBOX手柄的LabVIEW数据采集程序。
图3 XBOX手柄的LabVIEW数据采集程序
图3所示LabVIEW程序中应用了一个平铺式顺序结构,它具有两个帧,每个帧分别包含一个while循环结构。平铺式顺序结构的帧按照从左至右的顺序执行。第一个帧里的while循环采用了一个“查询输入设备”VI,查询出目前正在使用的手柄输入设备索引号,如果电脑上插入了鼠标和键盘,那么再连接电玩手柄,电玩手柄的设备索引号就为2。
在顺序结构的第二帧里,把查询出的索引号数字填入“初始化操纵杆”VI的设备索引端子,然后就可以通过while结构里的“输入设备采集”VI,获得手柄的5个轴的坐标,10个数位按键的布尔值和4个方向按键的角度值,并以簇数据类型显示在前面板上。在前面板上按下“STOP”按键,结束while循环,执行“关闭输入设备”VI。
图4 XBOX电玩手柄的LabVIEW前面板
图4是XBOX手柄的LabVIEW数据采集程序前面板,用于人机交流。从前面板看到,只有把设备索引切换到2时,手柄的信息才能看到,模拟摇杆和推杆的轴总数是5,按键总数是10,视角POV单元数是1,设备名称是Controller。把手柄的左摇杆向Y轴正上方推到极限位置,按下“B”数位按键,同时再按下POV单元的右向按键,在前面板实时显示的手柄输入信息是:左摇杆Y axis值为-32768,button 2按键值为true,POV方向值为90(在图4用圆圈进行了标注)。
LabVIEW软件采集到XBOX电玩手柄的操控数据,然后对这些数据进行提取和代数运算,产生的控制数据通过蓝牙无线通信传递给NXT机器人上的控制器,驱动NXT电机,使机器人执行指定动作。
2 XBOX手柄遥控乐高NXT机器人的LabVIEW程序设计
完整程序请下载(labview2010版):
XBOX_NXTcar.zip
本文通过机械手小车抓取球形物体的任务,来介绍通过LabVIEW程序,XBOX手柄遥控NXT机器人的方法。该任务是:用手指向前或者向后拨动左摇杆,小车会前进或后退,若左摇杆向前拨动的同时,按下“B”按键,小车右向行驶,按下“X”按键,小车左向行驶。当小车上的机械手接近球形物体时,按下右摇杆按钮,机械手抓取物体,然后遥控小车把物体搬运到其它指定位置,再按下左摇杆按钮,机械手松开物体,完成任务。
实验实景图如下:
图5 实验全景图
完成上述任务的LabVIEW程序如下图所示:
图6 XBOX手柄遥控乐高NXT机器人程序
程序中用到三个有关NXT机器人的VI,首先是“Specify NXT”VI,该VI指定了NXT控制器的名称以及Labview与NXT机器人的通讯方式。“Steering On”VI用于控制小车两驱动轮上的NXT电机,这两个NXT电机连线在NXT控制器B、C电机端子上。通过赋值给“Steering On”VI的“Power”端口,决定小车的行驶速度,赋值给“Steering”端口,决定小车转向的程度。“PolyMotor”VI用于驱动单个电机,这个电机连线在控制器的A端子上,控制机械手抓取或松开物体。
上图程序中“输入设备采集”VI采用“按名称解除簇捆绑”函数把左摇杆“Y axis”模拟数据从“轴向信息”簇里提取出来。由于XBOX手柄的模拟摇杆将轴向分成65536个刻度,所以摇杆的正负向刚好是32768个刻度,除以327.68之后就可对应电机功率值的范围为-100~100,又由于小车如果速度太快,不方便遥控它来定位其机械手到球形物体,于是“Y axis”数据还需再除以3,以较小的功率值范围提供给“Steering On”VI的“Power”端口。(本文所说的功率值是针对NXT电机的功率程度值,100表示小车正方向满功率行使,0表示小车停止。-100表示小车负方向满功率行使。)
从“按键信息”簇里提取四个按键信息,“button 2”指示的是“B”按键,“button 3”指示的是“X”按键,“button9”指示的是左摇杆按键,“button10”指示的是右摇杆按键。通过一个条件选择结构来判断,当按下“B”按键,就把数值60赋给“Steering On”VI的“Steering”端口,小车右向行驶,当按下“X”按键,赋值-60,小车左向行驶,若两按键松开,赋值0,小车直行。程序中另一个条件判断结构,用来选择给 “PolyMotor”VI的端口赋值不同的参数,当按下右摇杆按键,A端子的电机驱动机械手抓取物体,当按下左摇杆按键,则机械手松开物体。
整个程序包裹在一个循环结构里面,每100ms时间,程序循环执行一次,直到按下软件菜单里的“中止执行”图标,程序强行结束。
LabVIEW与NXT控制器有两种执行模式,一种是在线模式,另一种是离线模式。在线模式下,程序逻辑在PC机上运行,并通过USB或蓝牙发控制命令给NXT控制器,控制器仅是命令的执行者,程序并没有下载到控制器里。而离线模式下,需要下载程序到NXT控制器,然后在控制器里运行程序,不需要PC机干预。
程序界面的左下角有个“在线模式与离线模式切换”选项,右击选项,出现快捷菜单,从中选择在线模式或离线模式。选择“主应用程序实例” 选项,则处于在线模式,选择“NXT [Bluetooth]”,则处于离线模式。
不管是在线模式和离线模式,必须首先建立起LabVIEW软件与NXT控制器的通信连接。插入蓝牙适配器到PC机USB插槽,windows XP操作系统的右下边任务栏会出现蓝牙图标,点击这个图标,出现windows自带的蓝牙程序窗口,通过该程序添加蓝牙设备,然后选择下图的“查找NXT…”选项,建立起LabVIEW软件与NXT控制器的通信连接。
图7 蓝牙通信建立和在线控制模式的选择
由于NXT控制器的运算速度和内存空间有限,LabVIEW的许多VI并不支持离线模式,所以XBOX手柄通过LabVIEW软件遥控NXT机器人是采取在线控制模式。
乐高NXT机器人套件是由丹麦乐高公司和美国麻省理工学院的媒体实验室以及国家仪器公司(NI)等共同开发的一种可编程机器人积木套件。自1998年上市以来,便受到国外教育和科研机构的广泛关注, 乐高NXT套件已经被全球25000个以上的机构采用,应用于教学、科研和工业产品原型开发。这个套件将模型搭建与机器人编程有效地结合,使用户可以设计和制造自己的机器人,套件自带的软件是NXT-G软件,它是以国家仪器公司的LabVIEW软件为核心架构的,NXT-G软件界面简单易懂,但要进行复杂功能的程序开发,还需采用更高阶的开发平台,如NI公司的LabVIEW或微软的MSRDS。NI公司已在2009年推出LabVIEW的LEGO MINDSTORMS NXT组件,用户现在可以在LabVIEW软件平台上,开发及实现功能更强及更完整的NXT机器人程序。本文就是借助安装了LEGO MINDSTORMS NXT组件的LabVIEW软件,实现了微软XBOX电玩手柄遥控NXT机器人。
上一篇:用LabVIEW前面板遥控乐高NXT机械手车
下一篇:LabVIEW之破解VI密码
推荐阅读最新更新时间:2024-03-30 23:33