问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

ArduPilot开源代码之FMU+IOMCU设计

创作时间:
作者:
@小白创作中心

ArduPilot开源代码之FMU+IOMCU设计

引用
CSDN
1.
https://blog.csdn.net/lida2003/article/details/141154457

ArduPilot开源代码之FMU+IOMCU设计

早期、高档的飞控常以FMU+IOMCU的方式存在,典型的就是Pixhawk系列,如下图所示:


使用**FMU(Flight Management Unit)+ IOMCU(Input/Output Microcontroller Unit)**方式设计飞控(飞行控制系统)有以下几个主要原因:

  1. 分离核心功能
  • FMU负责飞行控制算法、姿态计算、导航等高层次的任务。
  • IOMCU处理输入/输出任务,如接收来自遥控器的信号,驱动电机和舵机,确保与传感器及外围设备的实时通信。
  1. 提高系统的可靠性和安全性
  • 分离功能可以降低系统故障时的影响范围。例如,即使 IOMCU 出现问题,FMU 仍可以继续进行飞行控制,反之亦然。
  • 这种分层结构可以更好地隔离故障,增强系统的健壮性和安全性。
  1. 扩展性和灵活性
  • 采用 FMU+IOMCU 结构,可以更容易地添加新功能或升级现有功能,而无需完全更换整个系统。
  • 开发者可以根据不同应用需求,选择不同的 FMU 或 IOMCU 组件来满足特定要求。
  1. 减少开发复杂性
  • 通过将任务分配给不同的微控制器,可以简化每个组件的设计和开发。FMU 专注于算法和计算,IOMCU 处理具体的输入输出,降低了开发的复杂度。
  1. 提高性能
  • FMU 和 IOMCU 可同时处理各自任务,提高整个系统的运行效率和响应速度。这在需要实时处理大量数据的场景中尤为重要,如无人机飞行中的姿态调整和环境感知。
  1. 标准化和模块化
  • 这种结构有助于标准化飞控系统的设计,促进组件的模块化和互换性,使得不同厂商的组件能够更好地协同工作,推动整个行业的发展。

总的来说,FMU+IOMCU 方式的设计能够提高飞控系统的可靠性、灵活性和性能,同时降低开发复杂性,适用于多种飞行器应用场景。

FMU & IOMCU特点

FMU(Flight Management Unit)和IOMCU(Input/Output Microcontroller Unit)是无人机或其他飞行器的自动驾驶仪系统中常见的两个重要组件。它们各自承担不同的任务并协同工作,以实现飞行控制和数据处理功能。以下是它们的主要功能和差异:

3.1 FMU(Flight Management Unit)的主要功能

  1. 飞行控制算法:FMU负责运行主要的飞行控制算法,包括姿态控制、导航和路径规划等。这些算法通过处理传感器数据来调整飞行器的行为。

  2. 数据处理:FMU处理来自各种传感器的数据,如IMU(惯性测量单元)、GPS、气压计等,以确定飞行器的状态和位置。

  3. 系统监控和故障处理:FMU监控整个系统的健康状态,并在检测到故障时采取适当的措施来确保安全。

  4. 任务管理:FMU负责管理飞行任务,包括起飞、巡航、降落以及紧急情况处理。

3.2 IOMCU(Input/Output Microcontroller Unit)的主要功能

  1. 信号输入/输出管理:IOMCU主要负责管理各种输入和输出信号,包括控制信号的接收和执行,如舵机、传感器信号处理等。

  2. 硬件抽象层:IOMCU提供一个硬件抽象层,使得FMU可以通过标准化的接口与不同的传感器和执行器进行通信。

  3. 任务执行:IOMCU执行FMU下达的具体任务指令,如控制电机的转速、调整舵面等。

  4. 实时控制:由于IOMCU通常直接与物理硬件交互,因此它需要具备实时响应能力,以确保控制信号的及时处理和传递。

3.3 主要差异

  1. 功能层次:FMU主要处理高层次的飞行控制和数据处理,而IOMCU则负责低层次的信号处理和任务执行。

  2. 处理能力:FMU通常配备更强大的处理器,以运行复杂的飞行算法和数据分析。IOMCU则侧重于高效的实时信号处理。

  3. 冗余和可靠性:在某些系统中,FMU和IOMCU可能具有冗余设计,以提高系统的可靠性。FMU通常负责检测和应对故障,而IOMCU则确保关键任务在硬件层面被执行。

总的来说,FMU和IOMCU协同工作,共同完成飞行器的自动化控制和导航任务。FMU负责高层策略和决策,而IOMCU则执行具体的操作指令和实时控制任务。

主/辅助(MAIN/AUX) PWM输出

关于主输出和辅助输出在飞控系统配置方面,为了便于兼容FMU only和FMU+IOMCU两种硬件架构,在配置PWM编号时,规则如下:

  1. 主输出(PWM1-PWM8)
    这些是默认的输出,通常保留用于多旋翼或固定翼应用中的主要电机控制。这种配置与历史上的IOMCU(输入/输出微控制器单元)兼容性一致,确保核心飞行控制功能在不同硬件之间保持稳定和一致。

  2. 辅助输出(PWM9及以上)
    辅助输出用于额外功能,如相机触发器、起落架、舵机和其他非关键组件。使用PWM9及以上可以扩展控制能力,而不会干扰主电机输出。

  3. FMU PWM端口编号
    尽管在使用上有所区分,FMU中的PWM端口编号通常仍从PWM1开始,以保持配置和编程的一致性和简化性。这使用户能够轻松地将所需的功能映射到正确的输出,而无需重新定义PWM分配的起点。

注:另外要注意一点就是,AUX端口是可以用于GPIO配置,而MAIN端口仅支持PWM配置。

软件实现

在上述硬件架构设计下,开发者和用户可以保持清晰有序的方法来配置他们的飞行控制系统,确保正确管理和控制主和辅助功能。

处理这种默认MAIN 8 ports设计时,通过IOMCU代码上的兼容性设计,其采用了配置+hard coded代码方式完成。

5.1 PWM编号规范

RCOutput::write 中过滤MAIN(IOMCU) outputs,映射AUX(FMU) outputs到PWM9及以上编号:

if (chan < chan_offset) {
    return;
}
if (safety_state == AP_HAL::Util::SAFETY_DISARMED && !(safety_mask & (1U<<chan))) {
    // implement safety pwm value
    period_us = 0;
}
chan -= chan_offset;

RCOutput::init 中初始化8个默认PWM端口:

#if HAL_WITH_IO_MCU
    if (AP_BoardConfig::io_enabled()) {
        // with IOMCU the local (FMU) channels start at 8
        chan_offset = 8;
        iomcu_enabled = true;
    }
    if (AP_BoardConfig::io_dshot()) {
        iomcu_dshot = true;
    }
#endif

5.2 FMU定义 IOMCU_UART 通信端口

IOMCU_UART USART6
if 'IOMCU_UART' in self.config:
    if 'io_firmware.bin' not in self.romfs:
        self.error("Need io_firmware.bin in ROMFS for IOMCU")
    self.write_defaulting_define(f, 'HAL_WITH_IO_MCU', 1)
    f.write('#define HAL_UART_IOMCU_IDX %u\n' % len(serial_list))
    f.write(
        '#define HAL_UART_IO_DRIVER ChibiOS::UARTDriver uart_io(HAL_UART_IOMCU_IDX)\n'
    )
    serial_list.append(self.config['IOMCU_UART'][0])
    f.write('#define HAL_HAVE_SERVO_VOLTAGE 1\n') # make the assumption that IO gurantees servo monitoring
    # all IOMCU capable boards have SBUS out
    f.write('#define AP_FEATURE_SBUS_OUT 1\n')
else:
    f.write('#define HAL_WITH_IO_MCU 0\n')
f.write('\n')

5.3 FMU提供IOMCU固件

ROMFS io_firmware.bin Tools/IO_Firmware/iofirmware_f103_lowpolh.bin
# enable support for dshot on iomcu
ROMFS io_firmware_dshot.bin Tools/IO_Firmware/iofirmware_f103_dshot_lowpolh.bin
define HAL_WITH_IO_MCU_BIDIR_DSHOT 1

注:其中有两个宏定义需要根据情况考虑:HAL_WITH_IO_MCU_DSHOTHAL_WITH_IO_MCU_BIDIR_DSHOT

5.4 IOMCU配置

  • 【PWM】STM32F103xB
  • 【dshot】STM32F103xB

总结

  • 功能分工:FMU负责高层次的决策和算法处理,而IOMCU负责低层次的信号处理和实时任务执行。
  • 协同工作:FMU和IOMCU协同工作,FMU负责计划和策略,IOMCU执行具体任务,确保系统的整体效率和稳定性。
  • 系统可靠性:两者的协同不仅提升了系统的灵活性和可扩展性,还提高了系统的可靠性,通过冗余设计可以进一步增强故障处理能力。

FMU(飞行管理单元)和IOMCU(输入/输出微控制器单元)在飞行控制系统中共同扮演重要角色,它们的协同工作确保了飞行器的稳定和高效运行。总体而言,FMU和IOMCU的组合提供了一个高效、可靠的飞行控制系统框架,使飞行器能够在复杂的环境中自主导航和执行任务。

基于一些资料,相信不就得将来,很快会有更为可靠的系统方案,确保飞行的高效和可靠。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号