问题描述
我的 Dymos 轨迹分为 3 个阶段。在第一阶段和最后阶段,我使用攻角作为控制。在第二阶段,我不想控制而是让攻角保持在第一阶段的最后一个值。我在中间阶段使用 opt = False 关闭了攻角优化。我使用 add_link_constraint() 来连接第一和第二阶段之间的 alpha,但这并没有像我想象的那样工作——在第二阶段,alpha 默认为零,并在第一阶段结束时强制 alpha 为零。不确定如何使其覆盖。
解决方法
在这种情况下,由于 alpha 在第二阶段不是动态的,而您只是希望它保持其值,您应该将其设为 参数 而不是 控件 .
让它的值由优化器决定(通过设置 opt=True),并使用相位链接约束来强制 dymos 驱动 alpha 值与第一阶段结束和第二阶段开始之间的差异相位为零。
有一个测试用例演示了这个 here。在测试案例中,控制角 u1
在第一和第三阶段(推进时)是动态控制,并在第二阶段(滑行)保持恒定值。
此测试用例在 Trajectory 上使用 link_phases
方法来施加连续性(链接)约束。或者,add_linkage_constraint
方法更通用,但使用起来更复杂。
请注意,此功能是 Dymos 的新功能,因此我建议使用最新版本。
在这种情况下将其保留为优化控件不起作用,因为链接只会尝试链接第二阶段端点处的值。内部值对优化没有任何影响。