如何通过ROS2 获取Xbox Series手柄通道信息

前言 

记录在Ubuntu下,连接Xbox Series时遇到的问题,并通过ROS2获取Xbox 手柄通道信息

系统:Ubuntu 22.04

ros版本:ros2 humble

Xbox型号:xbox series s

连接方式:usb和蓝牙

1.连接                                                                        

使用usb连接

使用typec直接将电脑和xbox连接,白灯常亮说明连接成功

        安装测试工具(可选)

sudo apt install joystick jstest-gtk

检查设备节点

ls /dev/input/js*  # 查看手柄设备(如 /dev/input/js0)

测试手柄输入

jstest /dev/input/js0  # 测试摇杆和按钮

说明手柄连接成功,并且可以看到通道对应的值

使用蓝牙连接

正常应该长按3s xbox上靠近电源键的按钮进行蓝牙进行配对就行

注意:xbox上指示灯快闪表示蓝牙正在配对

点击Xbox Wireless Controller直接配对即可

如果上面蓝牙列表 没有发现Xbox Wireless Controller,重复上述配对步骤,刷新列表多试几次

针对蓝牙列表找不到Xbox Wireless Controller设备的情况(正如我一样),可以参考如下解决办法

1.可以先使用上述usb连接方式,初步测试一下看设备是否能够正常连接

2.打开终端输入如下命令

bluetoothctl
scan on

我们可以看到搜索的到设备蓝牙的MAC 地址

3.我们让xbox处于蓝牙配对模式,并看终端是否出现有xbox 的mac地址

  • 在 bluetoothctl 扫描输出中,Xbox 手柄通常显示为 Xbox Wireless Controller 或类似名称。

  • 如果未明确显示名称,尝试通过 排除法

    • 其他设备(如手机、耳机)通常会显示名称,剩下的可能是手柄

  • 我们可以在windows上连接上手柄后,通过属性查看xbox的mac 地址

    • 连接手柄后,打开 设备管理器 → 蓝牙 → Xbox Wireless Controller,右键 属性 → 详细信息 → 蓝牙设备地址

图中终端白色行为xbox的mac 地址:AC:8E:BD:68:E1:65 AC-8E-BD-68-E1-65

4.获取 MAC 地址后,即可在 Ubuntu/ROS 2 中通过 bluetoothctl 手动配对:

bluetoothctl
pair <MAC_ADDRESS> #其中<MAC_ADDRESS>替换为你xbox的mac 地址
connect <MAC_ADDRESS> #其中<MAC_ADDRESS>替换为你xbox的mac 地址

到这应该可以正常连接了,如果没有反应(正如我一样),请接着参考下面步骤

5.高级配对方法(绕过名称检测)

 使用蓝牙低功耗(BLE)模式

Xbox S/X 手柄使用BLE协议,需确保适配器支持:

sudo btmgmt -i hci0 le on  # 启用BLE
bluetoothctl
connect <MAC_ADDRESS> #其中<MAC_ADDRESS>替换为你xbox的mac 地址

到这里我已经成功连接上了蓝牙,但是出现经常断链的情况

解决断链问题:

关闭蓝牙省电模式

sudo nano /etc/bluetooth/main.conf

在文件末尾添加或修改以下参数:

[Policy]
AutoEnable=true
FastConnectable=true
JustWorksRepairing=always
ControllerMode = dual  # 同时支持BR/EDR和BLE

保存后重启蓝牙服务:

sudo systemctl restart bluetooth

问题解决,一切正常!!!

2.安装ROS2相关包

要使用ROS2来监听Xbox 手柄通道信息,需要下载ROS Package: joy

链接:https://index.ros.org/p/joy/

关于通道映射和节点话题信息,官方已经有详细介绍,这里不在赘述

我们打开一个新的终端,安装ros包

sudo apt update && sudo apt upgrade
sudo apt install ros-humble-joy ros-humble-teleop-twist-joy

注意:选择自己对应ros2版本安装,如iron等

3.测试

保证usb或者蓝牙成功连接xbox前提下

打开一个新终端,用来启动joy_node

ros2 node joy joy_node

打开另一个终端,用来监听joy_node发布的话题:/joy

可以看到我们成功启动joy node 并且监听到xbox 通道的信息

参考

https://index.ros.org/p/joy/

ROS Index

DeepSeek | 深度求索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值