注册 登录
电子技术论坛 返回首页

宜昌城老张的个人空间//www.hzfubeitong.com/?913915[收藏][复制][分享][RSS]

博客

PS2电玩手柄,LabVIEW,32路舵机控制板和多自由度机械臂

热度17已有 2648 次阅读2013-2-4 17:13|

  图1 PS2手柄遥控多自由度机械臂实验全景图

  这篇文章在上一篇文章的基础上,加装了PS2电玩手柄。上篇文章的题目是《labview,32路舵机控制板和多自由度机械臂》,网址:http://www.eefocus.com/zhang700309/blog/12-12/289716_4f26b.html。它的内容是用LabVIEW编写一个控制六自由度机械臂的程序,在LabVIEW前面板里设置六个滑动杆控件,这六个滑动杆当前值就对应着机械臂上六个180度舵机的实时转角,用鼠标移动滑动杆上的游标,就可以通过串口,把命令下达给32路舵机控制板,进而驱动舵机,让机械臂完成各种动作。再次看看上篇文章中,所设计的LabVIEW前面板吧。

  图2 LabVIEW控制多自由度机械臂的人机面板

  目前这篇文章已加装了SONY PS2手柄,它的作用就是用来代替鼠标,来使LabVIEW前面板滑动杆控件上的游标移动。因此首先要了解如何才能把PS2手柄上的摇杆和按钮信息采集到PC电脑中。

  PS2手柄要插到PC机的USB插座里,需要PS2转USB转换器,这种转换器有两个插槽,您可以先把一个PS2手柄的无线接收器插上去,然后再把转换器的USB插头插到PC机上。然后安装SONY PS2 USB驱动,请下载安装,sony PS2 USB.zip

  图3 PS2转USB转换器

  在PC机上插上PS2转USB转换器,您会发现Windows操作系统设备管理器的人体学输入设备目录下多了两个“HID-compliant game controller”设备,这是因为这种转换器有两个插槽,可以插入两个PS2 手柄接收器。如果在设备管理器中,没有发现多出这两个人体学输入设备,那就重装驱动,或者重新插一次转换器。

  图4 通过设备管理器观察PS2转换器是否正确联机

  PS2电玩手柄有两种工作模式,按下PS2手柄上的MODE按键,进行模式切换,观察下图红框标注的MODE LED灯,如果灯亮是一种模式,灯熄就是另一种模式,我这次实验是采用“灯熄”的工作模式。工作模式LED灯如下图红色方框标注。

  图5 PS2电玩手柄的工作模式切换

  到底“灯熄”模式和“灯亮”模式,PC机所采集的PS2手柄各部件操作信息有什么不同?用我编写的SONY PS2 电玩手柄人机界面,来测试下,就明白了!(双击图片,都可以放大观看!)

  图6 PS2手柄的LabVIEW功能测试界面

  把PS2手柄电源开关打到ON,再按下“START”按钮,POWER灯会亮,接着按下“MODE”按钮,切换工作模式,我选择的是MODE LED灯熄灭模式。

  上图中,DEVICE INDEX选项栏应该填写2或者3,可能是4,这要实时操作PS2手柄试试,如果像图3所示的那样,把PS2无线接收器插入转换器插槽,则DEVICE INDEX选项大都应该为2,如果换到另一个插槽,则DEVICE INDEX选项会是3。

  图7 PS2手柄的部件功能分配图

  选择“MODE LED灯熄灭”工作模式,操纵PS2手柄上的部件,图6 PS2手柄的LabVIEW功能测试界面中的各显示控件会发生什么反应,由此可以观测出“MODE LED灯熄灭”工作模式下,LabVIEW程序从PS2手柄采集出什么样的数据信息。

  向Y轴和X轴方向,摇动左摇杆,图6 的“Left joystick - Left/Right”和“Left joystick -Up/Down”显示栏会分别显示Y轴和X轴的模拟量数据,范围为-32768到 32768,如果摇杆不动,采集的数据为0,如果摇杆向X轴右方向,拨到头,则为32768,向左方向,拨到头,则为-32768,对于Y轴来说,向下为正,向上为负。左摇杆采集的数据是模拟量值,但是对于“MODE LED灯熄灭”工作模式来说,右摇杆采集的数据却是布尔数字量,您会发现向上下左右四个方向摇动右摇杆时,图6的“TRIANGLE”、“X”、“SQUARE”、“CIRCLE”的布尔控件会分别为亮,即布尔值为true。

  于是,我分配PS2手柄上部件的功能如下:左摇杆的Y轴和X轴分别控制机械臂上的舵机,使爪子抓放和腕部旋转,而右摇杆的Y轴和X轴分别控制臂部上下和臂部旋转,位于手柄顶部的L1和L2按键控制腕部上下,而R1和R2按键则控制肘部上下。

  实际上,这篇文章较上篇文章的不同,就是PS2手柄的数据采集,所以看看图6 PS2手柄的LabVIEW功能测试界面的后台程序,即框图程序,看是否能理解这个程序是如何工作的。

  PS2手柄的功能测试LabVIEW程序请下载:PS2 PS3 Style Gampad Interface.zip。(双击图片,都可以放大观看!)

  图8 PS2手柄功能测试的LabVIEW框图程序

  这个程序用到了三个关键的函数,LabVIEW软件称函数为VI,这三个VI为“初始化操纵杆”VI(Initialize Joystick.vi)、“输入设备采集”VI(Acquire Input Data.vi)和“关闭输入设备”VI(Close Input Device.vi),三个VI的提取过程如下图。

  图9 输入设备控制VI的提取方法

  如何找到这些VI,首先点击前面板“窗口”菜单的菜单项“显示框图程序”,打开“框图程序”界面,在编辑界面空白处,点击鼠标右键,出现“函数”库面板,接着点击“互连接口”图标,在随之出现的“互连接口”面板里,再点击“输入设备控制”图标,就出现了“输入设备控制”子面板,在这个子面板中可以找到这3个与手柄数据采集相关的VI。

  把这些VI从子面板中,拖到框图程序的编辑界面中,再右击它,出现快捷菜单,选择帮助选项,就可以看到VI的使用帮助了。例如“初始化操纵杆”VI (Initialize Joystick.vi)的帮助说明,如下图。

  图10 “初始化操纵杆”VI(Initialize Joystick.vi)帮助说明

  在前面板上创建一个数值输入控件,同时在框图程序中就自动出现这个数值输入控制的映射变量,然后把数值输入的映射变量连到“初始化操纵杆”VI的设备索引输入端,就可以通知LabVIEW程序现在将处理哪个输入通道的数据,我这次实验时,PS2手柄连在设备通道2上,所以我在图6所示前面板的DEVICE INDEX选项中填入了2。

  前面板中数值输入控件的提取方法,如下图所示。

  图11 前面板的控件提取方法

  还有一个关键的输入设备控制VI,即“输入设备采集”VI(Acquire Input Data.vi),看看它的帮助说明是如何描述的?

  图12 “输入设备采集”VI(Acquire Input Data.vi) 帮助说明

  选择“MODE LED灯熄灭”工作模式时,左摇杆的操作信息可以从“输入设备采集”VI的坐标轴信息“簇”中的X轴和Y轴模拟量数据中获得,而右摇杆的操作信息可以从VI的按钮信息“簇”中的button1、button3、button4、button2的布尔数据中获得,见图8,这些布尔数据对应的前面板布尔控件为“TRIANGLE”、“X”、“SQUARE”、“CIRCLE”,见图6。控制机械臂上的舵机除了用到了两个摇杆,还用到了PS2手柄顶部的四个按钮,L1、L2和R1、R2,试试看,分别按下它们,“输入设备采集”VI的按钮信息“簇”中哪个一个“button ?”为true。 以上“簇”数据,可以通过“按名称解除捆绑”VI,把坐标轴信息和按钮信息的每个元素拆解出来,再把每个元素连到相应的显示输出控件,在LabVIEW前面板中显示出各元素的状态。

  按照以上方法,把PS2手柄操纵部件的数据采集到PC机中,然后这些模拟量和布尔量数据再处理成控制舵机字符串命令,把命令从串口发送到舵机控制板就可以操控机械臂了!

  PS2手柄控制机械臂视频:

  点击视频网址,可以全屏观看! 网址:http://player.youku.com/player.php/sid/XNDg2MDM2MjY0/v.swf

  从上一篇文章知道,多自由度机械臂的舵机是180度舵机,舵机的转动角度是通过调节PWM(脉冲宽度调制)信号的占空比来实现的,标准PWM信号的周期固定为20ms(50Hz),脉宽值在500us到2500us之间,脉宽和舵机的转角0°~180°相对应。如何把PS2手柄操纵部件采集的数据与控制舵机转角的脉宽值500us-2500us关联起来呢?请看下图,下图为PS2手柄信息提取程序段 。

  图13 PS2手柄信息提取程序段

  这个程序比较大,所以放在博客页面中,程序中每个部分有点小,可以下载程序后,并运行程序,在您的LabVIEW软件中仔细研究。PS2手柄控制多自由度机械臂LabVIEW程序,请下载LabVIEW_PS2_servo.zip

  图14 PS2左摇杆的坐标轴信息处理程序

  选择“MODE LED灯熄灭”工作模式时,左摇杆的操作信息可以从“输入设备采集”VI的坐标轴信息“簇”中获得,通过“按名称解除捆绑”VI,就能把左摇杆的X轴和Y轴模拟量数据拆解出来,然后进入到一个公式节点,它可以对数据进行类C的程序处理,比如用来控制机械臂爪子抓放的PS2手柄左摇杆Y轴向下拨到头,产生的模拟量为32768,这个值大于32000,公式节点的C程序处理的结果为输出值1,如果摇杆不动作,则输出值为2,如果PS2手柄左摇杆Y轴向上拨到头,则产生一个负值-32768,公式节点处理的结果为输出值3,这些输出值提供给下面的子VI“servo”中条件结构作为条件选项,子VI“servo”前面板和框图程序见下图所示。

  图15 子VI“servo”前面板和框图程序

  LabVIEW的子VI相当于C语音程序的子函数,这个子VI的图标,位于框图程序的右上角,可以自行设计图标样式。当主程序应用这个子VI时,它的图标将出现在主程序框图中,如图14所示。上图,子VI前面板的右上角出现的是这个VI的连接板,从连接板可以看出,它有三个输入,一个输出,而且输入输出的值都是带符号整数型数据。子VI有两个嵌套的条件结构组成,上面公式节点产生的输出就是给外层这个条件结构提供条件值。

  结合图14和图15一起看,如果公式节点的输出值为1,则意味着PS2手柄左摇杆Y轴向下拨到头,它所控制的驱动爪子抓放的舵机脉宽值从初值1500us,每20ms时间,减5,一直减到舵机脉宽值的极限值500us为止,在这个过程中,舵机驱动爪子逐渐收紧,可以抓住物体了。如果这个子VI框图程序的里层条件结构为“真”,则减到小于500,就直接把输出500,而不会继续减下去了。

  如果左摇杆不动,则子VI外层条件结构的条件值为2,该条件情况下的程序,不执行累加和累减程序,子VI的输入直接与输出连接在一起,舵机转角不会发生变化。如果左摇杆向Y轴上方拨到头,条件值为3,则执行累加程序,这时舵机转动,使爪子松开。

  图16 PS2摇杆的按钮信息处理程序

  选择“MODE LED灯熄灭”工作模式时,右摇杆的操作信息是从“输入设备采集”VI的按钮信息“簇”中获得的,右摇杆向右拨到头,就相当于右摇杆上方的标注有圆圈(CIRCLE)图案的按钮被按下,如图7所示,右摇杆向左拨到头,则相当于标注有方形(SQUARE )图案的按钮被按下。

  上图16所示,通过“按名称解除捆绑”VI来拆解按钮信息“簇“中各按钮布尔变量,对应圆圈(CIRCLE)按钮的布尔变量是button 2,对应方形(SQUARE )按钮的布尔变量是button 4,这两个布尔变量通过嵌套的条件结构程序和“servo”子VI,处理成决定臂部旋转的舵机脉宽值,进而控制机械臂的臂部转向和转角。

  PS2手柄顶部的四个按钮按照同样的程序,可以输出的舵机脉宽值,来分别控制腕部上下和肘部上下。图13 所示程序段的任务是把PS2手柄部件操控信息处理成机械臂的六个舵机脉宽值,这些脉宽值再传送给舵机字符串命令生成和串口通信程序段(如图17所示),就形成了一个完整的程序。

  图17舵机字符串命令生成和串口通信程序段

  对于图17所示的舵机字符串命令生成和串口通信程序段,在上篇文章有详细说明,在这里就不再累述了。《LabVIEW,32路舵机控制板和多自由度机械臂》,网址:http://www.eefocus.com/zhang700309/blog/12-12/289716_4f26b.html

  这篇文章的LabVIEW框图程序似乎有些复杂,我通过截屏的方法,一个画面还放不下,于是截屏了两个画面,分别用两个程序段表达在博客文章中。其实这样一个程序量也不算什么事,因为LabVIEW入门是很简单的,它是图形化编程语言,编程就像绘制一幅脉络清晰的图画,像这样的程序,也只是多画了几笔而已。

  这个程序,我依然做了前面板,如图18所示,运行程序前,您要把PS2手柄的设备索引DEVICE INDEX填写为2,串口COM号选择为蓝牙联机时所生成的串口号,波特率我设置为了115200b/s。程序运行时,前面板上的指示灯和滑动杆控件可以监控PS2手柄的操控动作。程序结束时,请按下“STOP”按钮。

  图18 PS2手柄控制机械臂的LabVIEW前面板

  这段时间连续写了三篇关于多自由度机械臂的文章,感觉类似机械臂这样的作品完全可以成为高校学生学习和应用机器人技术的平台,就像新加坡南洋理工大学学生一样,制作各式各样的机械臂来完成规定任务,并借此探讨机器人技术。下面两个视频就展示了他们在学习《机器人》课程的同时,进行动手实践情况。


路过

雷人
9

握手

鲜花

鸡蛋

刚表态过的朋友 (9 人)

返回顶部