isar 1.30.5__py3-none-any.whl → 1.31.1__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.
- isar/apis/api.py +7 -51
- isar/apis/models/models.py +1 -0
- isar/apis/models/start_mission_definition.py +4 -0
- isar/apis/robot_control/robot_controller.py +0 -2
- isar/apis/schedule/scheduling_controller.py +12 -4
- isar/config/log.py +8 -29
- isar/config/open_telemetry.py +62 -0
- isar/config/settings.py +12 -0
- isar/eventhandlers/eventhandler.py +93 -0
- isar/mission_planner/local_planner.py +0 -3
- isar/models/events.py +118 -0
- isar/modules.py +1 -1
- isar/robot/robot.py +16 -21
- isar/robot/robot_start_mission.py +8 -14
- isar/robot/robot_status.py +2 -3
- isar/robot/robot_stop_mission.py +3 -9
- isar/robot/robot_task_status.py +3 -7
- isar/script.py +4 -1
- isar/services/utilities/robot_utilities.py +0 -3
- isar/services/utilities/scheduling_utilities.py +45 -35
- isar/state_machine/state_machine.py +79 -11
- isar/state_machine/states/await_next_mission.py +46 -11
- isar/state_machine/states/blocked_protective_stop.py +24 -15
- isar/state_machine/states/home.py +40 -9
- isar/state_machine/states/monitor.py +83 -14
- isar/state_machine/states/offline.py +25 -13
- isar/state_machine/states/paused.py +24 -38
- isar/state_machine/states/returning_home.py +75 -14
- isar/state_machine/states/robot_standing_still.py +41 -11
- isar/state_machine/states/stopping.py +52 -67
- isar/state_machine/states/unknown_status.py +37 -64
- isar/state_machine/transitions/functions/pause.py +39 -10
- isar/state_machine/transitions/functions/resume.py +44 -15
- isar/state_machine/transitions/functions/robot_status.py +4 -5
- isar/state_machine/transitions/functions/stop.py +3 -12
- isar/state_machine/transitions/mission.py +12 -2
- isar/state_machine/transitions/return_home.py +1 -1
- isar/state_machine/utils/common_event_handlers.py +166 -0
- isar/storage/blob_storage.py +0 -2
- isar/storage/uploader.py +1 -4
- {isar-1.30.5.dist-info → isar-1.31.1.dist-info}/METADATA +7 -4
- {isar-1.30.5.dist-info → isar-1.31.1.dist-info}/RECORD +48 -58
- robot_interface/models/mission/task.py +0 -3
- robot_interface/robot_interface.py +1 -4
- isar/models/communication/__init__.py +0 -0
- isar/models/communication/message.py +0 -8
- isar/models/communication/queues/__init__.py +0 -0
- isar/models/communication/queues/events.py +0 -58
- isar/models/communication/queues/queue_io.py +0 -12
- isar/models/communication/queues/queue_timeout_error.py +0 -2
- isar/models/communication/queues/queue_utils.py +0 -38
- isar/models/communication/queues/status_queue.py +0 -22
- isar/models/mission_metadata/__init__.py +0 -0
- isar/services/service_connections/stid/__init__.py +0 -0
- isar/services/utilities/queue_utilities.py +0 -39
- isar/state_machine/generic_states/idle.py +0 -133
- isar/state_machine/generic_states/ongoing_mission.py +0 -294
- isar/state_machine/generic_states/robot_unavailable.py +0 -61
- {isar-1.30.5.dist-info → isar-1.31.1.dist-info}/WHEEL +0 -0
- {isar-1.30.5.dist-info → isar-1.31.1.dist-info}/entry_points.txt +0 -0
- {isar-1.30.5.dist-info → isar-1.31.1.dist-info}/licenses/LICENSE +0 -0
- {isar-1.30.5.dist-info → isar-1.31.1.dist-info}/top_level.txt +0 -0
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
isar/__init__.py,sha256=cH8p8bVveu3FUL6kBhldcSlLaoHgD82Kd0-SwSNfGXw,87
|
|
2
|
-
isar/modules.py,sha256=
|
|
3
|
-
isar/script.py,sha256=
|
|
2
|
+
isar/modules.py,sha256=1QdULg-9gV5Ds4pMV4IQTlImSgsVwqs-g15ifllF2kg,4757
|
|
3
|
+
isar/script.py,sha256=8wDcpsbOdFzSkkOOUBFxz9OJYzBiqnTDqr-175tiyL4,6211
|
|
4
4
|
isar/apis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
isar/apis/api.py,sha256=
|
|
5
|
+
isar/apis/api.py,sha256=B0fVZPKtnvrxzk48xoazGPYsJVjjBH4IL6glDJ3PGWI,13328
|
|
6
6
|
isar/apis/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
-
isar/apis/models/models.py,sha256=
|
|
8
|
-
isar/apis/models/start_mission_definition.py,sha256=
|
|
9
|
-
isar/apis/robot_control/robot_controller.py,sha256=
|
|
7
|
+
isar/apis/models/models.py,sha256=GMOss2C8lBeRFV7E37mLwSOM6RhiyLQLcLBRzm_51d4,1835
|
|
8
|
+
isar/apis/models/start_mission_definition.py,sha256=m9M5dZCmvRM1b4N8xYGquCSplSr4GDk376s2QoVL8F4,6231
|
|
9
|
+
isar/apis/robot_control/robot_controller.py,sha256=0EHjMqOBdfJlMrCItGPz5X-4X2kc-2XlNnUU2LOcLfc,1219
|
|
10
10
|
isar/apis/schedule/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
-
isar/apis/schedule/scheduling_controller.py,sha256=
|
|
11
|
+
isar/apis/schedule/scheduling_controller.py,sha256=yQM2HMgelBnbkzPR_tLHOY2EbThUcSO5jMA6Xtp5FQA,9915
|
|
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
|
|
15
15
|
isar/config/configuration_error.py,sha256=rO6WOhafX6xvVib8WxV-eY483Z0PpN-9PxGsq5ATfKc,46
|
|
16
|
-
isar/config/log.py,sha256=
|
|
16
|
+
isar/config/log.py,sha256=_zeHrsI4XqoHc1Um50PLHFjlwGiClM_M5CzcXoqwZuY,1380
|
|
17
17
|
isar/config/logging.conf,sha256=mYO1xf27gAopEMHhGzY7-mwyfN16rwRLkPNMvy3zn2g,1127
|
|
18
|
-
isar/config/
|
|
18
|
+
isar/config/open_telemetry.py,sha256=965IlPi7urVTL0Yy4uYu4e1P2Ne6HC_RXizM2vCX9kY,2371
|
|
19
|
+
isar/config/settings.py,sha256=-fBxs0TUGmoCX4nF1Rwg0YMZ-WQ6qsqFZpWHxqwOrlk,13029
|
|
19
20
|
isar/config/certs/ca-cert.pem,sha256=qoNljfad_qcMxhXJIUMLd7nT-Qwf_d4dYSdoOFEOE8I,2179
|
|
20
21
|
isar/config/keyvault/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
22
|
isar/config/keyvault/keyvault_error.py,sha256=zvPCsZLjboxsxthYkxpRERCTFxYV8R5WmACewAUQLwk,41
|
|
@@ -34,26 +35,19 @@ isar/config/predefined_mission_definition/default_turtlebot.json,sha256=20ee7q1E
|
|
|
34
35
|
isar/config/predefined_missions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
36
|
isar/config/predefined_missions/default.json,sha256=NWo9y5noPmpjlNUxLnZK95Sz7DIEaUR-ISYlw3MP8i0,1251
|
|
36
37
|
isar/config/predefined_missions/default_turtlebot.json,sha256=8Vk1_0P0BBsG0vwh4vwIYINiiWioErHZ0Ppjq3ctaPM,2143
|
|
38
|
+
isar/eventhandlers/eventhandler.py,sha256=POriVZzl97igY9Ny4_hILKf-PWFSsegxuqkXpOsdMIw,2771
|
|
37
39
|
isar/mission_planner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
|
-
isar/mission_planner/local_planner.py,sha256=
|
|
40
|
+
isar/mission_planner/local_planner.py,sha256=Mkg3vvUBF1jImfQnaFvXLNpKVadR21X4mwDd_wHqJ2w,2520
|
|
39
41
|
isar/mission_planner/mission_planner_interface.py,sha256=UgpPIM4FbrWOD7fGY3Ul64k3uYb8wo0FwSWGewYoVbc,485
|
|
40
42
|
isar/mission_planner/sequential_task_selector.py,sha256=66agRPHuJnEa1vArPyty4muTasAZ50XPjjrSaTdY_Cc,643
|
|
41
43
|
isar/mission_planner/task_selector_interface.py,sha256=pnLeaGPIuyXThcflZ_A7YL2b2xQjFT88hAZidkMomxU,707
|
|
42
44
|
isar/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
|
-
isar/models/
|
|
44
|
-
isar/
|
|
45
|
-
isar/
|
|
46
|
-
isar/
|
|
47
|
-
isar/
|
|
48
|
-
isar/
|
|
49
|
-
isar/models/communication/queues/queue_utils.py,sha256=wg6bIR3NS35Ek9hnGR5eN8z6i0jd5tOwM-8l30h3uiA,868
|
|
50
|
-
isar/models/communication/queues/status_queue.py,sha256=on8kvlNsG6MJjEVsyqtBswIpmOdOggQiKr7F5x0T3jw,514
|
|
51
|
-
isar/models/mission_metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
52
|
-
isar/robot/robot.py,sha256=h-Z_1xCACekHvaj-vPJAhdzixSlcW4zMpe9__ui0zv8,5490
|
|
53
|
-
isar/robot/robot_start_mission.py,sha256=vQKsKnrWQuY70jEK-qeeaZYpXxQH4vElorczYZheXTQ,3423
|
|
54
|
-
isar/robot/robot_status.py,sha256=FpkTIAA-O5vKuyU7fnWn2YXtbstq5qbk9XSxbn_0MXU,2015
|
|
55
|
-
isar/robot/robot_stop_mission.py,sha256=jUyfemvbyigxrlIp9aKPn-PvarhagJEgajQPS_LgJ7g,2442
|
|
56
|
-
isar/robot/robot_task_status.py,sha256=71SYPnoqaFbTe1bELLTvAUigAJ-McpomC2sjYQNQs_A,3290
|
|
45
|
+
isar/models/events.py,sha256=9NgvX68Nb8WJyuafD-NYyxxb2Bo9zN15ozNPKURyrxk,3782
|
|
46
|
+
isar/robot/robot.py,sha256=keqsYmfRlyIC4CWkMG0erDt_4uIC0IPvyG2ni4MemyI,5350
|
|
47
|
+
isar/robot/robot_start_mission.py,sha256=RPYH9VtXDFdPqhOpt6kSbT17RHkJQPKkQ6d4784_pFE,3210
|
|
48
|
+
isar/robot/robot_status.py,sha256=NMZZOV1DHOVrJwMsSjKbDSaSiWYnrfAW1cQHtc6heKk,1903
|
|
49
|
+
isar/robot/robot_stop_mission.py,sha256=4GZyhLU0hB6ZK0ArCVhFS9Sf3ZbqFI9DvPNfvD889Ps,2270
|
|
50
|
+
isar/robot/robot_task_status.py,sha256=jefIDfrbly7vWZztWA2zLmK5Yz1NSEytw2YUmprccNA,3161
|
|
57
51
|
isar/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
58
52
|
isar/services/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
53
|
isar/services/auth/azure_credentials.py,sha256=9PlwGe5FrPRbW2dp0go7LMp8_l_FRvL8xOXotXwzRDo,364
|
|
@@ -63,50 +57,46 @@ isar/services/service_connections/mqtt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JC
|
|
|
63
57
|
isar/services/service_connections/mqtt/mqtt_client.py,sha256=se8uLvjy-cElM-WhmHEPXfEA8u05huOLnkcOCYRpcE4,3551
|
|
64
58
|
isar/services/service_connections/mqtt/robot_heartbeat_publisher.py,sha256=_bUOG7CfqBlCRvG4vh2XGoMXucBxsJarFIeXIKOH1aw,1019
|
|
65
59
|
isar/services/service_connections/mqtt/robot_info_publisher.py,sha256=AxokGk51hRPTxxD2r0P9braPJCMrf1InaCxrUBKkF4g,1402
|
|
66
|
-
isar/services/service_connections/stid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
67
60
|
isar/services/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
68
|
-
isar/services/utilities/
|
|
69
|
-
isar/services/utilities/
|
|
70
|
-
isar/services/utilities/scheduling_utilities.py,sha256=4HoUl0WQc7RE9Vx4wZmpX9czgcF7xJg_Pn2hwtSju10,10702
|
|
61
|
+
isar/services/utilities/robot_utilities.py,sha256=4zCigsLXfqDC8POHchktSq81zr1_pTaRve_LQsVr6Mk,514
|
|
62
|
+
isar/services/utilities/scheduling_utilities.py,sha256=O-V6EBfYcx8HMxa2bf0QBxX7Km5m1hBf9h4P5RGlMfY,10907
|
|
71
63
|
isar/services/utilities/threaded_request.py,sha256=py4G-_RjnIdHljmKFAcQ6ddqMmp-ZYV39Ece-dqRqjs,1874
|
|
72
64
|
isar/state_machine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
73
|
-
isar/state_machine/state_machine.py,sha256=
|
|
65
|
+
isar/state_machine/state_machine.py,sha256=RDpUngEf1BAVXDRC52FkUVMSIVhmfTEgQw_kDC06WPE,15663
|
|
74
66
|
isar/state_machine/states_enum.py,sha256=Z3dO6k6JmQAZ1lzcR58oVCxoCky_-ZS9MaL3RSaNbZ4,434
|
|
75
|
-
isar/state_machine/generic_states/idle.py,sha256=T_LSadQ8Eu9egYPgL43WKDYv27MwFu-dqIxDazVE_KU,4359
|
|
76
|
-
isar/state_machine/generic_states/ongoing_mission.py,sha256=P3jikXYcpYgvkuwjGGi9krjnUVEVqUwvM_RHeQbN9wc,10814
|
|
77
|
-
isar/state_machine/generic_states/robot_unavailable.py,sha256=pHmed1uRPwCWAR4uBJmdnxi9WX8veTbGG9ephmROhm0,1851
|
|
78
67
|
isar/state_machine/states/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
79
|
-
isar/state_machine/states/await_next_mission.py,sha256=
|
|
80
|
-
isar/state_machine/states/blocked_protective_stop.py,sha256=
|
|
81
|
-
isar/state_machine/states/home.py,sha256=
|
|
82
|
-
isar/state_machine/states/monitor.py,sha256=
|
|
83
|
-
isar/state_machine/states/offline.py,sha256=
|
|
84
|
-
isar/state_machine/states/paused.py,sha256=
|
|
85
|
-
isar/state_machine/states/returning_home.py,sha256=
|
|
86
|
-
isar/state_machine/states/robot_standing_still.py,sha256=
|
|
87
|
-
isar/state_machine/states/stopping.py,sha256=
|
|
88
|
-
isar/state_machine/states/unknown_status.py,sha256=
|
|
89
|
-
isar/state_machine/transitions/mission.py,sha256=
|
|
90
|
-
isar/state_machine/transitions/return_home.py,sha256=
|
|
68
|
+
isar/state_machine/states/await_next_mission.py,sha256=RDWqGFdQ6PX7AtSjlrR-fH6s441mKooOpkceTO7pvkc,1873
|
|
69
|
+
isar/state_machine/states/blocked_protective_stop.py,sha256=GEOvxnHXjpCsrh3aa8Idtn1zMYv5HLQzj9qQAq8HvaU,1180
|
|
70
|
+
isar/state_machine/states/home.py,sha256=NUVmSmwG5_N7ZDLfbS0eWMnDVpVXmADrZXjh-s_klks,1862
|
|
71
|
+
isar/state_machine/states/monitor.py,sha256=QEV_lc-lHoFAOK2e6HD4FdzpN607LbqZx2Y9-LknrLA,3666
|
|
72
|
+
isar/state_machine/states/offline.py,sha256=5wdNzC1wG0cWrpuT_r_mk8UNFHA4QSyg8ejXUTAg4Io,1137
|
|
73
|
+
isar/state_machine/states/paused.py,sha256=tegYTUioSIKP2TUiMqBLNp9owyLwcuEM3a_LyKZSwQM,1087
|
|
74
|
+
isar/state_machine/states/returning_home.py,sha256=bO8i61xzQAvT0upgK1Fi_OzyRfsRaZlfK3A_2-tThpo,3420
|
|
75
|
+
isar/state_machine/states/robot_standing_still.py,sha256=ee2ORQD0IfUMMBz7bpuUMyA_sMYtdiy17h48KrZJxRc,1897
|
|
76
|
+
isar/state_machine/states/stopping.py,sha256=fMXXvcXtzML-Q5A-uRD_gXePy51fnt9jhOTVFN-3qqA,2420
|
|
77
|
+
isar/state_machine/states/unknown_status.py,sha256=m9XoGGgdjhjX-LRW31mwiU8r7LREB0yOSv2DFZtZH7Y,1789
|
|
78
|
+
isar/state_machine/transitions/mission.py,sha256=Lsiee_hSn5wd7KWpmvIdaG-49f6HGdkCdiXAo5L0ciE,5803
|
|
79
|
+
isar/state_machine/transitions/return_home.py,sha256=6aBpKpozT48RJ__w13gv-r7dSz-fEOCzkAuKq5Hwm6k,2728
|
|
91
80
|
isar/state_machine/transitions/robot_status.py,sha256=c1ceyWRGCtx-KTDtxHXRD7oPbt8TQ2ej24A0wyim8vc,2720
|
|
92
81
|
isar/state_machine/transitions/functions/fail_mission.py,sha256=_6HqBMALDinFZ4yh5GMpeqqgV5tw5i8OVMj5UDdqesg,495
|
|
93
82
|
isar/state_machine/transitions/functions/finish_mission.py,sha256=TRQrk7HdllmAkwsp25HRZAFAk46Y1hLx3jmkIAKrHDI,1442
|
|
94
|
-
isar/state_machine/transitions/functions/pause.py,sha256=
|
|
95
|
-
isar/state_machine/transitions/functions/resume.py,sha256=
|
|
83
|
+
isar/state_machine/transitions/functions/pause.py,sha256=oaIFd4aZnbeaHb-EGQE9ozJctskqXKsRKkNc68M8sp0,1975
|
|
84
|
+
isar/state_machine/transitions/functions/resume.py,sha256=HgAEn4jQOPkVPWWZCAh7dqnIerdF8nGcgFcZ1KsCNSQ,2104
|
|
96
85
|
isar/state_machine/transitions/functions/return_home.py,sha256=UlniwYvpz74hxqgN0TyVv3LCmiMsqsosKEtEGLqkNj0,1139
|
|
97
|
-
isar/state_machine/transitions/functions/robot_status.py,sha256=
|
|
86
|
+
isar/state_machine/transitions/functions/robot_status.py,sha256=P1Cu8xVysbiKRKL4E8mSyoL2-72HfxrLvvOcdnBOlvw,889
|
|
98
87
|
isar/state_machine/transitions/functions/start_mission.py,sha256=ricRfhLH1_lNpqWxneMZcm7ps2YfY6sQGHkiT0Glf6M,2564
|
|
99
|
-
isar/state_machine/transitions/functions/stop.py,sha256=
|
|
88
|
+
isar/state_machine/transitions/functions/stop.py,sha256=5tPYE4WB98iammX81wEdrAUvX0huJ2PBooVaY_7i6GY,2902
|
|
100
89
|
isar/state_machine/transitions/functions/utils.py,sha256=Wa72Ocq4QT1E6qkpEJZQ3h5o33pGvx7Tlkt2JZ2Grbk,314
|
|
90
|
+
isar/state_machine/utils/common_event_handlers.py,sha256=Grv34hVwDjzi9BizqRLMJAKtRpucuklXGR3hoC_0kkQ,5773
|
|
101
91
|
isar/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
102
|
-
isar/storage/blob_storage.py,sha256=
|
|
92
|
+
isar/storage/blob_storage.py,sha256=D67y3Z939iXoRxs8npOuKOhgs2o6dYz2ivTm5IXXhJE,3168
|
|
103
93
|
isar/storage/local_storage.py,sha256=Bnmoi5gyN8r-oRh0aHrOdGqaH3JqRScFKMRXYojW5kY,1855
|
|
104
94
|
isar/storage/storage_interface.py,sha256=DYDry4I7aZpDHJhsBF6s8zrgokFAc7fdKJKfA8AvL7o,828
|
|
105
|
-
isar/storage/uploader.py,sha256=
|
|
95
|
+
isar/storage/uploader.py,sha256=uD1DzvJ2yYtNAwQGa7UD7kNOxZfKxJ1cCdi7sfOVZ10,9443
|
|
106
96
|
isar/storage/utilities.py,sha256=oLH0Rp7UtrQQdilfITnmXO1Z0ExdeDhBImYHid55vBA,3449
|
|
107
|
-
isar-1.
|
|
97
|
+
isar-1.31.1.dist-info/licenses/LICENSE,sha256=3fc2-ebLwHWwzfQbulGNRdcNob3SBQeCfEVUDYxsuqw,14058
|
|
108
98
|
robot_interface/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
109
|
-
robot_interface/robot_interface.py,sha256
|
|
99
|
+
robot_interface/robot_interface.py,sha256=-jCAKkZ2eiyzUyHVQmOzw4hMgLWR7pE8MHj-WZo85ZY,7978
|
|
110
100
|
robot_interface/test_robot_interface.py,sha256=FV1urn7SbsMyWBIcTKjsBwAG4IsXeZ6pLHE0mA9EGGs,692
|
|
111
101
|
robot_interface/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
112
102
|
robot_interface/models/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -117,7 +107,7 @@ robot_interface/models/inspection/inspection.py,sha256=2T8czQcNt9J1M96tKGQA6P3s5
|
|
|
117
107
|
robot_interface/models/mission/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
118
108
|
robot_interface/models/mission/mission.py,sha256=MQ9p5cuclLXexaZu9bkDh5-aN99eunvYC0vP-Z_kUwI,960
|
|
119
109
|
robot_interface/models/mission/status.py,sha256=UOCARLfLxLFXJEjfIH7aXYXO7xajOKBJsxz-Wd6gZQ4,740
|
|
120
|
-
robot_interface/models/mission/task.py,sha256=
|
|
110
|
+
robot_interface/models/mission/task.py,sha256=YzaqJ_KIIm-3S2Y2-BG4Pdkc8sjFMzMx5jj8FtXSmFg,4744
|
|
121
111
|
robot_interface/models/robots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
122
112
|
robot_interface/models/robots/battery_state.py,sha256=ktOtJ8ltdK0k_i7BoqYfhc5dbOzIG6Oo-uWC67fCWio,98
|
|
123
113
|
robot_interface/models/robots/media.py,sha256=8A-CuuubfngzPprs6zWB9hSaqe3jzgsE8rcCzRX2Uto,227
|
|
@@ -128,8 +118,8 @@ robot_interface/telemetry/payloads.py,sha256=PpvmV7XeGgfhc_aRUYFOdwBTwV2x8TwTBIN
|
|
|
128
118
|
robot_interface/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
129
119
|
robot_interface/utilities/json_service.py,sha256=qkzVkb60Gi_pto-b5n1vNzCrQze2yqgIJqSLNLYj1Fg,1034
|
|
130
120
|
robot_interface/utilities/uuid_string_factory.py,sha256=_NQIbBQ56w0qqO0MUDP6aPpHbxW7ATRhK8HnQiBSLkc,76
|
|
131
|
-
isar-1.
|
|
132
|
-
isar-1.
|
|
133
|
-
isar-1.
|
|
134
|
-
isar-1.
|
|
135
|
-
isar-1.
|
|
121
|
+
isar-1.31.1.dist-info/METADATA,sha256=bilh123vt-dD-IraRBTR4yhxI1YJim_NydR9zPveUYA,31217
|
|
122
|
+
isar-1.31.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
123
|
+
isar-1.31.1.dist-info/entry_points.txt,sha256=TFam7uNNw7J0iiDYzsH2gfG0u1eV1wh3JTw_HkhgKLk,49
|
|
124
|
+
isar-1.31.1.dist-info/top_level.txt,sha256=UwIML2RtuQKCyJJkatcSnyp6-ldDjboB9k9JgKipO-U,21
|
|
125
|
+
isar-1.31.1.dist-info/RECORD,,
|
|
@@ -221,10 +221,7 @@ class RobotInterface(metaclass=ABCMeta):
|
|
|
221
221
|
@abstractmethod
|
|
222
222
|
def robot_status(self) -> RobotStatus:
|
|
223
223
|
"""
|
|
224
|
-
Method which returns an enum indicating
|
|
225
|
-
the interface which is used to communicate with the robot. This is further used
|
|
226
|
-
by ISAR to indicate whether the ISAR instance is fully functional and may be
|
|
227
|
-
used by other systems.
|
|
224
|
+
Method which returns an enum indicating the status of the robot.
|
|
228
225
|
|
|
229
226
|
Returns
|
|
230
227
|
-------
|
|
File without changes
|
|
File without changes
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
from queue import Queue
|
|
2
|
-
|
|
3
|
-
from transitions import State
|
|
4
|
-
|
|
5
|
-
from isar.config.settings import settings
|
|
6
|
-
from isar.models.communication.queues.queue_io import QueueIO
|
|
7
|
-
from isar.models.communication.queues.status_queue import StatusQueue
|
|
8
|
-
from robot_interface.models.exceptions.robot_exceptions import ErrorMessage
|
|
9
|
-
from robot_interface.models.mission.mission import Mission
|
|
10
|
-
from robot_interface.models.mission.status import RobotStatus, TaskStatus
|
|
11
|
-
from robot_interface.models.mission.task import TASKS
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class Events:
|
|
15
|
-
def __init__(self) -> None:
|
|
16
|
-
self.api_requests: APIRequests = APIRequests()
|
|
17
|
-
self.state_machine_events: StateMachineEvents = StateMachineEvents()
|
|
18
|
-
self.robot_service_events: RobotServiceEvents = RobotServiceEvents()
|
|
19
|
-
|
|
20
|
-
self.upload_queue: Queue = Queue(maxsize=10)
|
|
21
|
-
|
|
22
|
-
if settings.MQTT_ENABLED:
|
|
23
|
-
self.mqtt_queue: Queue = Queue()
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class APIRequests:
|
|
27
|
-
def __init__(self) -> None:
|
|
28
|
-
self.start_mission: QueueIO = QueueIO(input_size=1, output_size=1)
|
|
29
|
-
self.stop_mission: QueueIO = QueueIO(input_size=1, output_size=1)
|
|
30
|
-
self.pause_mission: QueueIO = QueueIO(input_size=1, output_size=1)
|
|
31
|
-
self.resume_mission: QueueIO = QueueIO(input_size=1, output_size=1)
|
|
32
|
-
self.return_home: QueueIO = QueueIO(input_size=1, output_size=1)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
class StateMachineEvents:
|
|
36
|
-
def __init__(self) -> None:
|
|
37
|
-
self.start_mission: Queue[Mission] = Queue(maxsize=1)
|
|
38
|
-
self.stop_mission: Queue[bool] = Queue(maxsize=1)
|
|
39
|
-
self.pause_mission: Queue[bool] = Queue(maxsize=1)
|
|
40
|
-
self.task_status_request: Queue[str] = Queue(maxsize=1)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
class RobotServiceEvents:
|
|
44
|
-
def __init__(self) -> None:
|
|
45
|
-
self.task_status_updated: Queue[TaskStatus] = Queue(maxsize=1)
|
|
46
|
-
self.task_status_failed: Queue[ErrorMessage] = Queue(maxsize=1)
|
|
47
|
-
self.mission_started: Queue[bool] = Queue(maxsize=1)
|
|
48
|
-
self.mission_failed: Queue[ErrorMessage] = Queue(maxsize=1)
|
|
49
|
-
self.robot_status_changed: Queue[bool] = Queue(maxsize=1)
|
|
50
|
-
self.mission_failed_to_stop: Queue[ErrorMessage] = Queue(maxsize=1)
|
|
51
|
-
self.mission_successfully_stopped: Queue[bool] = Queue(maxsize=1)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
class SharedState:
|
|
55
|
-
def __init__(self) -> None:
|
|
56
|
-
self.state: StatusQueue[State] = StatusQueue()
|
|
57
|
-
self.robot_status: StatusQueue[RobotStatus] = StatusQueue()
|
|
58
|
-
self.state_machine_current_task: StatusQueue[TASKS] = StatusQueue()
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
from queue import Queue
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class QueueIO:
|
|
5
|
-
"""
|
|
6
|
-
Creates input and output queue. The queues are defined such that the input is from
|
|
7
|
-
api to state machine while the output is from state machine to api.
|
|
8
|
-
"""
|
|
9
|
-
|
|
10
|
-
def __init__(self, input_size: int = 0, output_size: int = 0):
|
|
11
|
-
self.input: Queue = Queue(maxsize=input_size)
|
|
12
|
-
self.output: Queue = Queue(maxsize=output_size)
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
from queue import Empty, Queue
|
|
2
|
-
from typing import Optional, TypeVar
|
|
3
|
-
|
|
4
|
-
from isar.models.communication.queues.status_queue import StatusQueue
|
|
5
|
-
|
|
6
|
-
T = TypeVar("T")
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def trigger_event_without_data(queue: Queue[bool]) -> None:
|
|
10
|
-
queue.put(True)
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def trigger_event(queue: Queue[T], data: T) -> None:
|
|
14
|
-
queue.put(data)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
def check_shared_state(queue: StatusQueue[T]) -> Optional[T]:
|
|
18
|
-
try:
|
|
19
|
-
return queue.check()
|
|
20
|
-
except Empty:
|
|
21
|
-
return None
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def update_shared_state(queue: StatusQueue[T], data: T) -> None:
|
|
25
|
-
queue.update(data)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def check_for_event(queue: Queue[T]) -> Optional[T]:
|
|
29
|
-
try:
|
|
30
|
-
return queue.get(block=False)
|
|
31
|
-
except Empty:
|
|
32
|
-
return None
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
def check_for_event_without_consumption(queue: Queue[T]) -> bool:
|
|
36
|
-
return (
|
|
37
|
-
queue.qsize() != 0
|
|
38
|
-
) # Queue size is not reliable, but should be sufficient for this case
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
from collections import deque
|
|
2
|
-
from queue import Empty, Queue
|
|
3
|
-
from typing import TypeVar
|
|
4
|
-
|
|
5
|
-
T = TypeVar("T")
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class StatusQueue(Queue[T]):
|
|
9
|
-
def __init__(self) -> None:
|
|
10
|
-
super().__init__()
|
|
11
|
-
|
|
12
|
-
def check(self) -> T:
|
|
13
|
-
if not self._qsize():
|
|
14
|
-
raise Empty
|
|
15
|
-
with self.mutex:
|
|
16
|
-
queueList = list(self.queue)
|
|
17
|
-
return queueList.pop()
|
|
18
|
-
|
|
19
|
-
def update(self, item: T):
|
|
20
|
-
with self.mutex:
|
|
21
|
-
self.queue: deque[T] = deque()
|
|
22
|
-
self.queue.append(item)
|
|
File without changes
|
|
File without changes
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
from queue import Empty, Queue
|
|
3
|
-
from typing import Any
|
|
4
|
-
|
|
5
|
-
from isar.models.communication.queues.queue_timeout_error import QueueTimeoutError
|
|
6
|
-
|
|
7
|
-
logger = logging.getLogger("api")
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class QueueUtilities:
|
|
11
|
-
"""
|
|
12
|
-
Contains utility functions for handling queue communication between threads.
|
|
13
|
-
"""
|
|
14
|
-
|
|
15
|
-
@staticmethod
|
|
16
|
-
def check_queue(queue: Queue, queue_timeout: int = None) -> Any:
|
|
17
|
-
"""
|
|
18
|
-
Checks if there is a message on a queue. If a timeout is specified the function
|
|
19
|
-
will raise a QueueTimeoutError if there is no message within the timeout. If
|
|
20
|
-
there is no timeout specified this function will block.
|
|
21
|
-
:param queue: The queue to be checked for a message
|
|
22
|
-
:param queue_timeout: Timeout in seconds
|
|
23
|
-
:return: Message found on queue
|
|
24
|
-
:raises QueueTimeoutError
|
|
25
|
-
"""
|
|
26
|
-
try:
|
|
27
|
-
message: Any = queue.get(timeout=queue_timeout)
|
|
28
|
-
except Empty:
|
|
29
|
-
logger.error("Queue timed out")
|
|
30
|
-
raise QueueTimeoutError
|
|
31
|
-
return message
|
|
32
|
-
|
|
33
|
-
@staticmethod
|
|
34
|
-
def clear_queue(queue: Queue) -> None:
|
|
35
|
-
while True:
|
|
36
|
-
try:
|
|
37
|
-
queue.get(block=False)
|
|
38
|
-
except Empty:
|
|
39
|
-
break
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import time
|
|
3
|
-
from enum import Enum
|
|
4
|
-
from queue import Queue
|
|
5
|
-
from typing import TYPE_CHECKING, Optional
|
|
6
|
-
|
|
7
|
-
from isar.config.settings import settings
|
|
8
|
-
from isar.models.communication.message import StartMissionMessage
|
|
9
|
-
from isar.models.communication.queues.queue_io import QueueIO
|
|
10
|
-
from isar.models.communication.queues.queue_utils import (
|
|
11
|
-
check_for_event,
|
|
12
|
-
check_shared_state,
|
|
13
|
-
)
|
|
14
|
-
from isar.models.communication.queues.status_queue import StatusQueue
|
|
15
|
-
from robot_interface.models.mission.status import RobotStatus
|
|
16
|
-
|
|
17
|
-
if TYPE_CHECKING:
|
|
18
|
-
from isar.state_machine.state_machine import StateMachine
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class IdleStates(str, Enum):
|
|
22
|
-
AwaitNextMission = "awaitNextMission"
|
|
23
|
-
Home = "home"
|
|
24
|
-
RobotStandingStill = "robotStandingStill"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if TYPE_CHECKING:
|
|
28
|
-
from isar.state_machine.state_machine import StateMachine
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
class Idle:
|
|
32
|
-
def __init__(
|
|
33
|
-
self,
|
|
34
|
-
state_machine: "StateMachine",
|
|
35
|
-
state: IdleStates,
|
|
36
|
-
) -> None:
|
|
37
|
-
self.state_machine: "StateMachine" = state_machine
|
|
38
|
-
self.logger = logging.getLogger("state_machine")
|
|
39
|
-
self.events = state_machine.events
|
|
40
|
-
self.shared_state = self.state_machine.shared_state
|
|
41
|
-
self.signal_state_machine_to_stop = state_machine.signal_state_machine_to_stop
|
|
42
|
-
self.state: IdleStates = state
|
|
43
|
-
|
|
44
|
-
# Only used for await_next_mission state
|
|
45
|
-
self.entered_time: float = time.time()
|
|
46
|
-
self.return_home_delay: float = settings.RETURN_HOME_DELAY
|
|
47
|
-
|
|
48
|
-
def start(self) -> None:
|
|
49
|
-
self.state_machine.update_state()
|
|
50
|
-
self.entered_time = time.time()
|
|
51
|
-
self._run()
|
|
52
|
-
|
|
53
|
-
def stop(self) -> None:
|
|
54
|
-
return
|
|
55
|
-
|
|
56
|
-
def _check_and_handle_start_mission_event(
|
|
57
|
-
self, event: Queue[StartMissionMessage]
|
|
58
|
-
) -> bool:
|
|
59
|
-
start_mission: Optional[StartMissionMessage] = check_for_event(event)
|
|
60
|
-
if start_mission:
|
|
61
|
-
self.state_machine.start_mission(mission=start_mission.mission)
|
|
62
|
-
self.state_machine.request_mission_start() # type: ignore
|
|
63
|
-
return True
|
|
64
|
-
return False
|
|
65
|
-
|
|
66
|
-
def _check_and_handle_return_home_event(self, event: QueueIO) -> bool:
|
|
67
|
-
if check_for_event(event.input):
|
|
68
|
-
event.output.put(True)
|
|
69
|
-
self.state_machine.request_return_home() # type: ignore
|
|
70
|
-
return True
|
|
71
|
-
return False
|
|
72
|
-
|
|
73
|
-
def _check_and_handle_robot_status_event(
|
|
74
|
-
self, event: StatusQueue[RobotStatus]
|
|
75
|
-
) -> bool:
|
|
76
|
-
robot_status: RobotStatus = check_shared_state(event)
|
|
77
|
-
|
|
78
|
-
expected_robot_status = (
|
|
79
|
-
RobotStatus.Home if self.state == IdleStates.Home else RobotStatus.Available
|
|
80
|
-
)
|
|
81
|
-
|
|
82
|
-
if robot_status != expected_robot_status:
|
|
83
|
-
self.state_machine.robot_status_changed() # type: ignore
|
|
84
|
-
return True
|
|
85
|
-
|
|
86
|
-
return False
|
|
87
|
-
|
|
88
|
-
def _check_and_handle_stop_mission_event(self, event: Queue) -> bool:
|
|
89
|
-
if check_for_event(event):
|
|
90
|
-
self.state_machine.stop() # type: ignore
|
|
91
|
-
return True
|
|
92
|
-
return False
|
|
93
|
-
|
|
94
|
-
def _should_return_home(self) -> bool:
|
|
95
|
-
time_since_entered = time.time() - self.entered_time
|
|
96
|
-
return time_since_entered > self.return_home_delay
|
|
97
|
-
|
|
98
|
-
def _run(self) -> None:
|
|
99
|
-
while True:
|
|
100
|
-
if self.signal_state_machine_to_stop.is_set():
|
|
101
|
-
self.logger.info(
|
|
102
|
-
"Stopping state machine from %s state", self.state.name
|
|
103
|
-
)
|
|
104
|
-
break
|
|
105
|
-
|
|
106
|
-
if self._check_and_handle_stop_mission_event(
|
|
107
|
-
self.events.api_requests.stop_mission.input
|
|
108
|
-
):
|
|
109
|
-
break
|
|
110
|
-
|
|
111
|
-
if self._check_and_handle_start_mission_event(
|
|
112
|
-
self.events.api_requests.start_mission.input
|
|
113
|
-
):
|
|
114
|
-
break
|
|
115
|
-
|
|
116
|
-
if self._check_and_handle_return_home_event(
|
|
117
|
-
self.events.api_requests.return_home
|
|
118
|
-
):
|
|
119
|
-
break
|
|
120
|
-
|
|
121
|
-
if (
|
|
122
|
-
self.state != IdleStates.AwaitNextMission
|
|
123
|
-
and self._check_and_handle_robot_status_event(
|
|
124
|
-
self.shared_state.robot_status
|
|
125
|
-
)
|
|
126
|
-
):
|
|
127
|
-
break
|
|
128
|
-
|
|
129
|
-
if self.state == IdleStates.AwaitNextMission and self._should_return_home():
|
|
130
|
-
self.state_machine.request_return_home() # type: ignore
|
|
131
|
-
break
|
|
132
|
-
|
|
133
|
-
time.sleep(self.state_machine.sleep_time)
|