git项目:rc-joystick
RemoteControl
JSTestG29

(1)检查端口并读取方向盘数据
参考博客
项目上需要使用罗技(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;
}

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

二、利用ros的joy包进行开发

  1. 运行环境
    操作系统: Ubuntu 18.04
    ROS版本: ROS Melodic
  2. 安装手柄驱动和包
    依次输入以下命令安装
sudo apt-get install ros-melodic-joy(ROS相关项,Jetson TK1只安装这一个)
sudo apt-get install ros-melodic-joystick-drivers
rosdep install joy
rosmake joy
  1. 使用步骤
    3.1 将游戏手柄接口的用户群组更改为dialout群组
    电脑插上游戏手柄后默认情况下游戏手柄接口名称为js0,其默认的所有者和群组都是root,即需要root权限才能进行操作。可以输入以下命令进行查看:
ls -l /dev/input/js0

输入以下命令更改js0的root群组为dialout群组:

sudo chgrp dialout /dev/input/js0

再次输入:ls -l /dev/input/js0 查看,若输出以下信息,则表示更改成功:

crw-rw-r--+ 1 root dialout 13, 0 10月 5 09:03 /dev/input/js0

3.2 测试手柄是否设置成功
确保在电脑上插上手柄接收器后,输入以下命令进行测试:

sudo jstest /dev/input/js0

按下手柄按键,终端上会显示按键信息,若没有出现则执行以下命令:

sudo apt-get install joystick

信息显示如下:

Driver version is 2.1.0.
Joystick (Xbox 360 Wireless Receiver) has 4 axes (X, Y, Rx, Ry)
and 17 buttons (BtnX, BtnY, BtnTL, BtnTR, BtnTR2, BtnSelect, BtnStart, BtnMode, BtnThumbL, BtnThumbR, ?, ?, ?, (null), (null), (null), (null)).
Testing … (interrupt to exit)
Axes: 0: 0 1: 0 2: 0 3: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off 11:off 12:off 13:off 14:off Axes: 0: 0 1: 0 2: 0 3: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off 11:off 12:off 13:off 14:off Axes: 0: 0 1: 0 2: 0 3: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off 11:off 12:off 13:off 14:off Axes: 0: 0 1: 0 2: 0 3: 0 Buttons: 0:off 1:off 2:off 3:o
3.3 运行手柄节点
分别在两个终端下依次输入以下命令来开启ROS和joy_node节点:

roscore
rosrun joy joy_node

下面命令可以查看话题内容:

rostopic echo joy

按下按键可收到如下信息则表示成功,做项目时只需订阅这个话题:

header: seq: 1stamp: secs: 1525826012nsecs: 692879198frame_id: ''
axes: [0.0, -0.0, 0.0, 0.0]
buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
---
header: seq: 2stamp: secs: 1525826012nsecs: 696846275frame_id: ''
axes: [0.0, -0.0, 0.0, 0.0]
buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
---
header: seq: 3stamp: secs: 1525826012nsecs: 700968664frame_id: ''
axes: [0.0, -0.0, 0.0, 0.0]
buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

原文链接:https://blog.csdn.net/hengheng_51/article/details/80246918

三、调试阶段——找到方向盘对应的动作接口
ros的joy数据格式为

---
header: seq: 1275stamp: secs: 1631168393nsecs: 841879898frame_id: "/dev/input/js0"
axes: [-0.46589395403862, -1.0, 0.0, 0.0, 0.0, 0.0]
buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
---

方向盘对应 axes[0] 从左至右为[-32767,32767]ros中为从左只有为[-1,1]
离合对应 axes[1] 从上至下为[32767,-32767]ros中为从上至下为[-1,1]
刹车对应 axes[3] 从上至下为[32767,-32767]
油门对应 axes[2] 从上至下为[32767,-32767]
左拨片 buttons[5]
右拨片 buttons[4]
红色圆环包围的回车键 buttons[23]
加号键 buttons[19]
减号键 buttons[20]
方向键上 axes[5] -32767 方向键下axes[5] 32767
方向键左 axes[4] -32767 方向键右axes[4] 32767

L2键 buttons[7]
L3键 buttons[11]
R2键 buttons[6]
R3键 buttons[10]

罗技G29方向盘linux下的开发相关推荐

  1. Unity接入罗技G29方向盘,通过SDK获取按键信息

    Unity接入罗技G29方向盘,通过SDK获取按键信息 说明:   最近需要做一个外设汽车驾驶相关的软件,采用的外设 罗技G29方向盘,项目中遇到的问题这里记录一下. 项目准备:   1.下载罗技的S ...

  2. ubuntu20.04安装Carla并配置罗技G29方向盘使用

    环境:ubuntu20.04+anaconda+python3.7+ros2 foxy+Logitech g29 一.安装Carla github地址: https://github.com/carl ...

  3. Linux下C++开发工具介绍

    概述     就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, an ...

  4. 【转载】Visual Studio 2015 for Linux更好地支持Linux下的开发

    原文:Visual Studio 2015 for Linux更好地支持Linux下的开发 英文原文:Targeting Linux Made Easier in Visual Studio 2015 ...

  5. (转)Linux下C++开发初探

    1.开发工具 Windows下,开发工具多以集成开发环境IDE的形式展现给最终用户.例如,VS2008集成了编辑器,宏汇编ml,C /C++编译器cl,资源编译器rc,调试器,文档生成工具, nmak ...

  6. Linux下服务器端开发流程及相关工具介绍(C++)

    原文:Linux下服务器端开发流程及相关工具介绍(C++) 去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把 ...

  7. Linux下Java开发环境的搭建Tomcat6+jdk6+eclipse3.5.2+Myeclipse9.0+mysql5.1.47

    Tomcat6+jdk6+eclipse3.5.2+Myeclipse9.0+mysql5.1.47 1.JDK的安装:usr/java/jdk1.6.0_25 下载:jdk-6u25-linux-i ...

  8. Linux下golang开发环境搭建

    对于golang开发来说,Windows下可以用vscode或者liteide都不错,但是Linux下的开发也就只有vim了,所以怎么搞笑的利用vim进行golang开发呢? 参考官方推荐的一个插件: ...

  9. Linux下c开发 之 线程通信

    Linux下c开发 之 线程通信 1.Linux"线程" 进程与线程之间是有区别的,不过Linux内核只提供了轻量进程的支持,未实现线程模型.Linux是一种"多进程单线 ...

  10. linux应用程序是什么,linux下c开发了一个应用程序,它的扩展名是什么?

    这个貌2113似涉及到linux文件系统.linux文件系统与windows的不相同5261,windows系统应该是通4102过文件后缀来进行文件类型是别的,而1653linux虽然也会借鉴后缀信息 ...

最新文章

  1. jQuery获取浏览器URL链接的值
  2. 073_JS JSON
  3. Java web学习(一)Servlet简介
  4. 86句管理名言:管理=勤奋+智慧+知识+心理学
  5. Django 自定义表名
  6. 0007-Reverse Integer(整数反转)
  7. 表扬几位积极的同学!
  8. jquery filter和not
  9. error C1128:字节数超过对象文件格式xxxx.cpp限制:请使用/bigobj进行编译 cmake的解决方式
  10. 【Python-GPU】GPU数据科学加速包——RAPIDS
  11. Memcached原理与应用
  12. transform、accumulate —— C++ 下的 MapReduce
  13. html5开发播放器,larkplayer: 插件化的 HTML5 播放器
  14. Java设计模式应用——工厂模式
  15. 最新版mysql8.0.13如何汉化_mysql8.0.13下载与安装图文教程
  16. Python零基础入门基础教程(非常详细)版
  17. CDP产品大观之“准CDP”
  18. Deep Neural Networks are Easily Fooled High Confidence Predictions for Unrecognizable Images
  19. 搭建github博客错误汇总
  20. 最新宝塔去除强制绑定手机号

热门文章

  1. 【Python实现】运输问题的表上作业法(二):利用位势法判断当前解的最优性
  2. 21天c语言 ppt,21天学通C语言 第1章 C语言与程序概述.ppt
  3. hrbust/哈理工oj 2220 强迫症【思维】
  4. MTK camera tuning学习中遇到的一些问题(调试前)
  5. winfrom实现,斑马Gk888t打印机,连续打印二维码
  6. Altium差分布线和等长方法
  7. shared pool 和buffer pool 详解(之二, Cache Buffers LRU Chain、Cache Buffers LRU Chain闩锁竞争与解决)
  8. 如何使用离线网站,打开离线网站
  9. php把日期转成时间戳,php如何把日期转为时间戳
  10. python萌新笔记----基于requests库请求API下载网易云(VIP)音乐