五自由度混合鼠标器装置的制作方法

文档序号:6613865阅读:161来源:国知局

专利名称::五自由度混合鼠标器装置的制作方法
技术领域
:本发明涉及一种五自由度混合鼠标器装置。技术背景现有的鼠标器(MOUSE),也称之为鼠标输入装置,主要为借由鼠标器于X、Y轴表面的移动使计算机屏幕的游标(CURSE)移动,从而操作更快捷方便,故鼠标器的使用非常普遍。传统三自由度鼠标器的构造可参看图l所示,这是一个机械鼠标器,此机械鼠标器在其底座的后部有个滚动球7,滚动球7与相互垂直的两个滚轴5和6适当接触,滚动球7横向和纵向移动时分别带动X轴5和Y轴6转动,轴5和轴6的末端都分别有个圆盘光栅,电路板上有相应的光电感测装置,以检测鼠标器在X和Y轴上的移动方向和移动距离。在鼠标器前端的上部有一个滚轮4,可前后滚动,滚轮4的结构一般有两种情况第一种是滚轮4就是一个圆盘光栅,滚轮4两侧在电路板上有相应的光电感测装置,此时滚轮4可固定在上盖上,也可固定在底座上;第二种情况是,滚轮4固定在底座上,它本身不是光栅结构,但是它的中心有根轴,轴的另一端有一个圆盘光栅,该光栅的两侧在电路板上有相应的光电感测装置,滚轮4的转动带动圆盘光栅的转动,从而可以检测Z轴上的移动方向和移动距离。功能按键1、2、3分别为鼠标器的左、中、右键,以分别执行软件所赋予的功能,如选定、执行、取消。上述仅以机械鼠标器为例,光学鼠标器的左、中、右键和Z轴滚轮与机械鼠标器相同,只是X、Y轴的检测不同,光学鼠标器没有滚动球7,也没有滚轴5和6,它在尾部有一个光电传感器芯片,该芯片一般都有图像获取窗口、数据处理部分和数据输入输出部分,与光学器件和光电感测装置配合使用,以检测鼠标器在X、Y轴上的移动方向和移动距离。这两种鼠标器的感测结构不同,但是它们的功能却是相同的,都只有三个自由度,仅能沿X、Y和Z轴方向移动,对于现今三维游戏和虚拟现实的兴起,这样的鼠标器是无法满足要求的,因此有予以改进的必要。
发明内容本发明的主要目的在于提供一种五自由度混合鼠标器装置,其既具有X、Y、Z三轴向的感测结构,又增加两个自由度,可实现分别绕X轴和Y轴旋转。在空间中,完全独立的只有五个自由度,因此该鼠标器能实现三维空间的定位和交互输入。本发明提供了一种五自由度混合鼠标器,在鼠标器上方设有三个功能按键,底面设有供鼠标器光标沿X轴、Y轴轴向移动的感测装置,在鼠标器前端的上方位置设有一个Z轴滚轮,该滚轮前后方向的转动供鼠标器控制物体沿Z轴移动,其内部对应的光电感测装置和提供鼠标器光标沿X轴、Y轴轴向移动的感测装置都连接在一块电路板上的微控制器的输入端口上,其特征在于,还含有两个在鼠标器侧壁位置上的滚轮,在两个侧壁上各有一个,在所述电路板上分别有相对应的光电感测装置,分别用大拇指和中指或大拇指和无名指上下滚动滚轮,供鼠标器控制物体绕X轴、Y轴旋转,以构成在三维空间移动和旋转的五自由度交互输入鼠标器;在所述的微控制器上,设有绕X轴旋转、绕Y轴旋转的感测数据输入端,分别与绕X轴旋转、绕Y轴旋转的光电感测装置的输出端相连;该微控制器以轮询方式不断地读取绕X轴旋转、绕Y轴旋转输入端的数据,把这些数据存储为当前状态数据,并且在下一时刻把该当前状态数据存储为先前状态数据,将此时刻的当前状态数据与先前状态数据对照,查询预先设定的转换表得到转换取值c,对于绕X轴旋转、绕Y轴旋转这两个自由度,每次得到的转换取值c都累加在事先定义好的代表该自由度状态的变量di上,其中,di的初始值为0,此后,分别把代表绕X轴旋转、绕Y轴旋转各自由度状态的d,值与O比较,只要其中一个自由度的di值非0,就进行中断触发,把X轴、Y轴、Z轴、绕X轴旋转、绕Y轴旋转这五个自由度连同按键共6个字节的数据送给计算机,所述的转换取值c=0表示鼠标控制目标物体静止,c=l和c=-l分别表示鼠标控制目标物体逆时针和顺时针转动;在所述的计算机内设有过滤驱动程序,以便把所增加的绕X轴旋转、绕Y轴旋转这两个自由度的数据过滤出来传给应用程序进行处理,该过滤驱动程序创建了设备对象Devicel和设备对象Device2,由Devicel截获低层传来的所增加的两个自由度的数据,通过全局变量传给Device2,再由Device2与应用程序建立连接;在所述的应用程序中,利用0penGL的相关知识绘制一个六面体,根据OpenGL设定的两个标准函数,能使六面体绕从原点到标准函数中设定的点所形成的向量旋转设定的角度值,将两个标准函数中的点分别设定为X轴和Y轴上的点就能实现绕X轴和Y轴的旋转,旋转的角度值就是根据应用程序与过滤驱动程序通信得到的数据来度量的。本发明的效果为提供一种能实现三维空间定位和交互输入的鼠标器装置,该鼠标器不仅完全兼容现有的二维鼠标器,即具有左、中、右按键,X、Y,Z轴,而且能绕X轴和Y轴旋转。这增加的两个自由度分别位于鼠标器的两个侧壁,分别便于用大拇指和中指(或无名指)操作,符合人体工程学原理。图1为传统三自由度鼠标器的外观示意图。图2为本发明的外观示意图。图3为本发明的内部机械结构示意图,其中,1为X轴光栅,2为Y轴光栅,3为Z轴的光栅(但是它在鼠标外壳上盖的滚轮里,所以用虚线),4为绕X轴旋转的Rx轴滚轮光栅,5为绕Y轴旋转的Ry轴滚轮光栅,6位左键,7为中键,8为右键,9为接收管,10为发光管。图4为本发明中圆盘光栅光学编码器的结构。图5为本发明中接收管的两个光敏晶体管PT1与PT2的状态变化,其中,(a)图为圆盘逆时针方向旋转时,(b)图为圆盘顺时针方向旋转时。图6为本发明的驱动程序流程图。具体实施方式如图2本发明外观图和附件一的外观照片所示,其完全兼容了传统鼠标器的原有构造,而与传统鼠标器的不同之处在于图2中其两侧壁分别增加了一个滚轮8和9,分别用大拇指和中指(或无名指)操作,可实现绕X和Y轴的旋转,也可在应用程序中定义成其他功能,可参见附件二的实物内部结构照片和图3的内部机械结构示意图。增加的滚轮8和9的原理如下本发明中使用的芯片CY7C63101A是一个USB微控制器,圆盘光栅的一侧安装红外LED(发光二极管),另一侧安装由两个光敏晶体管集成的接收管,接收管的两个管脚连接在芯片CY7C63101A的GPIO(—般目的输入输出)管脚上,这样即可将圆盘光栅的转动转换成接收管的电子脉冲,芯片以轮询的方式不断地读取GPIO管脚的数据,将每个接收管当前的状态数据分别存储下来,并且在下一时刻将该当前状态数据存储为先前状态数据,然后査询表一就可以得到转换取值c,对于每个自由度,每次得到的c值都累加在事先定义好的代表该自由度状态的变量di上,其中d,被初始化为O,此后,分别将代表各自由度状态的di与O进行比较,只要其中一个自由度的d,非0,就进行中断触发将五个自由度连同按键共6个字节的数据传送给计算机。这里解释下光学编码器的工作原理,如图4,光学编码器圆盘中的黑色表示不透光,中间的白色表示透光。此时,光敏晶体管的状态为Ol,若圆盘逆时针转动(即图4中的圆盘左移),光敏晶体管的状态就变为11,如图5(a)所示,圆盘继续逆时针转动,光敏晶体管的转换状态依次为01—11—10—00—01;同理,圆盘顺时针转动时,如图5(b)所示,光敏晶体管的转换状态依次为01—00—10—11—01。从而,可以按照表一进行数据转换。本发明的五自由度鼠标器与现有的三自由度鼠标器是完全兼容的,因此,这里只需设计一个过滤驱动程序,把增加的两个自由度的数据过滤出来传给应用程序进行处理。由于过滤驱动程序创建的Device(设备)对象没有NT名字,也没有符号连接给它提供一个Win32名字,而是把这个没有名字的Device对象挂接到由某个低层驱动程序创建的Device对象来工作,因此过滤驱动程序不便于与应用程序建立连接,但是这里却需要把增加的两个自由度的数据过滤出来传给应用程序进行处理,于是,本发明的驱动程序除了创建过滤驱动程序本身的Device对象1外,再另外创建了一个Device对象2,由Device对象1截获低层传来的数据后通过全局变量传给Device对象2,最后用Device对象2与应用程序建立连接。这里的过滤驱动程序是内核模式的,内核模式的驱动程序与一般的程序不同,它是由I/O(输入/输出)管理器根据需要调用的子例程的集合。1/0管理器在下面的任何情况下调用一个相应的驱动程序例程驱动程序被装入时;驱动程序被卸出或系统关闭时;用户模式程序发出1/0系统服务调用时;共享硬件资源对驱动程序可用时;设备操作过程中的任何时候。这些都是标准例程,可参见微软发布的相关说明文档,图6中所说的例程都是标准例程。图6对该发明的驱动程序己经描述得很清楚了,下面对图6进行简单的补充说明主功能码是每个驱动程序都必须支持的,主功能码有很多个,每个驱动程序所支持的主功能码取决于设备的性质和它可以执行的操作种类,图6中的主功能码IRP_MJ—INTERNAL—DEVICE—CONTROL是只对内核模式客户程序可用的控制操作,没有Win32函数调用,主功能码IRP_MJ—DEVICE—CONTROL是对用户模式或内核模式客户程序可用的控制操作,对应的Win32函数为DeviceloControl函数,即可在应用程序中调用DeviceloControl函数来触发驱动程序中对该IRP—MJ_DEVICE—CONTROL的请求。在图6中还提到自定义私有的IOCTL(I/O控制代码)——IOCTL—OUTJJSB,微软支持自定义私有的IOCTL,只要按照它给定的标准定义就可,并且它建议私有IOCTL的名字形式为IOCTL—*_*。此外,图6中将全局变量Rx和Ry的数据复制到IRP—MJ—DEVICE—CONTROL的Associatedlrp.SystemBuffer域中(主功能码本身特定的域),在应用程序中就可使用DeviceloControl函数从该域中将这些数据取出来,从而实现应用程序与驱动程序的通信。由于增加两个自由度的数据被过滤出来后传给应用程序进行处理,因而,应用程序可以任意定义这两个自由度的功能。为了能更清楚阐释该发明,下面简单介绍一个VC++下的应用程序举例以说明是如何实现分别绕X轴和Y轴旋转的。首先调用CreateFile标准函数打开名为UsbMPot的设备,即过滤驱动程序中创建的Device对象2;然后用CreateThread标准函数创建一个与过滤驱动程序通信的后台线程,创建后台线程时有对应的应该执行的后台线程回调函数,不妨将该函数命名为ThreadPrc,在后台线程回调函数ThreadPrc中启动一个循环,使得该循环的循环条件一直为真,从而能不断读取到驱动程序中传来的数据,在循环中做以下三件事情第一,调用标准函数DeviceloControl函数,将该函数的IOCTL参数项设置为IOCTL—OUT—USB(与过滤驱动程序相对应,可参见图6及对该图的补充说明)即可取出Rx和Ry对应的数据,将这两个数据分别赋值给事先定义好的全局变量R1和R2;第二,若R1不为0,调用标准函数PostMessage在消息队列中产生消息参数为0x06的消息;第三,若R2不为0,调用标准函数PostMessage在消息队列中产生消息参数为0x07的消息;再调用标准函数WindowProc,当消息参数为0x06时触发自定义的名为0nRx()的消息响应函数,当消息参数为0x07时触发自定义的名为0nRy()的消息响应函数,在消息响应函数OnRx()中将全局变量Rl乘以60并调用自定义的DrawScene函数,在消息响应函数OnRy()中将全局变量R2乘以60并调用自定义的DrawScene函数;最后在DrawScene函数中先将事先定义好的另外两个全局变量Rx和Ry分别处理为"Rx+=R1;Ry+=R2;",然后利用OpenGL的相关知识绘制一个六面体(OpenGL是一个开放的图形程序接口,有很多相关的教程书籍),在正式绘制六面体之前设置两个函数为"glRotatef(Rx,l.Of,0.Of,0.Of);glRotatef(Ry'0.Of,l.Of,0.Of);",这里glRotatef为OpenGL标准函数,其第一个参数为旋转角度值,后面三个参数分别为空间坐标中的x、y、z值,该函数的作用就是绕从原点(O,O,O)到该点(x,y,z)所形成的向量旋转第一个参数所表示的角度值。这样,当滚动该发明的的左右滚轮时就可以看到该六面体分别绕X和Y轴旋转了。其实,应用程序有很多种,也可用其他方法实现分别绕X和Y轴旋转,这里只是举一个应用程序例子进行说明。上面所说的所有标准函数都可以査询微软的相关说明文档。下面举一个例子,将前面的圆盘光栅工作原理,芯片里的固件程序、驱动程序和应用程序例子都结合起来进行说明Rx对应的接收管当前的状态为OO,下个状态为Ol,再下一个状态为ll,即00—Ol—ll,根据表一,两次转换的取值都为l,表中0表示不变化,正负号分别代表转动的方向。在应用程序中得到这个转换取值后用下列公式进行计算a二c氺n其中n是一个转换系数,在我们目前的例子中取『60。并且后一次转换后的取值累加于前一次转换取值的基础上,这样连续两次滚动后三维空间中物体共绕X轴逆时针旋转2a度。本发明通过增加滚轮的方式来实现自由度的增加(这里的X轴、Y轴、Z轴、绕X轴旋转的Rx、绕Y轴旋转的Ry都叫做自由度),并且增加的滚轮的位置分别位于鼠标器的两个侧壁,适合于人手的特征,操作舒适方便;其完全向下兼容现在常用的三自由度鼠标器的功能,并且不安装新的驱动程序时,该鼠标器可直接当作三自由度鼠标器使用,安装新的驱动程序后在相应的应用程序里可实现三维交互输入;其继承了现在常用的三自由度鼠标器(只有X、Y、Z轴和三个按键)的操作模式和外形,对于三自由度鼠标器中已有的X、Y、Z轴和三个按键,不改变它们的位置和操作方法,而对增加自由度的操作也沿用人们对Z轴滚轮的使用习惯,因此一般人基本不需要花时间来适应该鼠标器的使用。表一五自由度的数据转换表<table>tableseeoriginaldocumentpage7</column></row><table>权利要求1、五自由度混合鼠标器装置,在鼠标器上方设有三个功能按键,底面设有供鼠标器光标沿X轴、Y轴轴向移动的感测装置,在鼠标器前端的上方位置设有一个Z轴滚轮,该滚轮前后方向的转动供鼠标器控制物体沿Z轴移动,其内部对应的光电感测装置和提供鼠标器光标沿X轴、Y轴轴向移动的感测装置都连接在一块电路板上的微控制器的输入端口上,其特征在于,还含有两个在鼠标器侧壁位置上的滚轮,在两个侧壁上各有一个,在所述电路板上分别有相对应的光电感测装置,分别用大拇指和中指或大拇指和无名指上下滚动滚轮,供鼠标器控制物体绕X轴、Y轴旋转,以构成在三维空间移动和旋转的五自由度交互输入鼠标器;在所述的微控制器上,设有绕X轴旋转、绕Y轴旋转的感测数据输入端,分别与绕X轴旋转、绕Y轴旋转的光电感测装置的输出端相连;该微控制器以轮询方式不断地读取绕X轴旋转、绕Y轴旋转输入端的数据,把这些数据存储为当前状态数据,并且在下一时刻把该当前状态数据存储为先前状态数据,将此时刻的当前状态数据与先前状态数据对照,查询预先设定的转换表得到转换取值c,对于绕X轴旋转、绕Y轴旋转这两个自由度,每次得到的转换取值c都累加在事先定义好的代表该自由度状态的变量di上,其中,di的初始值为0,此后,分别把代表绕X轴旋转、绕Y轴旋转各自由度状态的di值与0比较,只要其中一个自由度的di值非0,就进行中断触发,把X轴、Y轴、Z轴、绕X轴旋转、绕Y轴旋转这五个自由度连同按键共6个字节的数据送给计算机,所述的转换取值c=0表示鼠标控制目标物体静止,c=1和c=-1分别表示鼠标控制目标物体逆时针和顺时针转动;在所述的计算机内设有过滤驱动程序,以便把所增加的绕X轴旋转、绕Y轴旋转这两个自由度的数据过滤出来传给应用程序进行处理,该过滤驱动程序创建了设备对象Device1和设备对象Device2,由Device1截获低层传来的所增加的两个自由度的数据,通过全局变量传给Device2,再由Device2与应用程序建立连接;在所述的应用程序中,利用OpenGL的相关知识绘制一个六面体,根据OpenGL设定的两个标准函数,能使六面体绕从原点到标准函数中设定的点所形成的向量旋转设定的角度值,将两个标准函数中的点分别设定为X轴和Y轴上的点就能实现绕X轴和Y轴的旋转,旋转的角度值就是根据应用程序与过滤驱动程序通信得到的数据来度量的。全文摘要五自由度混合鼠标器装置属于鼠标器
技术领域
,其特征在于在鼠标器的两侧壁上各有一个滚轮,在内部电路板上有与该两个滚轮分别对应的光电感测装置,该两个感测装置的数据输出端分别与该电路板上微控制器的数据输入端相连,该微控制器根据所得到的当前状态数据与先前状态数据确定转换取值,再通过中断触发将数据传给计算机;该计算机内设有过滤驱动程序,用于把增加的绕X轴旋转和绕Y轴旋转这两个自由度的数据过滤出来与应用程序进行通信。本发明提供了一种能实现三维空间定位与交互输入的五自由度鼠标器,不仅完全兼容现有的二维鼠标器(三个自由度),而且在大拇指和中指或大拇指和无名指的操作下能实现绕X轴和Y轴的旋转。文档编号G06F3/033GK101158887SQ20071017796公开日2008年4月9日申请日期2007年11月23日优先权日2007年11月23日发明者王兴凤,秦开怀申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1