Hi all,
I noticed that in the Orekit OpmParser
as of Orekit 11, maneuvers which contain no MAN_DELTA_MASS
keyword are skipped altogether without raising a parse error, since they never satisfy the currentManeuver.completed()
condition in processManeuverToken
.
I think that this behavior should be revisited and Orekit should allow the parser to return Maneuver
s with deltaMass = Double.NaN
. First, IMO it is not clear in the CCSDS standard (502.0-B-3) that the MAN_DELTA_MASS
keyword (or in fact any MAN_
field) is actually required. In the OPM DATA table, each MAN_
field is labeled “Optional”. The only numbered standard I see which could perhaps be interpreted to mean that all MAN_
fields are required for any maneuvers that are present is this:
3.2.4.8 Multiple sets of maneuver parameters may appear. For each maneuver, all the
maneuver parameters shall be repeated in the order shown in table 3-3.
However, I think there are two issues with this. First, if the intent of this standard was that the MAN_
fields are conditionally required if any one of them is present, then the standard would have used the “C” (Conditional) requirement instead of the “O” (Optional) requirement. Second, in the old Orekit 10 version of the OPM parser, these maneuvers were not ignored, even though this part of the standard is as far as I can tell unchanged in CCSDSv3 comapred to CCSDSv2.
Finally, I think that even if my above argument is rejected and the team decides that maneuvers must contain all MAN_
fields to be parsed and returned to the user, this should either be a configurable behavior (similar to the ParsedUnitsBehavior
mechanism used to resolve unit parsing ambiguities in the CCSDDS standards) or raise a parse error that can be handled by the user instead of silently skipping the maneuver altogether. In my experience, many large satellite operators operationally publish OPM files which do not contain MAN_DELTA_MASS
fields, and I think that Orekit’s silent omission of “incomplete” maneuvers is likely to cause users to misinterpret OPM files which are communicated across organizations.
I couldn’t find any discussion on this topic on the Orekit forum, so I’d like to hear the team’s opinion on the matter. Thank you!