Ubuntu环境下读取罗技G29方向盘信息

本篇博客最早发布于实验室公共博客,但已无人维护,现迁移至个人博客


引言

在这里插入图片描述

实验室有这么酷的驾驶设备,来了一年还没有实际操作过,早就蠢蠢欲试了,哈哈哈不过之前负责的师兄还在就一直没敢用,现在他毕业了就可以为所欲为了

之前师兄好像都是在Windows下开发的,我觉得比较麻烦而且与现有的框架感觉兼容性不高,所以还是选择了在Linux下开发

信息查看

首先要确定插入的设备哪一个是G29方向盘,下面两个命令都可以

ls /dev/input
或
dmesg

一般来说是event11js0

要查看方向盘信息,在终端输入

cat /dev/input/js0 | hexdump

输出信息如下

(base) redwall@redwall-desktop:~$ cat /dev/input/js0 | hexdump
0000000 d754 0053 0000 0081 d754 0053 0000 0181
0000010 d754 0053 0000 0281 d754 0053 0000 0381
0000020 d754 0053 0000 0481 d754 0053 0000 0581
0000030 d754 0053 0000 0681 d754 0053 0000 0781
0000040 d754 0053 0000 0881 d754 0053 0000 0981

显然没什么可读性

安装操纵杆的校准工具:jstest-gtk

sudo aptitude install jstest-gtk

建议大家熟悉使用aptitude而不是apt

安装完成后在终端运行

jstest-gtk /dev/input/js0

出现如下图形界面,方向盘信息均在图形界面中进行了显示

在这里插入图片描述

结合ROS的joy包进行开发

安装并编译相关包,在终端输入

sudo aptitude install ros-melodic-joy
sudo aptitude install ros-melodic-joystick
sudo aptitude install ros-melodic-joystick-drivers
rosdep install joy
rosmake joy

在两个终端中分别输入

roscore
rosrun joy joy_node

查看现有的话题

(base) redwall@redwall-desktop:~/catkin_ws$ rostopic list 
/diagnostics
/joy
/joy/set_feedback
/rosout
/rosout_agg

其中/joy话题包含了需要的方向盘信息,查看/joy话题的内容

(base) redwall@redwall-desktop:~$ rostopic echo /joy

输出

---
header: seq: 386stamp: secs: 1657894839nsecs: 565566079frame_id: "/dev/input/js0"
axes: [0.648137629032135, 0.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]
---
header: seq: 387stamp: secs: 1657894839nsecs: 567570108frame_id: "/dev/input/js0"
axes: [0.6481055021286011, 0.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]
---
header: seq: 388stamp: secs: 1657894839nsecs: 573687380frame_id: "/dev/input/js0"
axes: [0.6480733752250671, 0.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]

查看/joy话题的信息

(base) redwall@redwall-desktop:~$ rostopic info /joy
Type: sensor_msgs/JoyPublishers: * /joy_node (http://redwall-desktop:41415/)Subscribers: None

可以看到该话题是由/joy_node节点发布的,信息的数据类型为sensor_msgs/Joy

查看sensor_msgs/Joy的消息格式

(base) redwall@redwall-desktop:~$ rosmsg show sensor_msgs/Joy
std_msgs/Header headeruint32 seqtime stampstring frame_id
float32[] axes
int32[] buttons
  • seq——消息序列
  • stamp——消息的时间戳
  • frame_id——消息的来源
  • axes——方向盘中轴的信息,以数组的形式
  • buttons——方向盘中按键的信息,以数组的形式

所以在正常使用中只要订阅该话题,并对该话题发布的消息进行解析即可获取G29方向盘的信息

编写简单的测试程序

#include <ros/ros.h>
#include <sensor_msgs/Joy.h>
#include <iostream>
using namespace std;void steer_callback(const sensor_msgs::Joy::ConstPtr &msg)
{cout << "Receive control message from:" << msg->header.frame_id << endl;for (int i = 0; i < msg->axes.size(); ++i){if (msg->axes[i] != 0.0){cout << "Axis " << i << " is not zero!" << endl;cout << "Axis " << i << " value:" << msg->axes[i] << endl;}}for (int i = 0; i < msg->buttons.size(); ++i){if (msg->buttons[i] != 0.0){cout << "Button " << i << " is not zero!" << endl;cout << "Button " << i << " value:" << msg->axes[i] << endl;}}cout << endl;
}int main(int argc, char *argv[])
{ros::init(argc, argv, "logitech_steer");ros::NodeHandle nh;ros::Subscriber sub = nh.subscribe("/joy", 1, steer_callback);ros::spin();return 0;
}

编写简单的launch文件

<?xml version="1.0"?>
<launch><node pkg="joy" type="joy_node" name="joy_node" output="screen" /><node pkg="steer_test" type="steer_test" name="steer_test" output="screen" />       
</launch>

运行输出

(base) redwall@redwall-desktop:~/catkin_ws$ roslaunch steer_test steer_test.launch 
... logging to /home/redwall/.ros/log/dbe33e8e-043a-11ed-a8dc-000babe43e9a/roslaunch-redwall-desktop-20515.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.started roslaunch server http://redwall-desktop:46371/SUMMARY
========PARAMETERS* /rosdistro: melodic* /rosversion: 1.14.13NODES/joy_node (joy/joy_node)steer_test (steer_test/steer_test)ROS_MASTER_URI=http://localhost:11311process[joy_node-1]: started with pid [20547]
process[steer_test-2]: started with pid [20548]
[ WARN] [1657895770.683714324]: Couldn't set gain on joystick force feedback: Bad file descriptor
[ INFO] [1657895770.685046029]: Opened joystick: /dev/input/js0. deadzone_: 0.050000.
Receive control message from:/dev/input/js0
Axis 0 is not zero!
Axis 0 value:0.648041Receive control message from:/dev/input/js0
Axis 0 is not zero!
Axis 0 value:0.648009Receive control message from:/dev/input/js0
Axis 0 is not zero!
Axis 0 value:0.647977Receive control message from:/dev/input/js0
Axis 0 is not zero!
Axis 0 value:0.647945

确定按键与轴的对应关系

方向盘axes[0]
离合axes[1]
刹车axes[3]
油门axes[2]
左拨片buttons[5]
右拨片buttons[4]
红色圆环包围的回车键buttons[23]
加号键buttons[19]
减号键buttons[20]
方向上下键axes[5]
方向左右键axes[4]
L2键buttons[7]
L3键buttons[11]
R2键buttons[6]
R3键buttons[10]
  • axes数组中数据的范围在[-1,1],将[-32767,32767]进行了归一化
  • buttons数组中的值只有0和1,可以认为是一个布尔量,按一下则变为true
  • 方向盘顺时针为正,逆时针为负
  • 油门、离合、刹车抬起时为-1,踩下时为1
  • 方向上键为-1,下键为1,与正常印象中的相反,这和罗技手柄倒是一致的
  • 方向左键为-1,右键为1,同样与正常印象中的相反

参考博客

罗技G29方向盘linux下的开发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/2205.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Find My资讯|苹果Find My技术应用于车内丢失设备

美国专利商标局正式授予苹果两项泰坦项目新专利&#xff0c;分别是扩展其针对车内丢失设备的“Find My”设备服务&#xff0c;以及用于自动驾驶汽车的高级传感器系统&#xff0c;其中传感器系统还涵盖了带有摄像头系统的车辆&#xff0c;而摄像头系统除可3D重建场景之外&#x…

【独家揭秘】微信可以自动加好友自动打招呼啦!

最近客户好友做某书内容爆了&#xff0c;每天都引流很多人来加他的微信&#xff0c;基本每天都需要花大量时间去通过好友&#xff0c;导致没有时间去做后续的维护发展客户&#xff0c;于是找到我大吐苦水&#xff0c;问我有什么办法可以解决&#xff1f; 嘿&#xff0c;这不巧了…

参与 2023 第二季度官方 Flutter 开发者调查

Flutter 3.10 已经正式发布&#xff0c;每个季度一次的 Flutter 开发者调查也来啦&#xff01;邀请社区的各位成员们填写&#xff1a; 调研旨在了解你对 Flutter 的满意程度以及对其各个子系统的反馈。你的意见将对我们改进 Flutter 的功能和性能产生重要影响。 在这次调研中&a…

抖音最新版本抓包

1.下载fiddler抓包工具 2.配置https抓包环境 3.抓包工具配置好了之后&#xff0c;我们确保手机和电脑在同一个局域网中 4.打电脑CMD 输入 ipconfig 查看电脑的ip地址 5.打开我们的手机设置代理 6.打开浏览器 输入&#xff1a;你的电脑ip:8888 下载证书 7.打开Re文件管理器(ps…

Ceph分布式存储系统搭建

目录 安装部署示例 &#xff08;一&#xff09;准备环境 1). 设置主机名 2). 关闭防火墙 3).添加sdb磁盘并格式化 4).配置hosts解析文件 5).配置免密登录 6).同步时区 7). 安装 Ceph 包 &#xff08;二&#xff09;创建 Ceph 集群 1、 安装ceph-deploy管理工具 2、 …

webpack3 打包vue项目导致app体积过大

问题说明&#xff1a;打包导致 js 很大&#xff0c;然后访问特别慢。 Q&#xff1a;如果你的 js 达到了好几M&#xff0c;&#xff08;除了个别情况&#xff0c;比如的代码量真的超级大到不行&#xff0c;其实这个本身就不成立&#xff09;。我最开始就是&#xff0c;打包了我…

广州华锐互动:建筑施工VR虚拟仿真实训系统

VR技术在施工现场安全教育中有着广泛的应用。随着VR技术的不断发展&#xff0c;越来越多的企业开始将其应用于施工现场安全教育中&#xff0c;以提高工人的安全意识和应对能力。 传统的施工现场安全教育往往需要大量的时间和人力物力投入&#xff0c;而且效果并不理想.而VR技术…

数据挖掘(7.1)--数据仓库

目录 引言 一、数据库 1.简介 2.数据库管理系统(DBMS) 二、数据仓库 数据仓库特征 数据仓库作用 数据仓库和DBMS对比 分离数据仓库和数据库 引言 数据仓库的历史可以追溯到20世纪60年代&#xff0c;当时计算机领域的主要工作是创建运行在主文件上的单个应用&#xff0…

Bootstrap CSS 概览

文章目录 Bootstrap CSS 概览HTML 5 文档类型&#xff08;Doctype&#xff09;移动设备优先响应式图像全局显示、排版和链接基本的全局显示排版链接样式 避免跨浏览器的不一致容器&#xff08;Container&#xff09;Bootstrap 浏览器/设备支持 Bootstrap CSS 概览 在这一章中&a…

华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(一)

系列文章目录 个人简介&#xff1a;机电专业在读研究生&#xff0c;CSDN内容合伙人&#xff0c;博主个人首页 Python面试专栏&#xff1a;《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读&#xff0c;一起进步&#xff01;&#x1f31f;&#x1f31f;&#x1f31f; …

逍遥自在学C语言 | 常见的预定义宏

前言 在C语言中&#xff0c;预定义宏是由编译器提供的一组特殊标识符&#xff0c;可以在程序中直接使用&#xff0c;无需进行额外的定义。 预定义宏可以提供有关源文件、行号、日期、时间和函数名等信息&#xff0c;对于调试和日志记录非常有用。 一、人物简介 第一位闪亮登…

打造自己的分布式MinIO对象存储

MinIO是一个对象存储解决方案&#xff0c;它提供了一个与Amazon Web Services S3兼容的API&#xff0c;并支持所有核心S3特性。MinIO旨在部署在任何地方——公共云或私有云、裸机基础架构、协调环境和边缘基础架构。 分布式MinIO如何工作 Server Pool由多个Minio服务节点与其附…