isar 1.24.5__tar.gz → 1.25.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of isar might be problematic. Click here for more details.

Files changed (209) hide show
  1. {isar-1.24.5 → isar-1.25.0}/PKG-INFO +1 -1
  2. {isar-1.24.5 → isar-1.25.0}/requirements.txt +12 -13
  3. {isar-1.24.5 → isar-1.25.0}/src/isar/apis/models/models.py +1 -0
  4. isar-1.25.0/src/isar/apis/models/start_mission_definition.py +181 -0
  5. {isar-1.24.5 → isar-1.25.0}/src/isar/apis/schedule/scheduling_controller.py +27 -9
  6. isar-1.25.0/src/isar/config/certs/ca-cert.pem +35 -0
  7. {isar-1.24.5 → isar-1.25.0}/src/isar/config/predefined_missions/default.json +12 -11
  8. {isar-1.24.5 → isar-1.25.0}/src/isar/config/predefined_missions/default_turtlebot.json +17 -16
  9. {isar-1.24.5 → isar-1.25.0}/src/isar/mission_planner/local_planner.py +6 -20
  10. {isar-1.24.5 → isar-1.25.0}/src/isar/mission_planner/mission_planner_interface.py +1 -1
  11. {isar-1.24.5 → isar-1.25.0}/src/isar/script.py +5 -4
  12. {isar-1.24.5 → isar-1.25.0}/src/isar/state_machine/state_machine.py +4 -4
  13. {isar-1.24.5 → isar-1.25.0}/src/isar/state_machine/states/idle.py +9 -7
  14. {isar-1.24.5 → isar-1.25.0}/src/isar/state_machine/states/monitor.py +11 -3
  15. {isar-1.24.5 → isar-1.25.0}/src/isar/storage/slimm_storage.py +4 -1
  16. {isar-1.24.5 → isar-1.25.0}/src/isar/storage/utilities.py +3 -4
  17. {isar-1.24.5 → isar-1.25.0}/src/isar.egg-info/PKG-INFO +1 -1
  18. {isar-1.24.5 → isar-1.25.0}/src/isar.egg-info/SOURCES.txt +3 -6
  19. {isar-1.24.5 → isar-1.25.0}/src/robot_interface/models/inspection/inspection.py +4 -11
  20. isar-1.25.0/src/robot_interface/models/mission/mission.py +20 -0
  21. {isar-1.24.5 → isar-1.25.0}/src/robot_interface/models/mission/task.py +28 -40
  22. {isar-1.24.5 → isar-1.25.0}/src/robot_interface/robot_interface.py +7 -5
  23. {isar-1.24.5 → isar-1.25.0}/tests/integration/turtlebot/test_successful_mission.py +3 -2
  24. isar-1.25.0/tests/isar/apis/models/test_start_mission_definition.py +81 -0
  25. {isar-1.24.5 → isar-1.25.0}/tests/isar/apis/scheduler/test_scheduler_router.py +0 -60
  26. {isar-1.24.5 → isar-1.25.0}/tests/isar/mission/test_mission.py +5 -7
  27. {isar-1.24.5 → isar-1.25.0}/tests/isar/services/readers/test_mission_reader.py +20 -20
  28. {isar-1.24.5 → isar-1.25.0}/tests/isar/services/utilities/test_queue_utilities.py +4 -4
  29. {isar-1.24.5 → isar-1.25.0}/tests/isar/state_machine/states/test_monitor.py +1 -2
  30. {isar-1.24.5 → isar-1.25.0}/tests/isar/state_machine/test_state_machine.py +54 -113
  31. isar-1.25.0/tests/isar/storage/test_uploader.py +85 -0
  32. {isar-1.24.5 → isar-1.25.0}/tests/mocks/mission_definition.py +2 -37
  33. {isar-1.24.5 → isar-1.25.0}/tests/mocks/robot_interface.py +7 -8
  34. {isar-1.24.5 → isar-1.25.0}/tests/mocks/task.py +6 -2
  35. {isar-1.24.5 → isar-1.25.0}/tests/test_data/test_mission_working.json +15 -14
  36. {isar-1.24.5 → isar-1.25.0}/tests/test_data/test_mission_working_no_tasks.json +1 -0
  37. {isar-1.24.5 → isar-1.25.0}/tests/test_data/test_thermal_image_mission.json +5 -4
  38. isar-1.24.5/src/isar/apis/models/start_mission_definition.py +0 -231
  39. isar-1.24.5/src/isar/config/certs/ca-cert.pem +0 -35
  40. isar-1.24.5/src/isar/services/readers/base_reader.py +0 -37
  41. isar-1.24.5/src/robot_interface/models/mission/mission.py +0 -28
  42. isar-1.24.5/tests/isar/models/test_start_mission_definition.py +0 -63
  43. isar-1.24.5/tests/isar/services/readers/test_base_reader.py +0 -23
  44. isar-1.24.5/tests/isar/storage/test_uploader.py +0 -82
  45. isar-1.24.5/tests/test_data/test_json_file.json +0 -227
  46. {isar-1.24.5 → isar-1.25.0}/.dockerignore +0 -0
  47. {isar-1.24.5 → isar-1.25.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  48. {isar-1.24.5 → isar-1.25.0}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  49. {isar-1.24.5 → isar-1.25.0}/.github/ISSUE_TEMPLATE/improvement.md +0 -0
  50. {isar-1.24.5 → isar-1.25.0}/.github/release.yml +0 -0
  51. {isar-1.24.5 → isar-1.25.0}/.github/workflows/compile_requirements.yml +0 -0
  52. {isar-1.24.5 → isar-1.25.0}/.github/workflows/project_automations.yml +0 -0
  53. {isar-1.24.5 → isar-1.25.0}/.github/workflows/publish_isar_base_image.yml +0 -0
  54. {isar-1.24.5 → isar-1.25.0}/.github/workflows/pythonpackage.yml +0 -0
  55. {isar-1.24.5 → isar-1.25.0}/.github/workflows/pythonpublish.yml +0 -0
  56. {isar-1.24.5 → isar-1.25.0}/.github/workflows/stale.yml +0 -0
  57. {isar-1.24.5 → isar-1.25.0}/.gitignore +0 -0
  58. {isar-1.24.5 → isar-1.25.0}/.pre-commit-config.yaml +0 -0
  59. {isar-1.24.5 → isar-1.25.0}/Dockerfile +0 -0
  60. {isar-1.24.5 → isar-1.25.0}/LICENSE +0 -0
  61. {isar-1.24.5 → isar-1.25.0}/README.md +0 -0
  62. {isar-1.24.5 → isar-1.25.0}/SECURITY.md +0 -0
  63. {isar-1.24.5 → isar-1.25.0}/docker-compose-turtlebot.yml +0 -0
  64. {isar-1.24.5 → isar-1.25.0}/docker-compose.yml +0 -0
  65. {isar-1.24.5 → isar-1.25.0}/docs/Makefile +0 -0
  66. {isar-1.24.5 → isar-1.25.0}/docs/make.bat +0 -0
  67. {isar-1.24.5 → isar-1.25.0}/docs/rst_processing.py +0 -0
  68. {isar-1.24.5 → isar-1.25.0}/docs/source/conf.py +0 -0
  69. {isar-1.24.5 → isar-1.25.0}/docs/source/index.rst +0 -0
  70. {isar-1.24.5 → isar-1.25.0}/docs/source/readme_link.md +0 -0
  71. {isar-1.24.5 → isar-1.25.0}/docs/state_machine_diagram.png +0 -0
  72. {isar-1.24.5 → isar-1.25.0}/main.py +0 -0
  73. {isar-1.24.5 → isar-1.25.0}/pyproject.toml +0 -0
  74. {isar-1.24.5 → isar-1.25.0}/radixconfig.yml +0 -0
  75. {isar-1.24.5 → isar-1.25.0}/setup.cfg +0 -0
  76. {isar-1.24.5 → isar-1.25.0}/src/isar/__init__.py +0 -0
  77. {isar-1.24.5 → isar-1.25.0}/src/isar/apis/__init__.py +0 -0
  78. {isar-1.24.5 → isar-1.25.0}/src/isar/apis/api.py +0 -0
  79. {isar-1.24.5 → isar-1.25.0}/src/isar/apis/models/__init__.py +0 -0
  80. {isar-1.24.5 → isar-1.25.0}/src/isar/apis/robot_control/robot_controller.py +0 -0
  81. {isar-1.24.5 → isar-1.25.0}/src/isar/apis/schedule/__init__.py +0 -0
  82. {isar-1.24.5 → isar-1.25.0}/src/isar/apis/security/__init__.py +0 -0
  83. {isar-1.24.5 → isar-1.25.0}/src/isar/apis/security/authentication.py +0 -0
  84. {isar-1.24.5 → isar-1.25.0}/src/isar/config/__init__.py +0 -0
  85. {isar-1.24.5 → isar-1.25.0}/src/isar/config/configuration_error.py +0 -0
  86. {isar-1.24.5 → isar-1.25.0}/src/isar/config/keyvault/__init__.py +0 -0
  87. {isar-1.24.5 → isar-1.25.0}/src/isar/config/keyvault/keyvault_error.py +0 -0
  88. {isar-1.24.5 → isar-1.25.0}/src/isar/config/keyvault/keyvault_service.py +0 -0
  89. {isar-1.24.5 → isar-1.25.0}/src/isar/config/log.py +0 -0
  90. {isar-1.24.5 → isar-1.25.0}/src/isar/config/logging.conf +0 -0
  91. {isar-1.24.5 → isar-1.25.0}/src/isar/config/maps/JSP1_intermediate_deck.json +0 -0
  92. {isar-1.24.5 → isar-1.25.0}/src/isar/config/maps/JSP1_weather_deck.json +0 -0
  93. {isar-1.24.5 → isar-1.25.0}/src/isar/config/maps/default_map.json +0 -0
  94. {isar-1.24.5 → isar-1.25.0}/src/isar/config/maps/klab_b.json +0 -0
  95. {isar-1.24.5 → isar-1.25.0}/src/isar/config/maps/klab_compressor.json +0 -0
  96. {isar-1.24.5 → isar-1.25.0}/src/isar/config/maps/klab_turtlebot.json +0 -0
  97. {isar-1.24.5 → isar-1.25.0}/src/isar/config/maps/turtleworld.json +0 -0
  98. {isar-1.24.5 → isar-1.25.0}/src/isar/config/predefined_mission_definition/__init__.py +0 -0
  99. {isar-1.24.5 → isar-1.25.0}/src/isar/config/predefined_mission_definition/default_exr.json +0 -0
  100. {isar-1.24.5 → isar-1.25.0}/src/isar/config/predefined_mission_definition/default_mission.json +0 -0
  101. {isar-1.24.5 → isar-1.25.0}/src/isar/config/predefined_mission_definition/default_turtlebot.json +0 -0
  102. {isar-1.24.5 → isar-1.25.0}/src/isar/config/predefined_missions/__init__.py +0 -0
  103. {isar-1.24.5 → isar-1.25.0}/src/isar/config/settings.env +0 -0
  104. {isar-1.24.5 → isar-1.25.0}/src/isar/config/settings.py +0 -0
  105. {isar-1.24.5 → isar-1.25.0}/src/isar/mission_planner/__init__.py +0 -0
  106. {isar-1.24.5 → isar-1.25.0}/src/isar/mission_planner/sequential_task_selector.py +0 -0
  107. {isar-1.24.5 → isar-1.25.0}/src/isar/mission_planner/task_selector_interface.py +0 -0
  108. {isar-1.24.5 → isar-1.25.0}/src/isar/models/__init__.py +0 -0
  109. {isar-1.24.5 → isar-1.25.0}/src/isar/models/communication/__init__.py +0 -0
  110. {isar-1.24.5 → isar-1.25.0}/src/isar/models/communication/message.py +0 -0
  111. {isar-1.24.5 → isar-1.25.0}/src/isar/models/communication/queues/__init__.py +0 -0
  112. {isar-1.24.5 → isar-1.25.0}/src/isar/models/communication/queues/queue_io.py +0 -0
  113. {isar-1.24.5 → isar-1.25.0}/src/isar/models/communication/queues/queue_timeout_error.py +0 -0
  114. {isar-1.24.5 → isar-1.25.0}/src/isar/models/communication/queues/queues.py +0 -0
  115. {isar-1.24.5 → isar-1.25.0}/src/isar/models/communication/queues/status_queue.py +0 -0
  116. {isar-1.24.5 → isar-1.25.0}/src/isar/models/mission_metadata/__init__.py +0 -0
  117. {isar-1.24.5 → isar-1.25.0}/src/isar/modules.py +0 -0
  118. {isar-1.24.5 → isar-1.25.0}/src/isar/services/__init__.py +0 -0
  119. {isar-1.24.5 → isar-1.25.0}/src/isar/services/auth/__init__.py +0 -0
  120. {isar-1.24.5 → isar-1.25.0}/src/isar/services/auth/azure_credentials.py +0 -0
  121. {isar-1.24.5/src/isar/services/readers → isar-1.25.0/src/isar/services/service_connections}/__init__.py +0 -0
  122. {isar-1.24.5/src/isar/services/service_connections → isar-1.25.0/src/isar/services/service_connections/mqtt}/__init__.py +0 -0
  123. {isar-1.24.5 → isar-1.25.0}/src/isar/services/service_connections/mqtt/mqtt_client.py +0 -0
  124. {isar-1.24.5 → isar-1.25.0}/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py +0 -0
  125. {isar-1.24.5 → isar-1.25.0}/src/isar/services/service_connections/mqtt/robot_info_publisher.py +0 -0
  126. {isar-1.24.5 → isar-1.25.0}/src/isar/services/service_connections/request_handler.py +0 -0
  127. {isar-1.24.5/src/isar/services/service_connections/mqtt → isar-1.25.0/src/isar/services/service_connections/stid}/__init__.py +0 -0
  128. {isar-1.24.5/src/isar/services/service_connections/stid → isar-1.25.0/src/isar/services/utilities}/__init__.py +0 -0
  129. {isar-1.24.5 → isar-1.25.0}/src/isar/services/utilities/queue_utilities.py +0 -0
  130. {isar-1.24.5 → isar-1.25.0}/src/isar/services/utilities/robot_utilities.py +0 -0
  131. {isar-1.24.5 → isar-1.25.0}/src/isar/services/utilities/scheduling_utilities.py +0 -0
  132. {isar-1.24.5 → isar-1.25.0}/src/isar/services/utilities/threaded_request.py +0 -0
  133. {isar-1.24.5/src/isar/services/utilities → isar-1.25.0/src/isar/state_machine}/__init__.py +0 -0
  134. {isar-1.24.5 → isar-1.25.0}/src/isar/state_machine/states/__init__.py +0 -0
  135. {isar-1.24.5 → isar-1.25.0}/src/isar/state_machine/states/initialize.py +0 -0
  136. {isar-1.24.5 → isar-1.25.0}/src/isar/state_machine/states/initiate.py +0 -0
  137. {isar-1.24.5 → isar-1.25.0}/src/isar/state_machine/states/off.py +0 -0
  138. {isar-1.24.5 → isar-1.25.0}/src/isar/state_machine/states/offline.py +0 -0
  139. {isar-1.24.5 → isar-1.25.0}/src/isar/state_machine/states/paused.py +0 -0
  140. {isar-1.24.5 → isar-1.25.0}/src/isar/state_machine/states/stop.py +0 -0
  141. {isar-1.24.5 → isar-1.25.0}/src/isar/state_machine/states_enum.py +0 -0
  142. {isar-1.24.5/src/isar/state_machine → isar-1.25.0/src/isar/storage}/__init__.py +0 -0
  143. {isar-1.24.5 → isar-1.25.0}/src/isar/storage/blob_storage.py +0 -0
  144. {isar-1.24.5 → isar-1.25.0}/src/isar/storage/local_storage.py +0 -0
  145. {isar-1.24.5 → isar-1.25.0}/src/isar/storage/storage_interface.py +0 -0
  146. {isar-1.24.5 → isar-1.25.0}/src/isar/storage/uploader.py +0 -0
  147. {isar-1.24.5 → isar-1.25.0}/src/isar.egg-info/dependency_links.txt +0 -0
  148. {isar-1.24.5 → isar-1.25.0}/src/isar.egg-info/entry_points.txt +0 -0
  149. {isar-1.24.5 → isar-1.25.0}/src/isar.egg-info/requires.txt +0 -0
  150. {isar-1.24.5 → isar-1.25.0}/src/isar.egg-info/top_level.txt +0 -0
  151. {isar-1.24.5/src/isar/storage → isar-1.25.0/src/robot_interface}/__init__.py +0 -0
  152. {isar-1.24.5/src/robot_interface → isar-1.25.0/src/robot_interface/models}/__init__.py +0 -0
  153. {isar-1.24.5/src/robot_interface/models → isar-1.25.0/src/robot_interface/models/exceptions}/__init__.py +0 -0
  154. {isar-1.24.5 → isar-1.25.0}/src/robot_interface/models/exceptions/robot_exceptions.py +0 -0
  155. {isar-1.24.5 → isar-1.25.0}/src/robot_interface/models/initialize/__init__.py +0 -0
  156. {isar-1.24.5 → isar-1.25.0}/src/robot_interface/models/initialize/initialize_params.py +0 -0
  157. {isar-1.24.5 → isar-1.25.0}/src/robot_interface/models/inspection/__init__.py +0 -0
  158. {isar-1.24.5/src/robot_interface/models/exceptions → isar-1.25.0/src/robot_interface/models/mission}/__init__.py +0 -0
  159. {isar-1.24.5 → isar-1.25.0}/src/robot_interface/models/mission/status.py +0 -0
  160. {isar-1.24.5/src/robot_interface/models/mission → isar-1.25.0/src/robot_interface/models/robots}/__init__.py +0 -0
  161. {isar-1.24.5 → isar-1.25.0}/src/robot_interface/models/robots/media.py +0 -0
  162. {isar-1.24.5 → isar-1.25.0}/src/robot_interface/models/robots/robot_model.py +0 -0
  163. {isar-1.24.5/src/robot_interface/models/robots → isar-1.25.0/src/robot_interface/telemetry}/__init__.py +0 -0
  164. {isar-1.24.5 → isar-1.25.0}/src/robot_interface/telemetry/mqtt_client.py +0 -0
  165. {isar-1.24.5 → isar-1.25.0}/src/robot_interface/telemetry/payloads.py +0 -0
  166. {isar-1.24.5 → isar-1.25.0}/src/robot_interface/test_robot_interface.py +0 -0
  167. {isar-1.24.5/src/robot_interface/telemetry → isar-1.25.0/src/robot_interface/utilities}/__init__.py +0 -0
  168. {isar-1.24.5 → isar-1.25.0}/src/robot_interface/utilities/json_service.py +0 -0
  169. {isar-1.24.5 → isar-1.25.0}/src/robot_interface/utilities/uuid_string_factory.py +0 -0
  170. {isar-1.24.5/src/robot_interface/utilities → isar-1.25.0/tests}/__init__.py +0 -0
  171. {isar-1.24.5 → isar-1.25.0}/tests/conftest.py +0 -0
  172. {isar-1.24.5/tests → isar-1.25.0/tests/integration}/__init__.py +0 -0
  173. {isar-1.24.5/tests/integration → isar-1.25.0/tests/integration/turtlebot}/__init__.py +0 -0
  174. {isar-1.24.5/tests/integration/turtlebot → isar-1.25.0/tests/integration/turtlebot/config}/__init__.py +0 -0
  175. {isar-1.24.5/tests/integration/turtlebot/config → isar-1.25.0/tests/integration/turtlebot/config/maps}/__init__.py +0 -0
  176. {isar-1.24.5 → isar-1.25.0}/tests/integration/turtlebot/config/maps/turtleworld.json +0 -0
  177. {isar-1.24.5/tests/integration/turtlebot/config/maps → isar-1.25.0/tests/integration/turtlebot/config/missions}/__init__.py +0 -0
  178. {isar-1.24.5 → isar-1.25.0}/tests/integration/turtlebot/config/missions/default.json +0 -0
  179. {isar-1.24.5/tests/integration/turtlebot/config/missions → isar-1.25.0/tests/isar}/__init__.py +0 -0
  180. {isar-1.24.5/tests/isar → isar-1.25.0/tests/isar/apis}/__init__.py +0 -0
  181. {isar-1.24.5/tests/isar/apis → isar-1.25.0/tests/isar/apis/models}/__init__.py +0 -0
  182. {isar-1.24.5/tests/isar → isar-1.25.0/tests/isar/apis}/models/example_mission_definition.json +0 -0
  183. {isar-1.24.5 → isar-1.25.0}/tests/isar/apis/scheduler/__init__.py +0 -0
  184. {isar-1.24.5 → isar-1.25.0}/tests/isar/apis/security/__init__.py +0 -0
  185. {isar-1.24.5 → isar-1.25.0}/tests/isar/apis/security/test_authentication.py +0 -0
  186. {isar-1.24.5 → isar-1.25.0}/tests/isar/mission/__init__.py +0 -0
  187. {isar-1.24.5 → isar-1.25.0}/tests/isar/models/__init__.py +0 -0
  188. {isar-1.24.5 → isar-1.25.0}/tests/isar/models/communication/__init__.py +0 -0
  189. {isar-1.24.5 → isar-1.25.0}/tests/isar/models/communication/test_queues.py +0 -0
  190. {isar-1.24.5 → isar-1.25.0}/tests/isar/services/__init__.py +0 -0
  191. {isar-1.24.5 → isar-1.25.0}/tests/isar/services/readers/__init__.py +0 -0
  192. {isar-1.24.5 → isar-1.25.0}/tests/isar/services/service_connections/__init__.py +0 -0
  193. {isar-1.24.5 → isar-1.25.0}/tests/isar/services/service_connections/echo/__init__.py +0 -0
  194. {isar-1.24.5 → isar-1.25.0}/tests/isar/services/service_connections/test_base_request_handler.py +0 -0
  195. {isar-1.24.5 → isar-1.25.0}/tests/isar/services/utilities/__init__.py +0 -0
  196. {isar-1.24.5 → isar-1.25.0}/tests/isar/services/utilities/test_scheduling_utilities.py +0 -0
  197. {isar-1.24.5 → isar-1.25.0}/tests/isar/state_machine/__init__.py +0 -0
  198. {isar-1.24.5 → isar-1.25.0}/tests/isar/state_machine/states/__init__.py +0 -0
  199. {isar-1.24.5 → isar-1.25.0}/tests/isar/storage/test_blob_storage.py +0 -0
  200. {isar-1.24.5 → isar-1.25.0}/tests/mocks/__init__.py +0 -0
  201. {isar-1.24.5 → isar-1.25.0}/tests/mocks/blob_storage.py +0 -0
  202. {isar-1.24.5 → isar-1.25.0}/tests/mocks/mqtt_client.py +0 -0
  203. {isar-1.24.5 → isar-1.25.0}/tests/mocks/pose.py +0 -0
  204. {isar-1.24.5 → isar-1.25.0}/tests/mocks/request.py +0 -0
  205. {isar-1.24.5 → isar-1.25.0}/tests/mocks/status.py +0 -0
  206. {isar-1.24.5 → isar-1.25.0}/tests/mocks/token.py +0 -0
  207. {isar-1.24.5 → isar-1.25.0}/tests/test_data/test_map_config/test_map_config.json +0 -0
  208. {isar-1.24.5 → isar-1.25.0}/tests/test_data/test_mission_not_working.json +0 -0
  209. {isar-1.24.5 → isar-1.25.0}/tests/test_modules.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: isar
3
- Version: 1.24.5
3
+ Version: 1.25.0
4
4
  Summary: Integration and Supervisory control of Autonomous Robots
5
5
  Author-email: Equinor ASA <fg_robots_dev@equinor.com>
6
6
  License: Eclipse Public License version 2.0
@@ -8,7 +8,7 @@ alitra==1.1.3
8
8
  # via isar (pyproject.toml)
9
9
  annotated-types==0.7.0
10
10
  # via pydantic
11
- anyio==4.6.2.post1
11
+ anyio==4.7.0
12
12
  # via
13
13
  # httpx
14
14
  # starlette
@@ -43,7 +43,7 @@ click==8.1.7
43
43
  # via
44
44
  # isar (pyproject.toml)
45
45
  # uvicorn
46
- cryptography==43.0.3
46
+ cryptography==44.0.0
47
47
  # via
48
48
  # azure-identity
49
49
  # azure-storage-blob
@@ -54,13 +54,13 @@ dacite==1.8.1
54
54
  # via
55
55
  # alitra
56
56
  # isar (pyproject.toml)
57
- fastapi==0.115.5
57
+ fastapi==0.115.6
58
58
  # via
59
59
  # fastapi-azure-auth
60
60
  # isar (pyproject.toml)
61
61
  fastapi-azure-auth==5.0.1
62
62
  # via isar (pyproject.toml)
63
- google-api-core==2.23.0
63
+ google-api-core==2.24.0
64
64
  # via opencensus
65
65
  google-auth==2.36.0
66
66
  # via google-api-core
@@ -72,7 +72,7 @@ h11==0.14.0
72
72
  # uvicorn
73
73
  httpcore==1.0.7
74
74
  # via httpx
75
- httpx==0.27.2
75
+ httpx==0.28.1
76
76
  # via fastapi-azure-auth
77
77
  idna==3.10
78
78
  # via
@@ -91,7 +91,7 @@ msal==1.31.1
91
91
  # msal-extensions
92
92
  msal-extensions==1.2.0
93
93
  # via azure-identity
94
- numpy==2.1.3
94
+ numpy==2.2.0
95
95
  # via
96
96
  # alitra
97
97
  # isar (pyproject.toml)
@@ -115,7 +115,7 @@ portalocker==2.10.1
115
115
  # via msal-extensions
116
116
  proto-plus==1.25.0
117
117
  # via google-api-core
118
- protobuf==5.28.3
118
+ protobuf==5.29.1
119
119
  # via
120
120
  # google-api-core
121
121
  # googleapis-common-protos
@@ -130,7 +130,7 @@ pyasn1-modules==0.4.1
130
130
  # via google-auth
131
131
  pycparser==2.22
132
132
  # via cffi
133
- pydantic==2.10.1
133
+ pydantic==2.10.3
134
134
  # via
135
135
  # fastapi
136
136
  # isar (pyproject.toml)
@@ -139,7 +139,7 @@ pydantic-core==2.27.1
139
139
  # via pydantic
140
140
  pydantic-settings==2.6.1
141
141
  # via isar (pyproject.toml)
142
- pyjwt[crypto]==2.10.0
142
+ pyjwt[crypto]==2.10.1
143
143
  # via
144
144
  # fastapi-azure-auth
145
145
  # isar (pyproject.toml)
@@ -165,21 +165,20 @@ rsa==4.9
165
165
  # via google-auth
166
166
  scipy==1.14.1
167
167
  # via alitra
168
- six==1.16.0
168
+ six==1.17.0
169
169
  # via
170
170
  # azure-core
171
171
  # opencensus
172
172
  # transitions
173
173
  sniffio==1.3.1
174
- # via
175
- # anyio
176
- # httpx
174
+ # via anyio
177
175
  starlette==0.41.3
178
176
  # via fastapi
179
177
  transitions==0.9.2
180
178
  # via isar (pyproject.toml)
181
179
  typing-extensions==4.12.2
182
180
  # via
181
+ # anyio
183
182
  # azure-core
184
183
  # azure-identity
185
184
  # azure-keyvault-secrets
@@ -9,6 +9,7 @@ from robot_interface.models.mission.task import TaskTypes
9
9
  class TaskResponse(BaseModel):
10
10
  id: str
11
11
  tag_id: Optional[str] = None
12
+ inspection_id: Optional[str] = None
12
13
  type: TaskTypes
13
14
 
14
15
 
@@ -0,0 +1,181 @@
1
+ import time
2
+ from enum import Enum
3
+ from typing import List, Optional
4
+
5
+ from pydantic import BaseModel, Field
6
+
7
+ from isar.apis.models.models import InputPose, InputPosition
8
+ from isar.config.settings import settings
9
+ from isar.mission_planner.mission_planner_interface import MissionPlannerError
10
+ from robot_interface.models.mission.mission import Mission
11
+ from robot_interface.models.mission.task import (
12
+ TASKS,
13
+ DockingProcedure,
14
+ Localize,
15
+ RecordAudio,
16
+ ReturnToHome,
17
+ TakeImage,
18
+ TakeThermalImage,
19
+ TakeThermalVideo,
20
+ TakeVideo,
21
+ ZoomDescription,
22
+ )
23
+
24
+
25
+ class InspectionTypes(str, Enum):
26
+ image: str = "Image"
27
+ thermal_image: str = "ThermalImage"
28
+ video: str = "Video"
29
+ thermal_video: str = "ThermalVideo"
30
+ audio: str = "Audio"
31
+
32
+
33
+ class TaskType(str, Enum):
34
+ Inspection: str = "inspection"
35
+ Localization: str = "localization"
36
+ ReturnToHome: str = "return_to_home"
37
+ Dock: str = "dock"
38
+
39
+
40
+ class StartMissionInspectionDefinition(BaseModel):
41
+ type: InspectionTypes = Field(default=InspectionTypes.image)
42
+ inspection_target: InputPosition
43
+ analysis_type: Optional[str] = None
44
+ duration: Optional[float] = None
45
+ metadata: Optional[dict] = None
46
+
47
+
48
+ class StartMissionTaskDefinition(BaseModel):
49
+ type: TaskType = Field(default=TaskType.Inspection)
50
+ pose: InputPose
51
+ inspection: Optional[StartMissionInspectionDefinition] = None
52
+ tag: Optional[str] = None
53
+ zoom: Optional[ZoomDescription] = None
54
+
55
+
56
+ class StartMissionDefinition(BaseModel):
57
+ tasks: List[StartMissionTaskDefinition]
58
+ name: Optional[str] = None
59
+ start_pose: Optional[InputPose] = None
60
+ dock: Optional[bool] = Field(default=False)
61
+ undock: Optional[bool] = Field(default=False)
62
+
63
+
64
+ def to_isar_mission(
65
+ start_mission_definition: StartMissionDefinition,
66
+ return_pose: Optional[InputPose] = None,
67
+ ) -> Mission:
68
+ isar_tasks: List[TASKS] = []
69
+
70
+ for task_definition in start_mission_definition.tasks:
71
+ task: TASKS = to_isar_task(task_definition)
72
+ isar_tasks.append(task)
73
+
74
+ if return_pose:
75
+ isar_tasks.append(ReturnToHome(pose=return_pose.to_alitra_pose()))
76
+
77
+ if not isar_tasks:
78
+ raise MissionPlannerError("Mission does not contain any valid tasks")
79
+
80
+ isar_mission_name: str
81
+ if start_mission_definition.name:
82
+ isar_mission_name = start_mission_definition.name
83
+ else:
84
+ isar_mission_name = _build_mission_name()
85
+
86
+ start_pose = None
87
+ if start_mission_definition.start_pose:
88
+ start_pose = start_mission_definition.start_pose.to_alitra_pose()
89
+
90
+ return Mission(
91
+ tasks=isar_tasks,
92
+ name=isar_mission_name,
93
+ start_pose=start_pose,
94
+ dock=start_mission_definition.dock,
95
+ undock=start_mission_definition.undock,
96
+ )
97
+
98
+
99
+ def to_isar_task(task_definition: StartMissionTaskDefinition) -> TASKS:
100
+ if task_definition.type == TaskType.Inspection:
101
+ return to_inspection_task(task_definition)
102
+ elif task_definition.type == TaskType.Localization:
103
+ return to_localization_task(task_definition)
104
+ elif task_definition.type == TaskType.ReturnToHome:
105
+ return create_return_to_home_task(task_definition)
106
+ elif task_definition.type == TaskType.Dock:
107
+ return create_dock_task()
108
+ else:
109
+ raise MissionPlannerError(
110
+ f"Failed to create task: '{task_definition.type}' is not a valid"
111
+ )
112
+
113
+
114
+ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:
115
+ inspection_definition = task_definition.inspection
116
+
117
+ if inspection_definition.type == InspectionTypes.image:
118
+ return TakeImage(
119
+ robot_pose=task_definition.pose.to_alitra_pose(),
120
+ tag_id=task_definition.tag,
121
+ target=task_definition.inspection.inspection_target.to_alitra_position(),
122
+ metadata=task_definition.inspection.metadata,
123
+ zoom=task_definition.zoom,
124
+ )
125
+ elif inspection_definition.type == InspectionTypes.video:
126
+ return TakeVideo(
127
+ robot_pose=task_definition.pose.to_alitra_pose(),
128
+ tag_id=task_definition.tag,
129
+ target=task_definition.inspection.inspection_target.to_alitra_position(),
130
+ duration=inspection_definition.duration,
131
+ metadata=task_definition.inspection.metadata,
132
+ zoom=task_definition.zoom,
133
+ )
134
+ elif inspection_definition.type == InspectionTypes.thermal_image:
135
+ return TakeThermalImage(
136
+ robot_pose=task_definition.pose.to_alitra_pose(),
137
+ tag_id=task_definition.tag,
138
+ target=task_definition.inspection.inspection_target.to_alitra_position(),
139
+ metadata=task_definition.inspection.metadata,
140
+ zoom=task_definition.zoom,
141
+ )
142
+ elif inspection_definition.type == InspectionTypes.thermal_video:
143
+ return TakeThermalVideo(
144
+ robot_pose=task_definition.pose.to_alitra_pose(),
145
+ tag_id=task_definition.tag,
146
+ target=task_definition.inspection.inspection_target.to_alitra_position(),
147
+ duration=inspection_definition.duration,
148
+ metadata=task_definition.inspection.metadata,
149
+ zoom=task_definition.zoom,
150
+ )
151
+ elif inspection_definition.type == InspectionTypes.audio:
152
+ return RecordAudio(
153
+ robot_pose=task_definition.pose.to_alitra_pose(),
154
+ tag_id=task_definition.tag,
155
+ target=task_definition.inspection.inspection_target.to_alitra_position(),
156
+ duration=inspection_definition.duration,
157
+ metadata=task_definition.inspection.metadata,
158
+ zoom=task_definition.zoom,
159
+ )
160
+ else:
161
+ raise ValueError(
162
+ f"Inspection type '{inspection_definition.type}' not supported"
163
+ )
164
+
165
+
166
+ def to_localization_task(task_definition: StartMissionTaskDefinition) -> Localize:
167
+ return Localize(localization_pose=task_definition.pose.to_alitra_pose())
168
+
169
+
170
+ def create_return_to_home_task(
171
+ task_definition: StartMissionTaskDefinition,
172
+ ) -> ReturnToHome:
173
+ return ReturnToHome(pose=task_definition.pose.to_alitra_pose())
174
+
175
+
176
+ def create_dock_task() -> DockingProcedure:
177
+ return DockingProcedure(behavior="dock")
178
+
179
+
180
+ def _build_mission_name() -> str:
181
+ return f"{settings.PLANT_SHORT_NAME}{settings.ROBOT_NAME}{int(time.time())}"
@@ -21,7 +21,13 @@ from isar.mission_planner.mission_planner_interface import MissionPlannerError
21
21
  from isar.services.utilities.scheduling_utilities import SchedulingUtilities
22
22
  from isar.state_machine.states_enum import States
23
23
  from robot_interface.models.mission.mission import Mission
24
- from robot_interface.models.mission.task import TASKS, Localize, MoveArm, ReturnToHome
24
+ from robot_interface.models.mission.task import (
25
+ TASKS,
26
+ InspectionTask,
27
+ Localize,
28
+ MoveArm,
29
+ ReturnToHome,
30
+ )
25
31
 
26
32
 
27
33
  class SchedulingController:
@@ -115,7 +121,9 @@ class SchedulingController:
115
121
  self.scheduling_utilities.verify_state_machine_ready_to_receive_mission(state)
116
122
 
117
123
  try:
118
- mission: Mission = to_isar_mission(mission_definition)
124
+ mission: Mission = to_isar_mission(
125
+ start_mission_definition=mission_definition, return_pose=return_pose
126
+ )
119
127
  except MissionPlannerError as e:
120
128
  error_message = f"Bad Request - Cannot create ISAR mission: {e}"
121
129
  self.logger.warning(error_message)
@@ -127,9 +135,6 @@ class SchedulingController:
127
135
  self.scheduling_utilities.verify_robot_capable_of_mission(
128
136
  mission=mission, robot_capabilities=robot_settings.CAPABILITIES
129
137
  )
130
- if return_pose:
131
- pose: Pose = return_pose.to_alitra_pose()
132
- mission.tasks.append(ReturnToHome(pose=pose))
133
138
 
134
139
  initial_pose_alitra: Optional[Pose] = (
135
140
  initial_pose.to_alitra_pose() if initial_pose else None
@@ -213,7 +218,9 @@ class SchedulingController:
213
218
  self.scheduling_utilities.verify_state_machine_ready_to_receive_mission(state)
214
219
 
215
220
  pose: Pose = target_pose.to_alitra_pose()
216
- mission: Mission = Mission(tasks=[ReturnToHome(pose=pose)])
221
+ mission: Mission = Mission(
222
+ name="Drive to pose", tasks=[ReturnToHome(pose=pose)]
223
+ )
217
224
 
218
225
  self.logger.info(
219
226
  f"Starting drive to mission with ISAR Mission ID: '{mission.id}'"
@@ -237,7 +244,9 @@ class SchedulingController:
237
244
  self.scheduling_utilities.verify_state_machine_ready_to_receive_mission(state)
238
245
 
239
246
  pose: Pose = localization_pose.to_alitra_pose()
240
- mission: Mission = Mission(tasks=[Localize(localization_pose=pose)])
247
+ mission: Mission = Mission(
248
+ name="Localization mission", tasks=[Localize(localization_pose=pose)]
249
+ )
241
250
 
242
251
  self.logger.info(
243
252
  f"Starting localization mission with ISAR Mission ID: '{mission.id}'"
@@ -284,7 +293,9 @@ class SchedulingController:
284
293
 
285
294
  self.scheduling_utilities.verify_state_machine_ready_to_receive_mission(state)
286
295
 
287
- mission: Mission = Mission(tasks=[MoveArm(arm_pose=arm_pose_literal)])
296
+ mission: Mission = Mission(
297
+ name="Move arm mission", tasks=[MoveArm(arm_pose=arm_pose_literal)]
298
+ )
288
299
 
289
300
  self.logger.info(
290
301
  f"Starting move arm mission with ISAR Mission ID: '{mission.id}'"
@@ -302,4 +313,11 @@ class SchedulingController:
302
313
  )
303
314
 
304
315
  def _task_api_response(self, task: TASKS) -> TaskResponse:
305
- return TaskResponse(id=task.id, tag_id=task.tag_id, type=task.type)
316
+ if isinstance(task, InspectionTask):
317
+ inspection_id = task.inspection_id
318
+ else:
319
+ inspection_id = None
320
+
321
+ return TaskResponse(
322
+ id=task.id, tag_id=task.tag_id, inspection_id=inspection_id, type=task.type
323
+ )
@@ -0,0 +1,35 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIGGzCCBAOgAwIBAgIUCVuS8tL7R2bdjRJznkk1NN0oUa8wDQYJKoZIhvcNAQEL
3
+ BQAwgZwxCzAJBgNVBAYTAk5PMQ8wDQYDVQQIDAZCZXJnZW4xDzANBgNVBAcMBkJl
4
+ cmdlbjEUMBIGA1UECgwLRXFfUm9ib3RpY3MxETAPBgNVBAsMCFJvYm90aWNzMRww
5
+ GgYDVQQDDBNSb2JvdGljc19TZWxmU2lnbmVkMSQwIgYJKoZIhvcNAQkBFhVmZ19y
6
+ b2JvdHNAZXF1aW5vci5jb20wHhcNMjQxMjExMDczNzAzWhcNMjUxMjExMDczNzAz
7
+ WjCBnDELMAkGA1UEBhMCTk8xDzANBgNVBAgMBkJlcmdlbjEPMA0GA1UEBwwGQmVy
8
+ Z2VuMRQwEgYDVQQKDAtFcV9Sb2JvdGljczERMA8GA1UECwwIUm9ib3RpY3MxHDAa
9
+ BgNVBAMME1JvYm90aWNzX1NlbGZTaWduZWQxJDAiBgkqhkiG9w0BCQEWFWZnX3Jv
10
+ Ym90c0BlcXVpbm9yLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
11
+ ALVlT8EjA8UpXdARJM6YfhH+9DEyytb0SJYOEm9jWL7X0G5eMbNfKtfFj/BLQBBw
12
+ GDqyvhFa8SO56zM3Yi1Lir41JkpOKf2zJpNaL1syPxOA87MAm43UN/p2Mo6QAYpC
13
+ lJzmeNoagLFi/kIzGajeUwISOf//Zej0jK/9CpuvvNVHz4wRk4Ap9qtgrM9qhlNq
14
+ rZL4ZQODnvDZ/nwAYwEh9O2sbRr73aiHFcbxNAU2XxtT5UwbZMHom2Xic2Dmubqn
15
+ cWFU+C4upEqPvgYU/hxia/rkhHyicXmdXT6IzjVxPbrlPBHoKVodJOCQ3UoBQl5X
16
+ caHCluKOblA/yX+vEhv2h/m8XOtWiq0Jxnx+6D7B1piZfQnnNVSBT0bOYASb2cpn
17
+ 8rJE3RBdBwiqjKTotVTZ8PAS/GY0Gz3GoMAUCvIGA02+/cO9ENls9D79/86lgiCQ
18
+ UqyteNNmo+oMqKHBw9Jmeejw1kbpnJN1abc270+qCT17aeX8yiMza5CyUTQTtgFI
19
+ 62xIYaHWhN7GrxOvoMU8X0G1HINwjS5heIhu5bND/26dLZqV3aBUWwb4ql5QIce2
20
+ q5BQKmMqQLZF6J0aFL9dKJv5u3ioPFmiYPsPiRlwusPOoOFCiMt2kqZE3h3wxu6V
21
+ cXWdj0sH+dgxuGYTxrLuoSru4Xv/HPXh15mVY0/eI+u/AgMBAAGjUzBRMB0GA1Ud
22
+ DgQWBBQW2Ms6M3iadKVLOnraMlx6Exm8KjAfBgNVHSMEGDAWgBQW2Ms6M3iadKVL
23
+ OnraMlx6Exm8KjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQB0
24
+ XorfCLmVUN3aQWBouwG0fXHBqi3d4RA0vPsi8w+R/dOuHnLBLlHAiOkCMqW23bLs
25
+ ir2UVqpGXcp5keKGeCTj+bmdqhnS/B9eoaeA8np/zDPH834v+Qv7JA5ch50gYrL7
26
+ llF/02e5m0egP2xx9V7k90Du8OBm7xQgfbyrUcB2laC+loPyQiHMF24CU4ESfC4K
27
+ DBXOZm8Kd6+fvzEs8XDLKwjNb9MocHIJikysZTncxfhgVPaU5KCqF3afHkCkZGzn
28
+ Z+yMBfWbZ2WtM3lfwmM7z5NCTSqSFucW5+kw/OnzS3nQLyz2Q4nh4ApojsI3v+FH
29
+ xz8aCITPbVwKAHGYO9jbk9x8LlkzDPCCzBH7dGKLKaQSCoD+IOwig1cI7pM77WeI
30
+ BNC0g2ZCuLdb7c37/kT/1xGrIGUrpDsO34ZWW7E2X8kQPkAgqMNp0uXcnvIoNHO1
31
+ eVL08Om+7WbwK7wS3te5IWDq4rRWVW4Jv709w8z6porr3W8ipdtUoYqbgZI8jOiW
32
+ osY4UVcRwQ4S1oF5pNRzXlZAPwAnaDipglxHBiy9/ARS6HKpOCbmUHbj+goXYNyZ
33
+ ps8TcYc9LFOq4HBE4KKbV971jf/wQy1nVcm2qSbOJ9MPHM5BG22m1iVhSYbLPgE2
34
+ SBZvCS+voD8MqpBB1tPcvVqlPb1pFxf1lOc5QV3uOA==
35
+ -----END CERTIFICATE-----
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "1",
3
+ "name": "Default mission",
3
4
  "tasks": [
4
5
  {
5
6
  "type": "take_image",
@@ -8,22 +9,22 @@
8
9
  "x": -2,
9
10
  "y": -2,
10
11
  "z": 0,
11
- "frame": "asset"
12
+ "frame": {"name": "asset"}
12
13
  },
13
14
  "orientation": {
14
15
  "x": 0,
15
16
  "y": 0,
16
17
  "z": 0.4794255,
17
18
  "w": 0.8775826,
18
- "frame": "asset"
19
+ "frame": {"name": "asset"}
19
20
  },
20
- "frame": "asset"
21
+ "frame": {"name": "asset"}
21
22
  },
22
23
  "target": {
23
24
  "x": 2,
24
25
  "y": 2,
25
26
  "z": 0,
26
- "frame": "robot"
27
+ "frame": {"name": "asset"}
27
28
  }
28
29
  },
29
30
  {
@@ -33,22 +34,22 @@
33
34
  "x": -2,
34
35
  "y": 2,
35
36
  "z": 0,
36
- "frame": "asset"
37
+ "frame": {"name": "asset"}
37
38
  },
38
39
  "orientation": {
39
40
  "x": 0,
40
41
  "y": 0,
41
42
  "z": 0.4794255,
42
43
  "w": 0.8775826,
43
- "frame": "asset"
44
+ "frame": {"name": "asset"}
44
45
  },
45
- "frame": "asset"
46
+ "frame": {"name": "asset"}
46
47
  },
47
48
  "target": {
48
49
  "x": 2,
49
50
  "y": 2,
50
51
  "z": 0,
51
- "frame": "robot"
52
+ "frame": {"name": "asset"}
52
53
  }
53
54
  },
54
55
  {
@@ -58,16 +59,16 @@
58
59
  "x": 2,
59
60
  "y": 2,
60
61
  "z": 0,
61
- "frame": "asset"
62
+ "frame": {"name": "asset"}
62
63
  },
63
64
  "orientation": {
64
65
  "x": 0,
65
66
  "y": 0,
66
67
  "z": 0.4794255,
67
68
  "w": 0.8775826,
68
- "frame": "asset"
69
+ "frame": {"name": "asset"}
69
70
  },
70
- "frame": "asset"
71
+ "frame": {"name": "asset"}
71
72
  }
72
73
  }
73
74
  ]
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "2",
3
+ "name": "Default mission Turtlebot",
3
4
  "tasks": [
4
5
  {
5
6
  "type": "take_image",
@@ -8,22 +9,22 @@
8
9
  "x": -3.6,
9
10
  "y": 4,
10
11
  "z": 0,
11
- "frame": "asset"
12
+ "frame": {"name": "asset"}
12
13
  },
13
14
  "orientation": {
14
15
  "x": 0,
15
16
  "y": 0,
16
17
  "z": -0.7286672256879113,
17
18
  "w": -0.6848660759820616,
18
- "frame": "asset"
19
+ "frame": {"name": "asset"}
19
20
  },
20
- "frame": "asset"
21
+ "frame": {"name": "asset"}
21
22
  },
22
23
  "target": {
23
24
  "x": -4.7,
24
25
  "y": 4.9,
25
26
  "z": 0,
26
- "frame": "robot"
27
+ "frame": {"name": "asset"}
27
28
  }
28
29
  },
29
30
 
@@ -34,22 +35,22 @@
34
35
  "x": 4.7,
35
36
  "y": 3,
36
37
  "z": 0,
37
- "frame": "asset"
38
+ "frame": {"name": "asset"}
38
39
  },
39
40
  "orientation": {
40
41
  "x": 0,
41
42
  "y": 0,
42
43
  "z": 0.5769585,
43
44
  "w": 0.8167734,
44
- "frame": "asset"
45
+ "frame": {"name": "asset"}
45
46
  },
46
- "frame": "asset"
47
+ "frame": {"name": "asset"}
47
48
  },
48
49
  "target": {
49
50
  "x": 5.6,
50
51
  "y": 5.2,
51
52
  "z": 0,
52
- "frame": "robot"
53
+ "frame": {"name": "asset"}
53
54
  }
54
55
  },
55
56
  {
@@ -59,22 +60,22 @@
59
60
  "x": 4.7,
60
61
  "y": 3,
61
62
  "z": 0,
62
- "frame": "asset"
63
+ "frame": {"name": "asset"}
63
64
  },
64
65
  "orientation": {
65
66
  "x": 0,
66
67
  "y": 0,
67
68
  "z": 0.5769585,
68
69
  "w": 0.8167734,
69
- "frame": "asset"
70
+ "frame": {"name": "asset"}
70
71
  },
71
- "frame": "asset"
72
+ "frame": {"name": "asset"}
72
73
  },
73
74
  "target": {
74
75
  "x": 3.1,
75
76
  "y": 5.2,
76
77
  "z": 0,
77
- "frame": "robot"
78
+ "frame": {"name": "asset"}
78
79
  }
79
80
  },
80
81
  {
@@ -84,22 +85,22 @@
84
85
  "x": 0.95,
85
86
  "y": 2.6,
86
87
  "z": 0,
87
- "frame": "asset"
88
+ "frame": {"name": "asset"}
88
89
  },
89
90
  "orientation": {
90
91
  "x": 0,
91
92
  "y": 0,
92
93
  "z": -0.6992469,
93
94
  "w": 0.7148802,
94
- "frame": "asset"
95
+ "frame": {"name": "asset"}
95
96
  },
96
- "frame": "asset"
97
+ "frame": {"name": "asset"}
97
98
  },
98
99
  "target": {
99
100
  "x": 1.9,
100
101
  "y": 1.9,
101
102
  "z": 0,
102
- "frame": "robot"
103
+ "frame": {"name": "asset"}
103
104
  }
104
105
  }
105
106
  ]
@@ -1,8 +1,7 @@
1
+ import json
1
2
  import logging
2
3
  from pathlib import Path
3
- from typing import List, Optional
4
4
 
5
- from alitra import Frame
6
5
  from injector import inject
7
6
 
8
7
  from isar.config.settings import settings
@@ -11,10 +10,8 @@ from isar.mission_planner.mission_planner_interface import (
11
10
  MissionPlannerError,
12
11
  MissionPlannerInterface,
13
12
  )
14
- from isar.services.readers.base_reader import BaseReader, BaseReaderError
15
13
  from robot_interface.models.mission.mission import Mission
16
14
 
17
-
18
15
  logger = logging.getLogger("api")
19
16
 
20
17
 
@@ -39,16 +36,10 @@ class LocalPlanner(MissionPlannerInterface):
39
36
 
40
37
  @staticmethod
41
38
  def read_mission_from_file(mission_path: Path) -> Mission:
42
- mission_dict: dict = BaseReader.read_json(location=mission_path)
43
-
44
- mission: Mission = BaseReader.dict_to_dataclass(
45
- dataclass_dict=mission_dict,
46
- target_dataclass=Mission,
47
- cast_config=[Frame],
48
- strict_config=True,
49
- )
39
+ with open(mission_path) as json_file:
40
+ mission_dict = json.load(json_file)
50
41
 
51
- return mission
42
+ return Mission(**mission_dict)
52
43
 
53
44
  def get_predefined_missions(self) -> dict:
54
45
  missions: dict = {}
@@ -57,13 +48,8 @@ class LocalPlanner(MissionPlannerInterface):
57
48
  for file in json_files:
58
49
  mission_name = file.stem
59
50
  path_to_file = self.predefined_mission_folder.joinpath(file.name)
60
- try:
61
- mission: Mission = self.read_mission_from_file(path_to_file)
62
- except BaseReaderError as e:
63
- logger.warning(
64
- f"Failed to read predefined mission {path_to_file} \n {e}"
65
- )
66
- continue
51
+
52
+ mission: Mission = self.read_mission_from_file(path_to_file)
67
53
  if mission.id in invalid_mission_ids:
68
54
  logger.warning(
69
55
  f"Duplicate mission id {mission.id} : {path_to_file.as_posix()}"
@@ -9,7 +9,7 @@ class MissionPlannerInterface(metaclass=ABCMeta):
9
9
  """
10
10
  Parameters
11
11
  ----------
12
- mission_id : int
12
+ mission_id : str
13
13
 
14
14
  Returns
15
15
  -------