1. 定义eVTOL飞控软件架构总体需求

定义eVTOL飞控软件架构总体需求 学习卡片

任务说明

本案例面向eVTOL(电动垂直起降飞行器)飞控软件架构设计的起点环节。目标是从eVTOL典型飞行任务剖面出发,提取飞控软件必须满足的功能需求、性能需求、安全性需求与适航相关需求,并形成一份可直接作为后续架构设计输入的需求规格说明文档框架。任务边界限定为“需求分析与文档框架生成”,不涉及具体算法实现或硬件选型。

1. eVTOL飞行任务剖面分析

eVTOL运行模式与传统固定翼或直升机不同,其典型任务剖面包含以下阶段:垂直起飞、悬停、过渡飞行(垂直转巡航)、巡航、过渡飞行(巡航转垂直)、悬停、垂直着陆。此外还需考虑地面滑行、空中等待、单发失效后应急着陆等非 nominal 场景。每个阶段对飞控软件的控制模式、响应时间、精度和容错能力要求不同,是需求提取的直接依据。

地面 地面滑行 垂直起飞 悬停 过渡(垂→巡) 巡航 过渡(巡→垂) 悬停 垂直着陆 地面滑行 飞行高度剖面

2. 需求提取方法

需求提取遵循“剖面→场景→能力→约束”的映射路径。首先将任务剖面分解为具体运行场景(如“10m/s侧风下悬停”、“单电机失效后继续着陆”),每个场景明确飞控软件需要提供的控制能力;然后从能力反推功能需求(需要哪些控制律、模式管理、状态估计);再从物理限制和适航条款推导性能与安全性需求。最终将需求按类别归入文档框架。

3. 需求规格说明文档框架

以下代码定义了一个Python数据结构,用于组织eVTOL飞控软件需求规格说明的文档框架。该结构包含需求编号、类别、来源场景、需求描述、验证方法和优先级六个字段,并内置了从任务剖面自动生成初始需求条目的逻辑。运行该代码可输出一份结构化的需求清单,作为正式文档编写的基础。

# eVTOL飞控软件需求规格说明文档框架生成器
# 功能:定义需求数据结构,从任务剖面提取初始需求条目,输出文档框架

from dataclasses import dataclass, field
from typing import List, Dict

@dataclass
class Requirement:
    """单条需求条目"""
    req_id: str          # 需求编号,如 FR-01
    category: str        # 类别:功能/性能/安全性/适航
    source_phase: str    # 来源任务阶段
    description: str     # 需求描述
    verification: str    # 验证方法
    priority: str        # 优先级:高/中/低

@dataclass
class FlightPhase:
    """任务剖面阶段定义"""
    name: str
    duration_sec: float
    key_control_mode: str
    critical_factors: List[str]

class RequirementFramework:
    """需求规格文档框架"""
    
    def __init__(self):
        self.requirements: List[Requirement] = []
        self.phases: List[FlightPhase] = []
        self._define_phases()
    
    def _define_phases(self):
        """定义eVTOL典型任务剖面阶段"""
        self.phases = [
            FlightPhase("垂直起飞", 30.0, "垂直起降控制",
                       ["推力冗余", "抗侧风", "地面效应"]),
            FlightPhase("悬停", 60.0, "位置保持",
                       ["GPS拒止", "姿态稳定精度", "阵风扰动"]),
            FlightPhase("过渡飞行(垂→巡)", 20.0, "过渡控制",
                       ["升力转移", "速度同步", "模式切换平滑"]),
            FlightPhase("巡航", 600.0, "固定翼巡航",
                       ["能效优化", "航迹跟踪", "失速保护"]),
            FlightPhase("过渡飞行(巡→垂)", 20.0, "过渡控制",
                       ["减速控制", "推力恢复", "高度保持"]),
            FlightPhase("垂直着陆", 30.0, "垂直起降控制",
                       ["触地检测", "推力管理", "单发失效裕度"]),
        ]
    
    def add_requirement(self, req: Requirement):
        """添加需求条目"""
        self.requirements.append(req)
    
    def generate_initial_requirements(self):
        """从任务剖面自动生成初始需求条目"""
        # 功能需求:每个阶段必须有对应的控制模式
        for phase in self.phases:
            self.add_requirement(Requirement(
                req_id=f"FR-{len(self.requirements)+1:02d}",
                category="功能",
                source_phase=phase.name,
                description=f"飞控软件必须支持{phase.name}阶段的{phase.key_control_mode}控制模式,"
                           f"并能在该模式下处理{', '.join(phase.critical_factors[:2])}等工况",
                verification="代码审查+硬件在环测试",
                priority="高"
            ))
        
        # 性能需求:悬停精度与过渡时间
        self.add_requirement(Requirement(
            req_id=f"PR-{len(self.requirements)+1:02d}",
            category="性能",
            source_phase="悬停",
            description="悬停模式下,水平位置误差≤0.5m(1σ),垂直高度误差≤0.3m(1σ),"
                       "姿态角误差≤2°(1σ),响应时间≤100ms",
            verification="飞行测试数据统计",
            priority="高"
        ))
        self.add_requirement(Requirement(
            req_id=f"PR-{len(self.requirements)+1:02d}",
            category="性能",
            source_phase="过渡飞行",
            description="过渡飞行阶段持续时间≤20s,模式切换过程中高度变化≤±5m,"
                       "空速变化率≤3m/s²",
            verification="飞行测试数据记录",
            priority="高"
        ))
        
        # 安全性需求
        self.add_requirement(Requirement(
            req_id=f"SR-{len(self.requirements)+1:02d}",
            category="安全性",
            source_phase="全剖面",
            description="单电机失效时,飞控软件必须在200ms内完成推力重新分配,"
                       "保持可控飞行并引导安全着陆",
            verification="故障注入测试",
            priority="高"
        ))
        self.add_requirement(Requirement(
            req_id=f"SR-{len(self.requirements)+1:02d}",
            category="安全性",
            source_phase="全剖面",
            description="飞控软件必须实现三重冗余架构,任一通道故障时自动切换,"
                       "切换时间≤50ms且无瞬态扰动",
            verification="通道切换测试",
            priority="高"
        ))
        
        # 适航需求
        self.add_requirement(Requirement(
            req_id=f"AR-{len(self.requirements)+1:02d}",
            category="适航",
            source_phase="全剖面",
            description="软件开发生命周期必须符合DO-178C DAL C等级要求,"
                       "提供完整的需求追溯矩阵和验证证据",
            verification="适航审查",
            priority="高"
        ))
    
    def export_framework(self) -> Dict:
        """输出文档框架结构"""
        framework = {
            "document_title": "eVTOL飞控软件需求规格说明",
            "version": "0.1",
            "sections": {
                "1. 引言": ["1.1 目的", "1.2 范围", "1.3 术语定义"],
                "2. 系统描述": ["2.1 eVTOL平台概述", "2.2 任务剖面定义"],
                "3. 功能需求": [r.description for r in self.requirements if r.category == "功能"],
                "4. 性能需求": [r.description for r in self.requirements if r.category == "性能"],
                "5. 安全性需求": [r.description for r in self.requirements if r.category == "安全性"],
                "6. 适航需求": [r.description for r in self.requirements if r.category == "适航"],
                "7. 需求追溯矩阵": "FR/PR/SR/AR ↔ 任务剖面阶段 ↔ 验证方法",
                "8. 附录": ["A. 缩略语", "B. 参考标准"]
            }
        }
        return framework
    
    def print_summary(self):
        """打印需求清单摘要"""
        print("=" * 70)
        print("eVTOL飞控软件需求规格说明 - 初始需求清单")
        print("=" * 70)
        for req in self.requirements:
            print(f"[{req.req_id}] ({req.category}) 来源: {req.source_phase}")
            print(f"  描述: {req.description}")
            print(f"  验证: {req.verification} | 优先级: {req.priority}")
            print("-" * 70)
        print(f"共生成 {len(self.requirements)} 条初始需求")
        print(f"文档框架章节数: {len(self.export_framework()['sections'])}")

# 主执行流程
if __name__ == "__main__":
    # 创建框架实例
    framework = RequirementFramework()
    
    # 从任务剖面生成初始需求
    framework.generate_initial_requirements()
    
    # 打印需求清单
    framework.print_summary()
    
    # 输出文档框架结构
    doc = framework.export_framework()
    print("\n文档框架结构预览:")
    for section, subs in doc["sections"].items():
        if isinstance(subs, list):
            print(f"  {section}")
            for sub in subs:
                print(f"    - {sub}")
        else:
            print(f"  {section}: {subs}")

4. 运行与验证

运行方式:将上述代码保存为 req_framework.py,在Python 3.8+环境中执行 python req_framework.py。无需额外安装第三方库。

预期输出:程序将打印初始需求清单,包含功能需求6条(对应6个任务阶段)、性能需求2条、安全性需求2条、适航需求1条,共11条需求条目,并显示文档框架的章节结构。每条需求均包含编号、类别、来源阶段、描述、验证方法和优先级。

验证判定标准:若输出中每条需求均包含完整六字段信息,且功能需求覆盖全部6个任务剖面阶段,性能需求覆盖悬停精度与过渡时间两个关键指标,安全性需求包含单电机失效与冗余切换场景,适航需求引用DO-178C标准,则判定通过。该输出即为需求规格说明文档的初始骨架,后续可在此基础上补充细化条目。