ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OpenRocket 恢复部署警告系统解析:基于分级的单/双伞部署速度检测

OpenRocket 恢复部署警告系统解析:基于分级的单/双伞部署速度检测 OpenRocket 恢复部署警告系统解析基于分级的单/双伞部署速度检测【免费下载链接】openrocketModel-rocketry aerodynamics and trajectory simulation software项目地址: https://gitcode.com/GitHub_Trending/op/openrocket导读本文深入解析 OpenRocket 弹道仿真核心中的恢复警告系统Recovery Warning System该系统在每个恢复装置降落伞/飘带部署事件发生时按级per-stage独立评估部署速度并给出警告。通过阅读本文你将掌握单级部署与双级部署drogue main两条警告路径的判定逻辑、三个速度阈值的默认值及其作用、Is Drogue标记与级 Recovery 页签的配置方式并了解该设计在仿真引擎 BasicEventSimulationEngine.java 中的真实实现细节。设计概览按级独立评估恢复部署速度警告不是在整个火箭维度上统一评估的而是以级Stage为单位、彼此独立地进行。每一级部署恢复装置时系统使用该级自身的组件配置来决定警告路径与阈值。设计文档 recovery-warning-system.md 明确说明Recovery deployment speed warnings are evaluatedper stage, independently, using the rockets component configuration.这种设计带来的直接好处是多级火箭中第一级已经展开的降落伞例如级间分离后工作的 drogue不会干扰第二级主伞部署时的速度判断每级的警告阈值只对本级的组件生效。两条警告路径当一个恢复装置在本级部署时引擎依据该级是否检测到 drogue 装置二选一触发警告级的状态条件触发的警告该级存在 drogue 装置自动检测HighSpeedMainDeploymentLowSpeedMainDeployment针对主伞 main chute该级未检测到任何 drogue 装置RecoveryHighSpeedDeployment当前单级部署模式从实现上看这两类警告都被定义为 Warning.java 中的内部静态类RecoveryHighSpeedDeployment单级部署时主伞开伞速度过快对应本地化消息Warning.RECOVERY_HIGH_SPEEDHighSpeedMainDeployment双级部署时主伞开伞速度过快有 drogue 存在对应Warning.RECOVERY_MAIN_HIGH_SPEEDLowSpeedMainDeployment双级部署时主伞开伞速度过低火箭可能已接近悬停/停滞对应Warning.RECOVERY_MAIN_LOW_SPEED。三者均携带部署瞬间的合速度值getSpeed()在消息描述中会按当前单位制UnitGroup.UNITS_VELOCITY格式化输出例如Deployment at high speed (25.4 m/s)这类形式三者优先级均为MessagePriority.NORMAL且replaceBy返回false表示此类警告不会被其他消息合并替换每次触发都会独立记录。此外Warning.java 中还定义了RecoveryDrogueWithoutMain警告用于在仿真的初始检查阶段提示只有 drogue 而没有主伞的配置异常。检测机制源码级剖析事件入口所有速度警告都在仿真引擎处理RECOVERY_DEVICE_DEPLOYMENT事件时产生入口位于 BasicEventSimulationEngine.java。关键流程如下事件合法性校验忽略非活动级的事件isStageActive(n)为假或已经部署过的装置getDeployedRecoveryDevices().contains(c)部署异常检查若仍有活动级电机输出推力DEPLOY_UNDER_THRUST或火箭尚未离开发射导轨RECOVERY_LAUNCH_ROD将中止仿真或追加警告获取部署速度deploySpeed currentStatus.getRocketVelocity().length()即当前时刻火箭速度向量的模长按级扫描 drogue核心判定见下根据扫描结果走双级部署或单级部署警告分支将装置加入deployedRecoveryDevices集合并切换到 landing stepper。按级 drogue 扫描设计文档描述了检测规则在每次恢复装置部署事件时引擎只扫描部署级中的活动组件查找满足以下条件的RecoveryDeviceisDrogue() true其部署事件DeploymentConfiguration.DeployEvent不等于NEVER。对应的实现代码位于 BasicEventSimulationEngine.java// Auto-detect: scan active components in the deploying stage only for a drogue boolean stageHasDrogue false; for (RocketComponent comp : currentStatus.getConfiguration().getActiveComponents()) { if (comp instanceof RecoveryDevice rd rd.getStage() deployingStage) { DeploymentConfiguration dc rd.getDeploymentConfigurations().get(this.fcid); if (dc.getDeployEvent() ! DeploymentConfiguration.DeployEvent.NEVER rd.isDrogue()) { stageHasDrogue true; break; } } }注意rd.getStage() deployingStage这一行——这正是扫描范围限定在部署级的代码体现多级火箭中第一级的 drogue 不会影响第二级的警告阈值判定。这与设计文档的表述完全一致。分支判定扫描完成后进入分支BasicEventSimulationEngine.javastageHasDrogue true双级部署路径若正在部署的是 drogue 本身目前不产生速度警告源码中LowSpeedDrogueDeployment分支被注释保留等待后续启用若正在部署的是主伞则同时检查两个方向deploySpeed conds.getRecoveryDrogueMainHighSpeedWarning()时触发HighSpeedMainDeploymentdeploySpeed conds.getRecoveryDrogueMainLowSpeedWarning()时触发LowSpeedMainDeployment。stageHasDrogue false单级部署路径仅当deploySpeed conds.getRecoverySpeedWarning()时触发RecoveryHighSpeedDeployment。从源码结构看双级部署路径刻意让两个阈值字段始终可见、独立判断——高速与低速警告互不排斥主伞部署速度落在两者之间时两个警告都不会触发超出上界触发高速警告低于下界触发低速警告。仿真的顶层预检除部署事件内的检测外引擎在仿真启动时还会对整个配置做一次恢复装置预检BasicEventSimulationEngine.java若配置中没有任何恢复装置追加NO_RECOVERY_DEVICE警告若存在已配置部署事件非NEVER的 drogue 却没有任何主伞追加RecoveryDrogueWithoutMain警告提醒用户双级部署配置不完整。阈值参数与默认值三个速度阈值定义在仿真选项SimulationOptions.java中并通过SimulationConditions传递到引擎SimulationConditions.java在 BasicEventSimulationEngine.java 中以conds.getRecovery...Warning()读取阈值属性默认值用途RecoverySpeedWarning20 m/s单级部署开伞速度高于此值触发高速部署警告RecoveryDrogueMainHighSpeedWarning30.48 m/s100 fps双级部署主伞开伞速度高于此值触发高速警告RecoveryDrogueMainLowSpeedWarning15.24 m/s50 fps双级部署主伞开伞速度低于此值触发低速警告其中双级部署的两个默认值恰好对应英制单位 100 fps 与 50 fps30.48 m/s ≈ 100 ft/s15.24 m/s ≈ 50 ft/s体现了模型火箭降落伞部署速度的常见工程经验值。所有阈值在 UI 中均通过UnitGroup.UNITS_VELOCITY绑定用户切换单位制m/s、ft/s、km/h 等时输入值会自动换算。此外引擎中还存在一个被注释的drogueLowSpeedWarning默认 3.048 m/s即 10 fps用于未来 drogue 低速展开警告目前未启用。配置方式组件级Is Drogue复选框每个恢复装置组件ParachuteConfig、StreamerConfig都有一个是否作为 drogue的布尔标记实现于 RecoveryDevice.javaprivate boolean drogue false;通过isDrogue()/setDrogue(boolean)读写。该标记在组件对话框中只读drogue 的选择统一由级的 Recovery 页签管理setDrogue会向监听组件广播变更保证各视图同步。级级Recovery 页签AxialStageConfig级的 Recovery 页签提供三组控件Single Deployment单级部署单选钮清除该级的 drogue 选择Dual Deployment双级部署单选钮启用 drogue 选择能力Drogue device下拉框选择该级中哪个恢复装置充当 drogue。如果该级中不存在任何恢复装置Dual Deployment单选钮会被禁用因为双级部署在逻辑上至少需要一个主伞装置来承载 drogue 配置。仿真选项面板仿真选项Simulation Options中的恢复警告编辑面板 RecoveryWarningsPanel.java 以两个可折叠区块呈现Single Deployment 区块一个始终可见的阈值字段RecoverySpeedWarning高速警告Dual Deployment 区块两个始终可见的阈值字段RecoveryDrogueMainLowSpeedWarning低速警告与RecoveryDrogueMainHighSpeedWarning高速警告没有单选钮、没有条件显隐区域——两个字段总是同时展示用户可以独立调整与设计文档两个 always-visible 阈值字段的描述完全对应。该面板通过DoubleModel绑定属性名RecoverySpeedWarning、RecoveryDrogueMainHighSpeedWarning、RecoveryDrogueMainLowSpeedWarning因此可同时复用于仿真选项编辑对话框与应用级偏好设置ApplicationPreferences同样提供这些属性实现一处编辑、多处复用的设计。持久化与文件格式三个阈值与SimulationConditions一起被持久化到.ork工程文件中OpenRocketSaver在保存时写出导入端由SimulationConditionsHandlerWarningHandler读取回填相关文件见 OpenRocketSaver.java 与 SimulationConditionsHandler.java。这意味着每个仿真都可以保存各自独立的恢复警告阈值而不是全部共享全局默认值。小结OpenRocket 的恢复警告系统以分级独立评估为核心设计原则部署事件发生时引擎仅扫描部署级内部的活动组件来确定是否存在 drogue从而在单级部署仅高速警告与双级部署主伞高速/低速双警告之间自动选择路径。三个阈值20 / 30.48 / 15.24 m/s各自独立可配UI 层采用始终可见的双字段布局组件层的Is Drogue标记只读、由级 Recovery 页签统一管理配合RecoveryDrogueWithoutMain预检警告构成了从配置、仿真到警告提示的完整闭环。【免费下载链接】openrocketModel-rocketry aerodynamics and trajectory simulation software项目地址: https://gitcode.com/GitHub_Trending/op/openrocket创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表