You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu22.04+ROS2环境下SkyController识别、拦截及映射问题求助

解决方案:Parrot Bebop 2 SkyController 识别与命令拦截问题

一、Ubuntu 22.04识别SkyController为输入设备

1. 切换SkyController到可识别模式

SkyController默认并非HID手柄模式,需手动切换:

  • 关闭控制器,按住配对键(带小飞机图标的按键)+电源键,直到LED交替闪烁后松开
  • 此时通过USB-C连接电脑,再执行lsusb或dmesg | grep usb查看设备是否被识别

2. 安装依赖驱动

Ubuntu默认缺少部分HID设备驱动,执行以下命令安装:

sudo apt update && sudo apt install libhidapi-hidraw0 usbutils bluez bluez-tools

安装后重启蓝牙服务:

sudo systemctl restart bluetooth

3. 蓝牙连接修复

若蓝牙无法检测到设备,用bluetoothctl手动配对:

bluetoothctl
power on
scan on
# 找到名为"Parrot SkyController"的设备,复制其MAC地址
pair <设备MAC地址>
connect <设备MAC地址>

4. 添加udev规则(识别为js设备)

若设备被识别但未映射为js0,创建udev规则文件:

sudo nano /etc/udev/rules.d/99-skycontroller.rules

写入以下内容(替换idVendor和idProduct为lsusb查到的SkyController设备ID):

SUBSYSTEM=="input", ATTRS{idVendor}=="0930", ATTRS{idProduct}=="6545", MODE="0666", GROUP="input"

重载规则并触发:

sudo udevadm control --reload-rules && sudo udevadm trigger

二、拦截SkyController直接命令,改用ROS 2处理

1. 修正iptables配置(之前命令无效原因)

你使用的-D参数是删除规则,而非添加;且需针对FORWARD链(而非OUTPUT链)处理转发流量:

  • 先开启IP转发:
sudo sysctl -w net.ipv4.ip_forward=1
  • 添加规则阻止SkyController直接发往无人机的数据包(默认SkyController IP为192.168.42.1,无人机IP为192.168.42.2,替换为实际IP):
sudo iptables -A FORWARD -s 192.168.42.1 -d 192.168.42.2 -j DROP
# 允许电脑处理后的命令发往无人机
sudo iptables -A FORWARD -s <你的电脑IP> -d 192.168.42.2 -j ACCEPT

2. ROS 2控制流程

  • 启动joy节点读取手柄输入:
ros2 run joy joy_node
  • 编写自定义ROS 2节点,订阅/joy话题,解析按键/摇杆数据,转换为Bebop 2的控制命令(可基于parrot_bebop ROS 2包或Mavlink协议实现)
  • 将处理后的命令发送至无人机,确保所有控制流量仅通过电脑转发

3. Wi-Fi范围扩展补充

若需扩展通信范围,可将电脑设置为Wi-Fi中继:

  • 安装hostapd和dnsmasq:
sudo apt install hostapd dnsmasq
  • 配置电脑Wi-Fi为热点,连接到SkyController的Wi-Fi,让无人机连接电脑热点,实现流量全经电脑中转

内容的提问来源于stack exchange,提问作者Lucas Bosso de Mello

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:23:12