diff --git a/CHANGELOG.md b/CHANGELOG.md index a97354593a18135eb3083925202760f6f8294535..f763be93de34915fc5ec1a13ae9dbc8958f043e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,12 +11,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Goal object in mission_plan message that consists of a GeoJSON feature (representing the part of primitive that is currently the goal of the given mission plan). - A `partial` flag that indicates if a mission plan is a partial plan or the entire mission plan +- Options to primitives (under planning_configuration message) which is only a property when a primitive has an instruction of "follow" or "navigate_to" - Validate message_ID matches uuid format - Add definition of instruction_set message - Added optional primitives to squad schema ### Changed +- Added "instruction" as required under the primitive schema (planning configuration) - Refactor instructeion_set into platform_instruction_set - Refactor mission_plan schema autonomy_engine_plan_ID oneOf - Update all example messages with valid UUIDs diff --git a/examples/mas-dt/planning_configuration.json b/examples/mas-dt/planning_configuration.json index fc34ee7e5b9726acd6722252550da1258c2553c5..82445417e26772c3f794261aa4e5d9268c474cfe 100644 --- a/examples/mas-dt/planning_configuration.json +++ b/examples/mas-dt/planning_configuration.json @@ -153,6 +153,11 @@ 50.335942 ] } + }, + "options": { + "repeat": true, + "reverse": true, + "acceptance_radius_m": 3000 } } ] diff --git a/formats/planning_configuration.py b/formats/planning_configuration.py index 7b5bc1721982c85d5ed220665254af3c68c20e50..c679e85da6fa2a4226ac149f1b497b29921b1d67 100644 --- a/formats/planning_configuration.py +++ b/formats/planning_configuration.py @@ -181,26 +181,66 @@ platform_schema = { ], } -primitive_schema = { +options_schema = { "type": "object", "properties": { - "instruction": { - "type": "string", - "enum": [ - "stay_inside", - "stay_outside", - "navigate_to", - "follow", - "repeat", - "cover", - ], - "description": "How the associated feature should be used", - }, - "feature": { - "$ref": "https://geojson.org/schema/Feature.json", + "repeat": { + "type": "boolean", + "description": "Repeat these set of primitives in order (e.g. 1->2->3->1->2...)", + "example": True, + }, + "reverse": { + "type": "boolean", + "description": "Loop backwards through the set of primitives (e.g 1->2->-3->2->1...)", + "example": True, + }, + "acceptance_radius_m": { + "type": "number", + "format": "float", + "description": "Acceptance radius (if applicable) to points of geometry in metres", + "example": 10000, }, }, - "required": ["feature"], +} + +primitive_schema = { + "oneOf": [ + { + "properties": { + "instruction": { + "type": "string", + "enum": [ + "navigate_to", + "follow", + ], + "description": "How the associated feature should be used", + }, + "options": options_schema, + "feature": { + "$ref": "https://geojson.org/schema/Feature.json", + }, + }, + "required": ["feature", "instruction"], + }, + { + "properties": { + "instruction": { + "type": "string", + "enum": [ + "stay_inside", + "stay_outside", + "repeat", + "cover", + ], + "description": "How the associated feature should be used", + }, + "feature": { + "$ref": "https://geojson.org/schema/Feature.json", + }, + }, + "required": ["feature", "instruction"], + }, + ] } squad_metadata_schema = { diff --git a/project/soar/swagger.json b/project/soar/swagger.json index 44e912ebeae1eb2144d385b8cfd36801c06458d9..8dc6f1155a196fa467974d77ced39006fe07b564 100644 --- a/project/soar/swagger.json +++ b/project/soar/swagger.json @@ -1947,27 +1947,69 @@ "primitives": { "description": "Specification primitives - campaign-wide such as operating area and obstacles", "items": { - "properties": { - "feature": { - "$ref": "#/components/schemas/geojson.org.schema.Feature.json" + "oneOf": [ + { + "properties": { + "feature": { + "$ref": "#/components/schemas/geojson.org.schema.Feature.json" + }, + "instruction": { + "description": "How the associated feature should be used", + "enum": [ + "navigate_to", + "follow" + ], + "type": "string" + }, + "options": { + "properties": { + "acceptance_radius_m": { + "description": "Acceptance radius (if applicable) to points of geometry in metres", + "example": 10000, + "format": "float", + "type": "number" + }, + "repeat": { + "description": "Repeat these set of primitives in order (e.g. 1->2->3->1->2...)", + "example": true, + "type": "boolean" + }, + "reverse": { + "description": "Loop backwards through the set of primitives (e.g 1->2->-3->2->1...)", + "example": true, + "type": "boolean" + } + }, + "type": "object" + } + }, + "required": [ + "feature", + "instruction" + ] }, - "instruction": { - "description": "How the associated feature should be used", - "enum": [ - "stay_inside", - "stay_outside", - "navigate_to", - "follow", - "repeat", - "cover" - ], - "type": "string" + { + "properties": { + "feature": { + "$ref": "#/components/schemas/geojson.org.schema.Feature.json" + }, + "instruction": { + "description": "How the associated feature should be used", + "enum": [ + "stay_inside", + "stay_outside", + "repeat", + "cover" + ], + "type": "string" + } + }, + "required": [ + "feature", + "instruction" + ] } - }, - "required": [ - "feature" - ], - "type": "object" + ] }, "type": "array" }, @@ -2158,27 +2200,69 @@ "primitives": { "description": "Squad primitives - includes platform group navigation instructions", "items": { - "properties": { - "feature": { - "$ref": "#/components/schemas/geojson.org.schema.Feature.json" + "oneOf": [ + { + "properties": { + "feature": { + "$ref": "#/components/schemas/geojson.org.schema.Feature.json" + }, + "instruction": { + "description": "How the associated feature should be used", + "enum": [ + "navigate_to", + "follow" + ], + "type": "string" + }, + "options": { + "properties": { + "acceptance_radius_m": { + "description": "Acceptance radius (if applicable) to points of geometry in metres", + "example": 10000, + "format": "float", + "type": "number" + }, + "repeat": { + "description": "Repeat these set of primitives in order (e.g. 1->2->3->1->2...)", + "example": true, + "type": "boolean" + }, + "reverse": { + "description": "Loop backwards through the set of primitives (e.g 1->2->-3->2->1...)", + "example": true, + "type": "boolean" + } + }, + "type": "object" + } + }, + "required": [ + "feature", + "instruction" + ] }, - "instruction": { - "description": "How the associated feature should be used", - "enum": [ - "stay_inside", - "stay_outside", - "navigate_to", - "follow", - "repeat", - "cover" - ], - "type": "string" + { + "properties": { + "feature": { + "$ref": "#/components/schemas/geojson.org.schema.Feature.json" + }, + "instruction": { + "description": "How the associated feature should be used", + "enum": [ + "stay_inside", + "stay_outside", + "repeat", + "cover" + ], + "type": "string" + } + }, + "required": [ + "feature", + "instruction" + ] } - }, - "required": [ - "feature" - ], - "type": "object" + ] }, "type": "array" },