isar 1.33.5__py3-none-any.whl → 1.33.7__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.

Potentially problematic release.


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

Files changed (40) hide show
  1. isar/apis/api.py +34 -0
  2. isar/apis/models/models.py +5 -0
  3. isar/apis/schedule/scheduling_controller.py +34 -0
  4. isar/config/settings.py +4 -0
  5. isar/models/events.py +19 -1
  6. isar/robot/robot.py +50 -1
  7. isar/robot/robot_battery.py +60 -0
  8. isar/robot/robot_pause_mission.py +63 -0
  9. isar/robot/robot_status.py +23 -10
  10. isar/robot/robot_stop_mission.py +1 -1
  11. isar/services/utilities/scheduling_utilities.py +50 -4
  12. isar/state_machine/state_machine.py +27 -7
  13. isar/state_machine/states/await_next_mission.py +19 -1
  14. isar/state_machine/states/blocked_protective_stop.py +9 -9
  15. isar/state_machine/states/going_to_lockdown.py +80 -0
  16. isar/state_machine/states/home.py +27 -4
  17. isar/state_machine/states/lockdown.py +37 -0
  18. isar/state_machine/states/monitor.py +16 -0
  19. isar/state_machine/states/offline.py +9 -10
  20. isar/state_machine/states/paused.py +19 -1
  21. isar/state_machine/states/pausing.py +74 -0
  22. isar/state_machine/states/pausing_return_home.py +74 -0
  23. isar/state_machine/states/recharging.py +16 -0
  24. isar/state_machine/states/return_home_paused.py +17 -1
  25. isar/state_machine/states/returning_home.py +18 -2
  26. isar/state_machine/states/stopping_go_to_lockdown.py +79 -0
  27. isar/state_machine/states_enum.py +5 -0
  28. isar/state_machine/transitions/functions/fail_mission.py +7 -0
  29. isar/state_machine/transitions/functions/pause.py +20 -80
  30. isar/state_machine/transitions/functions/robot_status.py +15 -0
  31. isar/state_machine/transitions/mission.py +55 -10
  32. isar/state_machine/transitions/return_home.py +62 -0
  33. isar/state_machine/utils/common_event_handlers.py +5 -2
  34. {isar-1.33.5.dist-info → isar-1.33.7.dist-info}/METADATA +1 -1
  35. {isar-1.33.5.dist-info → isar-1.33.7.dist-info}/RECORD +40 -33
  36. robot_interface/models/mission/status.py +2 -0
  37. {isar-1.33.5.dist-info → isar-1.33.7.dist-info}/WHEEL +0 -0
  38. {isar-1.33.5.dist-info → isar-1.33.7.dist-info}/entry_points.txt +0 -0
  39. {isar-1.33.5.dist-info → isar-1.33.7.dist-info}/licenses/LICENSE +0 -0
  40. {isar-1.33.5.dist-info → isar-1.33.7.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,79 @@
1
+ from typing import TYPE_CHECKING, Callable, List, Optional
2
+
3
+ from isar.apis.models.models import LockdownResponse
4
+ from isar.eventhandlers.eventhandler import EventHandlerBase, EventHandlerMapping
5
+ from isar.models.events import Event
6
+ from robot_interface.models.exceptions.robot_exceptions import ErrorMessage
7
+ from robot_interface.models.mission.status import MissionStatus, TaskStatus
8
+
9
+ if TYPE_CHECKING:
10
+ from isar.state_machine.state_machine import StateMachine
11
+
12
+
13
+ class StoppingGoToLockdown(EventHandlerBase):
14
+
15
+ def __init__(self, state_machine: "StateMachine"):
16
+ events = state_machine.events
17
+
18
+ def _stop_mission_cleanup() -> None:
19
+ if state_machine.current_mission is None:
20
+ state_machine._queue_empty_response()
21
+ state_machine.reset_state_machine()
22
+ return None
23
+
24
+ state_machine.current_mission.status = MissionStatus.Cancelled
25
+
26
+ for task in state_machine.current_mission.tasks:
27
+ if task.status in [
28
+ TaskStatus.NotStarted,
29
+ TaskStatus.InProgress,
30
+ TaskStatus.Paused,
31
+ ]:
32
+ task.status = TaskStatus.Cancelled
33
+
34
+ state_machine.publish_task_status(task=state_machine.current_task)
35
+ return None
36
+
37
+ def _failed_stop_event_handler(
38
+ event: Event[ErrorMessage],
39
+ ) -> Optional[Callable]:
40
+ error_message: Optional[ErrorMessage] = event.consume_event()
41
+ if error_message is not None:
42
+ events.api_requests.send_to_lockdown.response.trigger_event(
43
+ LockdownResponse(
44
+ lockdown_started=False,
45
+ failure_reason="Failed to stop ongoing mission",
46
+ )
47
+ )
48
+ return state_machine.mission_stopping_failed # type: ignore
49
+ return None
50
+
51
+ def _successful_stop_event_handler(event: Event[bool]) -> Optional[Callable]:
52
+ if event.consume_event():
53
+ state_machine.publish_mission_aborted(
54
+ "Robot being sent to lockdown", True
55
+ )
56
+ _stop_mission_cleanup()
57
+ events.api_requests.send_to_lockdown.response.trigger_event(
58
+ LockdownResponse(lockdown_started=True)
59
+ )
60
+ return state_machine.request_lockdown_mission # type: ignore
61
+ return None
62
+
63
+ event_handlers: List[EventHandlerMapping] = [
64
+ EventHandlerMapping(
65
+ name="failed_stop_event",
66
+ event=events.robot_service_events.mission_failed_to_stop,
67
+ handler=_failed_stop_event_handler,
68
+ ),
69
+ EventHandlerMapping(
70
+ name="successful_stop_event",
71
+ event=events.robot_service_events.mission_successfully_stopped,
72
+ handler=_successful_stop_event_handler,
73
+ ),
74
+ ]
75
+ super().__init__(
76
+ state_name="stopping_go_to_lockdown",
77
+ state_machine=state_machine,
78
+ event_handler_mappings=event_handlers,
79
+ )
@@ -7,6 +7,8 @@ class States(str, Enum):
7
7
  Stopping = "stopping"
8
8
  StoppingReturnHome = "stopping_return_home"
9
9
  Paused = "paused"
10
+ Pausing = "pausing"
11
+ PausingReturnHome = "pausing_return_home"
10
12
  ReturnHomePaused = "return_home_paused"
11
13
  AwaitNextMission = "await_next_mission"
12
14
  Home = "home"
@@ -15,6 +17,9 @@ class States(str, Enum):
15
17
  UnknownStatus = "unknown_status"
16
18
  InterventionNeeded = "intervention_needed"
17
19
  Recharging = "recharging"
20
+ StoppingGoToLockdown = "stopping_go_to_lockdown"
21
+ GoingToLockdown = "going_to_lockdown"
22
+ Lockdown = "lockdown"
18
23
 
19
24
  def __repr__(self):
20
25
  return self.value
@@ -18,3 +18,10 @@ def report_failed_return_home_and_intervention_needed(
18
18
  ) -> None:
19
19
  error_message: str = "Return home failed."
20
20
  state_machine.publish_intervention_needed(error_message=error_message)
21
+
22
+
23
+ def report_failed_lockdown_and_intervention_needed(
24
+ state_machine: "StateMachine",
25
+ ) -> None:
26
+ error_message: str = "Lockdown mission failed."
27
+ state_machine.publish_intervention_needed(error_message=error_message)
@@ -1,91 +1,31 @@
1
1
  from typing import TYPE_CHECKING
2
2
 
3
- if TYPE_CHECKING:
4
- from isar.state_machine.state_machine import StateMachine
5
-
6
- import time
7
-
8
3
  from isar.apis.models.models import ControlMissionResponse
9
- from isar.config.settings import settings
10
- from robot_interface.models.exceptions.robot_exceptions import (
11
- RobotActionException,
12
- RobotException,
13
- )
14
- from robot_interface.models.mission.status import MissionStatus, TaskStatus
15
-
16
-
17
- def pause_mission(state_machine: "StateMachine") -> bool:
18
- state_machine.logger.info("Pausing mission: %s", state_machine.current_mission.id)
19
-
20
- max_retries = settings.STATE_TRANSITION_NUM_RETIRES
21
- retry_interval = settings.STATE_TRANSITION_RETRY_INTERVAL_SEC
22
-
23
- for attempt in range(max_retries):
24
- try:
25
- state_machine.robot.pause()
26
- state_machine.current_mission.status = MissionStatus.Paused
27
- state_machine.current_task.status = TaskStatus.Paused
28
-
29
- paused_mission_response: ControlMissionResponse = (
30
- state_machine._make_control_mission_response()
31
- )
32
- state_machine.events.api_requests.pause_mission.response.trigger_event(
33
- paused_mission_response
34
- )
35
-
36
- state_machine.publish_mission_status()
37
- state_machine.publish_task_status(task=state_machine.current_task)
38
-
39
- state_machine.logger.info("Mission paused successfully.")
40
- return True
41
- except RobotActionException as e:
42
- state_machine.logger.warning(
43
- f"Attempt {attempt + 1} to pause mission failed: {e.error_description}"
44
- )
45
- time.sleep(retry_interval)
46
- except RobotException as e:
47
- state_machine.logger.warning(
48
- f"Attempt {attempt + 1} to pause mission raised a RobotException: {e.error_description}"
49
- )
50
- time.sleep(retry_interval)
51
-
52
- state_machine.logger.error("Failed to pause mission after multiple attempts.")
53
- return False
54
4
 
5
+ if TYPE_CHECKING:
6
+ from isar.state_machine.state_machine import StateMachine
55
7
 
56
- def pause_return_home_mission(state_machine: "StateMachine") -> bool:
57
- state_machine.logger.info("Pausing return home misson")
58
8
 
59
- max_retries = settings.STATE_TRANSITION_NUM_RETIRES
60
- retry_interval = settings.STATE_TRANSITION_RETRY_INTERVAL_SEC
9
+ def trigger_pause_mission_event(state_machine: "StateMachine") -> bool:
10
+ state_machine.events.state_machine_events.pause_mission.trigger_event(True)
11
+ return True
61
12
 
62
- for attempt in range(max_retries):
63
- try:
64
- state_machine.robot.pause()
65
- state_machine.current_mission.status = MissionStatus.Paused
66
- state_machine.current_task.status = TaskStatus.Paused
67
13
 
68
- paused_mission_response: ControlMissionResponse = (
69
- state_machine._make_control_mission_response()
70
- )
71
- state_machine.events.api_requests.pause_mission.response.trigger_event(
72
- paused_mission_response
73
- )
14
+ def pause_mission_failed(state_machine: "StateMachine") -> bool:
15
+ paused_mission_response: ControlMissionResponse = (
16
+ state_machine._make_control_mission_response()
17
+ )
18
+ state_machine.events.api_requests.pause_mission.response.trigger_event(
19
+ paused_mission_response
20
+ )
21
+ return True
74
22
 
75
- state_machine.logger.info("Return home mission paused successfully.")
76
- return True
77
- except RobotActionException as e:
78
- state_machine.logger.warning(
79
- f"Attempt {attempt + 1} to pause return home mission failed: {e.error_description}"
80
- )
81
- time.sleep(retry_interval)
82
- except RobotException as e:
83
- state_machine.logger.warning(
84
- f"Attempt {attempt + 1} to pause return home mission raised a RobotException: {e.error_description}"
85
- )
86
- time.sleep(retry_interval)
87
23
 
88
- state_machine.logger.error(
89
- "Failed to pause return home mission after multiple attempts."
24
+ def stop_return_home_mission_failed(state_machine: "StateMachine") -> bool:
25
+ paused_mission_response: ControlMissionResponse = (
26
+ state_machine._make_control_mission_response()
27
+ )
28
+ state_machine.events.api_requests.pause_mission.response.trigger_event(
29
+ paused_mission_response
90
30
  )
91
- return False
31
+ return True
@@ -1,5 +1,7 @@
1
+ import time
1
2
  from typing import TYPE_CHECKING
2
3
 
4
+ from isar.config.settings import settings
3
5
  from robot_interface.models.mission.status import RobotStatus
4
6
 
5
7
  if TYPE_CHECKING:
@@ -19,3 +21,16 @@ def is_available_or_home(state_machine: "StateMachine") -> bool:
19
21
  def is_blocked_protective_stop(state_machine: "StateMachine") -> bool:
20
22
  robot_status = state_machine.shared_state.robot_status.check()
21
23
  return robot_status == RobotStatus.BlockedProtectiveStop
24
+
25
+
26
+ def clear_robot_status(state_machine: "StateMachine") -> bool:
27
+ state_machine.events.state_machine_events.clear_robot_status.trigger_event(True)
28
+ start_time: float = time.time()
29
+ while time.time() - start_time < settings.CLEAR_ROBOT_STATUS_TIMEOUT:
30
+ if (
31
+ state_machine.events.robot_service_events.robot_status_cleared.consume_event()
32
+ ):
33
+ return True
34
+ time.sleep(settings.FSM_SLEEP_TIME)
35
+ state_machine.logger.error("Timed out waiting for robot status to be cleared")
36
+ return False
@@ -5,8 +5,8 @@ from isar.state_machine.transitions.functions.fail_mission import (
5
5
  )
6
6
  from isar.state_machine.transitions.functions.finish_mission import finish_mission
7
7
  from isar.state_machine.transitions.functions.pause import (
8
- pause_mission,
9
- pause_return_home_mission,
8
+ pause_mission_failed,
9
+ trigger_pause_mission_event,
10
10
  )
11
11
  from isar.state_machine.transitions.functions.resume import resume_mission
12
12
  from isar.state_machine.transitions.functions.return_home import (
@@ -36,24 +36,39 @@ def get_mission_transitions(state_machine: "StateMachine") -> List[dict]:
36
36
  {
37
37
  "trigger": "pause",
38
38
  "source": state_machine.monitor_state,
39
+ "dest": state_machine.pausing_state,
40
+ "conditions": def_transition(state_machine, trigger_pause_mission_event),
41
+ },
42
+ {
43
+ "trigger": "mission_paused",
44
+ "source": state_machine.pausing_state,
39
45
  "dest": state_machine.paused_state,
40
- "conditions": def_transition(state_machine, pause_mission),
41
46
  },
42
47
  {
43
- "trigger": "pause",
44
- "source": state_machine.monitor_state,
48
+ "trigger": "mission_pausing_failed",
49
+ "source": state_machine.pausing_state,
45
50
  "dest": state_machine.monitor_state,
51
+ "before": def_transition(state_machine, pause_mission_failed),
46
52
  },
47
53
  {
48
- "trigger": "pause",
54
+ "trigger": "pause_return_home",
49
55
  "source": state_machine.returning_home_state,
50
- "dest": state_machine.return_home_paused_state,
51
- "conditions": def_transition(state_machine, pause_return_home_mission),
56
+ "dest": state_machine.pausing_return_home_state,
57
+ "before": [
58
+ def_transition(state_machine, trigger_pause_mission_event),
59
+ def_transition(state_machine, reset_return_home_failure_counter),
60
+ ],
52
61
  },
53
62
  {
54
- "trigger": "pause",
55
- "source": state_machine.returning_home_state,
63
+ "trigger": "return_home_mission_pausing_failed",
64
+ "source": state_machine.pausing_return_home_state,
56
65
  "dest": state_machine.returning_home_state,
66
+ "before": def_transition(state_machine, stop_return_home_mission_failed),
67
+ },
68
+ {
69
+ "trigger": "return_home_mission_paused",
70
+ "source": state_machine.pausing_return_home_state,
71
+ "dest": state_machine.return_home_paused_state,
57
72
  },
58
73
  {
59
74
  "trigger": "resume",
@@ -77,6 +92,12 @@ def get_mission_transitions(state_machine: "StateMachine") -> List[dict]:
77
92
  "source": state_machine.return_home_paused_state,
78
93
  "dest": state_machine.return_home_paused_state,
79
94
  },
95
+ {
96
+ "trigger": "resume_lockdown",
97
+ "source": state_machine.return_home_paused_state,
98
+ "dest": state_machine.going_to_lockdown_state,
99
+ "conditions": def_transition(state_machine, resume_mission),
100
+ },
80
101
  {
81
102
  "trigger": "stop",
82
103
  "source": [
@@ -87,6 +108,14 @@ def get_mission_transitions(state_machine: "StateMachine") -> List[dict]:
87
108
  "dest": state_machine.stopping_state,
88
109
  "before": def_transition(state_machine, trigger_stop_mission_event),
89
110
  },
111
+ {
112
+ "trigger": "stop_go_to_lockdown",
113
+ "source": [
114
+ state_machine.monitor_state,
115
+ ],
116
+ "dest": state_machine.stopping_go_to_lockdown_state,
117
+ "before": def_transition(state_machine, trigger_stop_mission_event),
118
+ },
90
119
  {
91
120
  "trigger": "stop_return_home",
92
121
  "source": [
@@ -105,12 +134,22 @@ def get_mission_transitions(state_machine: "StateMachine") -> List[dict]:
105
134
  "source": state_machine.stopping_state,
106
135
  "dest": state_machine.await_next_mission_state,
107
136
  },
137
+ {
138
+ "trigger": "mission_stopped",
139
+ "source": state_machine.stopping_go_to_lockdown_state,
140
+ "dest": state_machine.going_to_lockdown_state,
141
+ },
108
142
  {
109
143
  "trigger": "mission_stopping_failed",
110
144
  "source": state_machine.stopping_state,
111
145
  "dest": state_machine.monitor_state,
112
146
  "before": def_transition(state_machine, stop_mission_failed),
113
147
  },
148
+ {
149
+ "trigger": "mission_stopping_failed",
150
+ "source": state_machine.stopping_go_to_lockdown_state,
151
+ "dest": state_machine.monitor_state,
152
+ },
114
153
  {
115
154
  "trigger": "return_home_mission_stopping_failed",
116
155
  "source": state_machine.stopping_return_home_state,
@@ -159,5 +198,11 @@ def get_mission_transitions(state_machine: "StateMachine") -> List[dict]:
159
198
  "dest": state_machine.await_next_mission_state,
160
199
  "before": def_transition(state_machine, finish_mission),
161
200
  },
201
+ {
202
+ "trigger": "lock_down_successful",
203
+ "source": state_machine.going_to_lockdown_state,
204
+ "dest": state_machine.lockdown_state,
205
+ "before": def_transition(state_machine, finish_mission),
206
+ },
162
207
  ]
163
208
  return mission_transitions
@@ -1,6 +1,7 @@
1
1
  from typing import TYPE_CHECKING, List
2
2
 
3
3
  from isar.state_machine.transitions.functions.fail_mission import (
4
+ report_failed_lockdown_and_intervention_needed,
4
5
  report_failed_mission_and_finalize,
5
6
  report_failed_return_home_and_intervention_needed,
6
7
  )
@@ -11,6 +12,7 @@ from isar.state_machine.transitions.functions.return_home import (
11
12
  should_retry_return_home,
12
13
  start_return_home_mission,
13
14
  )
15
+ from isar.state_machine.transitions.functions.robot_status import clear_robot_status
14
16
  from isar.state_machine.transitions.functions.start_mission import (
15
17
  initialize_robot,
16
18
  trigger_start_mission_event,
@@ -57,11 +59,19 @@ def get_return_home_transitions(state_machine: "StateMachine") -> List[dict]:
57
59
  "trigger": "returned_home",
58
60
  "source": state_machine.returning_home_state,
59
61
  "dest": state_machine.home_state,
62
+ "conditions": [
63
+ def_transition(state_machine, clear_robot_status),
64
+ ],
60
65
  "before": [
61
66
  def_transition(state_machine, reset_return_home_failure_counter),
62
67
  def_transition(state_machine, return_home_finished),
63
68
  ],
64
69
  },
70
+ {
71
+ "trigger": "returned_home",
72
+ "source": state_machine.returning_home_state,
73
+ "dest": state_machine.intervention_needed_state,
74
+ },
65
75
  {
66
76
  "trigger": "starting_recharging",
67
77
  "source": state_machine.returning_home_state,
@@ -71,6 +81,11 @@ def get_return_home_transitions(state_machine: "StateMachine") -> List[dict]:
71
81
  def_transition(state_machine, return_home_finished),
72
82
  ],
73
83
  },
84
+ {
85
+ "trigger": "starting_recharging",
86
+ "source": state_machine.lockdown_state,
87
+ "dest": state_machine.recharging_state,
88
+ },
74
89
  {
75
90
  "trigger": "return_home_failed",
76
91
  "source": state_machine.returning_home_state,
@@ -103,5 +118,52 @@ def get_return_home_transitions(state_machine: "StateMachine") -> List[dict]:
103
118
  "source": state_machine.intervention_needed_state,
104
119
  "dest": state_machine.unknown_status_state,
105
120
  },
121
+ {
122
+ "trigger": "request_lockdown_mission",
123
+ "source": [
124
+ state_machine.stopping_go_to_lockdown_state,
125
+ state_machine.await_next_mission_state,
126
+ ],
127
+ "dest": state_machine.going_to_lockdown_state,
128
+ "conditions": [
129
+ def_transition(state_machine, start_return_home_mission),
130
+ def_transition(state_machine, set_return_home_status),
131
+ def_transition(state_machine, initialize_robot),
132
+ ],
133
+ "before": def_transition(state_machine, trigger_start_mission_event),
134
+ },
135
+ {
136
+ "trigger": "go_to_lockdown",
137
+ "source": [
138
+ state_machine.returning_home_state,
139
+ state_machine.return_home_paused_state,
140
+ ],
141
+ "dest": state_machine.going_to_lockdown_state,
142
+ },
143
+ {
144
+ "trigger": "reached_lockdown",
145
+ "source": [
146
+ state_machine.home_state,
147
+ state_machine.going_to_lockdown_state,
148
+ state_machine.recharging_state,
149
+ ],
150
+ "dest": state_machine.lockdown_state,
151
+ },
152
+ {
153
+ "trigger": "lockdown_mission_failed",
154
+ "source": state_machine.going_to_lockdown_state,
155
+ "dest": state_machine.intervention_needed_state,
156
+ "before": [
157
+ def_transition(
158
+ state_machine, report_failed_lockdown_and_intervention_needed
159
+ ),
160
+ def_transition(state_machine, report_failed_mission_and_finalize),
161
+ ],
162
+ },
163
+ {
164
+ "trigger": "release_from_lockdown",
165
+ "source": state_machine.lockdown_state,
166
+ "dest": state_machine.home_state,
167
+ },
106
168
  ]
107
169
  return return_home_transitions
@@ -43,9 +43,12 @@ def return_home_event_handler(
43
43
  def robot_status_event_handler(
44
44
  state_machine: "StateMachine",
45
45
  expected_status: RobotStatus,
46
- event: Event[RobotStatus],
46
+ status_changed_event: Event[bool],
47
+ status_event: Event[RobotStatus],
47
48
  ) -> Optional[Callable]:
48
- robot_status: RobotStatus = event.check()
49
+ if not status_changed_event.consume_event():
50
+ return None
51
+ robot_status: Optional[RobotStatus] = status_event.check()
49
52
  if robot_status != expected_status:
50
53
  return state_machine.robot_status_changed # type: ignore
51
54
  return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: isar
3
- Version: 1.33.5
3
+ Version: 1.33.7
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
@@ -2,13 +2,13 @@ isar/__init__.py,sha256=cH8p8bVveu3FUL6kBhldcSlLaoHgD82Kd0-SwSNfGXw,87
2
2
  isar/modules.py,sha256=1QdULg-9gV5Ds4pMV4IQTlImSgsVwqs-g15ifllF2kg,4757
3
3
  isar/script.py,sha256=LCb7CHvNyZhQz1OaQ-BUX8w7RDmu975zA0kL6FPwfzk,5912
4
4
  isar/apis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- isar/apis/api.py,sha256=VM_WBlHJ4Juv9A0FvaUTeaMVYCN6a7pAojxIGCmDtf0,14154
5
+ isar/apis/api.py,sha256=iqCaDDXpSfqfZp0nWg2-A_ujAOh-U0eXwXRRCu49Gk4,15694
6
6
  isar/apis/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- isar/apis/models/models.py,sha256=iRyqflpjGopm4KJjgRrOnC2swNEk3a-iwVynzw3Nm6c,1992
7
+ isar/apis/models/models.py,sha256=4w8oJIvhnarikCZe6d32GG80RtsyaSWLpOpUiEAMr0Q,2097
8
8
  isar/apis/models/start_mission_definition.py,sha256=v-wt1XDd53Sw7DCdFAkxBBut-xd_uGJa7qMJnE3VI9k,6364
9
9
  isar/apis/robot_control/robot_controller.py,sha256=RSVlxbw9D668tHWItVLtyjvAnsJkCs2yUSkU3iqeAcY,1393
10
10
  isar/apis/schedule/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- isar/apis/schedule/scheduling_controller.py,sha256=w7YJfN5vSRfnd_56ilPi0WRnScsGzo1m8pTQyj2w7bA,9980
11
+ isar/apis/schedule/scheduling_controller.py,sha256=pBSikDCajv1UbiCb5p8jHd1QSJ6UwbesmqZKAMTouXs,11277
12
12
  isar/apis/security/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  isar/apis/security/authentication.py,sha256=Se2puhe2TUBmfio2RLma52-VSLRhqvWgu0Cd1bhdwMo,2000
14
14
  isar/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -16,7 +16,7 @@ isar/config/configuration_error.py,sha256=rO6WOhafX6xvVib8WxV-eY483Z0PpN-9PxGsq5
16
16
  isar/config/log.py,sha256=f_mLLz5RSa0kZkdpi1m0iMdwwDc4RQp12mnT6gu2exE,1303
17
17
  isar/config/logging.conf,sha256=a7ZBvZkrMDaPU3eRGAjL_eZz6hZsa6BaRJOfx8mbnnM,629
18
18
  isar/config/open_telemetry.py,sha256=Lgu0lbRQA-zz6ZDoBKKk0whQex5w18jl1wjqWzHUGdg,3634
19
- isar/config/settings.py,sha256=5A_hxq6AFzg94ROz8yIK8KKZcygwJAosM4ROKJOeCfU,14243
19
+ isar/config/settings.py,sha256=XMPU4d1V6FspjvMmto5TFmC8Slt8Nrpmn9n_tsyPTYk,14423
20
20
  isar/config/certs/ca-cert.pem,sha256=qoNljfad_qcMxhXJIUMLd7nT-Qwf_d4dYSdoOFEOE8I,2179
21
21
  isar/config/keyvault/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  isar/config/keyvault/keyvault_error.py,sha256=zvPCsZLjboxsxthYkxpRERCTFxYV8R5WmACewAUQLwk,41
@@ -42,11 +42,13 @@ isar/mission_planner/mission_planner_interface.py,sha256=UgpPIM4FbrWOD7fGY3Ul64k
42
42
  isar/mission_planner/sequential_task_selector.py,sha256=66agRPHuJnEa1vArPyty4muTasAZ50XPjjrSaTdY_Cc,643
43
43
  isar/mission_planner/task_selector_interface.py,sha256=pnLeaGPIuyXThcflZ_A7YL2b2xQjFT88hAZidkMomxU,707
44
44
  isar/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
- isar/models/events.py,sha256=M-0p4krtLpCfBMbClQvBFvfFB4NWBm55AlO1ngzVM_g,5024
46
- isar/robot/robot.py,sha256=keqsYmfRlyIC4CWkMG0erDt_4uIC0IPvyG2ni4MemyI,5350
45
+ isar/models/events.py,sha256=D3f5v0mmGlkIYT1ZSfSZILuMyVi4zDA-VxohuzRM6AA,5675
46
+ isar/robot/robot.py,sha256=sn-JfJE6lC6Auo13fdS556Uwq_xZE6VSrR4DhNcgOno,7560
47
+ isar/robot/robot_battery.py,sha256=goLdgmn61QCgE2Ja3YuiwE_sqJzIhCkS3u90sz1kdug,2089
48
+ isar/robot/robot_pause_mission.py,sha256=BFTLVFOnCeuLlyz1Lu12_6EgYBhk8frsviCs-kGq7AA,2277
47
49
  isar/robot/robot_start_mission.py,sha256=RPYH9VtXDFdPqhOpt6kSbT17RHkJQPKkQ6d4784_pFE,3210
48
- isar/robot/robot_status.py,sha256=OXx18Qj0bvb2sKzn5-yKXWGdZ9GYyCOIgiTaGof-0Wc,2055
49
- isar/robot/robot_stop_mission.py,sha256=4GZyhLU0hB6ZK0ArCVhFS9Sf3ZbqFI9DvPNfvD889Ps,2270
50
+ isar/robot/robot_status.py,sha256=8201XW9SmYFLVjys9zk972a8ge9aEgCsdm-V1S2VTjM,2924
51
+ isar/robot/robot_stop_mission.py,sha256=lKWY9LsBeeMsBZHJEN-Mfm2h3DYoBQT71TgEKlxw9ng,2269
50
52
  isar/robot/robot_task_status.py,sha256=jefIDfrbly7vWZztWA2zLmK5Yz1NSEytw2YUmprccNA,3161
51
53
  isar/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
54
  isar/services/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -59,45 +61,50 @@ isar/services/service_connections/mqtt/robot_heartbeat_publisher.py,sha256=SKPvY
59
61
  isar/services/service_connections/mqtt/robot_info_publisher.py,sha256=AxokGk51hRPTxxD2r0P9braPJCMrf1InaCxrUBKkF4g,1402
60
62
  isar/services/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
63
  isar/services/utilities/robot_utilities.py,sha256=4zCigsLXfqDC8POHchktSq81zr1_pTaRve_LQsVr6Mk,514
62
- isar/services/utilities/scheduling_utilities.py,sha256=6t42uyHXRr8QtRU6qH_EzYKlvwXEAUCwe7U5IDUp4nc,13502
64
+ isar/services/utilities/scheduling_utilities.py,sha256=yIhvYeWjU4e6n0R84yfSve-CqUCENg1vqoSPuHTfcOE,15584
63
65
  isar/services/utilities/threaded_request.py,sha256=py4G-_RjnIdHljmKFAcQ6ddqMmp-ZYV39Ece-dqRqjs,1874
64
66
  isar/state_machine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
- isar/state_machine/state_machine.py,sha256=W2RMBhSRtu5kH0LAuRHbPhxHxtFa0knWfBv7EMRuQcI,18610
66
- isar/state_machine/states_enum.py,sha256=hBbP87Aw9JiIBScfAkflWgQHYBrLA17ex0XXO4suRYY,555
67
+ isar/state_machine/state_machine.py,sha256=CUDTwPEOVpyV8up5bhVLKLkPDcc1mMx_NchmqCe27z0,19730
68
+ isar/state_machine/states_enum.py,sha256=EzqLHsNbR7KBMIY5Fa_CDaHm9v6g8UFzq9DJs4x0OU8,746
67
69
  isar/state_machine/states/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
- isar/state_machine/states/await_next_mission.py,sha256=yg0aH4eukcnE1xRKiPVafRxqHt3WdvqD08EATzdEojk,1961
69
- isar/state_machine/states/blocked_protective_stop.py,sha256=GEOvxnHXjpCsrh3aa8Idtn1zMYv5HLQzj9qQAq8HvaU,1180
70
- isar/state_machine/states/home.py,sha256=718NFxbYQTM5VLKbL8e5ELlbXWYis1GfaZfl34EhfQo,2292
70
+ isar/state_machine/states/await_next_mission.py,sha256=3_KrK7nWu1Dm-VA3Rt1gwVsUbn9WuB7MoqLCfobGJSM,2749
71
+ isar/state_machine/states/blocked_protective_stop.py,sha256=HJr_jH8OdHMuX8zhjlF5jtNAfMCxkA1X7nOGmkAz-RY,1263
72
+ isar/state_machine/states/going_to_lockdown.py,sha256=RLMOH2lXiT3hQhfUtbBVAUfwKUd33yxbjq4uZDZ_Tkc,3388
73
+ isar/state_machine/states/home.py,sha256=mCwXSb9LygNpY4qaKEkEYC3nP-6HdsSGmEyjsENumgM,3396
71
74
  isar/state_machine/states/intervention_needed.py,sha256=A0QYz1vD1tDKAealihXDuoGuMLtXrRfn_AwFoaUhT_Q,1640
72
- isar/state_machine/states/monitor.py,sha256=GiNGyPcskrv3QDxMfsOmHUe_MRCaNA-pYuk9p6kcKp0,4623
73
- isar/state_machine/states/offline.py,sha256=5wdNzC1wG0cWrpuT_r_mk8UNFHA4QSyg8ejXUTAg4Io,1137
74
- isar/state_machine/states/paused.py,sha256=OruA2oPGWsVjnQ8xxVJJsGO3xKzXz2xF5uWsrvH27Ng,2101
75
- isar/state_machine/states/recharging.py,sha256=ni5WqFU0VDhdGC3ZfHcabSICm_5kwaS72wc3ecAB_os,1651
76
- isar/state_machine/states/return_home_paused.py,sha256=nVfNqutEG251NCk18UqIerh0SdAgGsXMXBt5iT2oRK0,2711
77
- isar/state_machine/states/returning_home.py,sha256=75pfHNCjpV4jfhcmNAoabTwBzed1_-aFJE_KkTUTAnA,4513
75
+ isar/state_machine/states/lockdown.py,sha256=mWjhjtky5GbW6BLjsi2TsS0LXI-yq7l29FaqZ2TbTek,1375
76
+ isar/state_machine/states/monitor.py,sha256=wmiJrbKntnNw9ExS6-VdJJuW2Q3Jzl9DozmZmEXJ0Cw,5285
77
+ isar/state_machine/states/offline.py,sha256=k1UdcRWLd6lJiL5cnpHKBkvMY4xZMt_x7XIauy-Rgww,1219
78
+ isar/state_machine/states/paused.py,sha256=1ADoTJ3b137k7dmZYxeyGVhyrRF8qotxoV1NaWCbBUk,2870
79
+ isar/state_machine/states/pausing.py,sha256=r0GywI1-JDOJLZEnxhnq_yFKza37eL45qHP0ir8SBsY,2762
80
+ isar/state_machine/states/pausing_return_home.py,sha256=USyBLWpJqrsJ2hsdyW6i-gvEsog2l7OMJLdgIj-hq0Y,2808
81
+ isar/state_machine/states/recharging.py,sha256=6zRppneGXetMaZVvhqCPcSoQyz08tftNhWHYxLCRGc8,2367
82
+ isar/state_machine/states/return_home_paused.py,sha256=eBBFFbkLVfY_5yP2kPZnHHwxcwOcHKAxjkQTMat55HU,3398
83
+ isar/state_machine/states/returning_home.py,sha256=47M760nPt1dh1P0C0PmfVLrjsZaWz_pGizuBbWZ0OeI,5211
78
84
  isar/state_machine/states/stopping.py,sha256=h0x94hVoIUJyml3WMrbJlbxG2dzMCeOL1rJoNCQfzGQ,3057
85
+ isar/state_machine/states/stopping_go_to_lockdown.py,sha256=npbz0aFbbCpsEbmBYc8wE9DZXztkLkRB-OD7tslbE0c,3166
79
86
  isar/state_machine/states/stopping_return_home.py,sha256=ub952Ulas3a0lsV_dI4liBiInADo3zaPAGod2bPe_18,2985
80
87
  isar/state_machine/states/unknown_status.py,sha256=Y-g9cgme5zriyZ6YUzFRYhOvv9ZylCSwfaY8MJ7xEJ0,1791
81
- isar/state_machine/transitions/mission.py,sha256=W56bs4jSFwH2K4yAwxzLWh7dDuLi8j-L4mVvmfeKjWw,6313
82
- isar/state_machine/transitions/return_home.py,sha256=9fXFVozsCZqtKjQwiPLLc3ExrgLj5zU9AD7a9IMe0Pw,4348
88
+ isar/state_machine/transitions/mission.py,sha256=lwXdC5Jn19gO-wrSaZp3_77mLnvj-CaBYZk61U-qgoo,8211
89
+ isar/state_machine/transitions/return_home.py,sha256=ho4Nae-C5BaxVFciFL546EuoMSDIWLqT58E8bNraW4o,6749
83
90
  isar/state_machine/transitions/robot_status.py,sha256=qJMurCpuficOiXs9us4lZJ5p_kOFSwKxJigiXfB1OS8,2430
84
- isar/state_machine/transitions/functions/fail_mission.py,sha256=jHHXhfQVYQEzCXgTEhv5e6uEK9p6iDPFFXqS9bzs_-A,720
91
+ isar/state_machine/transitions/functions/fail_mission.py,sha256=fBwLW22d8MyrH4047hb3eXn87yLq4v5SkLSIhV9Ge5k,947
85
92
  isar/state_machine/transitions/functions/finish_mission.py,sha256=TRQrk7HdllmAkwsp25HRZAFAk46Y1hLx3jmkIAKrHDI,1442
86
- isar/state_machine/transitions/functions/pause.py,sha256=R4Bbb-XcmcCwGiY3-lsYiK-WAz2KfVj4kM_pzE8OFyg,3472
93
+ isar/state_machine/transitions/functions/pause.py,sha256=QCIKTpB_CAkUVaSy02i2cpLJAWx3-qGN5RPbK9L2qPY,983
87
94
  isar/state_machine/transitions/functions/resume.py,sha256=SAu4hWomPlrvO0lnpc6uM3rj79Bwq01acnaTEvNbO9U,2116
88
95
  isar/state_machine/transitions/functions/return_home.py,sha256=5WPO40MtuRKm9-NtyrS6m0IVEit14MXfMKjgZ2sCXRU,1666
89
- isar/state_machine/transitions/functions/robot_status.py,sha256=2P3EfP2c06GY-LUquyBTyHn1Ard31Hl3UeT-e-VaIWE,768
96
+ isar/state_machine/transitions/functions/robot_status.py,sha256=bA8G5WtY7TA88MKpdOcR6qftFjW8OttntmptZDXpTKg,1365
90
97
  isar/state_machine/transitions/functions/start_mission.py,sha256=tIpZzYXCoeC6ZWj18UB4DiZuICpxfzFUK23wfunad7Q,2864
91
98
  isar/state_machine/transitions/functions/stop.py,sha256=4idsNh7v6CRJivD36oKnVmdKlP7mSugTLCh9n12R1-U,2114
92
99
  isar/state_machine/transitions/functions/utils.py,sha256=Wa72Ocq4QT1E6qkpEJZQ3h5o33pGvx7Tlkt2JZ2Grbk,314
93
- isar/state_machine/utils/common_event_handlers.py,sha256=yFZzTmTLVWzHU4RNW3q9gc6NU9eajNn50L-vt6geH38,6318
100
+ isar/state_machine/utils/common_event_handlers.py,sha256=LqXPB4qojzz0LqKF14g4pUd0HYBqZiCV83I4UMgy9DY,6450
94
101
  isar/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
102
  isar/storage/blob_storage.py,sha256=d44z3XpZDUbiKwN8Av2gytTJxnefMXrp5VhiGm4PWxU,3703
96
103
  isar/storage/local_storage.py,sha256=Rn-iiiz9DI7PzIhevOMshPIaqzJaqBXeVJMQRhVSl2M,2191
97
104
  isar/storage/storage_interface.py,sha256=x-imVeQTdL6dCaTaPTHpXwCR6N4e27WxK_Vpumg0x-Y,1230
98
105
  isar/storage/uploader.py,sha256=oaGhHqYrtyvJoFUuD7ZyBgdPNkYaSgQokQZkAjmd4vI,10702
99
106
  isar/storage/utilities.py,sha256=oLH0Rp7UtrQQdilfITnmXO1Z0ExdeDhBImYHid55vBA,3449
100
- isar-1.33.5.dist-info/licenses/LICENSE,sha256=3fc2-ebLwHWwzfQbulGNRdcNob3SBQeCfEVUDYxsuqw,14058
107
+ isar-1.33.7.dist-info/licenses/LICENSE,sha256=3fc2-ebLwHWwzfQbulGNRdcNob3SBQeCfEVUDYxsuqw,14058
101
108
  robot_interface/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
109
  robot_interface/robot_interface.py,sha256=A6t19lcNU_6AfkYKY5DaF0sheym_SZEAawbfaj36Kjk,8997
103
110
  robot_interface/test_robot_interface.py,sha256=FV1urn7SbsMyWBIcTKjsBwAG4IsXeZ6pLHE0mA9EGGs,692
@@ -109,7 +116,7 @@ robot_interface/models/inspection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
109
116
  robot_interface/models/inspection/inspection.py,sha256=cjAvekL8r82s7bgukWeXpYylHvJG_oRSCJNISPVCvZg,2238
110
117
  robot_interface/models/mission/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
111
118
  robot_interface/models/mission/mission.py,sha256=MQ9p5cuclLXexaZu9bkDh5-aN99eunvYC0vP-Z_kUwI,960
112
- robot_interface/models/mission/status.py,sha256=e5Yr-GSV_CNSOV9MH2TQP4H_WbSG-z8Ty0JKkYFbZKA,856
119
+ robot_interface/models/mission/status.py,sha256=sCYeqIFgCSCBy8UocUWup3U6g45G0af5mdeST-G7Zfc,922
113
120
  robot_interface/models/mission/task.py,sha256=YzaqJ_KIIm-3S2Y2-BG4Pdkc8sjFMzMx5jj8FtXSmFg,4744
114
121
  robot_interface/models/robots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
122
  robot_interface/models/robots/battery_state.py,sha256=ktOtJ8ltdK0k_i7BoqYfhc5dbOzIG6Oo-uWC67fCWio,98
@@ -121,8 +128,8 @@ robot_interface/telemetry/payloads.py,sha256=RfLlm_te-bV_xcLtbBx27bgE8gkwPAhWBTF
121
128
  robot_interface/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
129
  robot_interface/utilities/json_service.py,sha256=9N1zijW7K4d3WFR2autpaS8U9o1ibymiOX-6stTKCyk,1243
123
130
  robot_interface/utilities/uuid_string_factory.py,sha256=_NQIbBQ56w0qqO0MUDP6aPpHbxW7ATRhK8HnQiBSLkc,76
124
- isar-1.33.5.dist-info/METADATA,sha256=NsNwJPhbo_FDVWvBhXwlElPGRsgIXk7-kVlchgZNnXw,31190
125
- isar-1.33.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
126
- isar-1.33.5.dist-info/entry_points.txt,sha256=TFam7uNNw7J0iiDYzsH2gfG0u1eV1wh3JTw_HkhgKLk,49
127
- isar-1.33.5.dist-info/top_level.txt,sha256=UwIML2RtuQKCyJJkatcSnyp6-ldDjboB9k9JgKipO-U,21
128
- isar-1.33.5.dist-info/RECORD,,
131
+ isar-1.33.7.dist-info/METADATA,sha256=azNe_j08RzYztSEwtbNt_zov9uaQauwP34HW3NuZwF4,31190
132
+ isar-1.33.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
133
+ isar-1.33.7.dist-info/entry_points.txt,sha256=TFam7uNNw7J0iiDYzsH2gfG0u1eV1wh3JTw_HkhgKLk,49
134
+ isar-1.33.7.dist-info/top_level.txt,sha256=UwIML2RtuQKCyJJkatcSnyp6-ldDjboB9k9JgKipO-U,21
135
+ isar-1.33.7.dist-info/RECORD,,
@@ -32,3 +32,5 @@ class RobotStatus(Enum):
32
32
  ReturningHome = "returninghome"
33
33
  InterventionNeeded = "interventionneeded"
34
34
  Recharging = "recharging"
35
+ Lockdown = "lockdown"
36
+ GoingToLockdown = "goingtolockdown"
File without changes