a) 遥控器和无人机开机后,遥控器负责发送数据,无人机负责接收数据。它们通过共同的跳频序列的高速跳频来保持一个数据链路,链路故障有一定能力能迅速恢复。
b) 无人机每7ms就会收到一次遥控器发出的32字节控制数据,控制数据只有一条命令一种格式,所有控制杆和开关的状态会一次性发送到无人机。无人机收到数据后会进行地址校验和CRC校验,确保数据是正确无误的。
c) 用户在操纵遥控器的过程中,操控的行为和力度都会在7ms内通过那32字节控制数据反馈至无人机,接着由无人机的飞控程序来完成对应的飞行行为。
这其实是一场信号争夺战,那么有没有办法让无人机更稳定的更稳定接收我们的信号呢?如果我们把跳频时间设置为 6.9ms,跳频后每隔0.4ms(Arduino UNO R3的速度极限)发送一次遥控控制数据的话,虽然夺取无人机控制权需要更长的时间(约10s),但一旦获得控制权,在0.4ms发送一次数据的高刷新率覆盖之下,遥控器基本没可能夺回控制权。
在实现控制脚本的过程中,HackRF存在的两个严重限制:一方面HackRF使用USB通讯接口决定了它的通讯延迟巨大(指令延迟约为30ms),上文中动辄0.4ms的控制精度HackRF做不到;另外一方面,HackRF在5.8GHz频段的信号衰减严重(信号强度仅为遥控器的1%,可能是通用天线在高频段增益偏低),估计只有在贴着无人机射频芯片的情况下才有作用。天线问题故无法使用HackRF劫持无人机。
灵机一动,我们想到了和遥控器类似的做法:通过Arduino UNO R3单片机平台来操作BK5811芯片,直接在Arduino上实现我们的控制逻辑。当然,再加一个某宝上淘的有源信号放大器,如下图所示。根据测试,有效控制范围为10米左右。