环境
- QGroundControl 开源地面站系统; 代码地址: https://github.com/mavlink/qgroundcontrol
- PX4 开源飞控系统; 代码地址: https://github.com/PX4/PX4-Autopilot
QGC可以直接下载运行包.
PX4 请根据代码中的说明,进行环境的配置和运行.
通过代码去build地面站和PX4的步骤见官网说明.
下面重点介绍,在局域网内,一台电脑运行QGC, 另一台电脑运行 PX4 模拟器. 如何通过端口进行连接.
我的本地环境
QGC 运行在 windows11 系统上;
模拟器JMAVSim 运行在优麒麟22.04上.
1. 启动模拟器
执行命令: make px4_sitl_default jmavsim
出现以上界面的话,表示模拟器已经成功启动,而且是待起飞状态.在界面上回车,我们会得到下面界面:
我们需要注意一下,上面那条信息, MAVLink only on localhost.
说是要设置参数能够使能网络. 我测试下了,设置了参数也还不能直接在局域网中连接,那位大牛知道这个怎么配置的话,可以告诉下,提前谢过.
上面这条的意思就是 mavlink模式是只能在本地使用,也就是你的QGC和模拟器在同一台电脑的话,会直接连接上. 但如果是我这样的环境,是无法连接的,mavlink是不会把数据通过端口发出去的. 地面站也就连接不上了.
2. 启动地面站
如图,地面站一直是处于断开连接状态.(界面我做了稍微的改动,大家不用太关注).
3. 如何启动模拟器,才能在局域网和QGC通信?
- 我们首先去px4的官网看下文档,然后会看到要通过mavlink命令进行转发.
重点是下看这段话
既然这样,那我们就按照文档中说的这个来.在模拟器界面我们输入mavlink看会出来什么?
pxh> mavlink
Description
This module implements the MAVLink protocol, which can be used on a Serial link or UDP network connect
Usage: mavlink [arguments…]
Commands:start Start a new instance
[-d ] Select Serial Device
values: <file:dev>, default: /dev/ttyS1
[-b ] Baudrate (can also be p:<param_name>)
default: 57600
[-r ] Maximum sending data rate in B/s (if 0, use baudrate / 20)
default: 0
[-p] Enable Broadcast
[-u ] Select UDP Network Port (local)
default: 14556
[-o ] Select UDP Network Port (remote)
default: 14550
[-t ] Partner IP (broadcasting can be enabled via -p flag)
default: 127.0.0.1
[-m ] Mode: sets default streams and rates
values: custom|camera|onboard|osd|magic|config|iridium|minimal|extvision|extvisionmin|gimbal|uavionix,
[-n ] wifi/ethernet interface name
values: <interface_name>
[-f] Enable message forwarding to other Mavlink instances
[-w] Wait to send, until first message received
[-x] Enable FTP
[-z] Force hardware flow control always on
[-Z] Force hardware flow control always offstop-all Stop all instances
stop Stop a running instance
[-u ] Select Mavlink instance via local Network Port
[-d ] Select Mavlink instance via Serial Device
values: <file:dev>status Print status for all instances
[streams ] Print all enabled streamsstream Configure the sending rate of a stream for a running instance
[-u ] Select Mavlink instance via local Network Port
[-d ] Select Mavlink instance via Serial Device
values: <file:dev>
-s Mavlink stream to configure
-r Rate in Hz (0 = turn off, -1 = set to default)boot_complete Enable sending of messages. (Must be) called as last step in startup script.
Command ‘mavlink’ failed, returned 1.
命令很多,我们按照刚才文档中说的 + 一个-p 试试.
输入: mavlink start -p 后,我们得到下面这个信息. 看结果,显然是不对的,怎么会去找ttyS1, 这应该是默认的串口.
[-d ] Select Serial Device
values: <file:dev>, default: /dev/ttyS1
也就是说,默认是选择串口设备的.
再看下mavlink的参数.
[-o ] Select UDP Network Port (remote)
default: 14550
发现 -o是UDP,用这个试试.
输入: mavlink start -p -o 14550
成功了.
再看下地面站,如下图,已经和远端的模拟器连接上了.
连接上,就可以通过地面站来操作模拟器了.
除了使用mavlink start -p -o 14550命令
还可以使用-t命令,和特定的IP通信.
mavlink start -p -t 192.168.x.x -o 14550
要停止所有飞机实例的话,可以通过 mavlink stop-all
地面站状态:
以上就可以在局域网内进行地面站和px4模拟器在不同电脑上进行通信.
当然,手机端安装QGC也可以进行对模拟器的操作,如下图: