mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-13 19:40:27 +03:00
move XML mission file XSD to inav developer docs
This commit is contained in:
parent
7f3577db41
commit
f311198df1
2 changed files with 190 additions and 0 deletions
59
docs/development/wp_mission_schema/README.md
Normal file
59
docs/development/wp_mission_schema/README.md
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
# XML Mission File Definition
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Historically, mission planners interoperating with inav (and multiwii) missions have used the XML mission file format defined by EOSBandi for MultiWii 2.3 (2013).
|
||||||
|
|
||||||
|
The format is defined the XSD schema here.
|
||||||
|
|
||||||
|
* Lower case tags are preferred by inav. Older tools may prefer uppercase (the original MW usage).
|
||||||
|
* For inav 4.0 and later, the `missionitem/flags` attribute is required for "fly-by home" waypoints and multi-mission files.
|
||||||
|
* For inav 4.0 and later, multi-mission files; mission segments are delimited by a flag value of `165` (the MSP protocol value).
|
||||||
|
* For multi-mission files, the waypoints may be numbered either sequentially across the whole file, or "reset-numbering" within each mission segment. The latter may (or not) be considered to be more "human readable".
|
||||||
|
* The `mwp` tag was introduced by the eponymous mission planner. Other mission planners may consider that reusing some of the tags (`cx`, `cy` - centre location, `zoom` TMS zoom level) is useful.
|
||||||
|
* The `version` tag may be intepreted by mission planners as they see fit. For example, the (obsolete) Android 'ez-gui' application requires '2.3-pre8'. For multi-mission files it is recommended to use another `version`.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Multi-mission file with sequential numbering
|
||||||
|
|
||||||
|
```
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<mission>
|
||||||
|
<version value="2.3-pre8"/>
|
||||||
|
<mwp cx="-3.2869291" cy="54.5722109" home-x="0" home-y="0" zoom="14"/>
|
||||||
|
<missionitem no="1" action="WAYPOINT" lat="54.5722109" lon="-3.2869291" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="0"/>
|
||||||
|
<missionitem no="2" action="WAYPOINT" lat="54.5708178" lon="-3.2642698" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="0"/>
|
||||||
|
<missionitem no="3" action="WAYPOINT" lat="54.5698227" lon="-3.2385206" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="165"/>
|
||||||
|
<missionitem no="4" action="WAYPOINT" lat="54.5599696" lon="-3.2958555" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="0"/>
|
||||||
|
<missionitem no="5" action="WAYPOINT" lat="54.5537978" lon="-3.2958555" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="0"/>
|
||||||
|
<missionitem no="6" action="WAYPOINT" lat="54.5547933" lon="-3.2864141" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="0"/>
|
||||||
|
<missionitem no="7" action="WAYPOINT" lat="54.5597705" lon="-3.2695913" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="0"/>
|
||||||
|
<missionitem no="8" action="WAYPOINT" lat="54.555291" lon="-3.2598066" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="0"/>
|
||||||
|
<missionitem no="9" action="JUMP" lat="0" lon="0" alt="0" parameter1="1" parameter2="0" parameter3="0" flag="165"/>
|
||||||
|
<missionitem no="10" action="WAYPOINT" lat="54.5714148" lon="-3.2501936" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="165"/>
|
||||||
|
</mission>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Multi-mission file with "reset" numbering and per-segment metadata
|
||||||
|
|
||||||
|
```
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<mission>
|
||||||
|
<!--mw planner 0.01-->
|
||||||
|
<version value="42"></version>
|
||||||
|
<mwp save-date="2021-11-05T11:02:39+0000" zoom="14" cx="-3.2627249" cy="54.5710168" generator="mwp (mwptools)"><details><distance units="m" value="3130"></distance></details></mwp>
|
||||||
|
<missionitem no="1" action="WAYPOINT" lat="54.5722109" lon="-3.2869291" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="0"></missionitem>
|
||||||
|
<missionitem no="2" action="WAYPOINT" lat="54.5708178" lon="-3.2642698" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="0"></missionitem>
|
||||||
|
<missionitem no="3" action="WAYPOINT" lat="54.5698227" lon="-3.2385206" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="165"></missionitem>
|
||||||
|
<mwp save-date="2021-11-05T11:02:39+0000" zoom="15" cx="-3.2778311" cy="54.5568837" generator="mwp (mwptools)"><details><distance units="m" value="3324"></distance><nav-speed units="m/s" value="10"></nav-speed><fly-time units="s" value="344"></fly-time><loiter-time units="s" value="0"></loiter-time></details></mwp>
|
||||||
|
<missionitem no="1" action="WAYPOINT" lat="54.5599696" lon="-3.2958555" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="0"></missionitem>
|
||||||
|
<missionitem no="2" action="WAYPOINT" lat="54.5537978" lon="-3.2958555" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="0"></missionitem>
|
||||||
|
<missionitem no="3" action="WAYPOINT" lat="54.5547933" lon="-3.2864141" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="0"></missionitem>
|
||||||
|
<missionitem no="4" action="WAYPOINT" lat="54.5597705" lon="-3.2695913" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="0"></missionitem>
|
||||||
|
<missionitem no="5" action="WAYPOINT" lat="54.5552910" lon="-3.2598066" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="0"></missionitem>
|
||||||
|
<missionitem no="6" action="JUMP" lat="0.0000000" lon="0.0000000" alt="0" parameter1="1" parameter2="0" parameter3="0" flag="165"></missionitem>
|
||||||
|
<mwp save-date="2021-11-05T11:02:39+0000" zoom="20" cx="-3.2501936" cy="54.5714148" generator="mwp (mwptools)"><details><distance units="m" value="0"></distance></details></mwp>
|
||||||
|
<missionitem no="1" action="WAYPOINT" lat="54.5714148" lon="-3.2501936" alt="50" parameter1="0" parameter2="0" parameter3="0" flag="165"></missionitem>
|
||||||
|
</mission>
|
||||||
|
```
|
131
docs/development/wp_mission_schema/mw-mission.xsd
Normal file
131
docs/development/wp_mission_schema/mw-mission.xsd
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||||
|
elementFormDefault="qualified">
|
||||||
|
<!-- XSchema for MW / iNav missions
|
||||||
|
e.g. xmllint --format --schema mw-mission.xsd example.mission
|
||||||
|
-->
|
||||||
|
<xs:element name="mission">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element ref="version"/>
|
||||||
|
<xs:element ref="mwp" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
<xs:element maxOccurs="unbounded" ref="missionitem"/>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="version">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="value" use="required"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<!-- mwp extension -->
|
||||||
|
<xs:element name="mwp">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element ref="details" minOccurs="0"/>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute name="cx" type="xs:decimal"/>
|
||||||
|
<xs:attribute name="cy" type="xs:decimal"/>
|
||||||
|
<xs:attribute name="home-x" type="xs:decimal"/>
|
||||||
|
<xs:attribute name="home-y" type="xs:decimal"/>
|
||||||
|
<xs:attribute name="save-date" use="required" />
|
||||||
|
<xs:attribute name="generator" type="xs:string"/>
|
||||||
|
<xs:attribute name="zoom">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:integer">
|
||||||
|
<xs:minInclusive value="0"/>
|
||||||
|
<xs:maxInclusive value="19"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:attribute>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="details">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element ref="distance" minOccurs="0"/>
|
||||||
|
<xs:element ref="nav-speed" minOccurs="0"/>
|
||||||
|
<xs:element ref="fly-time" minOccurs="0"/>
|
||||||
|
<xs:element ref="loiter-time" minOccurs="0"/>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="distance">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="units" use="required" type="xs:NCName"/>
|
||||||
|
<xs:attribute name="value" use="required" type="xs:decimal"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="nav-speed">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="units" use="required"/>
|
||||||
|
<xs:attribute name="value" use="required" type="xs:decimal"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="fly-time">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="units" use="required" type="xs:NCName"/>
|
||||||
|
<xs:attribute name="value" use="required" type="xs:integer"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="loiter-time">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="units" use="required" type="xs:NCName"/>
|
||||||
|
<xs:attribute name="value" use="required" type="xs:integer"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="missionitem">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="action" use="required">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:token">
|
||||||
|
<xs:enumeration value="UNASSIGNED"/>
|
||||||
|
<xs:enumeration value="WAYPOINT"/>
|
||||||
|
<xs:enumeration value="POSHOLD_UNLIM"/>
|
||||||
|
<xs:enumeration value="POSHOLD_TIME"/>
|
||||||
|
<xs:enumeration value="RTH"/>
|
||||||
|
<xs:enumeration value="SET_POI"/>
|
||||||
|
<xs:enumeration value="JUMP"/>
|
||||||
|
<xs:enumeration value="SET_HEAD"/>
|
||||||
|
<xs:enumeration value="LAND"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:attribute>
|
||||||
|
<!-- no min,max as may be AMSL -->
|
||||||
|
<xs:attribute name="alt" use="required" type="xs:integer"/>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Locations are decimal degrees, WGS84 (EPSG:4326)
|
||||||
|
-->
|
||||||
|
<xs:attribute name="lat" use="required">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:decimal">
|
||||||
|
<xs:minInclusive value="-90"/>
|
||||||
|
<xs:maxInclusive value="90"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute name="lon" use="required">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:decimal">
|
||||||
|
<xs:minInclusive value="-180"/>
|
||||||
|
<xs:maxInclusive value="180"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute name="no" use="required" type="xs:integer"/>
|
||||||
|
<xs:attribute name="parameter1" use="required" type="xs:integer"/>
|
||||||
|
<xs:attribute name="parameter2" use="required" type="xs:integer"/>
|
||||||
|
<xs:attribute name="parameter3" type="xs:integer"/>
|
||||||
|
<!--
|
||||||
|
flag is not strictly required unless the WP is "Flyby Home"
|
||||||
|
-->
|
||||||
|
<xs:attribute name="flag" use="optional" type="xs:integer"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
|
||||||
|
<xs:element name="MISSION" substitutionGroup="mission"/>
|
||||||
|
<xs:element name="MISSIONITEM" substitutionGroup="missionitem"/>
|
||||||
|
<xs:element name="VERSION" substitutionGroup="version"/>
|
||||||
|
|
||||||
|
</xs:schema>
|
Loading…
Add table
Add a link
Reference in a new issue