fcu_url:飞控的地址,有的飞控有网口连接。
gcs_url:一个额外的mavlink流转发模块,把从fcu_url收到的每条消息都转发到这个地址,并把从这个地址收到的消息全部转发给飞控。主要用于转发给地面站QGC。
注意fcu_url和gcs_url是mavros里两个独立的模块,fcu_url的remote应当是飞控,而gcs_url的远端是想转发到的对象(一般是QGC所在电脑)
fcu_url和gcs_url里udp url格式
bash
udp://bind_ip:bind_port@remote_ip:remote_port
这是mavros自己定义的格式,靠@和:来区分字符串。
其中都可以空着不写,但是@符号必须有,默认值分别为:
bind_ip: 0.0.0.0 (本机所有网卡IP)
bind_port: 14555
remote_ip: "" (默认是空,此时不发送mavlink流到remote)
remote_port: 14550 (QGC默认监听这个端口)
注意:remote_ip:remote_port只是建议值,mavros会通过bind_ip:bind_port收到的消息来源重新设置remote_ip:remote_port,这就是为什么remote_ip可以空着的原因。
各项作用
bind_ip:bind_port的作用:mavros监听这个端口,一旦收到消息,会把收到的消息来源重新设置remote_ip:remote_port (这个行为有点像一个服务器)
remote_ip:remote_port的作用:mavros向这个远端IP端口发送mavlink消息(remote_ip不为空的时候)
特殊情况
udp-b://@ 等效于
udp-b://0.0.0.0:14555@255.255.255.255:14550
一般用于gcs_url在不知道QGC ip的时候连接第一个打开的QGC,注意这里remote_ip不管你写什么都会被改为255.255.255.255(也就是向子网内所有设备的14550端口广播发送mavlink消息),直到0.0.0.0:14555端口收到消息(QGC回应),然后和上面一样,remote_ip:remote_port会被置为当前QGC的实际IP:14550,从而从广播转为了单播。后续再有别的QGC打开也不会连上了,因为已经转成了单播。
不建议用udp-b://@,因为没有QGC打开时,此时的广播行为会很占据带宽,所有子网内设备即使没有监听14550端口,也会收到发来的udp包(不过被丢弃了)。
更推荐用 udp://0.0.0.0:bind_port@ ,此时mavros像一个udp服务器,等待QGC来主动连接它的IP:bind_port,然后mavros的remote_ip和remote_port会自动获取QGC的IP和端口。就是需要QGC手动设置去连接udp server稍微麻烦点。
udp-pb://@基本和udp-b://@一样,唯一不同是固定永远为广播,即使有QGC连上也不会转为单播,这样可以同时连多个QGC(但是仍然不建议,广播大量mavlink流是非常占带宽和路由器CPU的!)