14

我正在编写一个需要从 Xbox 360 控制器获取输入的程序。然后输入将被无线发送到我正在建造的 RC 直升机。

到目前为止,我了解到这可以使用 DirectX 中的 XInput 库或 XNA 中的输入框架来完成。

我想知道是否还有其他可用的选项。我的程序的范围相当小,而且必须安装像 DirectX 或 XNA 这样的大型游戏库似乎有些过分。此外,我希望该程序是跨平台的,而不是特定于 Microsoft 的。

有没有一种简单的轻量级方法可以用 Python 之类的东西来获取控制器输入?

编辑以回答一些评论:

直升机总共有 6 个螺旋桨,排列成 3 个同轴对。基本上,它将与非常相似,只是它的成本约为 1,000 美元,而不是 15,000 美元。它将使用 Arduino 进行板载处理,使用 Zigbee 进行无线控制。

选择360控制器是因为它设计得很好。它非常符合人体工程学,并具有所需的所有控制输入。对于那些熟悉直升机控制的人来说,左操纵杆将控制集体,右操纵杆控制俯仰和滚动,模拟触发器将控制偏航。模拟触发器是 360 控制器的一大特色。PS和大多数其他人都没有。

我有一个该项目的网页,但它仍然很稀疏。我确实计划记录整个设计,所以最终它会很有趣。
http://tricopter.googlecode.com
顺便说一句,为 googlecode 项目提供博客功能会扼杀谷歌吗?

如果可能的话,我希望 360 控制器输入程序能够在 Linux 和 Windows 中运行。不过最终,我想将控制器直接连接到嵌入式微控制器板(如 Arduino),这样我就不必通过计算机,但目前它不是一个高优先级。

4

4 回答 4

9

这并不是那么困难。正如前面的人提到的,您可以使用 SDL 库来读取 xbox 控制器的状态,然后您可以用它做任何您想做的事情。

有一个 SDL 教程:http ://sdl.beuc.net/sdl.wiki/Handling_Joysticks非常有用。

请注意,Xbox 控制器具有以下功能:

  • 两个操纵杆:
    • 左操纵杆是轴 0 和 1;
    • 左触发器是轴 2;
    • 右操纵杆是轴 3 和 4;
    • 右触发器是轴 5
  • 一顶帽子(方向键)
  • 11 个 SDL 按钮
    • 其中两个是操纵杆中心压力机
  • 两个触发器(作为轴,见上文)

即将推出的 SDL v1.3 也将支持力反馈(又名触觉)。

我想,由于这个帖子已经有好几年了,你已经做了一些事情,所以这篇文章主要是为了通知未来的访问者。

于 2011-03-13T21:32:06.683 回答
7

PyGame可以读取操纵杆,这就是 X360 控制器在 PC 上的显示方式。

于 2009-03-31T02:16:35.800 回答
1

好吧,如果你真的不想添加对 DirectX 的依赖,你可以在平台 SDK 中使用旧的 Windows Joystick API -- Windows Multimedia -> Joystick Reference。

标准的免费跨平台游戏库是 Simple DirectMedia Layer,最初是为了将 Windows 游戏移植到 Unix (Linux) 系统而编写的。它是一个非常基本的轻量级 API,倾向于支持每个系统上功能的最小子集,并且它具有大多数主要语言的绑定。它具有非常基本的操纵杆和游戏手柄支持(例如,没有力反馈),但它可能足以满足您的需求。

于 2009-03-31T02:36:21.820 回答
0

也许 Mono.Xna 库添加了 GamePad 支持,这将提供您正在寻找的跨平台功能:
http ://code.google.com/p/monoxna/

至于对库过于沉重的担忧,当然,对于这个选项,它可能是真的……但是,它可能会为将来做一些漂亮的可视化提供机会。

免责声明:我不熟悉mono xna项目的状态,所以它可能还没有添加这个功能。但是,这是一个选择:-)

于 2009-06-04T13:48:43.157 回答