SPRK+ Sphero蓝牙配对失败问题(Ubuntu 14.04及树莓派环境)
解决SPRK+ Sphero在ROS环境中蓝牙配对失败的问题
我之前折腾SPRK+和ROS的时候也踩过蓝牙配对的坑,结合你在VirtualBox Ubuntu 14.04(Indigo)和树莓派3(Stretch)遇到的情况,给你整理几个关键的排查和解决步骤:
先确认蓝牙适配器支持BLE
SPRK+用的是低功耗蓝牙(BLE)连接,老款蓝牙适配器可能不支持。你可以在终端执行hciconfig -a,检查输出里有没有LE Supported: Yes的条目。如果是VirtualBox环境,一定要把宿主机的蓝牙适配器通过USB直通分配给虚拟机,别用系统的蓝牙共享,而且要确保虚拟机里的蓝牙驱动正常加载。按完整流程用bluetoothctl操作
你之前的命令只执行到一半,可能是流程没走对。正确的操作步骤应该是这样的:- 打开蓝牙控制终端:
bluetoothctl - 开启蓝牙控制器:
power on - 启动设备扫描:
scan on(等个3-5秒,直到看到SPRK+的设备名称和你的MAC地址F7:AF:AF:64:39:66) - 停止扫描:
scan off - 先信任设备:
trust F7:AF:AF:64:39:66 - 再执行配对:
pair F7:AF:AF:64:39:66 - 配对成功后连接:
connect F7:AF:AF:64:39:66
⚠️ 重点:配对的时候要按一下SPRK+球顶的按钮,触发它的配对模式,不然大概率会失败。
- 打开蓝牙控制终端:
VirtualBox环境的特殊配置
如果是VirtualBox里的Ubuntu 14.04,还要注意这几点:- 宿主机的蓝牙不能被其他程序占用(比如Windows系统的蓝牙要先关闭)
- 升级蓝牙相关工具:
sudo apt-get install bluez bluez-tools,Ubuntu 14.04默认的bluez版本比较老,可能对BLE支持不好,有条件的话可以升级到bluez 5.x版本(注意兼容性,升级前可以备份一下配置)
树莓派3的蓝牙优化
树莓派3的蓝牙和Wi-Fi容易互相干扰,你可以试试这些调整:- 编辑蓝牙配置文件:
sudo nano /etc/bluetooth/main.conf,找到或添加ControllerMode = bredr - 重启蓝牙服务:
sudo systemctl restart bluetooth - 如果不需要Wi-Fi,可以临时关闭减少干扰:
sudo ifconfig wlan0 down
- 编辑蓝牙配置文件:
ROS层面的验证
配对连接成功后,你可以绑定rfcomm设备:sudo rfcomm bind 0 F7:AF:AF:64:39:66,然后启动sphero节点测试:
rosrun sphero_node sphero_node.py /dev/rfcomm0
如果还是失败,建议把bluetoothctl执行配对时的完整错误输出贴出来,这样能更精准地定位问题。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

