isar 1.16.18__tar.gz → 1.18.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 (203) hide show
  1. {isar-1.16.18 → isar-1.18.0}/PKG-INFO +1 -1
  2. {isar-1.16.18 → isar-1.18.0}/src/isar/apis/models/start_mission_definition.py +11 -1
  3. {isar-1.16.18 → isar-1.18.0}/src/isar/apis/schedule/scheduling_controller.py +6 -1
  4. {isar-1.16.18 → isar-1.18.0}/src/isar/config/settings.py +3 -0
  5. {isar-1.16.18 → isar-1.18.0}/src/isar/state_machine/states/monitor.py +36 -1
  6. {isar-1.16.18 → isar-1.18.0}/src/isar.egg-info/PKG-INFO +1 -1
  7. {isar-1.16.18 → isar-1.18.0}/src/isar.egg-info/SOURCES.txt +0 -1
  8. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/models/exceptions/robot_exceptions.py +13 -0
  9. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/models/mission/step.py +11 -0
  10. isar-1.16.18/.github/workflows/repository_dispatch_on_merge.yml +0 -20
  11. {isar-1.16.18 → isar-1.18.0}/.dockerignore +0 -0
  12. {isar-1.16.18 → isar-1.18.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  13. {isar-1.16.18 → isar-1.18.0}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  14. {isar-1.16.18 → isar-1.18.0}/.github/ISSUE_TEMPLATE/improvement.md +0 -0
  15. {isar-1.16.18 → isar-1.18.0}/.github/release.yml +0 -0
  16. {isar-1.16.18 → isar-1.18.0}/.github/workflows/project_automations.yml +0 -0
  17. {isar-1.16.18 → isar-1.18.0}/.github/workflows/publish_isar_base_image.yml +0 -0
  18. {isar-1.16.18 → isar-1.18.0}/.github/workflows/pythonpackage.yml +0 -0
  19. {isar-1.16.18 → isar-1.18.0}/.github/workflows/pythonpublish.yml +0 -0
  20. {isar-1.16.18 → isar-1.18.0}/.github/workflows/stale.yml +0 -0
  21. {isar-1.16.18 → isar-1.18.0}/.gitignore +0 -0
  22. {isar-1.16.18 → isar-1.18.0}/.pre-commit-config.yaml +0 -0
  23. {isar-1.16.18 → isar-1.18.0}/Dockerfile +0 -0
  24. {isar-1.16.18 → isar-1.18.0}/LICENSE +0 -0
  25. {isar-1.16.18 → isar-1.18.0}/README.md +0 -0
  26. {isar-1.16.18 → isar-1.18.0}/SECURITY.md +0 -0
  27. {isar-1.16.18 → isar-1.18.0}/docker-compose-turtlebot.yml +0 -0
  28. {isar-1.16.18 → isar-1.18.0}/docker-compose.yml +0 -0
  29. {isar-1.16.18 → isar-1.18.0}/docs/Makefile +0 -0
  30. {isar-1.16.18 → isar-1.18.0}/docs/make.bat +0 -0
  31. {isar-1.16.18 → isar-1.18.0}/docs/rst_processing.py +0 -0
  32. {isar-1.16.18 → isar-1.18.0}/docs/source/conf.py +0 -0
  33. {isar-1.16.18 → isar-1.18.0}/docs/source/index.rst +0 -0
  34. {isar-1.16.18 → isar-1.18.0}/docs/source/readme_link.md +0 -0
  35. {isar-1.16.18 → isar-1.18.0}/docs/state_machine_diagram.png +0 -0
  36. {isar-1.16.18 → isar-1.18.0}/main.py +0 -0
  37. {isar-1.16.18 → isar-1.18.0}/pyproject.toml +0 -0
  38. {isar-1.16.18 → isar-1.18.0}/radixconfig.yml +0 -0
  39. {isar-1.16.18 → isar-1.18.0}/setup.cfg +0 -0
  40. {isar-1.16.18 → isar-1.18.0}/setup.py +0 -0
  41. {isar-1.16.18 → isar-1.18.0}/src/isar/__init__.py +0 -0
  42. {isar-1.16.18 → isar-1.18.0}/src/isar/apis/__init__.py +0 -0
  43. {isar-1.16.18 → isar-1.18.0}/src/isar/apis/api.py +0 -0
  44. {isar-1.16.18 → isar-1.18.0}/src/isar/apis/models/__init__.py +0 -0
  45. {isar-1.16.18 → isar-1.18.0}/src/isar/apis/models/models.py +0 -0
  46. {isar-1.16.18 → isar-1.18.0}/src/isar/apis/schedule/__init__.py +0 -0
  47. {isar-1.16.18 → isar-1.18.0}/src/isar/apis/security/__init__.py +0 -0
  48. {isar-1.16.18 → isar-1.18.0}/src/isar/apis/security/authentication.py +0 -0
  49. {isar-1.16.18 → isar-1.18.0}/src/isar/config/__init__.py +0 -0
  50. {isar-1.16.18 → isar-1.18.0}/src/isar/config/certs/ca-cert.pem +0 -0
  51. {isar-1.16.18 → isar-1.18.0}/src/isar/config/configuration_error.py +0 -0
  52. {isar-1.16.18 → isar-1.18.0}/src/isar/config/keyvault/__init__.py +0 -0
  53. {isar-1.16.18 → isar-1.18.0}/src/isar/config/keyvault/keyvault_error.py +0 -0
  54. {isar-1.16.18 → isar-1.18.0}/src/isar/config/keyvault/keyvault_service.py +0 -0
  55. {isar-1.16.18 → isar-1.18.0}/src/isar/config/log.py +0 -0
  56. {isar-1.16.18 → isar-1.18.0}/src/isar/config/logging.conf +0 -0
  57. {isar-1.16.18 → isar-1.18.0}/src/isar/config/maps/JSP1_intermediate_deck.json +0 -0
  58. {isar-1.16.18 → isar-1.18.0}/src/isar/config/maps/JSP1_weather_deck.json +0 -0
  59. {isar-1.16.18 → isar-1.18.0}/src/isar/config/maps/default_map.json +0 -0
  60. {isar-1.16.18 → isar-1.18.0}/src/isar/config/maps/klab_b.json +0 -0
  61. {isar-1.16.18 → isar-1.18.0}/src/isar/config/maps/klab_compressor.json +0 -0
  62. {isar-1.16.18 → isar-1.18.0}/src/isar/config/maps/klab_turtlebot.json +0 -0
  63. {isar-1.16.18 → isar-1.18.0}/src/isar/config/maps/turtleworld.json +0 -0
  64. {isar-1.16.18 → isar-1.18.0}/src/isar/config/predefined_mission_definition/__init__.py +0 -0
  65. {isar-1.16.18 → isar-1.18.0}/src/isar/config/predefined_mission_definition/default_exr.json +0 -0
  66. {isar-1.16.18 → isar-1.18.0}/src/isar/config/predefined_mission_definition/default_mission.json +0 -0
  67. {isar-1.16.18 → isar-1.18.0}/src/isar/config/predefined_mission_definition/default_turtlebot.json +0 -0
  68. {isar-1.16.18 → isar-1.18.0}/src/isar/config/predefined_missions/__init__.py +0 -0
  69. {isar-1.16.18 → isar-1.18.0}/src/isar/config/predefined_missions/default.json +0 -0
  70. {isar-1.16.18 → isar-1.18.0}/src/isar/config/predefined_missions/default_turtlebot.json +0 -0
  71. {isar-1.16.18 → isar-1.18.0}/src/isar/config/predefined_poses/__init__.py +0 -0
  72. {isar-1.16.18 → isar-1.18.0}/src/isar/config/predefined_poses/predefined_poses.py +0 -0
  73. {isar-1.16.18 → isar-1.18.0}/src/isar/config/settings.env +0 -0
  74. {isar-1.16.18 → isar-1.18.0}/src/isar/mission_planner/__init__.py +0 -0
  75. {isar-1.16.18 → isar-1.18.0}/src/isar/mission_planner/local_planner.py +0 -0
  76. {isar-1.16.18 → isar-1.18.0}/src/isar/mission_planner/mission_planner_interface.py +0 -0
  77. {isar-1.16.18 → isar-1.18.0}/src/isar/mission_planner/sequential_task_selector.py +0 -0
  78. {isar-1.16.18 → isar-1.18.0}/src/isar/mission_planner/task_selector_interface.py +0 -0
  79. {isar-1.16.18 → isar-1.18.0}/src/isar/models/__init__.py +0 -0
  80. {isar-1.16.18 → isar-1.18.0}/src/isar/models/communication/__init__.py +0 -0
  81. {isar-1.16.18 → isar-1.18.0}/src/isar/models/communication/message.py +0 -0
  82. {isar-1.16.18 → isar-1.18.0}/src/isar/models/communication/queues/__init__.py +0 -0
  83. {isar-1.16.18 → isar-1.18.0}/src/isar/models/communication/queues/queue_io.py +0 -0
  84. {isar-1.16.18 → isar-1.18.0}/src/isar/models/communication/queues/queue_timeout_error.py +0 -0
  85. {isar-1.16.18 → isar-1.18.0}/src/isar/models/communication/queues/queues.py +0 -0
  86. {isar-1.16.18 → isar-1.18.0}/src/isar/models/communication/queues/status_queue.py +0 -0
  87. {isar-1.16.18 → isar-1.18.0}/src/isar/models/mission_metadata/__init__.py +0 -0
  88. {isar-1.16.18 → isar-1.18.0}/src/isar/modules.py +0 -0
  89. {isar-1.16.18 → isar-1.18.0}/src/isar/services/__init__.py +0 -0
  90. {isar-1.16.18 → isar-1.18.0}/src/isar/services/auth/__init__.py +0 -0
  91. {isar-1.16.18 → isar-1.18.0}/src/isar/services/auth/azure_credentials.py +0 -0
  92. {isar-1.16.18 → isar-1.18.0}/src/isar/services/readers/__init__.py +0 -0
  93. {isar-1.16.18 → isar-1.18.0}/src/isar/services/readers/base_reader.py +0 -0
  94. {isar-1.16.18 → isar-1.18.0}/src/isar/services/service_connections/__init__.py +0 -0
  95. {isar-1.16.18 → isar-1.18.0}/src/isar/services/service_connections/mqtt/__init__.py +0 -0
  96. {isar-1.16.18 → isar-1.18.0}/src/isar/services/service_connections/mqtt/mqtt_client.py +0 -0
  97. {isar-1.16.18 → isar-1.18.0}/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py +0 -0
  98. {isar-1.16.18 → isar-1.18.0}/src/isar/services/service_connections/mqtt/robot_info_publisher.py +0 -0
  99. {isar-1.16.18 → isar-1.18.0}/src/isar/services/service_connections/mqtt/robot_status_publisher.py +0 -0
  100. {isar-1.16.18 → isar-1.18.0}/src/isar/services/service_connections/request_handler.py +0 -0
  101. {isar-1.16.18 → isar-1.18.0}/src/isar/services/service_connections/stid/__init__.py +0 -0
  102. {isar-1.16.18 → isar-1.18.0}/src/isar/services/utilities/__init__.py +0 -0
  103. {isar-1.16.18 → isar-1.18.0}/src/isar/services/utilities/queue_utilities.py +0 -0
  104. {isar-1.16.18 → isar-1.18.0}/src/isar/services/utilities/scheduling_utilities.py +0 -0
  105. {isar-1.16.18 → isar-1.18.0}/src/isar/services/utilities/threaded_request.py +0 -0
  106. {isar-1.16.18 → isar-1.18.0}/src/isar/state_machine/__init__.py +0 -0
  107. {isar-1.16.18 → isar-1.18.0}/src/isar/state_machine/state_machine.py +0 -0
  108. {isar-1.16.18 → isar-1.18.0}/src/isar/state_machine/states/__init__.py +0 -0
  109. {isar-1.16.18 → isar-1.18.0}/src/isar/state_machine/states/idle.py +0 -0
  110. {isar-1.16.18 → isar-1.18.0}/src/isar/state_machine/states/initialize.py +0 -0
  111. {isar-1.16.18 → isar-1.18.0}/src/isar/state_machine/states/initiate.py +0 -0
  112. {isar-1.16.18 → isar-1.18.0}/src/isar/state_machine/states/off.py +0 -0
  113. {isar-1.16.18 → isar-1.18.0}/src/isar/state_machine/states/paused.py +0 -0
  114. {isar-1.16.18 → isar-1.18.0}/src/isar/state_machine/states/stop.py +0 -0
  115. {isar-1.16.18 → isar-1.18.0}/src/isar/state_machine/states_enum.py +0 -0
  116. {isar-1.16.18 → isar-1.18.0}/src/isar/storage/__init__.py +0 -0
  117. {isar-1.16.18 → isar-1.18.0}/src/isar/storage/blob_storage.py +0 -0
  118. {isar-1.16.18 → isar-1.18.0}/src/isar/storage/local_storage.py +0 -0
  119. {isar-1.16.18 → isar-1.18.0}/src/isar/storage/slimm_storage.py +0 -0
  120. {isar-1.16.18 → isar-1.18.0}/src/isar/storage/storage_interface.py +0 -0
  121. {isar-1.16.18 → isar-1.18.0}/src/isar/storage/uploader.py +0 -0
  122. {isar-1.16.18 → isar-1.18.0}/src/isar/storage/utilities.py +0 -0
  123. {isar-1.16.18 → isar-1.18.0}/src/isar.egg-info/dependency_links.txt +0 -0
  124. {isar-1.16.18 → isar-1.18.0}/src/isar.egg-info/requires.txt +0 -0
  125. {isar-1.16.18 → isar-1.18.0}/src/isar.egg-info/top_level.txt +0 -0
  126. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/__init__.py +0 -0
  127. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/models/__init__.py +0 -0
  128. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/models/exceptions/__init__.py +0 -0
  129. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/models/initialize/__init__.py +0 -0
  130. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/models/initialize/initialize_params.py +0 -0
  131. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/models/inspection/__init__.py +0 -0
  132. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/models/inspection/inspection.py +0 -0
  133. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/models/mission/__init__.py +0 -0
  134. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/models/mission/mission.py +0 -0
  135. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/models/mission/status.py +0 -0
  136. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/models/mission/task.py +0 -0
  137. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/models/robots/__init__.py +0 -0
  138. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/models/robots/robot_model.py +0 -0
  139. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/robot_interface.py +0 -0
  140. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/telemetry/__init__.py +0 -0
  141. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/telemetry/mqtt_client.py +0 -0
  142. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/telemetry/payloads.py +0 -0
  143. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/test_robot_interface.py +0 -0
  144. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/utilities/__init__.py +0 -0
  145. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/utilities/json_service.py +0 -0
  146. {isar-1.16.18 → isar-1.18.0}/src/robot_interface/utilities/uuid_string_factory.py +0 -0
  147. {isar-1.16.18 → isar-1.18.0}/tests/__init__.py +0 -0
  148. {isar-1.16.18 → isar-1.18.0}/tests/conftest.py +0 -0
  149. {isar-1.16.18 → isar-1.18.0}/tests/integration/__init__.py +0 -0
  150. {isar-1.16.18 → isar-1.18.0}/tests/integration/turtlebot/__init__.py +0 -0
  151. {isar-1.16.18 → isar-1.18.0}/tests/integration/turtlebot/config/__init__.py +0 -0
  152. {isar-1.16.18 → isar-1.18.0}/tests/integration/turtlebot/config/maps/__init__.py +0 -0
  153. {isar-1.16.18 → isar-1.18.0}/tests/integration/turtlebot/config/maps/turtleworld.json +0 -0
  154. {isar-1.16.18 → isar-1.18.0}/tests/integration/turtlebot/config/missions/__init__.py +0 -0
  155. {isar-1.16.18 → isar-1.18.0}/tests/integration/turtlebot/config/missions/default.json +0 -0
  156. {isar-1.16.18 → isar-1.18.0}/tests/integration/turtlebot/test_successful_mission.py +0 -0
  157. {isar-1.16.18 → isar-1.18.0}/tests/isar/__init__.py +0 -0
  158. {isar-1.16.18 → isar-1.18.0}/tests/isar/apis/__init__.py +0 -0
  159. {isar-1.16.18 → isar-1.18.0}/tests/isar/apis/scheduler/__init__.py +0 -0
  160. {isar-1.16.18 → isar-1.18.0}/tests/isar/apis/scheduler/test_scheduler_router.py +0 -0
  161. {isar-1.16.18 → isar-1.18.0}/tests/isar/apis/security/__init__.py +0 -0
  162. {isar-1.16.18 → isar-1.18.0}/tests/isar/apis/security/test_authentication.py +0 -0
  163. {isar-1.16.18 → isar-1.18.0}/tests/isar/mission/__init__.py +0 -0
  164. {isar-1.16.18 → isar-1.18.0}/tests/isar/mission/test_mission.py +0 -0
  165. {isar-1.16.18 → isar-1.18.0}/tests/isar/models/__init__.py +0 -0
  166. {isar-1.16.18 → isar-1.18.0}/tests/isar/models/communication/__init__.py +0 -0
  167. {isar-1.16.18 → isar-1.18.0}/tests/isar/models/communication/test_queues.py +0 -0
  168. {isar-1.16.18 → isar-1.18.0}/tests/isar/models/example_mission_definition.json +0 -0
  169. {isar-1.16.18 → isar-1.18.0}/tests/isar/models/test_start_mission_definition.py +0 -0
  170. {isar-1.16.18 → isar-1.18.0}/tests/isar/services/__init__.py +0 -0
  171. {isar-1.16.18 → isar-1.18.0}/tests/isar/services/readers/__init__.py +0 -0
  172. {isar-1.16.18 → isar-1.18.0}/tests/isar/services/readers/test_base_reader.py +0 -0
  173. {isar-1.16.18 → isar-1.18.0}/tests/isar/services/readers/test_mission_reader.py +0 -0
  174. {isar-1.16.18 → isar-1.18.0}/tests/isar/services/service_connections/__init__.py +0 -0
  175. {isar-1.16.18 → isar-1.18.0}/tests/isar/services/service_connections/echo/__init__.py +0 -0
  176. {isar-1.16.18 → isar-1.18.0}/tests/isar/services/service_connections/test_base_request_handler.py +0 -0
  177. {isar-1.16.18 → isar-1.18.0}/tests/isar/services/utilities/__init__.py +0 -0
  178. {isar-1.16.18 → isar-1.18.0}/tests/isar/services/utilities/test_queue_utilities.py +0 -0
  179. {isar-1.16.18 → isar-1.18.0}/tests/isar/services/utilities/test_scheduling_utilities.py +0 -0
  180. {isar-1.16.18 → isar-1.18.0}/tests/isar/state_machine/__init__.py +0 -0
  181. {isar-1.16.18 → isar-1.18.0}/tests/isar/state_machine/states/__init__.py +0 -0
  182. {isar-1.16.18 → isar-1.18.0}/tests/isar/state_machine/states/test_monitor.py +0 -0
  183. {isar-1.16.18 → isar-1.18.0}/tests/isar/state_machine/test_state_machine.py +0 -0
  184. {isar-1.16.18 → isar-1.18.0}/tests/isar/storage/test_blob_storage.py +0 -0
  185. {isar-1.16.18 → isar-1.18.0}/tests/isar/storage/test_uploader.py +0 -0
  186. {isar-1.16.18 → isar-1.18.0}/tests/mocks/__init__.py +0 -0
  187. {isar-1.16.18 → isar-1.18.0}/tests/mocks/blob_storage.py +0 -0
  188. {isar-1.16.18 → isar-1.18.0}/tests/mocks/mission_definition.py +0 -0
  189. {isar-1.16.18 → isar-1.18.0}/tests/mocks/mqtt_client.py +0 -0
  190. {isar-1.16.18 → isar-1.18.0}/tests/mocks/pose.py +0 -0
  191. {isar-1.16.18 → isar-1.18.0}/tests/mocks/request.py +0 -0
  192. {isar-1.16.18 → isar-1.18.0}/tests/mocks/robot_interface.py +0 -0
  193. {isar-1.16.18 → isar-1.18.0}/tests/mocks/status.py +0 -0
  194. {isar-1.16.18 → isar-1.18.0}/tests/mocks/step.py +0 -0
  195. {isar-1.16.18 → isar-1.18.0}/tests/mocks/task.py +0 -0
  196. {isar-1.16.18 → isar-1.18.0}/tests/mocks/token.py +0 -0
  197. {isar-1.16.18 → isar-1.18.0}/tests/test_data/test_json_file.json +0 -0
  198. {isar-1.16.18 → isar-1.18.0}/tests/test_data/test_map_config/test_map_config.json +0 -0
  199. {isar-1.16.18 → isar-1.18.0}/tests/test_data/test_mission_not_working.json +0 -0
  200. {isar-1.16.18 → isar-1.18.0}/tests/test_data/test_mission_working.json +0 -0
  201. {isar-1.16.18 → isar-1.18.0}/tests/test_data/test_mission_working_no_tasks.json +0 -0
  202. {isar-1.16.18 → isar-1.18.0}/tests/test_data/test_thermal_image_mission.json +0 -0
  203. {isar-1.16.18 → isar-1.18.0}/tests/test_modules.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: isar
3
- Version: 1.16.18
3
+ Version: 1.18.0
4
4
  Summary: Integration and Supervisory control of Autonomous Robots
5
5
  Home-page: https://github.com/equinor/isar
6
6
  Author: Equinor ASA
@@ -10,11 +10,12 @@ from isar.config.settings import settings
10
10
  from isar.mission_planner.mission_planner_interface import MissionPlannerError
11
11
  from robot_interface.models.mission.mission import Mission
12
12
  from robot_interface.models.mission.step import (
13
+ STEPS,
13
14
  DockingProcedure,
14
15
  DriveToPose,
15
16
  Localize,
16
17
  RecordAudio,
17
- STEPS,
18
+ ReturnToHome,
18
19
  TakeImage,
19
20
  TakeThermalImage,
20
21
  TakeThermalVideo,
@@ -35,6 +36,7 @@ class TaskType(str, Enum):
35
36
  Inspection: str = "inspection"
36
37
  DriveTo: str = "drive_to"
37
38
  Localization: str = "localization"
39
+ ReturnToHome: str = "return_to_home"
38
40
  Dock: str = "dock"
39
41
 
40
42
 
@@ -112,6 +114,8 @@ def generate_steps(task) -> List[STEPS]:
112
114
  steps.append(generate_steps_for_drive_to_task(task=task))
113
115
  case TaskType.Localization:
114
116
  steps.append(generate_steps_for_localization_task(task=task))
117
+ case TaskType.ReturnToHome:
118
+ steps.append(generate_steps_for_return_to_home_task(task=task))
115
119
  case TaskType.Dock:
116
120
  steps.append(generate_steps_for_dock_task())
117
121
  except ValueError as e:
@@ -146,6 +150,12 @@ def generate_steps_for_localization_task(task: StartMissionTaskDefinition) -> Lo
146
150
  return Localize(localization_pose=task.pose.to_alitra_pose())
147
151
 
148
152
 
153
+ def generate_steps_for_return_to_home_task(
154
+ task: StartMissionTaskDefinition,
155
+ ) -> ReturnToHome:
156
+ return ReturnToHome(pose=task.pose.to_alitra_pose())
157
+
158
+
149
159
  def generate_steps_for_dock_task() -> DockingProcedure:
150
160
  return DockingProcedure(behavior="dock")
151
161
 
@@ -21,7 +21,12 @@ 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.step import DriveToPose, Localize, MoveArm
24
+ from robot_interface.models.mission.step import (
25
+ DriveToPose,
26
+ Localize,
27
+ MoveArm,
28
+ ReturnToHome,
29
+ )
25
30
  from robot_interface.models.mission.task import Task
26
31
 
27
32
 
@@ -56,6 +56,9 @@ class Settings(BaseSettings):
56
56
  # Number of attempts to initiate a step or mission before cancelling
57
57
  INITIATE_FAILURE_COUNTER_LIMIT: int = Field(default=10)
58
58
 
59
+ # Number of attempts to request a step status in monitor before cancelling
60
+ REQUEST_STATUS_FAILURE_COUNTER_LIMIT: int = Field(default=3)
61
+
59
62
  # Number of attempts to stop the robot before giving up
60
63
  STOP_ROBOT_ATTEMPTS_LIMIT: int = Field(default=10)
61
64
 
@@ -7,6 +7,7 @@ from injector import inject
7
7
  from transitions import State
8
8
 
9
9
  from isar.mission_planner.task_selector_interface import TaskSelectorStop
10
+ from isar.config.settings import settings
10
11
  from isar.services.utilities.threaded_request import (
11
12
  ThreadedRequest,
12
13
  ThreadedRequestNotFinishedError,
@@ -17,6 +18,7 @@ from robot_interface.models.exceptions.robot_exceptions import (
17
18
  RobotMissionStatusException,
18
19
  RobotRetrieveInspectionException,
19
20
  RobotStepStatusException,
21
+ RobotCommunicationTimeoutException,
20
22
  )
21
23
  from robot_interface.models.inspection.inspection import Inspection
22
24
  from robot_interface.models.mission.mission import Mission
@@ -32,6 +34,10 @@ class Monitor(State):
32
34
  def __init__(self, state_machine: "StateMachine") -> None:
33
35
  super().__init__(name="monitor", on_enter=self.start, on_exit=self.stop)
34
36
  self.state_machine: "StateMachine" = state_machine
37
+ self.request_status_failure_counter: int = 0
38
+ self.request_status_failure_counter_limit: int = (
39
+ settings.REQUEST_STATUS_FAILURE_COUNTER_LIMIT
40
+ )
35
41
 
36
42
  self.logger = logging.getLogger("state_machine")
37
43
  self.step_status_thread: Optional[ThreadedRequest] = None
@@ -61,7 +67,6 @@ class Monitor(State):
61
67
  status_function=self.state_machine.robot.step_status,
62
68
  thread_name="State Machine Monitor Get Step Status",
63
69
  )
64
-
65
70
  try:
66
71
  status: Union[StepStatus, MissionStatus] = (
67
72
  self.step_status_thread.get_output()
@@ -70,6 +75,34 @@ class Monitor(State):
70
75
  time.sleep(self.state_machine.sleep_time)
71
76
  continue
72
77
 
78
+ except RobotCommunicationTimeoutException as e:
79
+ self.state_machine.current_mission.error_message = ErrorMessage(
80
+ error_reason=e.error_reason, error_description=e.error_description
81
+ )
82
+ self.step_status_thread = None
83
+ self.request_status_failure_counter += 1
84
+ self.logger.warning(
85
+ f"Monitoring step {self.state_machine.current_step.id} failed #: "
86
+ f"{self.request_status_failure_counter} failed because: {e.error_description}"
87
+ )
88
+
89
+ if (
90
+ self.request_status_failure_counter
91
+ >= self.request_status_failure_counter_limit
92
+ ):
93
+ self.state_machine.current_step.error_message = ErrorMessage(
94
+ error_reason=e.error_reason,
95
+ error_description=e.error_description,
96
+ )
97
+ self.logger.error(
98
+ f"Step will be cancelled after failing to get step status "
99
+ f"{self.request_status_failure_counter} times because: "
100
+ f"{e.error_description}"
101
+ )
102
+ status = StepStatus.Failed
103
+ else:
104
+ continue
105
+
73
106
  except RobotStepStatusException as e:
74
107
  self.state_machine.current_step.error_message = ErrorMessage(
75
108
  error_reason=e.error_reason, error_description=e.error_description
@@ -98,6 +131,8 @@ class Monitor(State):
98
131
  f"Retrieving the status failed because: {e.error_description}"
99
132
  )
100
133
 
134
+ self.request_status_failure_counter = 0
135
+
101
136
  if isinstance(status, StepStatus):
102
137
  self.state_machine.current_step.status = status
103
138
  elif isinstance(status, MissionStatus):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: isar
3
- Version: 1.16.18
3
+ Version: 1.18.0
4
4
  Summary: Integration and Supervisory control of Autonomous Robots
5
5
  Home-page: https://github.com/equinor/isar
6
6
  Author: Equinor ASA
@@ -20,7 +20,6 @@ setup.py
20
20
  .github/workflows/publish_isar_base_image.yml
21
21
  .github/workflows/pythonpackage.yml
22
22
  .github/workflows/pythonpublish.yml
23
- .github/workflows/repository_dispatch_on_merge.yml
24
23
  .github/workflows/stale.yml
25
24
  docs/Makefile
26
25
  docs/make.bat
@@ -5,6 +5,7 @@ from typing import Optional
5
5
 
6
6
  class ErrorReason(str, Enum):
7
7
  RobotCommunicationException: str = "robot_communication_exception"
8
+ RobotCommunicationTimeoutException: str = "robot_communication_timeout_exception"
8
9
  RobotInfeasibleStepException: str = "robot_infeasible_step_exception"
9
10
  RobotInfeasibleMissionException: str = "robot_infeasible_mission_exception"
10
11
  RobotMissionStatusException: str = "robot_mission_status_exception"
@@ -49,6 +50,18 @@ class RobotCommunicationException(RobotException):
49
50
  pass
50
51
 
51
52
 
53
+ # An exception which should be thrown by the robot package if the communication has timed
54
+ # out and ISAR should retry the request.
55
+ class RobotCommunicationTimeoutException(RobotException):
56
+ def __init__(self, error_description: str) -> None:
57
+ super().__init__(
58
+ error_reason=ErrorReason.RobotCommunicationTimeoutException,
59
+ error_description=error_description,
60
+ )
61
+
62
+ pass
63
+
64
+
52
65
  # An exception which should be thrown by the robot package if it is unable to start the
53
66
  # current step.
54
67
  class RobotInfeasibleStepException(RobotException):
@@ -111,6 +111,16 @@ class DockingProcedure(MotionStep):
111
111
  type: Literal["docking_procedure"] = "docking_procedure"
112
112
 
113
113
 
114
+ @dataclass
115
+ class ReturnToHome(MotionStep):
116
+ """
117
+ Step which cases the robot to return home
118
+ """
119
+
120
+ pose: Pose
121
+ type: Literal["return_to_home"] = "return_to_home"
122
+
123
+
114
124
  @dataclass
115
125
  class Localize(MotionStep):
116
126
  """
@@ -213,6 +223,7 @@ class RecordAudio(InspectionStep):
213
223
  STEPS = Union[
214
224
  DriveToPose,
215
225
  DockingProcedure,
226
+ ReturnToHome,
216
227
  Localize,
217
228
  TakeImage,
218
229
  TakeThermalImage,
@@ -1,20 +0,0 @@
1
- name: Dispatch to repo
2
- on:
3
- push:
4
- branches:
5
- - main
6
- workflow_dispatch:
7
- jobs:
8
- dispatch:
9
- runs-on: ubuntu-latest
10
- strategy:
11
- matrix:
12
- repo: ["equinor/robotics-deployment"]
13
- steps:
14
- - name: Push to repo
15
- uses: peter-evans/repository-dispatch@v2.0.0
16
- with:
17
- token: ${{ secrets.PAT }}
18
- repository: ${{ matrix.repo }}
19
- event-type: update
20
- client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}", "module": "isar", "branch": "main"}'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes