isar 1.23.2__tar.gz → 1.34.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of isar might be problematic. Click here for more details.
- isar-1.34.5/.env.test +3 -0
- isar-1.34.5/.github/PULL_REQUEST_TEMPLATE.md +11 -0
- {isar-1.23.2 → isar-1.34.5}/.github/workflows/compile_requirements.yml +2 -2
- isar-1.34.5/.github/workflows/execute_stale_labeler.yml +17 -0
- {isar-1.23.2 → isar-1.34.5}/.github/workflows/project_automations.yml +11 -5
- {isar-1.23.2 → isar-1.34.5}/.github/workflows/pythonpackage.yml +23 -7
- {isar-1.23.2 → isar-1.34.5}/.github/workflows/pythonpublish.yml +3 -0
- {isar-1.23.2 → isar-1.34.5}/.github/workflows/stale.yml +0 -4
- isar-1.34.5/.github/workflows/synchronize_labels.yml +13 -0
- isar-1.34.5/.github/workflows/trivy-config.yml +43 -0
- {isar-1.23.2 → isar-1.34.5}/.gitignore +3 -0
- isar-1.34.5/Makefile +23 -0
- {isar-1.23.2 → isar-1.34.5}/PKG-INFO +58 -99
- {isar-1.23.2 → isar-1.34.5}/README.md +40 -88
- isar-1.34.5/docs/full_state_machine_diagram.png +0 -0
- isar-1.34.5/docs/mission_state_machine_diagram.png +0 -0
- isar-1.34.5/docs/robot_status_state_machine_diagram.png +0 -0
- isar-1.34.5/docs/update_state_diagram.py +108 -0
- {isar-1.23.2 → isar-1.34.5}/pyproject.toml +15 -9
- isar-1.34.5/requirements.txt +324 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/apis/api.py +148 -77
- {isar-1.23.2 → isar-1.34.5}/src/isar/apis/models/models.py +19 -4
- isar-1.34.5/src/isar/apis/models/start_mission_definition.py +173 -0
- isar-1.34.5/src/isar/apis/robot_control/robot_controller.py +41 -0
- isar-1.34.5/src/isar/apis/schedule/scheduling_controller.py +292 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/apis/security/authentication.py +5 -5
- isar-1.34.5/src/isar/config/certs/ca-cert.pem +35 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/config/keyvault/keyvault_service.py +1 -1
- isar-1.34.5/src/isar/config/log.py +58 -0
- isar-1.34.5/src/isar/config/logging.conf +40 -0
- isar-1.34.5/src/isar/config/open_telemetry.py +102 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/config/predefined_mission_definition/default_exr.json +0 -2
- {isar-1.23.2 → isar-1.34.5}/src/isar/config/predefined_mission_definition/default_mission.json +1 -5
- {isar-1.23.2 → isar-1.34.5}/src/isar/config/predefined_mission_definition/default_turtlebot.json +4 -11
- {isar-1.23.2 → isar-1.34.5}/src/isar/config/predefined_missions/default.json +26 -28
- isar-1.23.2/src/isar/config/predefined_missions/default_turtlebot.json → isar-1.34.5/src/isar/config/predefined_missions/default_extra_capabilities.json +17 -16
- {isar-1.23.2 → isar-1.34.5}/src/isar/config/settings.py +74 -68
- isar-1.34.5/src/isar/eventhandlers/eventhandler.py +115 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/mission_planner/local_planner.py +6 -23
- {isar-1.23.2 → isar-1.34.5}/src/isar/mission_planner/mission_planner_interface.py +1 -1
- isar-1.34.5/src/isar/models/events.py +183 -0
- isar-1.34.5/src/isar/models/status.py +18 -0
- isar-1.34.5/src/isar/modules.py +133 -0
- isar-1.34.5/src/isar/robot/robot.py +348 -0
- isar-1.34.5/src/isar/robot/robot_battery.py +60 -0
- isar-1.34.5/src/isar/robot/robot_monitor_mission.py +415 -0
- isar-1.34.5/src/isar/robot/robot_pause_mission.py +74 -0
- isar-1.34.5/src/isar/robot/robot_resume_mission.py +67 -0
- isar-1.34.5/src/isar/robot/robot_start_mission.py +72 -0
- isar-1.34.5/src/isar/robot/robot_status.py +61 -0
- isar-1.34.5/src/isar/robot/robot_stop_mission.py +68 -0
- isar-1.34.5/src/isar/robot/robot_upload_inspection.py +75 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/script.py +54 -39
- {isar-1.23.2 → isar-1.34.5}/src/isar/services/service_connections/mqtt/mqtt_client.py +47 -11
- {isar-1.23.2 → isar-1.34.5}/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py +3 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/services/service_connections/mqtt/robot_info_publisher.py +0 -1
- isar-1.34.5/src/isar/services/service_connections/persistent_memory.py +69 -0
- isar-1.34.5/src/isar/services/utilities/robot_utilities.py +20 -0
- isar-1.34.5/src/isar/services/utilities/scheduling_utilities.py +563 -0
- isar-1.34.5/src/isar/state_machine/state_machine.py +344 -0
- isar-1.34.5/src/isar/state_machine/states/await_next_mission.py +108 -0
- isar-1.34.5/src/isar/state_machine/states/blocked_protective_stop.py +49 -0
- isar-1.34.5/src/isar/state_machine/states/going_to_lockdown.py +88 -0
- isar-1.34.5/src/isar/state_machine/states/going_to_recharging.py +81 -0
- isar-1.34.5/src/isar/state_machine/states/home.py +112 -0
- isar-1.34.5/src/isar/state_machine/states/intervention_needed.py +59 -0
- isar-1.34.5/src/isar/state_machine/states/lockdown.py +38 -0
- isar-1.34.5/src/isar/state_machine/states/maintenance.py +36 -0
- isar-1.34.5/src/isar/state_machine/states/monitor.py +131 -0
- isar-1.34.5/src/isar/state_machine/states/offline.py +49 -0
- isar-1.34.5/src/isar/state_machine/states/paused.py +90 -0
- isar-1.34.5/src/isar/state_machine/states/pausing.py +59 -0
- isar-1.34.5/src/isar/state_machine/states/pausing_return_home.py +59 -0
- isar-1.34.5/src/isar/state_machine/states/recharging.py +80 -0
- isar-1.34.5/src/isar/state_machine/states/resuming.py +57 -0
- isar-1.34.5/src/isar/state_machine/states/resuming_return_home.py +64 -0
- isar-1.34.5/src/isar/state_machine/states/return_home_paused.py +103 -0
- isar-1.34.5/src/isar/state_machine/states/returning_home.py +160 -0
- isar-1.34.5/src/isar/state_machine/states/stopping.py +58 -0
- isar-1.34.5/src/isar/state_machine/states/stopping_due_to_maintenance.py +61 -0
- isar-1.34.5/src/isar/state_machine/states/stopping_go_to_lockdown.py +59 -0
- isar-1.34.5/src/isar/state_machine/states/stopping_go_to_recharge.py +51 -0
- isar-1.34.5/src/isar/state_machine/states/stopping_return_home.py +73 -0
- isar-1.34.5/src/isar/state_machine/states/unknown_status.py +65 -0
- isar-1.34.5/src/isar/state_machine/states_enum.py +31 -0
- isar-1.34.5/src/isar/state_machine/transitions/functions/fail_mission.py +19 -0
- isar-1.34.5/src/isar/state_machine/transitions/functions/finish_mission.py +9 -0
- isar-1.34.5/src/isar/state_machine/transitions/functions/pause.py +9 -0
- isar-1.34.5/src/isar/state_machine/transitions/functions/resume.py +9 -0
- isar-1.34.5/src/isar/state_machine/transitions/functions/return_home.py +39 -0
- isar-1.34.5/src/isar/state_machine/transitions/functions/robot_status.py +36 -0
- isar-1.34.5/src/isar/state_machine/transitions/functions/start_mission.py +40 -0
- isar-1.34.5/src/isar/state_machine/transitions/functions/stop.py +33 -0
- isar-1.34.5/src/isar/state_machine/transitions/functions/utils.py +10 -0
- isar-1.34.5/src/isar/state_machine/transitions/mission.py +255 -0
- isar-1.34.5/src/isar/state_machine/transitions/return_home.py +172 -0
- isar-1.34.5/src/isar/state_machine/transitions/robot_status.py +84 -0
- isar-1.34.5/src/isar/state_machine/utils/common_event_handlers.py +98 -0
- isar-1.34.5/src/isar/storage/blob_storage.py +101 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/storage/local_storage.py +25 -12
- {isar-1.23.2 → isar-1.34.5}/src/isar/storage/storage_interface.py +28 -7
- isar-1.34.5/src/isar/storage/uploader.py +285 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/storage/utilities.py +31 -28
- {isar-1.23.2 → isar-1.34.5}/src/isar.egg-info/PKG-INFO +58 -99
- {isar-1.23.2 → isar-1.34.5}/src/isar.egg-info/SOURCES.txt +79 -51
- {isar-1.23.2 → isar-1.34.5}/src/isar.egg-info/requires.txt +14 -9
- {isar-1.23.2 → isar-1.34.5}/src/robot_interface/models/exceptions/robot_exceptions.py +80 -43
- {isar-1.23.2 → isar-1.34.5}/src/robot_interface/models/inspection/inspection.py +42 -33
- isar-1.34.5/src/robot_interface/models/mission/mission.py +25 -0
- isar-1.34.5/src/robot_interface/models/mission/status.py +30 -0
- {isar-1.23.2 → isar-1.34.5}/src/robot_interface/models/mission/task.py +42 -79
- isar-1.34.5/src/robot_interface/models/robots/battery_state.py +6 -0
- isar-1.34.5/src/robot_interface/models/robots/media.py +13 -0
- isar-1.34.5/src/robot_interface/models/robots/robot_model.py +13 -0
- {isar-1.23.2 → isar-1.34.5}/src/robot_interface/robot_interface.py +98 -57
- isar-1.34.5/src/robot_interface/telemetry/mqtt_client.py +151 -0
- isar-1.34.5/src/robot_interface/telemetry/payloads.py +161 -0
- {isar-1.23.2 → isar-1.34.5}/src/robot_interface/utilities/json_service.py +7 -1
- isar-1.34.5/tests/conftest.py +211 -0
- isar-1.34.5/tests/integration/turtlebot/config/missions/default.json +89 -0
- {isar-1.23.2 → isar-1.34.5}/tests/integration/turtlebot/test_successful_mission.py +5 -72
- isar-1.34.5/tests/isar/apis/models/test_start_mission_definition.py +81 -0
- {isar-1.23.2 → isar-1.34.5}/tests/isar/apis/scheduler/test_scheduler_router.py +89 -149
- isar-1.34.5/tests/isar/apis/security/test_authentication.py +32 -0
- {isar-1.23.2 → isar-1.34.5}/tests/isar/mission/test_mission.py +6 -14
- isar-1.34.5/tests/isar/models/communication/test_events.py +44 -0
- {isar-1.23.2 → isar-1.34.5}/tests/isar/services/readers/test_mission_reader.py +29 -40
- isar-1.34.5/tests/isar/services/utilities/test_queue_utilities.py +34 -0
- isar-1.34.5/tests/isar/services/utilities/test_scheduling_utilities.py +124 -0
- isar-1.34.5/tests/isar/state_machine/test_state_machine.py +1591 -0
- isar-1.34.5/tests/isar/storage/test_uploader.py +118 -0
- isar-1.34.5/tests/test_data/test_mission_not_working.json +45 -0
- isar-1.34.5/tests/test_data/test_mission_working.json +56 -0
- {isar-1.23.2 → isar-1.34.5}/tests/test_data/test_mission_working_no_tasks.json +1 -0
- {isar-1.23.2 → isar-1.34.5}/tests/test_data/test_thermal_image_mission.json +5 -4
- isar-1.34.5/tests/test_double/blob_storage.py +41 -0
- isar-1.34.5/tests/test_double/mission_definition.py +87 -0
- isar-1.34.5/tests/test_double/mqtt_client.py +37 -0
- {isar-1.23.2/tests/mocks → isar-1.34.5/tests/test_double}/pose.py +1 -1
- {isar-1.23.2/tests/mocks → isar-1.34.5/tests/test_double}/request.py +1 -1
- isar-1.34.5/tests/test_double/robot_interface.py +204 -0
- {isar-1.23.2/tests/mocks → isar-1.34.5/tests/test_double}/status.py +2 -2
- isar-1.34.5/tests/test_double/task.py +16 -0
- {isar-1.23.2/tests/mocks → isar-1.34.5/tests/test_double}/token.py +1 -1
- isar-1.34.5/tests/test_maintenance_mode.py +103 -0
- isar-1.23.2/.github/workflows/publish_isar_base_image.yml +0 -52
- isar-1.23.2/Dockerfile +0 -41
- isar-1.23.2/docker-compose-turtlebot.yml +0 -30
- isar-1.23.2/docker-compose.yml +0 -22
- isar-1.23.2/docs/state_machine_diagram.png +0 -0
- isar-1.23.2/requirements.txt +0 -195
- isar-1.23.2/src/isar/apis/models/__init__.py +0 -1
- isar-1.23.2/src/isar/apis/models/start_mission_definition.py +0 -224
- isar-1.23.2/src/isar/apis/schedule/scheduling_controller.py +0 -321
- isar-1.23.2/src/isar/config/certs/ca-cert.pem +0 -35
- isar-1.23.2/src/isar/config/log.py +0 -66
- isar-1.23.2/src/isar/config/logging.conf +0 -58
- isar-1.23.2/src/isar/config/predefined_poses/predefined_poses.py +0 -616
- isar-1.23.2/src/isar/config/settings.env +0 -25
- isar-1.23.2/src/isar/mission_planner/sequential_task_selector.py +0 -23
- isar-1.23.2/src/isar/mission_planner/task_selector_interface.py +0 -31
- isar-1.23.2/src/isar/models/communication/message.py +0 -12
- isar-1.23.2/src/isar/models/communication/queues/__init__.py +0 -4
- isar-1.23.2/src/isar/models/communication/queues/queue_io.py +0 -12
- isar-1.23.2/src/isar/models/communication/queues/queue_timeout_error.py +0 -2
- isar-1.23.2/src/isar/models/communication/queues/queues.py +0 -19
- isar-1.23.2/src/isar/models/communication/queues/status_queue.py +0 -20
- isar-1.23.2/src/isar/modules.py +0 -214
- isar-1.23.2/src/isar/services/readers/base_reader.py +0 -37
- isar-1.23.2/src/isar/services/utilities/queue_utilities.py +0 -39
- isar-1.23.2/src/isar/services/utilities/scheduling_utilities.py +0 -234
- isar-1.23.2/src/isar/state_machine/state_machine.py +0 -594
- isar-1.23.2/src/isar/state_machine/states/__init__.py +0 -8
- isar-1.23.2/src/isar/state_machine/states/idle.py +0 -87
- isar-1.23.2/src/isar/state_machine/states/initialize.py +0 -71
- isar-1.23.2/src/isar/state_machine/states/initiate.py +0 -142
- isar-1.23.2/src/isar/state_machine/states/monitor.py +0 -238
- isar-1.23.2/src/isar/state_machine/states/off.py +0 -18
- isar-1.23.2/src/isar/state_machine/states/offline.py +0 -63
- isar-1.23.2/src/isar/state_machine/states/paused.py +0 -37
- isar-1.23.2/src/isar/state_machine/states/stop.py +0 -95
- isar-1.23.2/src/isar/state_machine/states_enum.py +0 -15
- isar-1.23.2/src/isar/storage/blob_storage.py +0 -83
- isar-1.23.2/src/isar/storage/slimm_storage.py +0 -191
- isar-1.23.2/src/isar/storage/uploader.py +0 -168
- isar-1.23.2/src/robot_interface/models/initialize/__init__.py +0 -1
- isar-1.23.2/src/robot_interface/models/initialize/initialize_params.py +0 -9
- isar-1.23.2/src/robot_interface/models/inspection/__init__.py +0 -13
- isar-1.23.2/src/robot_interface/models/mission/mission.py +0 -28
- isar-1.23.2/src/robot_interface/models/mission/status.py +0 -28
- isar-1.23.2/src/robot_interface/models/robots/robot_model.py +0 -13
- isar-1.23.2/src/robot_interface/telemetry/media_connection_type.py +0 -5
- isar-1.23.2/src/robot_interface/telemetry/mqtt_client.py +0 -89
- isar-1.23.2/src/robot_interface/telemetry/payloads.py +0 -98
- isar-1.23.2/tests/conftest.py +0 -150
- isar-1.23.2/tests/integration/turtlebot/config/missions/default.json +0 -104
- isar-1.23.2/tests/isar/apis/security/test_authentication.py +0 -59
- isar-1.23.2/tests/isar/models/communication/test_queues.py +0 -49
- isar-1.23.2/tests/isar/models/test_start_mission_definition.py +0 -63
- isar-1.23.2/tests/isar/services/readers/test_base_reader.py +0 -23
- isar-1.23.2/tests/isar/services/utilities/test_queue_utilities.py +0 -38
- isar-1.23.2/tests/isar/services/utilities/test_scheduling_utilities.py +0 -55
- isar-1.23.2/tests/isar/state_machine/states/test_monitor.py +0 -51
- isar-1.23.2/tests/isar/state_machine/test_state_machine.py +0 -353
- isar-1.23.2/tests/isar/storage/test_blob_storage.py +0 -17
- isar-1.23.2/tests/isar/storage/test_uploader.py +0 -82
- isar-1.23.2/tests/mocks/__init__.py +0 -0
- isar-1.23.2/tests/mocks/blob_storage.py +0 -20
- isar-1.23.2/tests/mocks/mission_definition.py +0 -119
- isar-1.23.2/tests/mocks/mqtt_client.py +0 -10
- isar-1.23.2/tests/mocks/robot_interface.py +0 -98
- isar-1.23.2/tests/mocks/task.py +0 -16
- isar-1.23.2/tests/test_data/test_json_file.json +0 -227
- isar-1.23.2/tests/test_data/test_mission_not_working.json +0 -61
- isar-1.23.2/tests/test_data/test_mission_working.json +0 -93
- isar-1.23.2/tests/test_modules.py +0 -46
- {isar-1.23.2 → isar-1.34.5}/.dockerignore +0 -0
- {isar-1.23.2 → isar-1.34.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {isar-1.23.2 → isar-1.34.5}/.github/ISSUE_TEMPLATE/feature.md +0 -0
- {isar-1.23.2 → isar-1.34.5}/.github/ISSUE_TEMPLATE/improvement.md +0 -0
- {isar-1.23.2 → isar-1.34.5}/.github/release.yml +0 -0
- {isar-1.23.2 → isar-1.34.5}/.pre-commit-config.yaml +0 -0
- {isar-1.23.2 → isar-1.34.5}/LICENSE +0 -0
- {isar-1.23.2 → isar-1.34.5}/SECURITY.md +0 -0
- {isar-1.23.2 → isar-1.34.5}/docs/Makefile +0 -0
- {isar-1.23.2 → isar-1.34.5}/docs/make.bat +0 -0
- {isar-1.23.2 → isar-1.34.5}/docs/rst_processing.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/docs/source/conf.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/docs/source/index.rst +0 -0
- {isar-1.23.2 → isar-1.34.5}/docs/source/readme_link.md +0 -0
- {isar-1.23.2 → isar-1.34.5}/main.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/radixconfig.yml +0 -0
- {isar-1.23.2 → isar-1.34.5}/setup.cfg +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/apis/__init__.py +0 -0
- {isar-1.23.2/src/isar/apis/schedule → isar-1.34.5/src/isar/apis/models}/__init__.py +0 -0
- {isar-1.23.2/src/isar/apis/security → isar-1.34.5/src/isar/apis/schedule}/__init__.py +0 -0
- {isar-1.23.2/src/isar/config → isar-1.34.5/src/isar/apis/security}/__init__.py +0 -0
- {isar-1.23.2/src/isar/config/keyvault → isar-1.34.5/src/isar/config}/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/config/configuration_error.py +0 -0
- {isar-1.23.2/src/isar/config/predefined_mission_definition → isar-1.34.5/src/isar/config/keyvault}/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/config/keyvault/keyvault_error.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/config/maps/JSP1_intermediate_deck.json +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/config/maps/JSP1_weather_deck.json +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/config/maps/default_map.json +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/config/maps/klab_b.json +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/config/maps/klab_compressor.json +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/config/maps/klab_turtlebot.json +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/config/maps/turtleworld.json +0 -0
- {isar-1.23.2/src/isar/config/predefined_missions → isar-1.34.5/src/isar/config/predefined_mission_definition}/__init__.py +0 -0
- {isar-1.23.2/src/isar/config/predefined_poses → isar-1.34.5/src/isar/config/predefined_missions}/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/mission_planner/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/models/__init__.py +0 -0
- {isar-1.23.2/src/isar/models/communication → isar-1.34.5/src/isar/services}/__init__.py +0 -0
- {isar-1.23.2/src/isar/models/mission_metadata → isar-1.34.5/src/isar/services/auth}/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/services/auth/azure_credentials.py +0 -0
- {isar-1.23.2/src/isar/services → isar-1.34.5/src/isar/services/service_connections}/__init__.py +0 -0
- {isar-1.23.2/src/isar/services/auth → isar-1.34.5/src/isar/services/service_connections/mqtt}/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/services/service_connections/request_handler.py +0 -0
- {isar-1.23.2/src/isar/services/readers → isar-1.34.5/src/isar/services/utilities}/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar/services/utilities/threaded_request.py +0 -0
- {isar-1.23.2/src/isar/services/service_connections → isar-1.34.5/src/isar/state_machine}/__init__.py +0 -0
- {isar-1.23.2/src/isar/services/service_connections/mqtt → isar-1.34.5/src/isar/state_machine/states}/__init__.py +0 -0
- {isar-1.23.2/src/isar/services/service_connections/stid → isar-1.34.5/src/isar/storage}/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar.egg-info/dependency_links.txt +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar.egg-info/entry_points.txt +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/isar.egg-info/top_level.txt +0 -0
- {isar-1.23.2/src/isar/services/utilities → isar-1.34.5/src/robot_interface}/__init__.py +0 -0
- {isar-1.23.2/src/isar/state_machine → isar-1.34.5/src/robot_interface/models}/__init__.py +0 -0
- {isar-1.23.2/src/isar/storage → isar-1.34.5/src/robot_interface/models/exceptions}/__init__.py +0 -0
- {isar-1.23.2/src/robot_interface → isar-1.34.5/src/robot_interface/models/initialize}/__init__.py +0 -0
- {isar-1.23.2/src/robot_interface/models → isar-1.34.5/src/robot_interface/models/inspection}/__init__.py +0 -0
- {isar-1.23.2/src/robot_interface/models/exceptions → isar-1.34.5/src/robot_interface/models/mission}/__init__.py +0 -0
- {isar-1.23.2/src/robot_interface/models/mission → isar-1.34.5/src/robot_interface/models/robots}/__init__.py +0 -0
- {isar-1.23.2/src/robot_interface/models/robots → isar-1.34.5/src/robot_interface/telemetry}/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/robot_interface/test_robot_interface.py +0 -0
- {isar-1.23.2/src/robot_interface/telemetry → isar-1.34.5/src/robot_interface/utilities}/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/src/robot_interface/utilities/uuid_string_factory.py +0 -0
- {isar-1.23.2/src/robot_interface/utilities → isar-1.34.5/tests}/__init__.py +0 -0
- {isar-1.23.2/tests → isar-1.34.5/tests/integration}/__init__.py +0 -0
- {isar-1.23.2/tests/integration → isar-1.34.5/tests/integration/turtlebot}/__init__.py +0 -0
- {isar-1.23.2/tests/integration/turtlebot → isar-1.34.5/tests/integration/turtlebot/config}/__init__.py +0 -0
- {isar-1.23.2/tests/integration/turtlebot/config → isar-1.34.5/tests/integration/turtlebot/config/maps}/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/tests/integration/turtlebot/config/maps/turtleworld.json +0 -0
- {isar-1.23.2/tests/integration/turtlebot/config/maps → isar-1.34.5/tests/integration/turtlebot/config/missions}/__init__.py +0 -0
- {isar-1.23.2/tests/integration/turtlebot/config/missions → isar-1.34.5/tests/isar}/__init__.py +0 -0
- {isar-1.23.2/tests/isar → isar-1.34.5/tests/isar/apis}/__init__.py +0 -0
- {isar-1.23.2/tests/isar/apis → isar-1.34.5/tests/isar/apis/models}/__init__.py +0 -0
- {isar-1.23.2/tests/isar → isar-1.34.5/tests/isar/apis}/models/example_mission_definition.json +0 -0
- {isar-1.23.2 → isar-1.34.5}/tests/isar/apis/scheduler/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/tests/isar/apis/security/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/tests/isar/mission/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/tests/isar/models/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/tests/isar/models/communication/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/tests/isar/services/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/tests/isar/services/readers/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/tests/isar/services/service_connections/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/tests/isar/services/service_connections/echo/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/tests/isar/services/service_connections/test_base_request_handler.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/tests/isar/services/utilities/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/tests/isar/state_machine/__init__.py +0 -0
- {isar-1.23.2 → isar-1.34.5}/tests/test_data/test_map_config/test_map_config.json +0 -0
- {isar-1.23.2/tests/isar/state_machine/states → isar-1.34.5/tests/test_double}/__init__.py +0 -0
isar-1.34.5/.env.test
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
## Ready for review checklist:
|
|
2
|
+
- [ ] A self-review has been performed
|
|
3
|
+
- [ ] All commits run individually
|
|
4
|
+
- [ ] Temporary changes have been removed, like logging, TODO, etc.
|
|
5
|
+
- [ ] The PR has been tested locally
|
|
6
|
+
- [ ] A test has been written
|
|
7
|
+
- [ ] This change doesn't need a new test
|
|
8
|
+
- [ ] Relevant issues are linked
|
|
9
|
+
- [ ] Remaining work is documented in issues
|
|
10
|
+
- [ ] There is no remaining work from this PR that requires new issues
|
|
11
|
+
- [ ] The changes do not introduce dead code as unused imports, functions etc.
|
|
@@ -26,7 +26,7 @@ jobs:
|
|
|
26
26
|
- name: Set up Python
|
|
27
27
|
uses: actions/setup-python@v5
|
|
28
28
|
with:
|
|
29
|
-
python-version: "3.
|
|
29
|
+
python-version: "3.13"
|
|
30
30
|
|
|
31
31
|
- name: Install pip-tools
|
|
32
32
|
run: |
|
|
@@ -38,7 +38,7 @@ jobs:
|
|
|
38
38
|
pip-compile --output-file=requirements.txt pyproject.toml --upgrade
|
|
39
39
|
|
|
40
40
|
- name: Create Pull Request
|
|
41
|
-
uses: peter-evans/create-pull-request@
|
|
41
|
+
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e #v7
|
|
42
42
|
with:
|
|
43
43
|
commit-message: "GHA: Update dependencies"
|
|
44
44
|
title: Update dependencies
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
name: Execute stale labeler
|
|
2
|
+
on:
|
|
3
|
+
workflow_dispatch:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: "35 6 * * *"
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
actions: write
|
|
10
|
+
issues: write
|
|
11
|
+
pull-requests: write
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
labels:
|
|
15
|
+
uses: equinor/armada/.github/workflows/mark_issues_and_prs_as_stale.yml@main
|
|
16
|
+
secrets:
|
|
17
|
+
STALE_ISSUE_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
name: Project automations
|
|
2
|
+
|
|
3
|
+
permissions:
|
|
4
|
+
contents: read
|
|
5
|
+
issues: write
|
|
6
|
+
pull-requests: write
|
|
7
|
+
|
|
2
8
|
on:
|
|
3
9
|
issues:
|
|
4
10
|
types:
|
|
@@ -19,7 +25,7 @@ jobs:
|
|
|
19
25
|
if: github.event_name == 'issues' && github.event.action == 'opened' || github.event.action == 'reopened'
|
|
20
26
|
steps:
|
|
21
27
|
- name: 'Move issue to "Todo"'
|
|
22
|
-
uses: leonsteinhaeuser/project-beta-automations@
|
|
28
|
+
uses: leonsteinhaeuser/project-beta-automations@939000fb1900c9fc4f7b5058a09d9f833ebc6859 #Version 2.2.1
|
|
23
29
|
with:
|
|
24
30
|
gh_token: ${{ secrets.MY_GITHUB_TOKEN }}
|
|
25
31
|
organization: equinor
|
|
@@ -32,7 +38,7 @@ jobs:
|
|
|
32
38
|
if: github.event_name == 'issues' && github.event.action == 'closed'
|
|
33
39
|
steps:
|
|
34
40
|
- name: 'Moved issue to "Done"'
|
|
35
|
-
uses: leonsteinhaeuser/project-beta-automations@
|
|
41
|
+
uses: leonsteinhaeuser/project-beta-automations@939000fb1900c9fc4f7b5058a09d9f833ebc6859 #Version 2.2.1
|
|
36
42
|
with:
|
|
37
43
|
gh_token: ${{ secrets.MY_GITHUB_TOKEN }}
|
|
38
44
|
organization: equinor
|
|
@@ -45,7 +51,7 @@ jobs:
|
|
|
45
51
|
if: github.event_name == 'pull_request' && github.event.action == 'opened' || github.event.action == 'reopened' || github.event.action == 'review_requested'
|
|
46
52
|
steps:
|
|
47
53
|
- name: 'Move PR to "In Progress"'
|
|
48
|
-
uses: leonsteinhaeuser/project-beta-automations@
|
|
54
|
+
uses: leonsteinhaeuser/project-beta-automations@939000fb1900c9fc4f7b5058a09d9f833ebc6859 #Version 2.2.1
|
|
49
55
|
with:
|
|
50
56
|
gh_token: ${{ secrets.MY_GITHUB_TOKEN }}
|
|
51
57
|
organization: equinor
|
|
@@ -58,7 +64,7 @@ jobs:
|
|
|
58
64
|
if: github.event_name == 'pull_request' && github.event.action == 'ready_for_review'
|
|
59
65
|
steps:
|
|
60
66
|
- name: 'Move PR to "Review"'
|
|
61
|
-
uses: leonsteinhaeuser/project-beta-automations@
|
|
67
|
+
uses: leonsteinhaeuser/project-beta-automations@939000fb1900c9fc4f7b5058a09d9f833ebc6859 #Version 2.2.1
|
|
62
68
|
with:
|
|
63
69
|
gh_token: ${{ secrets.MY_GITHUB_TOKEN }}
|
|
64
70
|
organization: equinor
|
|
@@ -71,7 +77,7 @@ jobs:
|
|
|
71
77
|
if: github.event_name == 'pull_request' && github.event.action == 'closed'
|
|
72
78
|
steps:
|
|
73
79
|
- name: 'Move PR to "Done"'
|
|
74
|
-
uses: leonsteinhaeuser/project-beta-automations@
|
|
80
|
+
uses: leonsteinhaeuser/project-beta-automations@939000fb1900c9fc4f7b5058a09d9f833ebc6859 #Version 2.2.1
|
|
75
81
|
with:
|
|
76
82
|
gh_token: ${{ secrets.MY_GITHUB_TOKEN }}
|
|
77
83
|
organization: equinor
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
name: Python package
|
|
2
2
|
|
|
3
|
+
permissions:
|
|
4
|
+
contents: read
|
|
5
|
+
|
|
3
6
|
on:
|
|
4
7
|
push:
|
|
5
8
|
branches:
|
|
@@ -7,6 +10,7 @@ on:
|
|
|
7
10
|
pull_request:
|
|
8
11
|
branches:
|
|
9
12
|
- main
|
|
13
|
+
- update-dependencies
|
|
10
14
|
|
|
11
15
|
jobs:
|
|
12
16
|
build:
|
|
@@ -14,7 +18,7 @@ jobs:
|
|
|
14
18
|
strategy:
|
|
15
19
|
fail-fast: false
|
|
16
20
|
matrix:
|
|
17
|
-
python-version: ["3.9", "3.10", "3.11", "3.12"]
|
|
21
|
+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
|
|
18
22
|
|
|
19
23
|
steps:
|
|
20
24
|
- uses: actions/checkout@v4
|
|
@@ -28,13 +32,13 @@ jobs:
|
|
|
28
32
|
run: |
|
|
29
33
|
python -m pip install --upgrade pip
|
|
30
34
|
|
|
31
|
-
- name: Install dependencies with the compiled requirements (for Python 3.
|
|
32
|
-
if: ${{matrix.python-version == '3.
|
|
35
|
+
- name: Install dependencies with the compiled requirements (for Python 3.13)
|
|
36
|
+
if: ${{matrix.python-version == '3.13'}}
|
|
33
37
|
run: |
|
|
34
38
|
pip install -r requirements.txt -e .[dev]
|
|
35
39
|
|
|
36
|
-
- name: Install dependencies based on the pyproject.toml file (for Python 3.9-3.
|
|
37
|
-
if: ${{matrix.python-version != '3.
|
|
40
|
+
- name: Install dependencies based on the pyproject.toml file (for Python 3.9-3.12)
|
|
41
|
+
if: ${{matrix.python-version != '3.13'}}
|
|
38
42
|
run: |
|
|
39
43
|
pip install -e .[dev]
|
|
40
44
|
|
|
@@ -43,8 +47,20 @@ jobs:
|
|
|
43
47
|
pytest
|
|
44
48
|
env:
|
|
45
49
|
ENVIRONMENT: local
|
|
50
|
+
ISAR_ENV: test
|
|
46
51
|
|
|
47
|
-
- name:
|
|
52
|
+
- name: Run black
|
|
48
53
|
run: |
|
|
49
54
|
black --check .
|
|
50
|
-
|
|
55
|
+
|
|
56
|
+
- name: Run isort
|
|
57
|
+
run: |
|
|
58
|
+
isort --check .
|
|
59
|
+
|
|
60
|
+
- name: Run mypy
|
|
61
|
+
run: |
|
|
62
|
+
mypy --disable-error-code=import-untyped --check-untyped-defs .
|
|
63
|
+
|
|
64
|
+
- name: Run ruff
|
|
65
|
+
run: |
|
|
66
|
+
ruff check .
|
|
@@ -22,11 +22,7 @@ jobs:
|
|
|
22
22
|
uses: actions/stale@v9
|
|
23
23
|
with:
|
|
24
24
|
repo-token: ${{ secrets.STALE_ISSUE_TOKEN }}
|
|
25
|
-
stale-issue-message: "This issue has automatically been marked as stale as there has been no activity for 60 days."
|
|
26
|
-
stale-pr-message: "This pull request has automatically been marked as stale as there has been no activity for 30 days."
|
|
27
25
|
stale-issue-label: "stale"
|
|
28
26
|
stale-pr-label: "stale"
|
|
29
|
-
close-issue-message: "This issue has been closed automatically due to a lack of activity."
|
|
30
|
-
close-pr-message: "This pull request has been closed automatically due to a lack of activity."
|
|
31
27
|
days-before-pr-stale: 30
|
|
32
28
|
days-before-close: -1
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
name: Execute label synchronization
|
|
2
|
+
on:
|
|
3
|
+
workflow_dispatch:
|
|
4
|
+
|
|
5
|
+
permissions:
|
|
6
|
+
contents: read
|
|
7
|
+
issues: write
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
labels:
|
|
11
|
+
uses: equinor/armada/.github/workflows/synchronize_labels.yml@main
|
|
12
|
+
secrets:
|
|
13
|
+
LABEL_SYNC_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# from https://github.com/equinor/appsec-ghas-examples/blob/main/.github/workflows/trivy-config.yml
|
|
2
|
+
name: Trivy IaC & Dockerfile Scanning
|
|
3
|
+
permissions: {}
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
branches: [ "main" ]
|
|
7
|
+
pull_request:
|
|
8
|
+
branches: [ "main" ]
|
|
9
|
+
schedule:
|
|
10
|
+
- cron: '36 0 * * 3'
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
trivy-scan:
|
|
14
|
+
name: Scan on Main with Trivy
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
timeout-minutes: 30
|
|
17
|
+
permissions:
|
|
18
|
+
security-events: write
|
|
19
|
+
|
|
20
|
+
contents: read
|
|
21
|
+
actions: read
|
|
22
|
+
|
|
23
|
+
steps:
|
|
24
|
+
- name: Checkout code
|
|
25
|
+
uses: actions/checkout@v5
|
|
26
|
+
with:
|
|
27
|
+
persist-credentials: false
|
|
28
|
+
|
|
29
|
+
- name: Run Trivy vulnerability Scanner
|
|
30
|
+
uses: aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8
|
|
31
|
+
with:
|
|
32
|
+
scan-type: 'config'
|
|
33
|
+
severity: 'CRITICAL,HIGH'
|
|
34
|
+
limit-severities-for-sarif: true
|
|
35
|
+
format: 'sarif'
|
|
36
|
+
output: 'trivy-results-iac.sarif'
|
|
37
|
+
exit-code: '0'
|
|
38
|
+
|
|
39
|
+
- name: Upload scan results to GitHub Security tab
|
|
40
|
+
uses: github/codeql-action/upload-sarif@v3
|
|
41
|
+
with:
|
|
42
|
+
sarif_file: 'trivy-results-iac.sarif'
|
|
43
|
+
|
isar-1.34.5/Makefile
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
run:
|
|
2
|
+
isar-start
|
|
3
|
+
|
|
4
|
+
test:
|
|
5
|
+
ENVIRONMENT=local ISAR_ENV=test pytest .
|
|
6
|
+
|
|
7
|
+
format:
|
|
8
|
+
isort .
|
|
9
|
+
black .
|
|
10
|
+
ruff check . --fix
|
|
11
|
+
|
|
12
|
+
check:
|
|
13
|
+
mypy .
|
|
14
|
+
|
|
15
|
+
run-debug: # debug logs
|
|
16
|
+
API_LOG_LEVEL=DEBUG \
|
|
17
|
+
MAIN_LOG_LEVEL=DEBUG \
|
|
18
|
+
MQTT_LOG_LEVEL=DEBUG \
|
|
19
|
+
STATE_MACHINE_LOG_LEVEL=DEBUG \
|
|
20
|
+
UPLOADER_LOG_LEVEL=DEBUG \
|
|
21
|
+
CONSOLE_LOG_LEVEL=DEBUG \
|
|
22
|
+
ISAR_DEBUG_LOG_FORMATTER=True \
|
|
23
|
+
isar-start
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: isar
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.34.5
|
|
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
|
|
@@ -95,6 +95,7 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
95
95
|
Classifier: Programming Language :: Python :: 3.10
|
|
96
96
|
Classifier: Programming Language :: Python :: 3.11
|
|
97
97
|
Classifier: Programming Language :: Python :: 3.12
|
|
98
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
98
99
|
Classifier: Topic :: Scientific/Engineering
|
|
99
100
|
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
100
101
|
Classifier: Topic :: Software Development :: Libraries
|
|
@@ -109,12 +110,9 @@ Requires-Dist: backoff
|
|
|
109
110
|
Requires-Dist: click
|
|
110
111
|
Requires-Dist: dacite
|
|
111
112
|
Requires-Dist: fastapi-azure-auth
|
|
112
|
-
Requires-Dist: fastapi
|
|
113
|
-
Requires-Dist: injector
|
|
113
|
+
Requires-Dist: fastapi>=0.121.0
|
|
114
|
+
Requires-Dist: dependency-injector
|
|
114
115
|
Requires-Dist: numpy
|
|
115
|
-
Requires-Dist: opencensus-ext-azure
|
|
116
|
-
Requires-Dist: opencensus-ext-logging
|
|
117
|
-
Requires-Dist: opencensus-ext-requests
|
|
118
116
|
Requires-Dist: paho-mqtt
|
|
119
117
|
Requires-Dist: pydantic_settings
|
|
120
118
|
Requires-Dist: pydantic
|
|
@@ -123,21 +121,30 @@ Requires-Dist: python-dotenv
|
|
|
123
121
|
Requires-Dist: PyYAML
|
|
124
122
|
Requires-Dist: requests-toolbelt
|
|
125
123
|
Requires-Dist: requests
|
|
124
|
+
Requires-Dist: starlette>=0.49.1
|
|
126
125
|
Requires-Dist: transitions
|
|
127
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
|
|
128
135
|
Provides-Extra: dev
|
|
129
136
|
Requires-Dist: black; extra == "dev"
|
|
130
|
-
Requires-Dist:
|
|
137
|
+
Requires-Dist: isort; extra == "dev"
|
|
131
138
|
Requires-Dist: mypy; extra == "dev"
|
|
132
|
-
Requires-Dist: myst-parser; extra == "dev"
|
|
133
139
|
Requires-Dist: pip-tools; extra == "dev"
|
|
134
140
|
Requires-Dist: pre-commit; extra == "dev"
|
|
135
|
-
Requires-Dist: pytest-dotenv; extra == "dev"
|
|
136
141
|
Requires-Dist: pytest-mock; extra == "dev"
|
|
137
142
|
Requires-Dist: pytest-xdist; extra == "dev"
|
|
138
143
|
Requires-Dist: pytest; extra == "dev"
|
|
139
144
|
Requires-Dist: requests-mock; extra == "dev"
|
|
140
|
-
Requires-Dist:
|
|
145
|
+
Requires-Dist: ruff; extra == "dev"
|
|
146
|
+
Requires-Dist: testcontainers[mysql]; extra == "dev"
|
|
147
|
+
Dynamic: license-file
|
|
141
148
|
|
|
142
149
|
# ISAR
|
|
143
150
|
|
|
@@ -230,12 +237,21 @@ ISAR_ROBOT_PACKAGE = isar_turtlebot
|
|
|
230
237
|
ISAR_DEFAULT_MAP = turtleworld
|
|
231
238
|
```
|
|
232
239
|
|
|
240
|
+
### Run with make
|
|
241
|
+
Common commands for the project are in [Makefile](./Makefile).
|
|
242
|
+
This requires the CLI program `make`.
|
|
243
|
+
|
|
244
|
+
Usage:
|
|
245
|
+
```bash
|
|
246
|
+
make <command-in-makefile> # for example: make run
|
|
247
|
+
```
|
|
248
|
+
|
|
233
249
|
### Run ISAR server
|
|
234
250
|
|
|
235
251
|
To run ISAR:
|
|
236
252
|
|
|
237
253
|
```bash
|
|
238
|
-
|
|
254
|
+
isar-start
|
|
239
255
|
```
|
|
240
256
|
|
|
241
257
|
Note, running the full system requires that an implementation of a robot has been installed. See
|
|
@@ -255,21 +271,6 @@ In [this](./src/isar/config/predefined_missions) folder there are predefined def
|
|
|
255
271
|
corresponding to `mission_id=1`. A new mission may be added by adding a new json-file with a mission description. Note,
|
|
256
272
|
the mission IDs must be unique.
|
|
257
273
|
|
|
258
|
-
### Running with docker-compose
|
|
259
|
-
|
|
260
|
-
ISAR may be started with an instance of the [isar-robot](https://github.com/equinor/isar-robot) package by
|
|
261
|
-
|
|
262
|
-
```shell
|
|
263
|
-
docker-compose up --build
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
Provided that the simulator from [isar-turtlebot](https://github.com/equinor/isar-turtlebot) is running ISAR may be
|
|
267
|
-
started with the turtlebot by
|
|
268
|
-
|
|
269
|
-
```shell
|
|
270
|
-
docker-compose -f docker-compose-turtlebot.yml up --build
|
|
271
|
-
```
|
|
272
|
-
|
|
273
274
|
### Configuration
|
|
274
275
|
|
|
275
276
|
The system consists of many configuration variables which may alter the functionality. As an example, it is possible to
|
|
@@ -295,6 +296,20 @@ There are two methods of specifying configuration.
|
|
|
295
296
|
By adding environment variables with the prefix `ISAR_` to the [settings.env](./src/isar/config/settings.env) file
|
|
296
297
|
the configuration variables will be overwritten by the values in this file.
|
|
297
298
|
|
|
299
|
+
### Setup for testing
|
|
300
|
+
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:
|
|
301
|
+
|
|
302
|
+
**Bash/Zsh**
|
|
303
|
+
```bash
|
|
304
|
+
export ISAR_ENV=test
|
|
305
|
+
```
|
|
306
|
+
**Windows Command prompt**
|
|
307
|
+
```cmd
|
|
308
|
+
set ISAR_ENV=test
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
Remember to set `ISAR_ENV` back to `None` when you want to run `isar-start` afterwards.
|
|
312
|
+
|
|
298
313
|
### Running tests
|
|
299
314
|
|
|
300
315
|
After following the steps in [Development](#install), you can run the tests:
|
|
@@ -345,24 +360,29 @@ The system consists of two main components.
|
|
|
345
360
|
The state machine handles interaction with the robots API and monitors the execution of missions. It also enables
|
|
346
361
|
interacting with the robot before, during and after missions.
|
|
347
362
|
|
|
348
|
-
The state machine is based on the [transitions](https://github.com/pytransitions/transitions) package for Python.
|
|
349
|
-
|
|
363
|
+
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:
|
|
364
|
+
|
|
365
|
+
Mission behavior without the robot status changed transition that enable the resting states to transition between each other if the robot status changes:
|
|
366
|
+

|
|
367
|
+
|
|
368
|
+
Robot status changed transition:
|
|
369
|
+

|
|
370
|
+
|
|
371
|
+
Full state machine:
|
|
372
|
+

|
|
350
373
|
|
|
351
374
|
In general the states
|
|
352
375
|
|
|
353
376
|
```
|
|
354
|
-
States.
|
|
355
|
-
States.Initialize,
|
|
356
|
-
States.Initiate,
|
|
357
|
-
States.Stop,
|
|
377
|
+
States.Stopping,
|
|
358
378
|
States.Monitor,
|
|
359
379
|
States.Paused,
|
|
360
380
|
```
|
|
361
381
|
|
|
362
|
-
indicates that the state machine is already running. For running a mission the state machine need to be in the
|
|
382
|
+
indicates that the state machine is already running. For running a mission the state machine need to be in the states
|
|
363
383
|
|
|
364
384
|
```
|
|
365
|
-
States.
|
|
385
|
+
States.Home, States.AwaitNextMission or States.ReturningHome
|
|
366
386
|
```
|
|
367
387
|
|
|
368
388
|
### FastAPI
|
|
@@ -384,10 +404,10 @@ overriding the configuration through an environment variable. It accepts a json
|
|
|
384
404
|
in the list to retrieve the corresponding handler. The current options are
|
|
385
405
|
|
|
386
406
|
```
|
|
387
|
-
ISAR_STORAGE = '["local", "blob"
|
|
407
|
+
ISAR_STORAGE = '["local", "blob"]'
|
|
388
408
|
```
|
|
389
409
|
|
|
390
|
-
Note that the `blob`
|
|
410
|
+
Note that the `blob` option requires special configuration to authenticate to these endpoints.
|
|
391
411
|
|
|
392
412
|
### Implement your own storage module
|
|
393
413
|
|
|
@@ -395,68 +415,6 @@ You can create your own storage module by implementing the [storage interface](.
|
|
|
395
415
|
and adding your storage module to the selection [here](./src/isar/modules.py). Note that you must add your module as an
|
|
396
416
|
option in the dictionary.
|
|
397
417
|
|
|
398
|
-
## Task selection
|
|
399
|
-
|
|
400
|
-
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.
|
|
401
|
-
|
|
402
|
-
### Implement you own task selector module
|
|
403
|
-
|
|
404
|
-
Custom task selector modules may be added by implementing additional versions of the [task selector interface](./src/isar/mission_planner/task_selector_interface.py).
|
|
405
|
-
|
|
406
|
-
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:
|
|
407
|
-
|
|
408
|
-
```python
|
|
409
|
-
class CustomTaskSelector(TaskSelectorInterface):
|
|
410
|
-
...
|
|
411
|
-
def next_task(...) -> Task:
|
|
412
|
-
|
|
413
|
-
# Add code here
|
|
414
|
-
...
|
|
415
|
-
|
|
416
|
-
# Raise `TaskSelectorStop` when all tasks have been completed
|
|
417
|
-
...
|
|
418
|
-
```
|
|
419
|
-
|
|
420
|
-
Optionally, the `initialize()` function may be extended by supplementing the parameter list or function body:
|
|
421
|
-
|
|
422
|
-
```python
|
|
423
|
-
class CustomTaskSelector(TaskSelectorInterface):
|
|
424
|
-
...
|
|
425
|
-
def initialize(self, tasks: List[Task], ...) -> None:
|
|
426
|
-
super.initialize(tasks=tasks)
|
|
427
|
-
|
|
428
|
-
# Add supplementary code here
|
|
429
|
-
...
|
|
430
|
-
```
|
|
431
|
-
|
|
432
|
-
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:
|
|
433
|
-
|
|
434
|
-
```python
|
|
435
|
-
# Add custom task selector module to `modules.py`
|
|
436
|
-
|
|
437
|
-
class CustomTaskSelectorModule(Module):
|
|
438
|
-
@provider
|
|
439
|
-
@singleton
|
|
440
|
-
def provide_task_selector(self) -> TaskSelectorInterface:
|
|
441
|
-
return CustomTaskSelector()
|
|
442
|
-
|
|
443
|
-
...
|
|
444
|
-
|
|
445
|
-
# Make it available to select during injector instantiation
|
|
446
|
-
|
|
447
|
-
modules: dict[str, tuple[Module, Union[str, bool]]] = {
|
|
448
|
-
...
|
|
449
|
-
"task_selector": (
|
|
450
|
-
{
|
|
451
|
-
"sequential": SequentialTaskSelectorModule,
|
|
452
|
-
"custom": CustomTaskSelectorModule
|
|
453
|
-
}
|
|
454
|
-
...
|
|
455
|
-
)
|
|
456
|
-
...
|
|
457
|
-
}
|
|
458
|
-
```
|
|
459
|
-
|
|
460
418
|
## API authentication
|
|
461
419
|
|
|
462
420
|
The API has an option to include user authentication. This can be enabled by setting the environment variable
|
|
@@ -473,6 +431,7 @@ Enabling API authentication also requires the same environment variables. The re
|
|
|
473
431
|
AZURE_CLIENT_ID
|
|
474
432
|
AZURE_TENANT_ID
|
|
475
433
|
AZURE_CLIENT_SECRET
|
|
434
|
+
ISAR_BLOB_STORAGE_ACCOUNT
|
|
476
435
|
```
|
|
477
436
|
|
|
478
437
|
## MQTT communication
|