base_mode和custom_mode是mavlink心跳包中很重要的组成部分,用来反应无人机当前的模式状态。QGC地面站如何知道无人机当前是否解锁,处于什么飞行模式,就是依靠心跳包里的base_mode和custom_mode,/mavros/state话题里的一些状态项的值,也是来自于心跳包里的base_mode和custom_mode。同时我们用QGC进行无人机的模式切换,QGC发送的是SET_MODE这个mavlink消息给飞控,SET_MODE(#11) mavlink消息里面其实主要就是base_mode和custom_mode这两项。
HEARTBEAT(#0) mavlink消息
http://mavlink.io/zh/messages/common.html
SET_MODE(#11) mavlink消息
http://mavlink.io/zh/messages/common.html
/mavros/state话题
通过mavros设置模式其实也是发的base_mode和custom_mode,mavros再将其转为SET_MODE mavlink消息发给飞控
http://docs.ros.org/en/api/mavros_msgs/html/srv/SetMode.html
base_mode是mavlink里面定义的一些基础的无人机模式信息,是通用的,比如无人机有没有解锁这种基础状态,不管是PX4还是APM或者其他飞控,但凡用mavlink协议,base_mode都是这几个(下面有详细讲),但是custom_mode,mavlink是没有具体给定的,是可以自定义的,不同的飞控定义的custom_mode就可能不同,custom_mode就用于表示自定义的飞行模式,比如px4和apm都有各自的一些定义的飞行模式,不完全相同,具体可以看http://wiki.ros.org/mavros/CustomModes 实际看飞控处于什么飞行模式是看custom_mode的值,但是看无人机有没有解锁是看base_mode。
注意网上看到一些文章说base_mode是当前模式,custom_mode是目标模式,不是这样的。
下图是APM和PX4中各自定义的一些custom_mode
http://wiki.ros.org/mavros/CustomModes