QQ登录

只需一步,快速开始

3.6 操纵杆的支持

2012-1-10 17:36| 发布者: flightgear| 查看: 12366| 评论: 0

    你能想象驾驶员在飞行过程中只通过键盘操纵飞机吗?因此为了获得更加真实飞行感受我们需要摇杆和脚蹬等操纵杆输入设备。现在市场上存在各种摇杆、驾驶杆、脚蹬,他们需要不同的平台支持,但在FlightGear中可以同时使用这些输入设备,而且使用起来也非常简单。(译者注:此文中操纵杆的概念包括了摇杆,驾驶杆,脚蹬等所有输入设备)FlightGear可以支持多种输入设备,它会自动检测连接上的摇杆或者脚蹬。试一下吧!你可以通过目录中的Help -> Joystick 发现FlightGear检测到了什
么样的硬件设备。在某些操作系统中操纵杆可能能正常使用,也有可能是无法正常使用的,我们有两种方法可以修正,其中第一种方法更加实用。
3.6.1 对摇杆的支持
总的要点
    为了使检测到的操纵杆能够正常工作,对于每一个设备都需要一个对应的xml 文件支持,这个文件描述了我们用到了什么轴和按钮,他们用来控制FlightGear中的什么功能。功能和轴或按键的对应关系我们称之为“绑定”。绑定文件的名字是任意的,只要保证它在操纵杆配置文件/FlightGear/joysticks.xml中存在就行,这个配置文件将告诉FlightGear去哪里寻找绑定文件。我们将在后面的例子中介绍这部分内容。
    FlightGear中已经包含了一些绑定文件,对于每个操作设备制造商都有其对应的文件。假如你有一个CH 产品的操作设备,可以在下面的文件夹下找到此绑定文件:/FlightGear/Input/Joysticks/CH,里面可能有对你的操纵杆有用的东西。如果存在这样的文件,并且你的操纵杆能够正常使用,那么这个文件将在运行FlightGear后发挥作用。如果这个文件不存在,我们将在下面介绍如何创建一个这样的文件,我们将通过修改已经存在的例子文件来实现。
确认你的操作杆存在
    你的电脑有没有检测到操作设备?在LINUX 下的一个方法是在系统重启时输入命令:
    dmesg | grep Joystick
    这样将会寻找包含Joystick的信息,如果你用的是Saitek的操作手柄,你将会看到类似下面的命令行:
    input0: USB HID v1.00 Joystick [SAITEK CYBORG 3D USB] on usb2:3.0
    这个命令行告诉我们系统找到了SAITEK CYBORG 3D USB。这并不是说操作手柄的驱动找到了操作手柄。如果你是在Windows下运行的,上面的方法将不会起作用,但你可以从下面的章节中获得方法。
确认驱动找到了你的操纵杆
    FlightGear有一个可执行文件js_demo。这个程序将输出系统中输入设备的个数、名字、能力。在Linux下你可以按照下面的方法在/FlightGear/bin下运行js demo:
    $ cd /usr/local/FlightGear/bin
    $ ˙/js demo
    在Windows下,打开命令提示符(开始\所有程序\附件),找到BIN文件夹,按照下面运行程序(假设FlightGear安装在c:\Flightgear):
    cd \FlightGear\bin
    js demo.exe
    在Mac OS X下,打开Terminal.app (/Applications/Utilities/)按下面方法运行js_demo如下:
    $ cd /Applications/FlightGear.app/Contents/Resources
    $ ./js demo
在我们的系统里,前几行会输出(用Ctrl-C停止程序)如下:
Joystick test program.
Joystick 0: “CH PRODUCTS CH FLIGHT SIM YOKE USB ”
Joystick 1: “CH PRODUCTS CH PRO PEDALS USB ”
Joystick 2 not detected
Joystick 3 not detected
Joystick 4 not detected
Joystick 5 not detected
Joystick 6 not detected
Joystick 7 not detected
+-------------JS.0---------------+-------------JS.1---------------+
| Btns Ax:0 Ax:1 Ax:2 Ax:3 Ax:4 Ax:5 Ax:6 | Btns Ax:0 Ax:1 Ax:2 |
+-------------------------------+-------------------------------+
| 0000 +0.0 +0.0 +1.0 -1.0 -1.0 +0.0 +0.0 . | 0000 -1.0 -1.0 -1.0 . . . . . |
    首先js_demo将会输出每个设备对应的编号,同时,每个设备的“名字”也包含在内,当我们为设备绑定xml文件时我们需要这些信息。
确认轴和按钮的编号
    利用js_demo可以确定轴和按钮的所对应的编号。通过查看js_demo的输出信息,确定设备每个轴和按钮对应的编号。注意编号从0开始。
    轴和按钮按照二进制数进行编号的,如0代表按钮0,1代表按钮1等。但这些编码在屏幕中是以16进制显示的:
0001表示按钮0 按下
0002表示按钮1 按下
0004表示按钮2 按下
0008表示按钮3 按下
0010表示按钮4 按下
0020表示按钮5 按下
0040表示按钮6 按下
... 等等一直到...
8000表示按钮15 按下
... 还有...
0014表示按钮2和4同时按下
... 等等.
    对Linux用户来说,还有另外一种方法可以确定操作设备轴和按钮的编号。大多数Linux操作系统都保护一个叫jstest的程序。如果你的系统中安装了CH的摇杆,jstest将输出如下命令行信息:
jstest /dev/js3
Joystick (CH PRODUCTS CH FLIGHT SIM YOKE USB ) has 7 axes and 12 buttons. Driver version is 2.1.0 Testing...(interrupt to exit)
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 6: 0 Buttons: 0:off 1:off 2:off 3:on 4:off 5:off 6:off 7:off 8:off 9:off 10:off 11:off
    注意括号中的设备名,这就是系统所找到的摇杆输入设备。
    当你操作摇杆轴时,轴所对应的编号数字就会随之发生改变,当你按下某个按钮时,对应的“on”“off”也会发生改变。通过上面的方式,你就能很快的确定轴和按钮对应的编号,从而避免进行数字进制的转换。
修改和配置操作杆的绑定文件
    通过前面的设置,你已经确定操作系统能找到并且能正常驱动操纵杆了,你也知道如何得到操纵杆的名字。现在你需要记下操作功能和其所对应的轴或按钮的编号。
    如下所示,根据从前面的js_demo 得到的信息制作一个表格,这里我们假设有5个轴方向,其中两个轴是和苦力帽相关联的。

    我们假定这个操纵杆的名字是“QUICK STICK 3D USB”。要让FlightGear检测到不支持的操纵杆,最简单和方便的办法修改现存的xml绑定文件。先在/FlightGear/Input/Joysticks/文件夹下找到xml文件。通过评估我们认为修改FlightGear/Input/Joysticks/Saitek/Cyborg-Gold-3d-USB.xml来实现我们的目标是最合适的,但由于这个文件定义所有的轴和按钮的功能,所以增加了我们修改的工作量。
    开始修改前,我们先必须为新的xml绑定文件取个名字,先为这个操纵杆新建一个文件夹QS,然后把选中的xml文件复制到此文件夹。
$ cd /usr/local/FlightGear/Input/Joysticks
$ mkdir QS
$ cd QS
$ cp /usr/local/FlightGear/Input/Joysticks/Saitek/
Cyborg-Gold-3d-USB.xml QuickStick.xml
    在Linux/UNIX操作系统下,我们安装FlightGear在/usr/local/FlightGear目录下。同样对Windows用户来说,FlightGear安装在c:FlightGear,可以打开命令行输入:
c:
cd /FlightGear/Input/Joysticks
mkdir QS
cd QS
copy /FlightGear/Input/Joysticks/Saitek/
Cyborg-Gold-3d-USB.xml QuickStick.xml
    然后,用编辑器打开QuickStick.xml,先找到标签,将SAITEK CYBORG 3D USB改为QUICK STICK 3D USB
    这段字符指定xml的一个键值, 是在标签之间。
    现在你可以比较前面制定的表格和现在的xml文件,先修改Saitek的elevator,搜索字符串然后修改为.下一步,注意到Saitek 到rudder对应的轴编号是2,所以将修改为
    继续比较表格中功能编号和xml文件中的键值然后按照上面的方式进行修改。如果QUICKSTICK USB和Saitek操纵杆轴方向相同但按钮数量不同,你必须删除这些按钮的键值。记住经常双击标签保证标签是成对存在的,否则使用此xml文件时会发生无法解析错误。
    最后自己花些时间去修改绑定文件,保证能和js_demo输出的信息保持一致,改完之后保存就行了。
    还有些用户报告说在不同的操作系统下同一操纵杆功能会有些不同,我们可以通过修改绑定文件很轻松的解决这些问题。
告诉FlightGear新绑定文件
    在FlightGear能正常使用新绑定文件前,你需要修改/FlightGear/joysticks.xml,文件,在"name"标签中间加上一串字符为
FlightGear指定新的绑定文件名,字符串如下
    你可以从菜单中选择Help -> Joystick Information看到FlightGear是如何定义操作的。
对Windows用户的一些建议
    上面所说的操作步骤在Windows下基本上也是一样的,如果你的操纵杆能正常工作,那很好。然而不幸的是你很有可能会遇到一些问题。
    首先感到烦心的用户是那些操作系统不是US版的用户。像上面所说的,你可以从jsdemo程序中得到设备名字,如果你的操作系统不是US版的,而且joystick.xml配置文件中也没有你的设备名,请在这个配置文件最开始加入一行:
    Microsoft-PC-Joysticktreiber
    注意此时不需要建立一个新的joystick .xml配置文件。
    除此之外,Windows操作系统还存在别的问题。如果你有两个USB设备,(比如一个摇杆,一个脚蹬)有可能同一个设备会被报告两次。在此情况下,你可以指定摇杆为设备0,步骤如下:首先操作摇杆观察jsdemo程序的输出结果,如果程序的第一组数据发生了改变,说明此时摇杆正好对应设备0,为首选设备,无需更改。如果程序的第二组数据发送改变,说明摇杆对应设备1,此时需要手动更改其为首选设备。进入Windows的控制面板,打开游戏控制器选择高级按钮。在这里你可以选择摇杆为首选设备。设置完成后你可以用jsdemo测试一下摇杆是不是能控制第一组数据了。
    到现在为止,我们无法用这种办法使脚蹬也能正常工作。因此,你需要自己寻找合适的办法去驱动操纵杆。
对Mac OS X用户的一些建议
    在Mac OS X操作系统中,大多数HID兼容操作杆已经正确定义在FlightGear。然而,有时候你的游戏杆由于某些原因不按预期工作,如操纵杆ID丢失,错误配置按钮或轴。在这种情况下,你需要修改操纵杆配置文件。
    Mac OS X下配置操纵杆的基本程序是和Linux相同的。主要区别是操纵杆的路径配置文件,并找到一个操纵杆名称。游戏杆配置文件在Contents/Resources/data/Input/Joysticks 中的FlightGear.app文件夹。你可以在启动界面选择“Advanced Features » Others » Open data folder”打开数据文件夹,还可以通过右键单击应用程序文件夹FlightGear图标,选择“显示包内容”内的应用程序访问文件夹。找到一个操纵杆的名称,并遵循以下步骤:
    1.通过选择MAC菜单|关于Mac|更多信息...查看系统概述。
    2.在左窗格中的硬件列表中选择USB。
    3.从USB驱动列表里找到你操纵杆的名称(例如逻辑至尊3D)。
    4.将操纵杆名称标签添加到XML配置文件中(例如Logitech Extreme 3D)。
    5.在FlightGear模拟器窗口,点击查看是否你的设备名称显示在Help|Joystick information中。
    如果你的游戏杆被正确识别但不按预期工作,你需要修改按钮或轴的设置。一些Mac用户报告说,使用操纵杆代替舵来控制油门,这是Mac OS X中一个典型的错误配置。要解决此问题,您需要在操纵杆配置文件中编辑两个轴标签。
    在很多情况下,方向舵被指派给轴2,油门指派给轴3。在MAC标签中编辑或增加一个轴标签(和油门标签)可以解决此问题。下面的例子是一个操纵杆配置文件的一部分,分配方向舵控制轴3。

Rudder

2
3
3

.....

3.6.2 操作杆via.fgfsrc的设置和支持
    幸运的是,我们现在有了一个更好、更简单的办法设置驾驶杆,并不用通过去设置xml绑定文件。
    设置你的操纵杆可使用一下几个步骤:
    1.在Windows下“开始” ->“所有程序”->附件中打开DOS命令。
    2.用命令更改到/FlightGear/bin目录(例如:cd c:\FlightGear\bin)
    3.运行fgjs工具。
    运行fgjs后,程序将告诉你找到了操纵杆,此时按照程序给定的指令进行操作,比如摇动轴或者点击按钮。做这个的时候小心行事,仔细看看屏幕输出,如果你觉得有地方做错了,可以关闭程序重新做一次。
    当你完成所有轴和按钮的校正后,此程序目录下将生成一个叫fgfsrc.js的配置文件。这个文件的内容可以被复制到你指定的目录(.fgfsrc/system.fgfsrc)。如何创建这个文件的详细信息,请参见3.5节。
    需要注意的是fgjs输出的是UNIX格式。因为,Windows的编辑器可能会显示不正确。因此选用一个支持UNIX下格式的编辑器对我们是有帮助的。我最喜欢的编辑器是PFE,可以从以下网址得到:http://www.lancs.ac.uk/people/cpaap/pfe/
    虽然在fgjs中已经指定了轴和按钮,但是输出的配置文件可能会存在一些错误,比如轴的移动方向相反或者轴的死区太小。如果存在以上问题,我们需要按照下面方式修改配置文件:
--prop:/input/joysticks/js[1]/axis[1]/binding/factor=-1.0
改成
--prop:/input/joysticks/js[1]/axis[1]/binding/factor=1.0
    为了帮助与调整,下面是一个操纵杆配置文件内容的简单介绍。基本上,所有轴的设置是按照以下结构定义的:
--prop:/input/joysticks/js[n]/axis[m]/binding/command=property-scale
--prop:/input/joysticks/js[n]/axis[m]/binding/property=/controls/steering option
--prop:/input/joysticks/js[n]/axis[m]/binding/dead-band=db
--prop:/input/joysticks/js[n]/axis[m]/binding/offset=os
--prop:/input/joysticks/js[n]/axis[m]/binding/factor=fa 
含义:
    n = 设备数量(通常初始为 0)
    m = 轴的数量(通常初始为 0)
    steering option = elevator, aileron, rudder, throttle, mixture, pitch(升降舵,副翼,方向舵,油门,混合,间距)
    dead-band = range within which signals are discarded.Useful to avoid jittering for minor yoke movements
    offset = Applies an offset after any factor.Useful to handle devices where the neutral position does not map to 0.
    factor = controls sensitivity of that axis; defaults to +1,with a value of -1 reversing the behavior
    你应该能够让你的操纵杆沿着这些路线工作。关于所有的细节,如何获得操作杆工作的按钮,John写了一个很有用的README,你可以在$FG_ROOT/Docs/README.Joystick.html中找到,遇到任何关于输入设备的问题,你都可以查看此文档。

1

鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (1 人)

相关分类

手机版|联系我们| FlightGear ( 京ICP备10014305号 )

GMT+8, 2019-8-26 14:39

Powered by Discuz! X3.2

© 2001-2013 FlightGear Inc.

返回顶部