前言
记录在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 通道的信息