Linux(Ubuntu 14.04) 罗技(logitech) G29 游戏方向盘数据解析(支持自定义开发)

项目上需要使用罗技(logitech) G29 游戏方向盘来进行演示远程驾驶。

罗技(logitech) G29 游戏方向盘与window系统有专门的“logitech 游戏软件”,可以对其驱动与设置,但是window系统要获取方向盘数据,并进行定制开发好像要借助unity来实现,这个与我们主研方向不一致,所以没必要时就不走这条路。

在linux系统下,有没有办法获取方向盘数据?答案是肯定的。

当我们将G29连接上电脑时,在/proc/bus/input/devices 中会多出一个设备:/dev/input/event11 (或者 /dev/input/js0)

这个设备文件就是我们的G29的input节点,当我们转动方向,或者踩油门时,这个节点上都会有数据产生。

可以通过以下命令查看:

cat /dev/input/js0 | hexdump

但这个打印出来的是原始的hex数据,没有可读性,那现在问题就是:如何将这个数据解析成具体的可读的数据?

从网上找了许久的资料,没有找到可参考的。无意间却发现了一个操纵杆的校准工具:jstest-gtk

可以通过命令进行安装:

apt-get install jstest-gtk

运行后(jstest-gtk /dev/input/js0 ),有一图形界面,可以看到当操作g29时,数据在界面上都有对应的显示,

方向盘、油门、刹车等,都有数据条,也就是说这个工具已经帮我们把 cat /dev/input/js0 | hexdump 进行了转换,

那我们就可以基于这个源码去开发了,(源码下载地址:https://download.csdn.net/download/amlinsan/12274982

拿到jstest-gtk-0.1.0后,要安装以下工具:

apt-get install scons

apt-get install cmake

apt-get install sigc++

apt-get install gtkmm-2.4

apt-get install libboost-all-dev

如果是ubuntu 14.04的话,需要在软件中心安装:gtkglextmm

编译时可能会报错,在joystick.cpp中加下头文件

#include <stdint.h>

#include <unistd.h>

编译方式,执行: scons

运行方式: jstest-gtk /dev/input/event11

关于方向盘与按钮等数据对应的接口是:

joystick_test_widget.cpp中的:

void
JoystickTestWidget::axis_move(int number, int value)
{
  axes.at(number)->set_fraction((value + 32767) / (double)(2*32767));

  std::ostringstream str;
  str << value;
  axes.at(number)->set_text(str.str());
  axis_callbacks[number](value / 32767.0);
  std::cout << "amlinsan axis_move-number:" << number << "; value:" << value << std::endl;
}

void
JoystickTestWidget::button_move(int number, bool value)
{
  if (value)
    buttons.at(number)->set_down(true);
  else
    buttons.at(number)->set_down(false);
  std::cout << "amlinsan button_move-number:" << number << "; value:" << value << std::endl;
}

接下来就在这里改就好了。

 


版权声明:本文为amlinsan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。