配置飞控
FMT使用toml文件对飞控的各个模块进行配置,具体的语法请参考TOML官网。
在飞控启动阶段,系统会尝试从*/sys/sysconfig.toml*加载配置文件。如果这个文件不存在,那么将使用默认的系统配置(default_config.h
)。注意,默认系统配置仅开启了控制台和Mavproxy的功能,遥控和电机输出未开启。
我们提供了默认的配置文件,位于FMT-Firmware/target/amov/icf5/config/sysconfig.toml
。该配置文件需要上传到飞控的/sys
目录下,飞控启动时将自动去加载该配置文件中的内容。
上传配置文件
上传配置文件可以通过QGC的Onboard Files界面进行文件上传(基于FTP协议)。首先点击List Fiels获取飞控的文件目录,选择sys目录并点击Upload,然后选择要上传的sysconfig.toml文件。
![](https://qiniu.md.amovlab.com/img/m/202301/20230113/2114223475008873860005888.png)
注意
QGC 3.5.6版本以后已经移除Onboard Fiels功能,故需要使用QGC 3.5.6版本。
也可以使用一张SD读卡器,取下飞控的SD卡,通过读卡器将sysconfig.toml文件放到SD卡的/sys目录。
修改配置文件
我们提供了一组默认的ICF5配置文件。
里面包含了几个表,每个表对一个特定组件进行配置:
- console:配置飞控控制台所使用的设备
- mavproxy:配置飞控mavlink设备
- pilot-cmd:配置飞控遥控输入设备
- actuator:配置飞控作动器输出设备,即PMWM输出
Console
[console]表用来配置控制台模块。如下是一个有效的控制台配置,它将三个设备预留给控制台模块。三个设备serial0, serial1 和 mav_console由[[console.devices]]表来进行管理。前两个设备是通用的串口设备,而mav_console是一个特殊的设备(虚拟设备),它提供了read/write接口来跟QGroundControl Mavlink Console进行数据交换。在系统启动阶段,控制台将默认使用第一个设备(在这里是serial0)。当有其它设备收到数据并且auto-switch为true,则控制台将自动切换到对应设备上。
[console]
# device list, the first device will be used by default
[[console.devices]]
type = "serial" # type must be serial or mavlink
name = "serial0" # device name
baudrate = 57600 # serial baudrate
[[console.devices]]
type = "serial" # type must be serial or mavlink
name = "serial1" # device name
baudrate = 57600 # serial baudrate
auto-switch = true # automatically switch to device if data received
[[console.devices]]
type = "mavlink" # type must be serial or mavlink
name = "mav_console" # device name
auto-switch = true # automatically switch to device if data received
Mavproxy
mavproxy模块实现了MAVLink协议,负责处理MAVLink数据通信,包括消息的传输和接收。
mavproxy模块的配置在[mavproxy]表中定义。它支持多个通道,其中通道0用于地面控制站(GCS),通道1用于机载计算机(OBC)。每个通道可以与一个或多个[[mavproxy.devices]]关联,以便相应的mavproxy通道可以利用这些设备。
以下是一个包含两个为通道0保留的设备和一个为通道1保留的设备的示例配置。
[mavproxy]
[[mavproxy.devices]]
chan = 0 # channel 0 (GCS) device
type = "serial"
name = "serial1" # device name
baudrate = 57600 # serial baudrate
[[mavproxy.devices]]
chan = 0 # channel 0 (GCS) device
type = "usb"
name = "usbd0" # device name
# automatically switch to usb if connected, switch back to default device is disconnected
auto-switch = true
[[mavproxy.devices]]
chan = 1 # channel 1 (Onboard Computer) device
type = "serial"
name = "serial2"
baudrate = 115200
默认情况下,系统将利用为mavproxy通道定义的第一个设备。然而,如果为一个通道定义了多个设备,系统具有切换到其他可用设备的能力。例如,如果建立了USB连接,mavproxy通道0可以切换到usb0设备。如果USB连接断开,mavproxy通道0将自动切换回serial1设备。
Pilot-Cmd
[pilot-cmd]表用来配置pilot_cmd(遥控)模块。你可以通过[pilot-cmd.device]表来配置rc设备,协议,通道数,采样周期,通道数值范围等。遥感通道通过stick-channel设置,它包含了四个元素,分别对应摇杆yaw,throttle,roll,pitch。一个典型的遥控以及摇杆配置如下所示:
# channel mapping for [yaw, throttle, roll, pitch]
stick-channel = [4,3,1,2]
[pilot-cmd.device]
type = "rc"
name = "rc"
protocol = "auto" # auto/sbus/ppm
channel-num = 8 # max supported channel: sbus:16, ppm:8
sample-time = 0.05 # sample time in second (-1 for inherit)
range = [1000,2000]
目前支持的RC接收机协议为SBUS和PPM,这里可以将其配置为auto,表示自动识别接入的接收机协议。
遥控控制模式可以通过[[pilot-cmd.mode]]来设置。比如定义自稳模式:
[[pilot-cmd.mode]]
mode = 3 # stabilize mode
channel = 5
range = [1800,2000]
该设置表示如果遥控通道5的值在[1800, 2000]的范围内,那么自稳模式将被选中。
FMT还支持多通道模式映射,这将使得有限的遥控通道可以支持更多的模式选择。
[[pilot-cmd.mode]]
mode = 3 # stabilize mode
channel = [5,6]
range = [[1800,2000],[1400,1600]]
您可以根据需要加入更多的模式定义,FMT支持的mode的数值对应的模式类型如下所示:
- 0:None 未知模式
- 1:Manual 手动模式
- 2:Acro 特技模式
- 3:Stabilize 自稳模式
- 4:Altitude 定高模式
- 5:Position 定点模式
- 6:Mission 任务模式
- 7:Offboard 外部控制模式
您还可以配置遥控指令。当前支持两种类型的指令:
- cmd1: 事件指令,边沿触发有效,类似脉冲信号。
- cmd2: 状态指令,长时间有效,直到有新的状态指令到达,类似步进信号。
可以在[[pilot-cmd.command]]表中定义遥控指令,比如:
[[pilot-cmd.command]]
type = 1 # 1:event | 2:status
cmd = 1000 # force-disarm: forcely disarm motors for safety concern
channel = 6 # command channel
range = [1800,2000] # if channel value in this range, the event is triggered
[[pilot-cmd.command]]
type = 2 # 1:event | 2:status
cmd = 2001 # for testing
channel = [4, 5] # command channel
range = [[1300,1500],[1200,1400]] # if channel value in this range, the event is triggered
FMT目前支持的所有cmd1指令如下所示:
- 0:FMS_Cmd_None 空闲指令
- 1000:FMS_Cmd_PreArm 预解锁指令
- 1001:FMS_Cmd_Arm 解锁指令
- 1002:FMS_Cmd_Disarm 上锁指令
- 1003:FMS_Cmd_Takeoff 起飞指令
- 1004:FMS_Cmd_Land 降落指令
- 1005:FMS_Cmd_Retuen 返航指令
- 1006:FMS_Cmd_Pause 暂停指令(暂停当前的任务,进入Hold状态)
- 1007:FMS_Cmd_Continue 继续指令(继续当前的任务)
Actuator
[actuator]表用来配置作动器设备。[[actuator.devices]]表定义系统包含哪些作动器设备。ICF5有以个作动器输出端口(main_out),所以一个典型的配置如下所示。你可以修改pwm的频率,其中支持的pwm频率为50Hz到400Hz。
[[actuator.devices]]
protocol = "pwm"
name = "main_out"
freq = 400 # pwm frequency in Hz
[[actuator.mappings]]表可以用来将遥控通道或者控制器输出映射到任意作动器的通道。
如下示例包含了两个映射。第一个映射将控制器输出通道1-4映射到main_out的PWM通道1-4。第二个映射将遥控通道2映射到main_out的PWN通道5-6,将遥控通道3映射到main_out的PWN通道7。
[[actuator.mappings]]
from = "control_out"
to = "main_out"
chan-map = [[1,2,3,4],[1,2,3,4]]
[[actuator.mappings]]
from = "rc_channels"
to = "main_out"
chan-map = [[2,2,3],[5,6,7]]