配置飞控

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文件。

注意

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]]