PX4 使用 Wi-Fi 连接模式

PX4支持WIFI模块作为数传工具,官网上也提供了教程,但是不注意细节也很容易失败。以下是我的经验以及教训。

配置环境

飞控:pixhawk v2,烧录PX4 v1.8.2的固件

地面站:QGC 3.5.2

wifi模块:市面上最常见的8针ESP8266模块

操作系统:Win 10

参考资料

[1] https://docs.px4.io/master/en/telemetry/esp8266_wifi_module.html

[2] http://ardupilot.org/copter/docs/common-esp8266-telemetry.html

[3] 工具下载

wifi模块固件烧录

如官网所示,可以使用python烧录固件也可以使用第三方工具烧录固件,PX4的v 1.8.2使用的是mavlink2,因此烧录firmware-1.2.2固件。烧录之前需要把GPIO0接地。我是这样烧录的,使用网上最常见的转串口的座,下面把杜邦线公母头分别焊接在GND和GPIO0的排针上,上电前需要短接,正常工作不短接。稍后我会把全部资料和工具上传。

烧录界面如下图所示,选择正确的串口,正确的固件,配置合适的波特率,之后点击flash。


官方固件和安可信固件的区别

1、官方的固件在烧录之后会自动配置串口为透传模式,如果需要修改wifi的工作方式或者是波特率,首先电脑连接PixRacer热点,密码为pixracer,浏览器中输入192.168.4.1,点击setup即可配置,如下图所示

2、对于安可信的固件则是需要用户通过AT指令配置wifi模块的工作方式,再设置串口成为透传模式

硬件连接

要想成功首先保证硬件连接,在PX4固件中,wifi模块接入在telem2端口,telem2端口的闲分别为vcc, tx(接wifi模块的rx), rx(接wifi模块的tx), -, -, gnd。如下图所示,注意截图的文档来源于APM,烧录的是APM固件,它接入的是telem1。烧录PX4固件的需要接入telem2,同时配置SYS_COMPANION为ESP模式,最后重启飞控

结果测试

连接好之后,飞控的usb不要连接到电脑上,不然地面站会默认链接usb串口。电脑连接PixRacer的wifi,打开地面站即可,QGC会自动使用UDP连接飞控,界面上会出现wifi桥接的界面,如下图所示。

经验教训

之前一直不成功的主要问题还是在于硬件,我使用了这个模块,它有多个串口,USB接了一个串口,排针也引出来了几个串口。现在还没有搞清楚USB的那个串口是对应的串口几,烧录官方的固件之后是需要把数传2的串口接到USB的那个串口上的。

问题排除方法:上电后收到对应的wifi热点,可以访问192.168.4.1,;飞控板的确连接了telem2,参数也配置正确;硬件连接也是对的,那么大概率的问题就出在wifi模式了,于是换了最常见的8针wifi模块就解决了。而这个大模块不行的原因我猜是usb串口的另外一边接了232转换芯片,直接接TX和RX管脚,电平可能会被232芯片拉底??

其他尝试

把ESP8266配置成AP模式的缺点是地面站只可以连接一架飞机,如果地面站需要连接多架飞机,需要把ESP设置成STA模式,并开启电脑的热点,电脑热点的开启网上有很多资料,下面是热点开启后,ESP8266的设置,注意把SSID,passwd以及局域网的网段改成自己的(192.168后面的称为网段),重启之后ESP会自动切换成STA模式。如果1分钟之内无法连接到热点,它会自动掉会AP模式。

下面是多个飞机连接的示意图,它可以同时显示多架飞机的状态信息

同样的原理,ESP8266还可以接入路由器的热点,同时地面站所在的电脑也连接到同一个热点,也可以实现多个飞行器的接入。通过抓包发现,ESP8266连接到热点信号之后,它发送的所有数据包都是广播包,如下图所示。即目的节点是192.168.1.255的数据包(我电脑的网段是10.42.0网段,所以是10.42.0.255的目的地址),这种发送方式在一定程度上会占用网络的贷款,增加网络的拥塞程度,因为路由器接收到这个包之后会在全网广播,其他飞行器会受到没用的数据包,占用网络带宽.后面可以考虑下把目的节点的IP地址修改成地面站所在电脑的IP的地址,当然最好通过路由器给电脑设置一个静态的IP,以防IP节点不断变化