isar 1.14.5__tar.gz → 1.15.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of isar might be problematic. Click here for more details.
- {isar-1.14.5 → isar-1.15.0}/PKG-INFO +2 -2
- {isar-1.14.5 → isar-1.15.0}/README.md +1 -1
- {isar-1.14.5 → isar-1.15.0}/src/isar/apis/schedule/scheduling_controller.py +9 -19
- {isar-1.14.5 → isar-1.15.0}/src/isar/models/communication/message.py +0 -2
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/service_connections/mqtt/robot_info_publisher.py +1 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/utilities/scheduling_utilities.py +0 -3
- {isar-1.14.5 → isar-1.15.0}/src/isar/state_machine/state_machine.py +1 -6
- {isar-1.14.5 → isar-1.15.0}/src/isar/state_machine/states/idle.py +0 -1
- {isar-1.14.5 → isar-1.15.0}/src/isar/state_machine/states/monitor.py +4 -7
- {isar-1.14.5 → isar-1.15.0}/src/isar/storage/blob_storage.py +4 -4
- {isar-1.14.5 → isar-1.15.0}/src/isar/storage/local_storage.py +4 -4
- {isar-1.14.5 → isar-1.15.0}/src/isar/storage/slimm_storage.py +28 -28
- {isar-1.14.5 → isar-1.15.0}/src/isar/storage/storage_interface.py +4 -4
- {isar-1.14.5 → isar-1.15.0}/src/isar/storage/uploader.py +6 -6
- {isar-1.14.5 → isar-1.15.0}/src/isar/storage/utilities.py +21 -20
- {isar-1.14.5 → isar-1.15.0}/src/isar.egg-info/PKG-INFO +2 -2
- {isar-1.14.5 → isar-1.15.0}/src/isar.egg-info/SOURCES.txt +0 -1
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/telemetry/mqtt_client.py +2 -4
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/telemetry/payloads.py +1 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/services/readers/test_mission_reader.py +0 -6
- {isar-1.14.5 → isar-1.15.0}/tests/isar/state_machine/test_state_machine.py +12 -43
- {isar-1.14.5 → isar-1.15.0}/tests/isar/storage/test_uploader.py +7 -11
- {isar-1.14.5 → isar-1.15.0}/tests/mocks/blob_storage.py +2 -2
- isar-1.14.5/src/isar/models/mission_metadata/mission_metadata.py +0 -27
- {isar-1.14.5 → isar-1.15.0}/.dockerignore +0 -0
- {isar-1.14.5 → isar-1.15.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {isar-1.14.5 → isar-1.15.0}/.github/ISSUE_TEMPLATE/feature.md +0 -0
- {isar-1.14.5 → isar-1.15.0}/.github/ISSUE_TEMPLATE/improvement.md +0 -0
- {isar-1.14.5 → isar-1.15.0}/.github/release.yml +0 -0
- {isar-1.14.5 → isar-1.15.0}/.github/workflows/project_automations.yml +0 -0
- {isar-1.14.5 → isar-1.15.0}/.github/workflows/publish_isar_base_image.yml +0 -0
- {isar-1.14.5 → isar-1.15.0}/.github/workflows/pythonpackage.yml +0 -0
- {isar-1.14.5 → isar-1.15.0}/.github/workflows/pythonpublish.yml +0 -0
- {isar-1.14.5 → isar-1.15.0}/.github/workflows/repository_dispatch_on_merge.yml +0 -0
- {isar-1.14.5 → isar-1.15.0}/.github/workflows/stale.yml +0 -0
- {isar-1.14.5 → isar-1.15.0}/.gitignore +0 -0
- {isar-1.14.5 → isar-1.15.0}/.pre-commit-config.yaml +0 -0
- {isar-1.14.5 → isar-1.15.0}/Dockerfile +0 -0
- {isar-1.14.5 → isar-1.15.0}/LICENSE +0 -0
- {isar-1.14.5 → isar-1.15.0}/docker-compose-turtlebot.yml +0 -0
- {isar-1.14.5 → isar-1.15.0}/docker-compose.yml +0 -0
- {isar-1.14.5 → isar-1.15.0}/docs/Makefile +0 -0
- {isar-1.14.5 → isar-1.15.0}/docs/make.bat +0 -0
- {isar-1.14.5 → isar-1.15.0}/docs/rst_processing.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/docs/source/conf.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/docs/source/index.rst +0 -0
- {isar-1.14.5 → isar-1.15.0}/docs/source/readme_link.md +0 -0
- {isar-1.14.5 → isar-1.15.0}/docs/state_machine_diagram.png +0 -0
- {isar-1.14.5 → isar-1.15.0}/main.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/pyproject.toml +0 -0
- {isar-1.14.5 → isar-1.15.0}/radixconfig.yml +0 -0
- {isar-1.14.5 → isar-1.15.0}/setup.cfg +0 -0
- {isar-1.14.5 → isar-1.15.0}/setup.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/apis/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/apis/api.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/apis/models/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/apis/models/models.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/apis/models/start_mission_definition.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/apis/schedule/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/apis/security/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/apis/security/authentication.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/certs/ca-cert.pem +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/configuration_error.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/keyvault/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/keyvault/keyvault_error.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/keyvault/keyvault_service.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/log.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/logging.conf +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/maps/JSP1_intermediate_deck.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/maps/JSP1_weather_deck.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/maps/default_map.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/maps/klab_b.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/maps/klab_compressor.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/maps/klab_turtlebot.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/maps/turtleworld.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/predefined_mission_definition/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/predefined_mission_definition/default_mission.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/predefined_mission_definition/default_turtlebot.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/predefined_missions/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/predefined_missions/default.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/predefined_missions/default_turtlebot.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/predefined_poses/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/predefined_poses/predefined_poses.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/settings.env +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/config/settings.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/mission_planner/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/mission_planner/local_planner.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/mission_planner/mission_planner_interface.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/mission_planner/sequential_task_selector.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/mission_planner/task_selector_interface.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/models/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/models/communication/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/models/communication/queues/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/models/communication/queues/queue_io.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/models/communication/queues/queue_timeout_error.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/models/communication/queues/queues.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/models/communication/queues/status_queue.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/models/mission_metadata/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/modules.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/auth/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/auth/azure_credentials.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/readers/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/readers/base_reader.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/service_connections/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/service_connections/mqtt/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/service_connections/mqtt/mqtt_client.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/service_connections/mqtt/robot_status_publisher.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/service_connections/request_handler.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/service_connections/stid/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/service_connections/stid/stid_service.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/utilities/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/utilities/queue_utilities.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/services/utilities/threaded_request.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/state_machine/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/state_machine/states/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/state_machine/states/initialize.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/state_machine/states/initiate.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/state_machine/states/off.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/state_machine/states/paused.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/state_machine/states/stop.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/state_machine/states_enum.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar/storage/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar.egg-info/dependency_links.txt +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar.egg-info/requires.txt +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/isar.egg-info/top_level.txt +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/models/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/models/exceptions/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/models/exceptions/robot_exceptions.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/models/initialize/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/models/initialize/initialize_params.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/models/inspection/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/models/inspection/inspection.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/models/mission/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/models/mission/mission.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/models/mission/status.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/models/mission/step.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/models/mission/task.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/models/robots/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/models/robots/robot_model.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/robot_interface.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/telemetry/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/test_robot_interface.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/utilities/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/utilities/json_service.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/src/robot_interface/utilities/uuid_string_factory.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/conftest.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/integration/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/integration/turtlebot/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/integration/turtlebot/config/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/integration/turtlebot/config/maps/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/integration/turtlebot/config/maps/turtleworld.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/integration/turtlebot/config/missions/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/integration/turtlebot/config/missions/default.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/integration/turtlebot/test_successful_mission.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/apis/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/apis/scheduler/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/apis/scheduler/test_scheduler_router.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/apis/security/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/apis/security/test_authentication.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/mission/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/mission/test_mission.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/models/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/models/communication/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/models/communication/test_queues.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/models/test_start_mission_definition.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/services/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/services/readers/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/services/readers/test_base_reader.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/services/service_connections/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/services/service_connections/echo/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/services/service_connections/stid/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/services/service_connections/stid/test_stid_service.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/services/service_connections/test_base_request_handler.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/services/utilities/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/services/utilities/test_queue_utilities.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/services/utilities/test_scheduling_utilities.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/state_machine/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/state_machine/states/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/state_machine/states/test_monitor.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/isar/storage/test_blob_storage.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/mocks/__init__.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/mocks/mission_definition.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/mocks/mqtt_client.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/mocks/pose.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/mocks/request.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/mocks/robot_interface.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/mocks/status.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/mocks/step.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/mocks/task.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/mocks/token.py +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/test_data/test_json_file.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/test_data/test_map_config/test_map_config.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/test_data/test_mission_not_working.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/test_data/test_mission_working.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/test_data/test_mission_working_no_tasks.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/test_data/test_thermal_image_mission.json +0 -0
- {isar-1.14.5 → isar-1.15.0}/tests/test_modules.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: isar
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.15.0
|
|
4
4
|
Summary: Integration and Supervisory control of Autonomous Robots
|
|
5
5
|
Home-page: https://github.com/equinor/isar
|
|
6
6
|
Author: Equinor ASA
|
|
@@ -41,7 +41,7 @@ Steps:
|
|
|
41
41
|
For local development, please fork the repository. Then, clone and install in the repository root folder:
|
|
42
42
|
|
|
43
43
|
```
|
|
44
|
-
git clone https://github.com
|
|
44
|
+
git clone https://github.com/<path_to_parent>/isar
|
|
45
45
|
cd isar
|
|
46
46
|
pip install -e .[dev]
|
|
47
47
|
```
|
|
@@ -22,7 +22,7 @@ Steps:
|
|
|
22
22
|
For local development, please fork the repository. Then, clone and install in the repository root folder:
|
|
23
23
|
|
|
24
24
|
```
|
|
25
|
-
git clone https://github.com
|
|
25
|
+
git clone https://github.com/<path_to_parent>/isar
|
|
26
26
|
cd isar
|
|
27
27
|
pip install -e .[dev]
|
|
28
28
|
```
|
|
@@ -18,7 +18,6 @@ from isar.apis.models.start_mission_definition import (
|
|
|
18
18
|
)
|
|
19
19
|
from isar.config.settings import robot_settings, settings
|
|
20
20
|
from isar.mission_planner.mission_planner_interface import MissionPlannerError
|
|
21
|
-
from isar.models.mission_metadata.mission_metadata import MissionMetadata
|
|
22
21
|
from isar.services.utilities.scheduling_utilities import SchedulingUtilities
|
|
23
22
|
from isar.state_machine.states_enum import States
|
|
24
23
|
from robot_interface.models.mission.mission import Mission
|
|
@@ -76,12 +75,11 @@ class SchedulingController:
|
|
|
76
75
|
)
|
|
77
76
|
|
|
78
77
|
self.logger.info(f"Starting mission with ISAR Mission ID: '{mission.id}'")
|
|
79
|
-
|
|
80
|
-
mission_id=mission.id, mission_name=mission.name
|
|
81
|
-
)
|
|
78
|
+
|
|
82
79
|
self.scheduling_utilities.start_mission(
|
|
83
|
-
mission=mission, initial_pose=initial_pose_alitra
|
|
80
|
+
mission=mission, initial_pose=initial_pose_alitra
|
|
84
81
|
)
|
|
82
|
+
|
|
85
83
|
return self._api_response(mission)
|
|
86
84
|
|
|
87
85
|
def start_mission(
|
|
@@ -141,12 +139,9 @@ class SchedulingController:
|
|
|
141
139
|
initial_pose.to_alitra_pose() if initial_pose else None
|
|
142
140
|
)
|
|
143
141
|
|
|
144
|
-
metadata: MissionMetadata = MissionMetadata(
|
|
145
|
-
mission_id=mission.id, mission_name=mission.name
|
|
146
|
-
)
|
|
147
142
|
self.logger.info(f"Starting mission: {mission.id}")
|
|
148
143
|
self.scheduling_utilities.start_mission(
|
|
149
|
-
mission=mission,
|
|
144
|
+
mission=mission, initial_pose=initial_pose_alitra
|
|
150
145
|
)
|
|
151
146
|
return self._api_response(mission)
|
|
152
147
|
|
|
@@ -224,15 +219,11 @@ class SchedulingController:
|
|
|
224
219
|
pose: Pose = target_pose.to_alitra_pose()
|
|
225
220
|
step: DriveToPose = DriveToPose(pose=pose)
|
|
226
221
|
mission: Mission = Mission(tasks=[Task(steps=[step])])
|
|
227
|
-
|
|
228
|
-
mission_id=mission.id, mission_name=mission.name
|
|
229
|
-
)
|
|
222
|
+
|
|
230
223
|
self.logger.info(
|
|
231
224
|
f"Starting drive to mission with ISAR Mission ID: '{mission.id}'"
|
|
232
225
|
)
|
|
233
|
-
self.scheduling_utilities.start_mission(
|
|
234
|
-
mission=mission, initial_pose=None, mission_metadata=metadata
|
|
235
|
-
)
|
|
226
|
+
self.scheduling_utilities.start_mission(mission=mission, initial_pose=None)
|
|
236
227
|
return self._api_response(mission)
|
|
237
228
|
|
|
238
229
|
def start_localization_mission(
|
|
@@ -253,14 +244,13 @@ class SchedulingController:
|
|
|
253
244
|
pose: Pose = localization_pose.to_alitra_pose()
|
|
254
245
|
step: Localize = Localize(localization_pose=pose)
|
|
255
246
|
mission: Mission = Mission(tasks=[Task(steps=[step])])
|
|
256
|
-
|
|
257
|
-
mission_id=mission.id, mission_name=mission.name
|
|
258
|
-
)
|
|
247
|
+
|
|
259
248
|
self.logger.info(
|
|
260
249
|
f"Starting localization mission with ISAR Mission ID: '{mission.id}'"
|
|
261
250
|
)
|
|
262
251
|
self.scheduling_utilities.start_mission(
|
|
263
|
-
mission=mission,
|
|
252
|
+
mission=mission,
|
|
253
|
+
initial_pose=None,
|
|
264
254
|
)
|
|
265
255
|
return self._api_response(mission)
|
|
266
256
|
|
|
@@ -3,12 +3,10 @@ from typing import Optional
|
|
|
3
3
|
|
|
4
4
|
from alitra import Pose
|
|
5
5
|
|
|
6
|
-
from isar.models.mission_metadata.mission_metadata import MissionMetadata
|
|
7
6
|
from robot_interface.models.mission.mission import Mission
|
|
8
7
|
|
|
9
8
|
|
|
10
9
|
@dataclass
|
|
11
10
|
class StartMissionMessage:
|
|
12
11
|
mission: Mission
|
|
13
|
-
mission_metadata: MissionMetadata
|
|
14
12
|
initial_pose: Optional[Pose]
|
{isar-1.14.5 → isar-1.15.0}/src/isar/services/service_connections/mqtt/robot_info_publisher.py
RENAMED
|
@@ -20,6 +20,7 @@ class RobotInfoPublisher:
|
|
|
20
20
|
robot_name=settings.ROBOT_NAME,
|
|
21
21
|
robot_model=robot_settings.ROBOT_MODEL, # type: ignore
|
|
22
22
|
robot_serial_number=settings.SERIAL_NUMBER,
|
|
23
|
+
robot_asset=settings.PLANT_SHORT_NAME,
|
|
23
24
|
video_streams=settings.VIDEO_STREAMS,
|
|
24
25
|
host=settings.API_HOST_VIEWED_EXTERNALLY,
|
|
25
26
|
port=settings.API_PORT,
|
|
@@ -18,7 +18,6 @@ from isar.mission_planner.mission_planner_interface import (
|
|
|
18
18
|
)
|
|
19
19
|
from isar.models.communication.message import StartMissionMessage
|
|
20
20
|
from isar.models.communication.queues import QueueIO, Queues, QueueTimeoutError
|
|
21
|
-
from isar.models.mission_metadata.mission_metadata import MissionMetadata
|
|
22
21
|
from isar.services.utilities.queue_utilities import QueueUtilities
|
|
23
22
|
from isar.state_machine.states_enum import States
|
|
24
23
|
from robot_interface.models.mission.mission import Mission
|
|
@@ -139,7 +138,6 @@ class SchedulingUtilities:
|
|
|
139
138
|
def start_mission(
|
|
140
139
|
self,
|
|
141
140
|
mission: Mission,
|
|
142
|
-
mission_metadata: MissionMetadata,
|
|
143
141
|
initial_pose: Optional[Pose],
|
|
144
142
|
) -> None:
|
|
145
143
|
"""Start mission
|
|
@@ -153,7 +151,6 @@ class SchedulingUtilities:
|
|
|
153
151
|
self._send_command(
|
|
154
152
|
StartMissionMessage(
|
|
155
153
|
mission=deepcopy(mission),
|
|
156
|
-
mission_metadata=deepcopy(mission_metadata),
|
|
157
154
|
initial_pose=initial_pose,
|
|
158
155
|
),
|
|
159
156
|
self.queues.start_mission,
|
|
@@ -19,7 +19,6 @@ from isar.mission_planner.task_selector_interface import (
|
|
|
19
19
|
)
|
|
20
20
|
from isar.models.communication.message import StartMissionMessage
|
|
21
21
|
from isar.models.communication.queues.queues import Queues
|
|
22
|
-
from isar.models.mission_metadata.mission_metadata import MissionMetadata
|
|
23
22
|
from isar.state_machine.states import (
|
|
24
23
|
Idle,
|
|
25
24
|
Initialize,
|
|
@@ -203,7 +202,6 @@ class StateMachine(object):
|
|
|
203
202
|
|
|
204
203
|
self.stopped: bool = False
|
|
205
204
|
self.current_mission: Optional[Mission] = None
|
|
206
|
-
self.current_mission_metadata: Optional[MissionMetadata] = None
|
|
207
205
|
self.current_task: Optional[Task] = None
|
|
208
206
|
self.current_step: Optional[Step] = None
|
|
209
207
|
self.initial_pose: Optional[Pose] = None
|
|
@@ -436,12 +434,9 @@ class StateMachine(object):
|
|
|
436
434
|
self.current_mission = None
|
|
437
435
|
self.initial_pose = None
|
|
438
436
|
|
|
439
|
-
def start_mission(
|
|
440
|
-
self, mission: Mission, mission_metadata: MissionMetadata, initial_pose: Pose
|
|
441
|
-
):
|
|
437
|
+
def start_mission(self, mission: Mission, initial_pose: Pose):
|
|
442
438
|
"""Starts a scheduled mission."""
|
|
443
439
|
self.current_mission = mission
|
|
444
|
-
self.current_mission_metadata = mission_metadata
|
|
445
440
|
self.initial_pose = initial_pose
|
|
446
441
|
|
|
447
442
|
self.task_selector.initialize(tasks=self.current_mission.tasks)
|
|
@@ -31,7 +31,6 @@ class Idle(State):
|
|
|
31
31
|
if start_mission:
|
|
32
32
|
self.state_machine.start_mission(
|
|
33
33
|
mission=start_mission.mission,
|
|
34
|
-
mission_metadata=start_mission.mission_metadata,
|
|
35
34
|
initial_pose=start_mission.initial_pose,
|
|
36
35
|
)
|
|
37
36
|
transition = self.state_machine.mission_started # type: ignore
|
|
@@ -6,7 +6,6 @@ from typing import Callable, Optional, Sequence, TYPE_CHECKING, Tuple, Union
|
|
|
6
6
|
from injector import inject
|
|
7
7
|
from transitions import State
|
|
8
8
|
|
|
9
|
-
from isar.models.mission_metadata.mission_metadata import MissionMetadata
|
|
10
9
|
from isar.services.utilities.threaded_request import (
|
|
11
10
|
ThreadedRequest,
|
|
12
11
|
ThreadedRequestNotFinishedError,
|
|
@@ -129,18 +128,16 @@ class Monitor(State):
|
|
|
129
128
|
f"No inspection data retrieved for step {str(current_step.id)[:8]}"
|
|
130
129
|
)
|
|
131
130
|
|
|
132
|
-
# A deepcopy is made to freeze the
|
|
131
|
+
# A deepcopy is made to freeze the mission before passing it to another thread
|
|
133
132
|
# through the queue
|
|
134
|
-
|
|
135
|
-
self.state_machine.current_mission_metadata
|
|
136
|
-
)
|
|
133
|
+
mission: Mission = deepcopy(self.state_machine.current_mission)
|
|
137
134
|
|
|
138
135
|
for inspection in inspections:
|
|
139
136
|
inspection.metadata.tag_id = current_step.tag_id
|
|
140
137
|
|
|
141
|
-
message: Tuple[Inspection,
|
|
138
|
+
message: Tuple[Inspection, Mission] = (
|
|
142
139
|
inspection,
|
|
143
|
-
|
|
140
|
+
mission,
|
|
144
141
|
)
|
|
145
142
|
self.state_machine.queues.upload_queue.put(message)
|
|
146
143
|
self.logger.info(f"Inspection: {str(inspection.id)[:8]} queued for upload")
|
|
@@ -7,7 +7,7 @@ from injector import inject
|
|
|
7
7
|
|
|
8
8
|
from isar.config.keyvault.keyvault_service import Keyvault
|
|
9
9
|
from isar.config.settings import settings
|
|
10
|
-
from
|
|
10
|
+
from robot_interface.models.mission.mission import Mission
|
|
11
11
|
from isar.storage.storage_interface import StorageException, StorageInterface
|
|
12
12
|
from isar.storage.utilities import construct_metadata_file, construct_paths
|
|
13
13
|
from robot_interface.models.inspection.inspection import Inspection
|
|
@@ -31,13 +31,13 @@ class BlobStorage(StorageInterface):
|
|
|
31
31
|
|
|
32
32
|
self.logger = logging.getLogger("uploader")
|
|
33
33
|
|
|
34
|
-
def store(self, inspection: Inspection,
|
|
34
|
+
def store(self, inspection: Inspection, mission: Mission) -> str:
|
|
35
35
|
data_path, metadata_path = construct_paths(
|
|
36
|
-
inspection=inspection,
|
|
36
|
+
inspection=inspection, mission=mission
|
|
37
37
|
)
|
|
38
38
|
|
|
39
39
|
metadata_bytes: bytes = construct_metadata_file(
|
|
40
|
-
inspection=inspection,
|
|
40
|
+
inspection=inspection, mission=mission, filename=data_path.name
|
|
41
41
|
)
|
|
42
42
|
|
|
43
43
|
self._upload_file(path=metadata_path, data=metadata_bytes)
|
|
@@ -2,7 +2,7 @@ import logging
|
|
|
2
2
|
from pathlib import Path
|
|
3
3
|
|
|
4
4
|
from isar.config.settings import settings
|
|
5
|
-
from
|
|
5
|
+
from robot_interface.models.mission.mission import Mission
|
|
6
6
|
from isar.storage.storage_interface import StorageException, StorageInterface
|
|
7
7
|
from isar.storage.utilities import construct_metadata_file, construct_paths
|
|
8
8
|
from robot_interface.models.inspection.inspection import Inspection
|
|
@@ -13,9 +13,9 @@ class LocalStorage(StorageInterface):
|
|
|
13
13
|
self.root_folder: Path = Path(settings.LOCAL_STORAGE_PATH)
|
|
14
14
|
self.logger = logging.getLogger("uploader")
|
|
15
15
|
|
|
16
|
-
def store(self, inspection: Inspection,
|
|
16
|
+
def store(self, inspection: Inspection, mission: Mission) -> str:
|
|
17
17
|
local_path, local_metadata_path = construct_paths(
|
|
18
|
-
inspection=inspection,
|
|
18
|
+
inspection=inspection, mission=mission
|
|
19
19
|
)
|
|
20
20
|
|
|
21
21
|
absolute_path: Path = self.root_folder.joinpath(local_path)
|
|
@@ -24,7 +24,7 @@ class LocalStorage(StorageInterface):
|
|
|
24
24
|
absolute_path.parent.mkdir(parents=True, exist_ok=True)
|
|
25
25
|
|
|
26
26
|
metadata_bytes: bytes = construct_metadata_file(
|
|
27
|
-
inspection=inspection,
|
|
27
|
+
inspection=inspection, mission=mission, filename=local_path.name
|
|
28
28
|
)
|
|
29
29
|
try:
|
|
30
30
|
with open(absolute_path, "wb") as file, open(
|
|
@@ -7,7 +7,7 @@ from requests import HTTPError, RequestException
|
|
|
7
7
|
from requests_toolbelt import MultipartEncoder
|
|
8
8
|
|
|
9
9
|
from isar.config.settings import settings
|
|
10
|
-
from
|
|
10
|
+
from robot_interface.models.mission.mission import Mission
|
|
11
11
|
from isar.services.auth.azure_credentials import AzureCredentials
|
|
12
12
|
from isar.services.service_connections.request_handler import RequestHandler
|
|
13
13
|
from isar.storage.storage_interface import StorageException, StorageInterface
|
|
@@ -31,22 +31,22 @@ class SlimmStorage(StorageInterface):
|
|
|
31
31
|
|
|
32
32
|
self.url: str = settings.SLIMM_API_URL
|
|
33
33
|
|
|
34
|
-
def store(self, inspection: Inspection,
|
|
34
|
+
def store(self, inspection: Inspection, mission: Mission) -> str:
|
|
35
35
|
filename: str = get_filename(
|
|
36
36
|
inspection=inspection,
|
|
37
37
|
)
|
|
38
38
|
filename = f"{filename}.{inspection.metadata.file_type}"
|
|
39
39
|
if type(inspection) in [Video, ThermalVideo]:
|
|
40
|
-
inspection_path = self._store_video(filename, inspection,
|
|
40
|
+
inspection_path = self._store_video(filename, inspection, mission)
|
|
41
41
|
else:
|
|
42
|
-
inspection_path = self._store_image(filename, inspection,
|
|
42
|
+
inspection_path = self._store_image(filename, inspection, mission)
|
|
43
43
|
return inspection_path
|
|
44
44
|
|
|
45
45
|
def _store_image(
|
|
46
|
-
self, filename: str, inspection: Inspection,
|
|
46
|
+
self, filename: str, inspection: Inspection, mission: Mission
|
|
47
47
|
) -> str:
|
|
48
48
|
multiform_body: MultipartEncoder = self._construct_multiform_request_image(
|
|
49
|
-
filename=filename, inspection=inspection,
|
|
49
|
+
filename=filename, inspection=inspection, mission=mission
|
|
50
50
|
)
|
|
51
51
|
request_url: str = f"{self.url}/UploadSingleImage"
|
|
52
52
|
inspection_path = self._ingest(
|
|
@@ -57,10 +57,10 @@ class SlimmStorage(StorageInterface):
|
|
|
57
57
|
return inspection_path
|
|
58
58
|
|
|
59
59
|
def _store_video(
|
|
60
|
-
self, filename: str, inspection: Inspection,
|
|
60
|
+
self, filename: str, inspection: Inspection, mission: Mission
|
|
61
61
|
) -> str:
|
|
62
62
|
multiform_body: MultipartEncoder = self._construct_multiform_request_video(
|
|
63
|
-
filename=filename, inspection=inspection,
|
|
63
|
+
filename=filename, inspection=inspection, mission=mission
|
|
64
64
|
)
|
|
65
65
|
request_url = f"{self.url}/UploadSingleVideo"
|
|
66
66
|
inspection_path = self._ingest(
|
|
@@ -96,23 +96,23 @@ class SlimmStorage(StorageInterface):
|
|
|
96
96
|
|
|
97
97
|
@staticmethod
|
|
98
98
|
def _construct_multiform_request_image(
|
|
99
|
-
filename: str, inspection: Inspection,
|
|
99
|
+
filename: str, inspection: Inspection, mission: Mission
|
|
100
100
|
):
|
|
101
101
|
array_of_orientation = (
|
|
102
102
|
inspection.metadata.pose.orientation.to_quat_array().tolist()
|
|
103
103
|
)
|
|
104
104
|
multiform_body: MultipartEncoder = MultipartEncoder(
|
|
105
105
|
fields={
|
|
106
|
-
"PlantFacilitySAPCode":
|
|
107
|
-
"InstCode":
|
|
108
|
-
"InternalClassification":
|
|
106
|
+
"PlantFacilitySAPCode": settings.PLANT_CODE,
|
|
107
|
+
"InstCode": settings.PLANT_SHORT_NAME,
|
|
108
|
+
"InternalClassification": settings.DATA_CLASSIFICATION,
|
|
109
109
|
"IsoCountryCode": "NO",
|
|
110
|
-
"Geodetic.CoordinateReferenceSystemCode":
|
|
111
|
-
"Geodetic.VerticalCoordinateReferenceSystemCode":
|
|
112
|
-
"Geodetic.OrientationReferenceSystem":
|
|
113
|
-
"SensorCarrier.SensorCarrierId":
|
|
114
|
-
"SensorCarrier.ModelName":
|
|
115
|
-
"Mission.MissionId":
|
|
110
|
+
"Geodetic.CoordinateReferenceSystemCode": settings.COORDINATE_REFERENCE_SYSTEM, # noqa: E501
|
|
111
|
+
"Geodetic.VerticalCoordinateReferenceSystemCode": settings.VERTICAL_REFERENCE_SYSTEM, # noqa: E501
|
|
112
|
+
"Geodetic.OrientationReferenceSystem": settings.MEDIA_ORIENTATION_REFERENCE_SYSTEM, # noqa: E501
|
|
113
|
+
"SensorCarrier.SensorCarrierId": settings.ISAR_ID,
|
|
114
|
+
"SensorCarrier.ModelName": settings.ROBOT_TYPE,
|
|
115
|
+
"Mission.MissionId": mission.id,
|
|
116
116
|
"Mission.Client": "Equinor",
|
|
117
117
|
"ImageMetadata.Timestamp": inspection.metadata.start_time.isoformat(), # noqa: E501
|
|
118
118
|
"ImageMetadata.X": str(inspection.metadata.pose.position.x),
|
|
@@ -139,23 +139,23 @@ class SlimmStorage(StorageInterface):
|
|
|
139
139
|
def _construct_multiform_request_video(
|
|
140
140
|
filename: str,
|
|
141
141
|
inspection: Inspection,
|
|
142
|
-
|
|
142
|
+
mission: Mission,
|
|
143
143
|
):
|
|
144
144
|
array_of_orientation = (
|
|
145
145
|
inspection.metadata.pose.orientation.to_quat_array().tolist()
|
|
146
146
|
)
|
|
147
147
|
multiform_body: MultipartEncoder = MultipartEncoder(
|
|
148
148
|
fields={
|
|
149
|
-
"PlantFacilitySAPCode":
|
|
150
|
-
"InstCode":
|
|
151
|
-
"InternalClassification":
|
|
149
|
+
"PlantFacilitySAPCode": settings.PLANT_CODE,
|
|
150
|
+
"InstCode": settings.PLANT_SHORT_NAME,
|
|
151
|
+
"InternalClassification": settings.DATA_CLASSIFICATION,
|
|
152
152
|
"IsoCountryCode": "NO",
|
|
153
|
-
"Geodetic.CoordinateReferenceSystemCode":
|
|
154
|
-
"Geodetic.VerticalCoordinateReferenceSystemCode":
|
|
155
|
-
"Geodetic.OrientationReferenceSystem":
|
|
156
|
-
"SensorCarrier.SensorCarrierId":
|
|
157
|
-
"SensorCarrier.ModelName":
|
|
158
|
-
"Mission.MissionId":
|
|
153
|
+
"Geodetic.CoordinateReferenceSystemCode": settings.COORDINATE_REFERENCE_SYSTEM, # noqa: E501
|
|
154
|
+
"Geodetic.VerticalCoordinateReferenceSystemCode": settings.VERTICAL_REFERENCE_SYSTEM, # noqa: E501
|
|
155
|
+
"Geodetic.OrientationReferenceSystem": settings.MEDIA_ORIENTATION_REFERENCE_SYSTEM, # noqa: E501
|
|
156
|
+
"SensorCarrier.SensorCarrierId": settings.ISAR_ID,
|
|
157
|
+
"SensorCarrier.ModelName": settings.ROBOT_TYPE,
|
|
158
|
+
"Mission.MissionId": mission.id,
|
|
159
159
|
"Mission.Client": "Equinor",
|
|
160
160
|
"VideoMetadata.Timestamp": inspection.metadata.start_time.isoformat(), # noqa: E501
|
|
161
161
|
# Converting to int because SLIMM expects an int, while we use floats in operations.
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
from abc import ABCMeta, abstractmethod
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from robot_interface.models.mission.mission import Mission
|
|
4
4
|
from robot_interface.models.inspection.inspection import Inspection
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
class StorageInterface(metaclass=ABCMeta):
|
|
8
8
|
@abstractmethod
|
|
9
|
-
def store(self, inspection: Inspection,
|
|
9
|
+
def store(self, inspection: Inspection, mission: Mission) -> str:
|
|
10
10
|
"""
|
|
11
11
|
Parameters
|
|
12
12
|
----------
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
mission : Mission
|
|
14
|
+
Mission the inspection is a part of.
|
|
15
15
|
inspection : Inspection
|
|
16
16
|
The inspection object to be stored.
|
|
17
17
|
|
|
@@ -9,7 +9,7 @@ from injector import inject
|
|
|
9
9
|
|
|
10
10
|
from isar.config.settings import settings
|
|
11
11
|
from isar.models.communication.queues import Queues
|
|
12
|
-
from
|
|
12
|
+
from robot_interface.models.mission.mission import Mission
|
|
13
13
|
from isar.storage.storage_interface import StorageException, StorageInterface
|
|
14
14
|
from robot_interface.models.inspection.inspection import Inspection
|
|
15
15
|
from robot_interface.telemetry.mqtt_client import MqttClientInterface
|
|
@@ -19,7 +19,7 @@ from robot_interface.utilities.json_service import EnhancedJSONEncoder
|
|
|
19
19
|
@dataclass
|
|
20
20
|
class UploaderQueueItem:
|
|
21
21
|
inspection: Inspection
|
|
22
|
-
|
|
22
|
+
mission: Mission
|
|
23
23
|
storage_handler: StorageInterface
|
|
24
24
|
_retry_count: int
|
|
25
25
|
_next_retry_time: datetime = datetime.utcnow()
|
|
@@ -78,17 +78,17 @@ class Uploader:
|
|
|
78
78
|
self.logger.info("Started uploader")
|
|
79
79
|
while True:
|
|
80
80
|
inspection: Inspection
|
|
81
|
-
|
|
81
|
+
mission: Mission
|
|
82
82
|
try:
|
|
83
83
|
if self._internal_upload_queue:
|
|
84
84
|
self._process_upload_queue()
|
|
85
85
|
|
|
86
|
-
inspection,
|
|
86
|
+
inspection, mission = self.upload_queue.get(timeout=1)
|
|
87
87
|
|
|
88
88
|
# If new item from thread queue, add one per handler to internal queue:
|
|
89
89
|
for storage_handler in self.storage_handlers:
|
|
90
90
|
new_item: UploaderQueueItem = UploaderQueueItem(
|
|
91
|
-
inspection,
|
|
91
|
+
inspection, mission, storage_handler, _retry_count=-1
|
|
92
92
|
)
|
|
93
93
|
self._internal_upload_queue.append(new_item)
|
|
94
94
|
except Empty:
|
|
@@ -98,7 +98,7 @@ class Uploader:
|
|
|
98
98
|
inspection_path = ""
|
|
99
99
|
try:
|
|
100
100
|
inspection_path = upload_item.storage_handler.store(
|
|
101
|
-
inspection=upload_item.inspection,
|
|
101
|
+
inspection=upload_item.inspection, mission=upload_item.mission
|
|
102
102
|
)
|
|
103
103
|
self.logger.info(
|
|
104
104
|
f"Storage handler: {type(upload_item.storage_handler).__name__} "
|
|
@@ -3,15 +3,16 @@ import time
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from typing import Tuple
|
|
5
5
|
|
|
6
|
-
from
|
|
6
|
+
from robot_interface.models.mission.mission import Mission
|
|
7
7
|
from robot_interface.models.inspection.inspection import Inspection
|
|
8
8
|
from robot_interface.utilities.json_service import EnhancedJSONEncoder
|
|
9
9
|
|
|
10
|
+
from isar.config.settings import settings
|
|
11
|
+
from datetime import date, datetime
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
folder: Path = Path(get_foldername(metadata=metadata))
|
|
13
|
+
|
|
14
|
+
def construct_paths(inspection: Inspection, mission: Mission) -> Tuple[Path, Path]:
|
|
15
|
+
folder: Path = Path(get_foldername(mission=mission))
|
|
15
16
|
filename: str = get_filename(inspection=inspection)
|
|
16
17
|
|
|
17
18
|
inspection_path: Path = folder.joinpath(
|
|
@@ -24,26 +25,26 @@ def construct_paths(
|
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
def construct_metadata_file(
|
|
27
|
-
inspection: Inspection,
|
|
28
|
+
inspection: Inspection, mission: Mission, filename: str
|
|
28
29
|
) -> bytes:
|
|
29
30
|
data: dict = {
|
|
30
|
-
"coordinate_reference_system":
|
|
31
|
-
"vertical_reference_system":
|
|
32
|
-
"data_classification":
|
|
31
|
+
"coordinate_reference_system": settings.COORDINATE_REFERENCE_SYSTEM,
|
|
32
|
+
"vertical_reference_system": settings.VERTICAL_REFERENCE_SYSTEM,
|
|
33
|
+
"data_classification": settings.DATA_CLASSIFICATION,
|
|
33
34
|
"source_url": None,
|
|
34
|
-
"plant_code":
|
|
35
|
-
"media_orientation_reference_system":
|
|
35
|
+
"plant_code": settings.PLANT_CODE,
|
|
36
|
+
"media_orientation_reference_system": settings.MEDIA_ORIENTATION_REFERENCE_SYSTEM, # noqa: E501
|
|
36
37
|
"additional_meta": {
|
|
37
|
-
"mission_id":
|
|
38
|
-
"mission_name":
|
|
39
|
-
"plant_name":
|
|
40
|
-
"mission_date":
|
|
41
|
-
"isar_id":
|
|
42
|
-
"robot_name":
|
|
38
|
+
"mission_id": mission.id,
|
|
39
|
+
"mission_name": mission.name,
|
|
40
|
+
"plant_name": settings.PLANT_NAME,
|
|
41
|
+
"mission_date": datetime.utcnow().date(),
|
|
42
|
+
"isar_id": settings.ISAR_ID,
|
|
43
|
+
"robot_name": settings.ROBOT_NAME,
|
|
43
44
|
},
|
|
44
45
|
"data": [
|
|
45
46
|
{
|
|
46
|
-
"folder": f"/{get_foldername(
|
|
47
|
+
"folder": f"/{get_foldername(mission=mission)}",
|
|
47
48
|
"files": [
|
|
48
49
|
{
|
|
49
50
|
"file_name": filename,
|
|
@@ -73,5 +74,5 @@ def get_filename(
|
|
|
73
74
|
return f"{tag}__{inspection_type}__{epoch_time}"
|
|
74
75
|
|
|
75
76
|
|
|
76
|
-
def get_foldername(
|
|
77
|
-
return f"{
|
|
77
|
+
def get_foldername(mission: Mission) -> str:
|
|
78
|
+
return f"{datetime.utcnow().date()}__{settings.PLANT_SHORT_NAME}__{mission.name}__{mission.id}"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: isar
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.15.0
|
|
4
4
|
Summary: Integration and Supervisory control of Autonomous Robots
|
|
5
5
|
Home-page: https://github.com/equinor/isar
|
|
6
6
|
Author: Equinor ASA
|
|
@@ -41,7 +41,7 @@ Steps:
|
|
|
41
41
|
For local development, please fork the repository. Then, clone and install in the repository root folder:
|
|
42
42
|
|
|
43
43
|
```
|
|
44
|
-
git clone https://github.com
|
|
44
|
+
git clone https://github.com/<path_to_parent>/isar
|
|
45
45
|
cd isar
|
|
46
46
|
pip install -e .[dev]
|
|
47
47
|
```
|
|
@@ -83,7 +83,6 @@ src/isar/models/communication/queues/queue_timeout_error.py
|
|
|
83
83
|
src/isar/models/communication/queues/queues.py
|
|
84
84
|
src/isar/models/communication/queues/status_queue.py
|
|
85
85
|
src/isar/models/mission_metadata/__init__.py
|
|
86
|
-
src/isar/models/mission_metadata/mission_metadata.py
|
|
87
86
|
src/isar/services/__init__.py
|
|
88
87
|
src/isar/services/auth/__init__.py
|
|
89
88
|
src/isar/services/auth/azure_credentials.py
|
|
@@ -3,9 +3,7 @@ from abc import ABCMeta, abstractmethod
|
|
|
3
3
|
from queue import Queue
|
|
4
4
|
from typing import Callable, Tuple
|
|
5
5
|
|
|
6
|
-
from robot_interface.models.exceptions
|
|
7
|
-
RobotInvalidTelemetryException,
|
|
8
|
-
)
|
|
6
|
+
from robot_interface.models.exceptions import RobotException
|
|
9
7
|
|
|
10
8
|
|
|
11
9
|
class MqttClientInterface(metaclass=ABCMeta):
|
|
@@ -66,7 +64,7 @@ class MqttTelemetryPublisher(MqttClientInterface):
|
|
|
66
64
|
payload: str = self.telemetry_method(
|
|
67
65
|
isar_id=isar_id, robot_name=robot_name
|
|
68
66
|
)
|
|
69
|
-
except
|
|
67
|
+
except RobotException:
|
|
70
68
|
continue
|
|
71
69
|
|
|
72
70
|
self.publish(
|
|
@@ -5,7 +5,6 @@ from alitra import Frame, Orientation, Pose, Position
|
|
|
5
5
|
|
|
6
6
|
from isar.config.settings import settings
|
|
7
7
|
from isar.mission_planner.mission_planner_interface import MissionNotFoundError
|
|
8
|
-
from isar.models.mission_metadata.mission_metadata import MissionMetadata
|
|
9
8
|
from robot_interface.models.mission.mission import Mission
|
|
10
9
|
from robot_interface.models.mission.step import (
|
|
11
10
|
DriveToPose,
|
|
@@ -68,15 +67,10 @@ def test_read_mission_from_file(mission_reader) -> None:
|
|
|
68
67
|
task_4: Task = Task(steps=[expected_step_6])
|
|
69
68
|
|
|
70
69
|
expected_tasks = [task_1, task_2, task_3, task_4]
|
|
71
|
-
expected_mission: Mission = Mission(tasks=expected_tasks)
|
|
72
|
-
expected_metadata: MissionMetadata = MissionMetadata(
|
|
73
|
-
expected_mission.id, expected_mission.name
|
|
74
|
-
)
|
|
75
70
|
mission: Mission = mission_reader.read_mission_from_file(
|
|
76
71
|
Path("./tests/test_data/test_mission_working.json")
|
|
77
72
|
)
|
|
78
73
|
|
|
79
|
-
assert expected_metadata.data_classification == MissionMetadata.data_classification
|
|
80
74
|
for expected_task, task in zip(expected_tasks, mission.tasks):
|
|
81
75
|
for expected_step, step in zip(expected_task.steps, task.steps):
|
|
82
76
|
if isinstance(expected_step, DriveToPose) and isinstance(step, DriveToPose):
|