isar 1.20.2__py3-none-any.whl → 1.34.9__py3-none-any.whl

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.
Files changed (124) hide show
  1. isar/apis/api.py +148 -76
  2. isar/apis/models/__init__.py +0 -1
  3. isar/apis/models/models.py +21 -11
  4. isar/apis/models/start_mission_definition.py +110 -168
  5. isar/apis/robot_control/robot_controller.py +41 -0
  6. isar/apis/schedule/scheduling_controller.py +124 -162
  7. isar/apis/security/authentication.py +5 -5
  8. isar/config/certs/ca-cert.pem +33 -31
  9. isar/config/keyvault/keyvault_service.py +1 -1
  10. isar/config/log.py +45 -40
  11. isar/config/logging.conf +16 -31
  12. isar/config/open_telemetry.py +102 -0
  13. isar/config/predefined_mission_definition/default_exr.json +0 -2
  14. isar/config/predefined_mission_definition/default_mission.json +1 -5
  15. isar/config/predefined_mission_definition/default_turtlebot.json +4 -11
  16. isar/config/predefined_missions/default.json +67 -87
  17. isar/config/predefined_missions/default_extra_capabilities.json +107 -0
  18. isar/config/settings.py +76 -111
  19. isar/eventhandlers/eventhandler.py +123 -0
  20. isar/mission_planner/local_planner.py +6 -20
  21. isar/mission_planner/mission_planner_interface.py +1 -1
  22. isar/models/events.py +184 -0
  23. isar/models/status.py +18 -0
  24. isar/modules.py +118 -199
  25. isar/robot/robot.py +377 -0
  26. isar/robot/robot_battery.py +60 -0
  27. isar/robot/robot_monitor_mission.py +357 -0
  28. isar/robot/robot_pause_mission.py +74 -0
  29. isar/robot/robot_resume_mission.py +67 -0
  30. isar/robot/robot_start_mission.py +66 -0
  31. isar/robot/robot_status.py +61 -0
  32. isar/robot/robot_stop_mission.py +68 -0
  33. isar/robot/robot_upload_inspection.py +75 -0
  34. isar/script.py +57 -40
  35. isar/services/service_connections/mqtt/mqtt_client.py +47 -11
  36. isar/services/service_connections/mqtt/robot_heartbeat_publisher.py +5 -2
  37. isar/services/service_connections/mqtt/robot_info_publisher.py +3 -3
  38. isar/services/service_connections/persistent_memory.py +69 -0
  39. isar/services/utilities/mqtt_utilities.py +93 -0
  40. isar/services/utilities/robot_utilities.py +20 -0
  41. isar/services/utilities/scheduling_utilities.py +393 -65
  42. isar/state_machine/state_machine.py +219 -538
  43. isar/state_machine/states/__init__.py +0 -8
  44. isar/state_machine/states/await_next_mission.py +114 -0
  45. isar/state_machine/states/blocked_protective_stop.py +60 -0
  46. isar/state_machine/states/going_to_lockdown.py +95 -0
  47. isar/state_machine/states/going_to_recharging.py +92 -0
  48. isar/state_machine/states/home.py +115 -0
  49. isar/state_machine/states/intervention_needed.py +77 -0
  50. isar/state_machine/states/lockdown.py +38 -0
  51. isar/state_machine/states/maintenance.py +36 -0
  52. isar/state_machine/states/monitor.py +137 -247
  53. isar/state_machine/states/offline.py +51 -53
  54. isar/state_machine/states/paused.py +92 -23
  55. isar/state_machine/states/pausing.py +48 -0
  56. isar/state_machine/states/pausing_return_home.py +48 -0
  57. isar/state_machine/states/recharging.py +80 -0
  58. isar/state_machine/states/resuming.py +57 -0
  59. isar/state_machine/states/resuming_return_home.py +64 -0
  60. isar/state_machine/states/return_home_paused.py +109 -0
  61. isar/state_machine/states/returning_home.py +217 -0
  62. isar/state_machine/states/stopping.py +61 -0
  63. isar/state_machine/states/stopping_due_to_maintenance.py +61 -0
  64. isar/state_machine/states/stopping_go_to_lockdown.py +60 -0
  65. isar/state_machine/states/stopping_go_to_recharge.py +51 -0
  66. isar/state_machine/states/stopping_return_home.py +77 -0
  67. isar/state_machine/states/unknown_status.py +72 -0
  68. isar/state_machine/states_enum.py +21 -5
  69. isar/state_machine/transitions/mission.py +192 -0
  70. isar/state_machine/transitions/return_home.py +106 -0
  71. isar/state_machine/transitions/robot_status.py +80 -0
  72. isar/state_machine/utils/common_event_handlers.py +73 -0
  73. isar/storage/blob_storage.py +70 -52
  74. isar/storage/local_storage.py +25 -12
  75. isar/storage/storage_interface.py +28 -7
  76. isar/storage/uploader.py +174 -55
  77. isar/storage/utilities.py +32 -29
  78. {isar-1.20.2.dist-info → isar-1.34.9.dist-info}/METADATA +73 -110
  79. isar-1.34.9.dist-info/RECORD +135 -0
  80. {isar-1.20.2.dist-info → isar-1.34.9.dist-info}/WHEEL +1 -1
  81. {isar-1.20.2.dist-info → isar-1.34.9.dist-info}/entry_points.txt +1 -0
  82. robot_interface/models/exceptions/robot_exceptions.py +91 -41
  83. robot_interface/models/initialize/__init__.py +0 -1
  84. robot_interface/models/inspection/__init__.py +0 -13
  85. robot_interface/models/inspection/inspection.py +42 -33
  86. robot_interface/models/mission/mission.py +14 -15
  87. robot_interface/models/mission/status.py +20 -26
  88. robot_interface/models/mission/task.py +154 -121
  89. robot_interface/models/robots/battery_state.py +6 -0
  90. robot_interface/models/robots/media.py +13 -0
  91. robot_interface/models/robots/robot_model.py +7 -7
  92. robot_interface/robot_interface.py +119 -84
  93. robot_interface/telemetry/mqtt_client.py +74 -12
  94. robot_interface/telemetry/payloads.py +91 -13
  95. robot_interface/utilities/json_service.py +7 -1
  96. isar/config/predefined_missions/default_turtlebot.json +0 -110
  97. isar/config/predefined_poses/__init__.py +0 -0
  98. isar/config/predefined_poses/predefined_poses.py +0 -616
  99. isar/config/settings.env +0 -25
  100. isar/mission_planner/sequential_task_selector.py +0 -23
  101. isar/mission_planner/task_selector_interface.py +0 -31
  102. isar/models/communication/__init__.py +0 -0
  103. isar/models/communication/message.py +0 -12
  104. isar/models/communication/queues/__init__.py +0 -4
  105. isar/models/communication/queues/queue_io.py +0 -12
  106. isar/models/communication/queues/queue_timeout_error.py +0 -2
  107. isar/models/communication/queues/queues.py +0 -19
  108. isar/models/communication/queues/status_queue.py +0 -20
  109. isar/models/mission_metadata/__init__.py +0 -0
  110. isar/services/readers/__init__.py +0 -0
  111. isar/services/readers/base_reader.py +0 -37
  112. isar/services/service_connections/stid/__init__.py +0 -0
  113. isar/services/utilities/queue_utilities.py +0 -39
  114. isar/state_machine/states/idle.py +0 -85
  115. isar/state_machine/states/initialize.py +0 -71
  116. isar/state_machine/states/initiate.py +0 -142
  117. isar/state_machine/states/off.py +0 -18
  118. isar/state_machine/states/stop.py +0 -95
  119. isar/storage/slimm_storage.py +0 -191
  120. isar-1.20.2.dist-info/RECORD +0 -116
  121. robot_interface/models/initialize/initialize_params.py +0 -9
  122. robot_interface/models/mission/step.py +0 -234
  123. {isar-1.20.2.dist-info → isar-1.34.9.dist-info/licenses}/LICENSE +0 -0
  124. {isar-1.20.2.dist-info → isar-1.34.9.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: isar
3
- Version: 1.20.2
3
+ Version: 1.34.9
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
@@ -91,15 +91,18 @@ Classifier: Intended Audience :: Science/Research
91
91
  Classifier: License :: OSI Approved :: Eclipse Public License 2.0 (EPL-2.0)
92
92
  Classifier: Natural Language :: English
93
93
  Classifier: Programming Language :: Python :: 3
94
+ Classifier: Programming Language :: Python :: 3.9
95
+ Classifier: Programming Language :: Python :: 3.10
94
96
  Classifier: Programming Language :: Python :: 3.11
95
97
  Classifier: Programming Language :: Python :: 3.12
98
+ Classifier: Programming Language :: Python :: 3.13
96
99
  Classifier: Topic :: Scientific/Engineering
97
100
  Classifier: Topic :: Scientific/Engineering :: Physics
98
101
  Classifier: Topic :: Software Development :: Libraries
99
- Requires-Python: >=3.11
102
+ Requires-Python: >=3.9
100
103
  Description-Content-Type: text/markdown
101
104
  License-File: LICENSE
102
- Requires-Dist: alitra >=1.1.3
105
+ Requires-Dist: alitra>=1.1.3
103
106
  Requires-Dist: azure-identity
104
107
  Requires-Dist: azure-keyvault-secrets
105
108
  Requires-Dist: azure-storage-blob
@@ -107,35 +110,43 @@ Requires-Dist: backoff
107
110
  Requires-Dist: click
108
111
  Requires-Dist: dacite
109
112
  Requires-Dist: fastapi-azure-auth
110
- Requires-Dist: fastapi
111
- Requires-Dist: injector
113
+ Requires-Dist: fastapi>=0.121.0
114
+ Requires-Dist: dependency-injector
112
115
  Requires-Dist: numpy
113
- Requires-Dist: opencensus-ext-azure
114
- Requires-Dist: opencensus-ext-logging
115
- Requires-Dist: opencensus-ext-requests
116
116
  Requires-Dist: paho-mqtt
117
- Requires-Dist: pydantic-settings
117
+ Requires-Dist: pydantic_settings
118
118
  Requires-Dist: pydantic
119
119
  Requires-Dist: PyJWT
120
120
  Requires-Dist: python-dotenv
121
121
  Requires-Dist: PyYAML
122
122
  Requires-Dist: requests-toolbelt
123
123
  Requires-Dist: requests
124
+ Requires-Dist: starlette>=0.49.1
124
125
  Requires-Dist: transitions
125
126
  Requires-Dist: uvicorn
127
+ Requires-Dist: opentelemetry-api
128
+ Requires-Dist: opentelemetry-sdk
129
+ Requires-Dist: opentelemetry-exporter-otlp
130
+ Requires-Dist: opentelemetry-instrumentation-fastapi
131
+ Requires-Dist: azure-monitor-opentelemetry
132
+ Requires-Dist: azure-monitor-opentelemetry-exporter>=1.0.0b38
133
+ Requires-Dist: pymysql
134
+ Requires-Dist: sqlalchemy
135
+ Requires-Dist: psycopg2-binary
126
136
  Provides-Extra: dev
127
- Requires-Dist: black ; extra == 'dev'
128
- Requires-Dist: flake8 ; extra == 'dev'
129
- Requires-Dist: mypy ; extra == 'dev'
130
- Requires-Dist: myst-parser ; extra == 'dev'
131
- Requires-Dist: pip-tools ; extra == 'dev'
132
- Requires-Dist: pre-commit ; extra == 'dev'
133
- Requires-Dist: pytest-dotenv ; extra == 'dev'
134
- Requires-Dist: pytest-mock ; extra == 'dev'
135
- Requires-Dist: pytest-xdist ; extra == 'dev'
136
- Requires-Dist: pytest ; extra == 'dev'
137
- Requires-Dist: requests-mock ; extra == 'dev'
138
- Requires-Dist: sphinx ; extra == 'dev'
137
+ Requires-Dist: black; extra == "dev"
138
+ Requires-Dist: isort; extra == "dev"
139
+ Requires-Dist: mypy; extra == "dev"
140
+ Requires-Dist: pip-tools; extra == "dev"
141
+ Requires-Dist: pre-commit; extra == "dev"
142
+ Requires-Dist: pytest-mock; extra == "dev"
143
+ Requires-Dist: pytest-xdist; extra == "dev"
144
+ Requires-Dist: pytest; extra == "dev"
145
+ Requires-Dist: requests-mock; extra == "dev"
146
+ Requires-Dist: ruff; extra == "dev"
147
+ Requires-Dist: testcontainers[mysql]; extra == "dev"
148
+ Requires-Dist: alembic; extra == "dev"
149
+ Dynamic: license-file
139
150
 
140
151
  # ISAR
141
152
 
@@ -228,12 +239,21 @@ ISAR_ROBOT_PACKAGE = isar_turtlebot
228
239
  ISAR_DEFAULT_MAP = turtleworld
229
240
  ```
230
241
 
242
+ ### Run with make
243
+ Common commands for the project are in [Makefile](./Makefile).
244
+ This requires the CLI program `make`.
245
+
246
+ Usage:
247
+ ```bash
248
+ make <command-in-makefile> # for example: make run
249
+ ```
250
+
231
251
  ### Run ISAR server
232
252
 
233
253
  To run ISAR:
234
254
 
235
255
  ```bash
236
- python main.py
256
+ isar-start
237
257
  ```
238
258
 
239
259
  Note, running the full system requires that an implementation of a robot has been installed. See
@@ -253,21 +273,6 @@ In [this](./src/isar/config/predefined_missions) folder there are predefined def
253
273
  corresponding to `mission_id=1`. A new mission may be added by adding a new json-file with a mission description. Note,
254
274
  the mission IDs must be unique.
255
275
 
256
- ### Running with docker-compose
257
-
258
- ISAR may be started with an instance of the [isar-robot](https://github.com/equinor/isar-robot) package by
259
-
260
- ```shell
261
- docker-compose up --build
262
- ```
263
-
264
- Provided that the simulator from [isar-turtlebot](https://github.com/equinor/isar-turtlebot) is running ISAR may be
265
- started with the turtlebot by
266
-
267
- ```shell
268
- docker-compose -f docker-compose-turtlebot.yml up --build
269
- ```
270
-
271
276
  ### Configuration
272
277
 
273
278
  The system consists of many configuration variables which may alter the functionality. As an example, it is possible to
@@ -293,6 +298,20 @@ There are two methods of specifying configuration.
293
298
  By adding environment variables with the prefix `ISAR_` to the [settings.env](./src/isar/config/settings.env) file
294
299
  the configuration variables will be overwritten by the values in this file.
295
300
 
301
+ ### Setup for testing
302
+ To be able to execute the tests you need to set the `ISAR_ENV` environment variable beforehand. Depending on your operating system and the command line you are using you can use one of the following commands:
303
+
304
+ **Bash/Zsh**
305
+ ```bash
306
+ export ISAR_ENV=test
307
+ ```
308
+ **Windows Command prompt**
309
+ ```cmd
310
+ set ISAR_ENV=test
311
+ ```
312
+
313
+ Remember to set `ISAR_ENV` back to `None` when you want to run `isar-start` afterwards.
314
+
296
315
  ### Running tests
297
316
 
298
317
  After following the steps in [Development](#install), you can run the tests:
@@ -343,24 +362,29 @@ The system consists of two main components.
343
362
  The state machine handles interaction with the robots API and monitors the execution of missions. It also enables
344
363
  interacting with the robot before, during and after missions.
345
364
 
346
- The state machine is based on the [transitions](https://github.com/pytransitions/transitions) package for Python. An visualization of the state machine can be seen below:
347
- ![State Machine](./docs/state_machine_diagram.png)
365
+ The state machine is based on the [transitions](https://github.com/pytransitions/transitions) package for Python. The following are some visualizations of the state machine:
366
+
367
+ Mission behavior without the robot status changed transition that enable the resting states to transition between each other if the robot status changes:
368
+ ![State Machine extended](./docs/extended_state_machine_diagram.png)
369
+
370
+ Robot status changed transition:
371
+ ![State Machine robot status changed](./docs/robot_status_state_machine_diagram.png)
372
+
373
+ Full state machine:
374
+ ![State Machine full](./docs/full_state_machine_diagram.png)
348
375
 
349
376
  In general the states
350
377
 
351
378
  ```
352
- States.Off,
353
- States.Initialize,
354
- States.Initiate,
355
- States.Stop,
379
+ States.Stopping,
356
380
  States.Monitor,
357
381
  States.Paused,
358
382
  ```
359
383
 
360
- indicates that the state machine is already running. For running a mission the state machine need to be in the state
384
+ indicates that the state machine is already running. For running a mission the state machine need to be in the states
361
385
 
362
386
  ```
363
- States.Idle
387
+ States.Home, States.AwaitNextMission or States.ReturningHome
364
388
  ```
365
389
 
366
390
  ### FastAPI
@@ -382,10 +406,10 @@ overriding the configuration through an environment variable. It accepts a json
382
406
  in the list to retrieve the corresponding handler. The current options are
383
407
 
384
408
  ```
385
- ISAR_STORAGE = '["local", "blob", "slimm"]'
409
+ ISAR_STORAGE = '["local", "blob"]'
386
410
  ```
387
411
 
388
- Note that the `blob` and `slimm` options require special configuration to authenticate to these endpoints.
412
+ Note that the `blob` option requires special configuration to authenticate to these endpoints.
389
413
 
390
414
  ### Implement your own storage module
391
415
 
@@ -393,68 +417,6 @@ You can create your own storage module by implementing the [storage interface](.
393
417
  and adding your storage module to the selection [here](./src/isar/modules.py). Note that you must add your module as an
394
418
  option in the dictionary.
395
419
 
396
- ## Task selection
397
-
398
- The tasks of a mission are selected based on a task selector module, defined by the `TASK_SELECTOR` configuration variable. The default task selector is `sequential`. When using the default module, tasks are executed in sequential order defined by the current input mission.
399
-
400
- ### Implement you own task selector module
401
-
402
- Custom task selector modules may be added by implementing additional versions of the [task selector interface](./src/isar/mission_planner/task_selector_interface.py).
403
-
404
- For every custom module, the interface function `next_task()` must be implemented. All interface implementations by default have access to the list of tasks in the current mission through the member `self.tasks`, however additional variables may be supplied by adding arguments to `next_task()`. To comply with the interface definition, the function should return the next task upon every call, and raise the `TaskSelectorStop` exception when all tasks in the current mission have been completed:
405
-
406
- ```python
407
- class CustomTaskSelector(TaskSelectorInterface):
408
- ...
409
- def next_task(...) -> Task:
410
-
411
- # Add code here
412
- ...
413
-
414
- # Raise `TaskSelectorStop` when all tasks have been completed
415
- ...
416
- ```
417
-
418
- Optionally, the `initialize()` function may be extended by supplementing the parameter list or function body:
419
-
420
- ```python
421
- class CustomTaskSelector(TaskSelectorInterface):
422
- ...
423
- def initialize(self, tasks: List[Task], ...) -> None:
424
- super.initialize(tasks=tasks)
425
-
426
- # Add supplementary code here
427
- ...
428
- ```
429
-
430
- A custom task selector may be made available during [module selection](./src/isar/modules.py) by adding it to the series of options in the dictionary of injector modules. It can then be activated by overriding the task selector configuration variable:
431
-
432
- ```python
433
- # Add custom task selector module to `modules.py`
434
-
435
- class CustomTaskSelectorModule(Module):
436
- @provider
437
- @singleton
438
- def provide_task_selector(self) -> TaskSelectorInterface:
439
- return CustomTaskSelector()
440
-
441
- ...
442
-
443
- # Make it available to select during injector instantiation
444
-
445
- modules: dict[str, tuple[Module, Union[str, bool]]] = {
446
- ...
447
- "task_selector": (
448
- {
449
- "sequential": SequentialTaskSelectorModule,
450
- "custom": CustomTaskSelectorModule
451
- }
452
- ...
453
- )
454
- ...
455
- }
456
- ```
457
-
458
420
  ## API authentication
459
421
 
460
422
  The API has an option to include user authentication. This can be enabled by setting the environment variable
@@ -471,6 +433,7 @@ Enabling API authentication also requires the same environment variables. The re
471
433
  AZURE_CLIENT_ID
472
434
  AZURE_TENANT_ID
473
435
  AZURE_CLIENT_SECRET
436
+ ISAR_BLOB_STORAGE_ACCOUNT
474
437
  ```
475
438
 
476
439
  ## MQTT communication
@@ -0,0 +1,135 @@
1
+ isar/__init__.py,sha256=cH8p8bVveu3FUL6kBhldcSlLaoHgD82Kd0-SwSNfGXw,87
2
+ isar/modules.py,sha256=2bo4Z4H2n4vl9BVwV5V5twOUevsLIuXsPiRPICjCB3k,4404
3
+ isar/script.py,sha256=mkwdRMEYW2HI9eFLyFy23Ks1_vvrsp17b8VlvkhrNao,5913
4
+ isar/apis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ isar/apis/api.py,sha256=0s0C1l5qGhko8rzm4D3y27mwibk_S2s2o95eAl7bH3k,16126
6
+ isar/apis/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ isar/apis/models/models.py,sha256=UqIzHiqrvI-ICi6H_xlBFH2HHgYHnMWAKlnqrdqM380,2099
8
+ isar/apis/models/start_mission_definition.py,sha256=v-wt1XDd53Sw7DCdFAkxBBut-xd_uGJa7qMJnE3VI9k,6364
9
+ isar/apis/robot_control/robot_controller.py,sha256=RSVlxbw9D668tHWItVLtyjvAnsJkCs2yUSkU3iqeAcY,1393
10
+ isar/apis/schedule/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ isar/apis/schedule/scheduling_controller.py,sha256=oyUSo0MdKB24cB796GcfdSzw6-pendz9Thtrh9yAlvc,10890
12
+ isar/apis/security/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ isar/apis/security/authentication.py,sha256=Se2puhe2TUBmfio2RLma52-VSLRhqvWgu0Cd1bhdwMo,2000
14
+ isar/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ isar/config/configuration_error.py,sha256=rO6WOhafX6xvVib8WxV-eY483Z0PpN-9PxGsq5ATfKc,46
16
+ isar/config/log.py,sha256=16qEMVKWrAc5I9xgE0xZQBpuYpy7wMz9NT19JVBZlf4,2218
17
+ isar/config/logging.conf,sha256=skjTp6AsXQGW6L6DeMxGszD-XvWu1BAVWjDipQ4QHvU,854
18
+ isar/config/open_telemetry.py,sha256=Lgu0lbRQA-zz6ZDoBKKk0whQex5w18jl1wjqWzHUGdg,3634
19
+ isar/config/settings.py,sha256=BmcLwk4_MODG1NVuFsbu2W__t68rlmMozzJFWbI4zkQ,12289
20
+ isar/config/certs/ca-cert.pem,sha256=qoNljfad_qcMxhXJIUMLd7nT-Qwf_d4dYSdoOFEOE8I,2179
21
+ isar/config/keyvault/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ isar/config/keyvault/keyvault_error.py,sha256=zvPCsZLjboxsxthYkxpRERCTFxYV8R5WmACewAUQLwk,41
23
+ isar/config/keyvault/keyvault_service.py,sha256=TEAJv5RlWnYvy-n9keivdATDafdTQDj4QY8Aw3SEKoU,3124
24
+ isar/config/maps/JSP1_intermediate_deck.json,sha256=fdotzN6MVotyLbqpIjRSrbBYM84vogLkdS585NjBnL8,826
25
+ isar/config/maps/JSP1_weather_deck.json,sha256=_dG3cSBI8q4_uHqHMOO5kSYqMXn85JL3_9PaH4uk1yQ,832
26
+ isar/config/maps/default_map.json,sha256=3CdGMr0Qn3PrL4TfUK8I5a-hotMrS_n5DKfaEORJPT4,776
27
+ isar/config/maps/klab_b.json,sha256=qXgWVUYPaTdVuomf6lQL-uRbV3Tsa6CftnzcbT3dY78,842
28
+ isar/config/maps/klab_compressor.json,sha256=1Vrk5u_l4WXjrTtG4YfXlrCPbOoRs4TtYHOm0430u2A,803
29
+ isar/config/maps/klab_turtlebot.json,sha256=HcB79XFEdY0Wm96EssIFO4TMyAWzc2KENoqN7TbTT0k,823
30
+ isar/config/maps/turtleworld.json,sha256=EKLMpSK9Gu2lAN-E9l41XOaO3f9Su5n_I97mA6z7sWY,764
31
+ isar/config/predefined_mission_definition/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
+ isar/config/predefined_mission_definition/default_exr.json,sha256=diSi4KMnGQY01ZumYUBZDvrekgl4bgiTk-9YPXVeBCY,1550
33
+ isar/config/predefined_mission_definition/default_mission.json,sha256=NAspX-kTaHh9VygJGrytJGNjebEIPbiTnWHhj7qt9rk,2722
34
+ isar/config/predefined_mission_definition/default_turtlebot.json,sha256=20ee7q1EIx7bIIojMucSwdBafuCG5sewbMQn9gJuPEo,3704
35
+ isar/config/predefined_missions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ isar/config/predefined_missions/default.json,sha256=eBVuHXRoXELpzN0IbSOHdTVjZnhxFqJQf6h67Ez4Iqk,1243
37
+ isar/config/predefined_missions/default_extra_capabilities.json,sha256=ddYx54xvz1w5hSS5i6YrHOj8-4YMmtuolLXVha4kLvE,2157
38
+ isar/eventhandlers/eventhandler.py,sha256=xM5wmrYO3nQtxxsGt-s98ajKhfl3bCMajqtJ29CoGyo,3816
39
+ isar/mission_planner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ isar/mission_planner/local_planner.py,sha256=Mkg3vvUBF1jImfQnaFvXLNpKVadR21X4mwDd_wHqJ2w,2520
41
+ isar/mission_planner/mission_planner_interface.py,sha256=UgpPIM4FbrWOD7fGY3Ul64k3uYb8wo0FwSWGewYoVbc,485
42
+ isar/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ isar/models/events.py,sha256=zE2YQoWzfuVTDLX99YdXb4wu6lmc_KZlwWYQAxiNfvA,6262
44
+ isar/models/status.py,sha256=ed_CZH08IFwIKwX0t1U6MQpq5tax2LwWrTe_TjII5mg,506
45
+ isar/robot/robot.py,sha256=gw8MI_mLLY1uEFn7xMEFGcz1uBJO6MWH4JXGxbELm2k,15138
46
+ isar/robot/robot_battery.py,sha256=goLdgmn61QCgE2Ja3YuiwE_sqJzIhCkS3u90sz1kdug,2089
47
+ isar/robot/robot_monitor_mission.py,sha256=Pb0dhnVncNt6VuiidlJDyniEXiqoO1ZArSCdWCqX6IY,13831
48
+ isar/robot/robot_pause_mission.py,sha256=2zVQLh1Qoo-PIgpYUd6IBA39EJ1azIGh_lV1b9BeXqk,2631
49
+ isar/robot/robot_resume_mission.py,sha256=naseBgY3mX1p4lsfW2lW_bocuHO59VHx3fhprxi3Nf0,2417
50
+ isar/robot/robot_start_mission.py,sha256=UFwhSTBbCo-R4FO-BnrCB7bnvOkL1p_0CMDuxnSWi5E,2435
51
+ isar/robot/robot_status.py,sha256=dfAls3s8_Vha7ZMLSYngELqsdpaEpcweAWRHanQj8u8,2361
52
+ isar/robot/robot_stop_mission.py,sha256=CaXLsZjjazHmydU9iR7uOWUHtJ2zvKh4ItUbkWY5sIk,2321
53
+ isar/robot/robot_upload_inspection.py,sha256=uCc9nuH1Am5uxD2Tgnm4ZTOm0tQnud0F6eHs0rSUfvY,2539
54
+ isar/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ isar/services/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
+ isar/services/auth/azure_credentials.py,sha256=9PlwGe5FrPRbW2dp0go7LMp8_l_FRvL8xOXotXwzRDo,364
57
+ isar/services/service_connections/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
+ isar/services/service_connections/persistent_memory.py,sha256=duNj5vX4VtL5XCu6oiZ0VPmNMlFbNJMzcLcQL8nNfN8,2188
59
+ isar/services/service_connections/request_handler.py,sha256=0LxC0lu_HXeEf_xmJWjfEsh14oAUI97cpG1IWtBlcs4,4278
60
+ isar/services/service_connections/mqtt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
+ isar/services/service_connections/mqtt/mqtt_client.py,sha256=8Dr65JNwPx5-kRY8UsRtZ_nrQ2gXXSUH6LWFOYlnluo,4482
62
+ isar/services/service_connections/mqtt/robot_heartbeat_publisher.py,sha256=SKPvY2QwBxqnhL9aGuZQDGQ8F_NDqPtQI5bzRBIUxkQ,1203
63
+ isar/services/service_connections/mqtt/robot_info_publisher.py,sha256=AxokGk51hRPTxxD2r0P9braPJCMrf1InaCxrUBKkF4g,1402
64
+ isar/services/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
+ isar/services/utilities/mqtt_utilities.py,sha256=_e-UzWcoXvsBUrvb89rNXQaDN4G3rTsYlZRIhmC9fQc,3101
66
+ isar/services/utilities/robot_utilities.py,sha256=4zCigsLXfqDC8POHchktSq81zr1_pTaRve_LQsVr6Mk,514
67
+ isar/services/utilities/scheduling_utilities.py,sha256=wxLBc7l6Pc6y0aLRP-gOzBMfKUs-xg8BA9QiNdBG7bU,23814
68
+ isar/services/utilities/threaded_request.py,sha256=py4G-_RjnIdHljmKFAcQ6ddqMmp-ZYV39Ece-dqRqjs,1874
69
+ isar/state_machine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
+ isar/state_machine/state_machine.py,sha256=Kmys0yIpsBuBxPrcqHo3FYDfAfx34haHfczihHYLmEU,13669
71
+ isar/state_machine/states_enum.py,sha256=1jiON-PJCDWIA0VHtI0AUFlWeVtbWbGijShVJyViqwI,1012
72
+ isar/state_machine/states/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
+ isar/state_machine/states/await_next_mission.py,sha256=IJ79RuPveK6xBnHHkMldZ8LJybLfhMcS812t7-I6-iU,4381
74
+ isar/state_machine/states/blocked_protective_stop.py,sha256=Ya5GIZS81olGoTXqKVjDaUXfl3zR6FxdsUXktPJIU80,2578
75
+ isar/state_machine/states/going_to_lockdown.py,sha256=dmOhTkg3zNLIIdxfC9b5ss0rWu-pHm-yol2ASoOIUqo,3879
76
+ isar/state_machine/states/going_to_recharging.py,sha256=CMtA9hmiW8XmH7Skj3B0_IAtdZcJCNt_qAvUL0Rmqgg,3562
77
+ isar/state_machine/states/home.py,sha256=IfAFi9bDvoqNaJRahAw8tQwRQ2Wg84kI-nAmtzXp75U,4856
78
+ isar/state_machine/states/intervention_needed.py,sha256=DmRm5bQYxUzTRCwYiFN9L4bRXWSdGgDKCBwh-hV6ySo,3156
79
+ isar/state_machine/states/lockdown.py,sha256=ZFw9XMDENECuH3lh89RKeU_3CTzW0ZBvqCKptFJG5xo,1364
80
+ isar/state_machine/states/maintenance.py,sha256=PIlPLtS7zn5uTJZ9kTrpOQGUuJww4j5vD-qaNcoj7aI,1267
81
+ isar/state_machine/states/monitor.py,sha256=WYhCkZAfsGoqO092jvnuSJEspY5gBje__-pf4nuGEDY,6267
82
+ isar/state_machine/states/offline.py,sha256=FbchMo1q2d0aZUiDj9VWuD1IAha7sD1d8e5MqyR_JBc,2564
83
+ isar/state_machine/states/paused.py,sha256=-XRjjMpzKgKQZ7oYmI1bAZXNbtti1KHlH0tt59Cv0eg,4149
84
+ isar/state_machine/states/pausing.py,sha256=Q0yH9iTWA-2yGGsD_atb_bqFJG8cApPfmd_TdcGvRbY,1693
85
+ isar/state_machine/states/pausing_return_home.py,sha256=yEMojzOwn6z2u80S1BF2gVVgs3SOLk90LscO3DIj1R8,1740
86
+ isar/state_machine/states/recharging.py,sha256=9VszfV5zAPOaAcI_k_if6uapu7lO3XDWj6GbvnldnEI,3143
87
+ isar/state_machine/states/resuming.py,sha256=Evh9gxxntKwY8MKM4gn0Sq-H9DpMx6RRJrID57LIv4Y,2071
88
+ isar/state_machine/states/resuming_return_home.py,sha256=YZhHno_WdtR5DkoeKmsN4jALmTXcOdWgOGZ0d8Tz2HQ,2414
89
+ isar/state_machine/states/return_home_paused.py,sha256=598K-hKMxjZZf3iVWDaOOauAETSwJxxDbU1wlHnt9UM,4485
90
+ isar/state_machine/states/returning_home.py,sha256=oXc7Ou7lhzLSm4oZocoiB_4I2vUyxzt2CvJP6wAJhRs,9196
91
+ isar/state_machine/states/stopping.py,sha256=B2tcd4jaSOXEkTrd5BnNfMVrzM9wRkJm5hnmM7gxUc0,2484
92
+ isar/state_machine/states/stopping_due_to_maintenance.py,sha256=Mjbwf6bQIB0ihBKrsTxnCCUzkIe0LNybVHiLGzcXSNA,2561
93
+ isar/state_machine/states/stopping_go_to_lockdown.py,sha256=_w9yL8Uq2E6W97-ccp9NJvbfjV2hv87LEK_skS5Jhqg,2327
94
+ isar/state_machine/states/stopping_go_to_recharge.py,sha256=02i37QI_551o-i_Ejc3Z9_xuI9o0g8e6WKCXcwkW2ac,1923
95
+ isar/state_machine/states/stopping_return_home.py,sha256=sKA0tZASme_XVHEj0mwotfiKjFtCZ-FB-y1IoPaj9q4,3089
96
+ isar/state_machine/states/unknown_status.py,sha256=oL92_66TDBwsIELdfqWvFvZ8NkY4oOLaGYKdZHsxAB4,3171
97
+ isar/state_machine/transitions/mission.py,sha256=coHW4Mo3HdEzjolNg6FIppTcU_g_GCvAkr3gU0ERwXc,7317
98
+ isar/state_machine/transitions/return_home.py,sha256=G9mxFpM7IR5NNq7JC-Cbign7XAMC_d7vOkVxCBFVNGE,3701
99
+ isar/state_machine/transitions/robot_status.py,sha256=60EAb1LwuOfk1TPDCgh8S5FBgcZAPHdC2KtCGDrsQrM,2763
100
+ isar/state_machine/utils/common_event_handlers.py,sha256=lBoreI1EuXrqmMkkPIZiy3yCLBDTShW_EFUxMGrCQVE,2492
101
+ isar/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
+ isar/storage/blob_storage.py,sha256=d44z3XpZDUbiKwN8Av2gytTJxnefMXrp5VhiGm4PWxU,3703
103
+ isar/storage/local_storage.py,sha256=Rn-iiiz9DI7PzIhevOMshPIaqzJaqBXeVJMQRhVSl2M,2191
104
+ isar/storage/storage_interface.py,sha256=x-imVeQTdL6dCaTaPTHpXwCR6N4e27WxK_Vpumg0x-Y,1230
105
+ isar/storage/uploader.py,sha256=0BBrxyZGGRkNxGeZeoREucegs4yKUow2523oLEie07o,10841
106
+ isar/storage/utilities.py,sha256=oLH0Rp7UtrQQdilfITnmXO1Z0ExdeDhBImYHid55vBA,3449
107
+ isar-1.34.9.dist-info/licenses/LICENSE,sha256=3fc2-ebLwHWwzfQbulGNRdcNob3SBQeCfEVUDYxsuqw,14058
108
+ robot_interface/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
+ robot_interface/robot_interface.py,sha256=s04zOYDpnUu3GxUyDo3DlX1cFf94DmSt-GrwsFPgnYw,9357
110
+ robot_interface/test_robot_interface.py,sha256=FV1urn7SbsMyWBIcTKjsBwAG4IsXeZ6pLHE0mA9EGGs,692
111
+ robot_interface/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
+ robot_interface/models/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
113
+ robot_interface/models/exceptions/robot_exceptions.py,sha256=7extsX9NuJsJ00xeTQ0aI7yeVGW-dzjbH-LH8Mc-uEQ,10821
114
+ robot_interface/models/initialize/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
+ robot_interface/models/inspection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
116
+ robot_interface/models/inspection/inspection.py,sha256=cjAvekL8r82s7bgukWeXpYylHvJG_oRSCJNISPVCvZg,2238
117
+ robot_interface/models/mission/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
+ robot_interface/models/mission/mission.py,sha256=MQ9p5cuclLXexaZu9bkDh5-aN99eunvYC0vP-Z_kUwI,960
119
+ robot_interface/models/mission/status.py,sha256=3KHA02Jer-HSOwFmUhRkE6cr81H1zPgbwB3p4IjchEY,702
120
+ robot_interface/models/mission/task.py,sha256=SEsdR82CIcqTymecMqYjuY3Nijj_LS90YJdxiConJag,4207
121
+ robot_interface/models/robots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
+ robot_interface/models/robots/battery_state.py,sha256=ktOtJ8ltdK0k_i7BoqYfhc5dbOzIG6Oo-uWC67fCWio,98
123
+ robot_interface/models/robots/media.py,sha256=8A-CuuubfngzPprs6zWB9hSaqe3jzgsE8rcCzRX2Uto,227
124
+ robot_interface/models/robots/robot_model.py,sha256=-0jNKWPcEgtF_2klb1It3u0SCoAR0hSW9nce58Zq0Co,417
125
+ robot_interface/telemetry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
+ robot_interface/telemetry/mqtt_client.py,sha256=0P1S9mWdJcByGoSOwwn2NPQr9I-OX4b1VPbrIYOU-Zo,4334
127
+ robot_interface/telemetry/payloads.py,sha256=A0SWiG609k6o6-Y3vhDWE6an2-_m7D_ND85ohfW4qWs,3236
128
+ robot_interface/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
+ robot_interface/utilities/json_service.py,sha256=9N1zijW7K4d3WFR2autpaS8U9o1ibymiOX-6stTKCyk,1243
130
+ robot_interface/utilities/uuid_string_factory.py,sha256=_NQIbBQ56w0qqO0MUDP6aPpHbxW7ATRhK8HnQiBSLkc,76
131
+ isar-1.34.9.dist-info/METADATA,sha256=LmXJhW-UywCqnF6C2sLVOJ_Lr6JVJfa9yq7ESgZL7L4,29271
132
+ isar-1.34.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
133
+ isar-1.34.9.dist-info/entry_points.txt,sha256=RdnGYFhaBdMGEsOVJAAZxHCflEptjSisHqZ-Rgc4t7Q,98
134
+ isar-1.34.9.dist-info/top_level.txt,sha256=UwIML2RtuQKCyJJkatcSnyp6-ldDjboB9k9JgKipO-U,21
135
+ isar-1.34.9.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,2 +1,3 @@
1
1
  [console_scripts]
2
2
  isar-start = isar.script:start
3
+ isar-test-print = isar.script:print_startup_info
@@ -4,23 +4,27 @@ from typing import Optional
4
4
 
5
5
 
6
6
  class ErrorReason(str, Enum):
7
- RobotCommunicationException: str = "robot_communication_exception"
8
- RobotCommunicationTimeoutException: str = "robot_communication_timeout_exception"
9
- RobotInfeasibleStepException: str = "robot_infeasible_step_exception"
10
- RobotInfeasibleMissionException: str = "robot_infeasible_mission_exception"
11
- RobotMissionStatusException: str = "robot_mission_status_exception"
12
- RobotStepStatusException: str = "robot_step_status_exception"
13
- RobotAPIException: str = "robot_api_exception"
14
- RobotActionException: str = "robot_action_exception"
15
- RobotInitializeException: str = "robot_initialize_exception"
16
- RobotRetrieveDataException: str = "robot_retrieve_data_exception"
17
- RobotRetrieveInspectionException: str = "robot_retrieve_inspection_exception"
18
- RobotTelemetryException: str = "robot_telemetry_exception"
19
- RobotMapException: str = "robot_map_exception"
20
- RobotTransformException: str = "robot_transform_exception"
21
- RobotUnknownErrorException: str = "robot_unknown_error_exception"
22
- RobotDisconnectedException: str = "robot_disconnected_exception"
23
- RobotMissionNotSupportedException: str = "robot_mission_not_supported_exception"
7
+ RobotCommunicationException = "robot_communication_exception"
8
+ RobotCommunicationTimeoutException = "robot_communication_timeout_exception"
9
+ RobotInfeasibleTaskException = "robot_infeasible_task_exception"
10
+ RobotInfeasibleMissionException = "robot_infeasible_mission_exception"
11
+ RobotUnreliableDockingStatusException = "robot_unreliable_docking_status_exception"
12
+ RobotMissionStatusException = "robot_mission_status_exception"
13
+ RobotTaskStatusException = "robot_task_status_exception"
14
+ RobotAPIException = "robot_api_exception"
15
+ RobotActionException = "robot_action_exception"
16
+ RobotRetrieveDataException = "robot_retrieve_data_exception"
17
+ RobotRetrieveInspectionException = "robot_retrieve_inspection_exception"
18
+ RobotStillStartingMissionException = "robot_still_starting_mission_exception"
19
+ RobotTelemetryException = "robot_telemetry_exception"
20
+ RobotTelemetryNoUpdateException = "robot_telemetry_no_update_exception"
21
+ RobotTelemetryPoseException = "robot_telemetry_pose_exception"
22
+ RobotMapException = "robot_map_exception"
23
+ RobotTransformException = "robot_transform_exception"
24
+ RobotUnknownErrorException = "robot_unknown_error_exception"
25
+ RobotDisconnectedException = "robot_disconnected_exception"
26
+ RobotNoMissionRunningException = "robot_no_mission_running_exception"
27
+ RobotAlreadyHomeException = "robot_already_home_exception"
24
28
 
25
29
 
26
30
  @dataclass
@@ -39,7 +43,7 @@ class RobotException(Exception):
39
43
 
40
44
 
41
45
  # An exception which should be thrown by the robot package if it is unable to
42
- # communicate with the robot API.
46
+ # communicate with the robot API. ISAR will retry the request.
43
47
  class RobotCommunicationException(RobotException):
44
48
  def __init__(self, error_description: str) -> None:
45
49
  super().__init__(
@@ -50,6 +54,18 @@ class RobotCommunicationException(RobotException):
50
54
  pass
51
55
 
52
56
 
57
+ # An exception which should be thrown by the robot package if it is unable to
58
+ # complete a request as there is no ongoing mission.
59
+ class RobotNoMissionRunningException(RobotException):
60
+ def __init__(self, error_description: str) -> None:
61
+ super().__init__(
62
+ error_reason=ErrorReason.RobotNoMissionRunningException,
63
+ error_description=error_description,
64
+ )
65
+
66
+ pass
67
+
68
+
53
69
  # An exception which should be thrown by the robot package if the communication has timed
54
70
  # out and ISAR should retry the request.
55
71
  class RobotCommunicationTimeoutException(RobotException):
@@ -63,11 +79,11 @@ class RobotCommunicationTimeoutException(RobotException):
63
79
 
64
80
 
65
81
  # An exception which should be thrown by the robot package if it is unable to start the
66
- # current step.
67
- class RobotInfeasibleStepException(RobotException):
82
+ # current task.
83
+ class RobotInfeasibleTaskException(RobotException):
68
84
  def __init__(self, error_description: str) -> None:
69
85
  super().__init__(
70
- error_reason=ErrorReason.RobotInfeasibleStepException,
86
+ error_reason=ErrorReason.RobotInfeasibleTaskException,
71
87
  error_description=error_description,
72
88
  )
73
89
 
@@ -86,6 +102,16 @@ class RobotInfeasibleMissionException(RobotException):
86
102
  pass
87
103
 
88
104
 
105
+ class RobotUnreliableDockingStatusException(RobotException):
106
+ def __init__(self, error_description: str) -> None:
107
+ super().__init__(
108
+ error_reason=ErrorReason.RobotUnreliableDockingStatusException,
109
+ error_description=error_description,
110
+ )
111
+
112
+ pass
113
+
114
+
89
115
  # An exception which should be thrown by the robot package if it is unable to collect
90
116
  # the status of the current mission.
91
117
  class RobotMissionStatusException(RobotException):
@@ -99,11 +125,11 @@ class RobotMissionStatusException(RobotException):
99
125
 
100
126
 
101
127
  # An exception which should be thrown by the robot package if it is unable to collect
102
- # the status of the current step.
103
- class RobotStepStatusException(RobotException):
128
+ # the status of the current task.
129
+ class RobotTaskStatusException(RobotException):
104
130
  def __init__(self, error_description: str) -> None:
105
131
  super().__init__(
106
- error_reason=ErrorReason.RobotStepStatusException,
132
+ error_reason=ErrorReason.RobotTaskStatusException,
107
133
  error_description=error_description,
108
134
  )
109
135
 
@@ -135,19 +161,6 @@ class RobotActionException(RobotException):
135
161
  pass
136
162
 
137
163
 
138
- # An exception which should be thrown by the robot package if something is wrong during
139
- # the initialization of the robot. This exception will cause the mission to fail as
140
- # initialization is performed prior to starting the mission.
141
- class RobotInitializeException(RobotException):
142
- def __init__(self, error_description: str) -> None:
143
- super().__init__(
144
- error_reason=ErrorReason.RobotInitializeException,
145
- error_description=error_description,
146
- )
147
-
148
- pass
149
-
150
-
151
164
  # An exception which should be thrown by the robot package if it is unable to retrieve
152
165
  # data from the API like currently executing missions, status of the current mission
153
166
  # and similar.
@@ -162,7 +175,7 @@ class RobotRetrieveDataException(RobotException):
162
175
 
163
176
 
164
177
  # An exception which should be thrown by the robot package if it is unable to collect
165
- # the inspections that were generated for the currently executing step or mission.
178
+ # the inspections that were generated for the currently executing task or mission.
166
179
  class RobotRetrieveInspectionException(RobotException):
167
180
  def __init__(self, error_description: str) -> None:
168
181
  super().__init__(
@@ -173,6 +186,19 @@ class RobotRetrieveInspectionException(RobotException):
173
186
  pass
174
187
 
175
188
 
189
+ # An exception which should be thrown by the robot package if it is still starting the
190
+ # mission when another action is requested. An example of this can be trying to stop
191
+ # the robot while it is still starting the mission.
192
+ class RobotStillStartingMissionException(RobotException):
193
+ def __init__(self, error_description: str) -> None:
194
+ super().__init__(
195
+ error_reason=ErrorReason.RobotStillStartingMissionException,
196
+ error_description=error_description,
197
+ )
198
+
199
+ pass
200
+
201
+
176
202
  # An exception which should be thrown by the robot package if it is unable to retrieve
177
203
  # telemetry data. It should be used exclusively by the telemetry publishers and their
178
204
  # functions.
@@ -186,6 +212,29 @@ class RobotTelemetryException(RobotException):
186
212
  pass
187
213
 
188
214
 
215
+ # An exception which should be thrown by the robot package if it is unable to retrieve
216
+ # telemetry pose data. It should be used exclusively by the telemetry pose publisher.
217
+ class RobotTelemetryPoseException(RobotException):
218
+ def __init__(self, error_description: str) -> None:
219
+ super().__init__(
220
+ error_reason=ErrorReason.RobotTelemetryPoseException,
221
+ error_description=error_description,
222
+ )
223
+
224
+ pass
225
+
226
+
227
+ # An exception which should be thrown by the robot package if there is no new telemetry update.
228
+ class RobotTelemetryNoUpdateException(RobotException):
229
+ def __init__(self, error_description: str) -> None:
230
+ super().__init__(
231
+ error_reason=ErrorReason.RobotTelemetryNoUpdateException,
232
+ error_description=error_description,
233
+ )
234
+
235
+ pass
236
+
237
+
189
238
  # An exception which should be thrown by the robot package if it is unable to load the
190
239
  # configuration for maps and transformations. This could be caused by faulty
191
240
  # configuration and this exception will cause ISAR to crash as further execution is not
@@ -235,11 +284,12 @@ class RobotDisconnectedException(RobotException):
235
284
  pass
236
285
 
237
286
 
238
- # An exception which should be thrown by the robot package if the robot is given a mission type it cannot run, such as a localisation mission
239
- class RobotMissionNotSupportedException(RobotException):
287
+ # An exception which should be thrown by the robot package if the robot receives a command
288
+ # to go home and decide to ignore this request as it is already at home.
289
+ class RobotAlreadyHomeException(RobotException):
240
290
  def __init__(self, error_description: str) -> None:
241
291
  super().__init__(
242
- error_reason=ErrorReason.RobotMissionNotSupportedException,
292
+ error_reason=ErrorReason.RobotAlreadyHomeException,
243
293
  error_description=error_description,
244
294
  )
245
295
 
@@ -1 +0,0 @@
1
- from .initialize_params import InitializeParams
@@ -1,13 +0,0 @@
1
- from .inspection import (
2
- Audio,
3
- Image,
4
- ImageMetadata,
5
- Inspection,
6
- InspectionMetadata,
7
- ThermalImage,
8
- ThermalImageMetadata,
9
- ThermalVideo,
10
- ThermalVideoMetadata,
11
- Video,
12
- VideoMetadata,
13
- )