isar 1.22.3__tar.gz → 1.23.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.22.3 → isar-1.23.0}/PKG-INFO +1 -1
- {isar-1.22.3 → isar-1.23.0}/requirements.txt +17 -18
- {isar-1.22.3 → isar-1.23.0}/src/isar/apis/api.py +1 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/apis/models/models.py +2 -7
- isar-1.23.0/src/isar/apis/models/start_mission_definition.py +226 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/apis/schedule/scheduling_controller.py +11 -20
- isar-1.23.0/src/isar/config/predefined_missions/default.json +74 -0
- isar-1.23.0/src/isar/config/predefined_missions/default_turtlebot.json +106 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/settings.env +1 -1
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/settings.py +3 -3
- {isar-1.22.3 → isar-1.23.0}/src/isar/mission_planner/local_planner.py +3 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/mission_planner/sequential_task_selector.py +3 -3
- {isar-1.22.3 → isar-1.23.0}/src/isar/mission_planner/task_selector_interface.py +4 -4
- {isar-1.22.3 → isar-1.23.0}/src/isar/script.py +1 -1
- {isar-1.22.3 → isar-1.23.0}/src/isar/services/service_connections/mqtt/mqtt_client.py +1 -1
- {isar-1.22.3 → isar-1.23.0}/src/isar/services/utilities/scheduling_utilities.py +3 -4
- {isar-1.22.3 → isar-1.23.0}/src/isar/state_machine/state_machine.py +22 -98
- {isar-1.22.3 → isar-1.23.0}/src/isar/state_machine/states/idle.py +2 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/state_machine/states/initialize.py +1 -1
- {isar-1.22.3 → isar-1.23.0}/src/isar/state_machine/states/initiate.py +10 -10
- {isar-1.22.3 → isar-1.23.0}/src/isar/state_machine/states/monitor.py +78 -98
- {isar-1.22.3 → isar-1.23.0}/src/isar/state_machine/states/offline.py +1 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/state_machine/states/paused.py +1 -1
- {isar-1.22.3 → isar-1.23.0}/src/isar/state_machine/states/stop.py +1 -1
- {isar-1.22.3 → isar-1.23.0}/src/isar.egg-info/PKG-INFO +1 -1
- {isar-1.22.3 → isar-1.23.0}/src/isar.egg-info/SOURCES.txt +0 -2
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/models/exceptions/robot_exceptions.py +3 -3
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/models/inspection/inspection.py +1 -1
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/models/mission/mission.py +2 -2
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/models/mission/status.py +0 -8
- isar-1.23.0/src/robot_interface/models/mission/task.py +197 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/robot_interface.py +29 -54
- {isar-1.22.3 → isar-1.23.0}/tests/integration/turtlebot/test_successful_mission.py +4 -7
- {isar-1.22.3 → isar-1.23.0}/tests/isar/apis/scheduler/test_scheduler_router.py +16 -45
- isar-1.23.0/tests/isar/mission/test_mission.py +134 -0
- isar-1.23.0/tests/isar/models/example_mission_definition.json +37 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/models/test_start_mission_definition.py +11 -42
- {isar-1.22.3 → isar-1.23.0}/tests/isar/services/readers/test_base_reader.py +3 -7
- {isar-1.22.3 → isar-1.23.0}/tests/isar/services/readers/test_mission_reader.py +51 -50
- {isar-1.22.3 → isar-1.23.0}/tests/isar/services/utilities/test_scheduling_utilities.py +2 -2
- {isar-1.22.3 → isar-1.23.0}/tests/isar/state_machine/states/test_monitor.py +15 -20
- {isar-1.22.3 → isar-1.23.0}/tests/isar/state_machine/test_state_machine.py +38 -39
- {isar-1.22.3 → isar-1.23.0}/tests/isar/storage/test_uploader.py +2 -2
- isar-1.23.0/tests/mocks/mission_definition.py +119 -0
- {isar-1.22.3 → isar-1.23.0}/tests/mocks/robot_interface.py +12 -12
- isar-1.23.0/tests/mocks/task.py +16 -0
- isar-1.23.0/tests/test_data/test_mission_working.json +93 -0
- isar-1.23.0/tests/test_data/test_thermal_image_mission.json +30 -0
- isar-1.22.3/src/isar/apis/models/start_mission_definition.py +0 -237
- isar-1.22.3/src/isar/config/predefined_missions/default.json +0 -92
- isar-1.22.3/src/isar/config/predefined_missions/default_turtlebot.json +0 -110
- isar-1.22.3/src/robot_interface/models/mission/step.py +0 -234
- isar-1.22.3/src/robot_interface/models/mission/task.py +0 -130
- isar-1.22.3/tests/isar/mission/test_mission.py +0 -171
- isar-1.22.3/tests/isar/models/example_mission_definition.json +0 -40
- isar-1.22.3/tests/mocks/mission_definition.py +0 -179
- isar-1.22.3/tests/mocks/step.py +0 -14
- isar-1.22.3/tests/mocks/task.py +0 -0
- isar-1.22.3/tests/test_data/test_mission_working.json +0 -115
- isar-1.22.3/tests/test_data/test_thermal_image_mission.json +0 -18
- {isar-1.22.3 → isar-1.23.0}/.dockerignore +0 -0
- {isar-1.22.3 → isar-1.23.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {isar-1.22.3 → isar-1.23.0}/.github/ISSUE_TEMPLATE/feature.md +0 -0
- {isar-1.22.3 → isar-1.23.0}/.github/ISSUE_TEMPLATE/improvement.md +0 -0
- {isar-1.22.3 → isar-1.23.0}/.github/release.yml +0 -0
- {isar-1.22.3 → isar-1.23.0}/.github/workflows/compile_requirements.yml +0 -0
- {isar-1.22.3 → isar-1.23.0}/.github/workflows/project_automations.yml +0 -0
- {isar-1.22.3 → isar-1.23.0}/.github/workflows/publish_isar_base_image.yml +0 -0
- {isar-1.22.3 → isar-1.23.0}/.github/workflows/pythonpackage.yml +0 -0
- {isar-1.22.3 → isar-1.23.0}/.github/workflows/pythonpublish.yml +0 -0
- {isar-1.22.3 → isar-1.23.0}/.github/workflows/stale.yml +0 -0
- {isar-1.22.3 → isar-1.23.0}/.gitignore +0 -0
- {isar-1.22.3 → isar-1.23.0}/.pre-commit-config.yaml +0 -0
- {isar-1.22.3 → isar-1.23.0}/Dockerfile +0 -0
- {isar-1.22.3 → isar-1.23.0}/LICENSE +0 -0
- {isar-1.22.3 → isar-1.23.0}/README.md +0 -0
- {isar-1.22.3 → isar-1.23.0}/SECURITY.md +0 -0
- {isar-1.22.3 → isar-1.23.0}/docker-compose-turtlebot.yml +0 -0
- {isar-1.22.3 → isar-1.23.0}/docker-compose.yml +0 -0
- {isar-1.22.3 → isar-1.23.0}/docs/Makefile +0 -0
- {isar-1.22.3 → isar-1.23.0}/docs/make.bat +0 -0
- {isar-1.22.3 → isar-1.23.0}/docs/rst_processing.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/docs/source/conf.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/docs/source/index.rst +0 -0
- {isar-1.22.3 → isar-1.23.0}/docs/source/readme_link.md +0 -0
- {isar-1.22.3 → isar-1.23.0}/docs/state_machine_diagram.png +0 -0
- {isar-1.22.3 → isar-1.23.0}/main.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/pyproject.toml +0 -0
- {isar-1.22.3 → isar-1.23.0}/radixconfig.yml +0 -0
- {isar-1.22.3 → isar-1.23.0}/setup.cfg +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/apis/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/apis/models/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/apis/schedule/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/apis/security/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/apis/security/authentication.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/certs/ca-cert.pem +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/configuration_error.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/keyvault/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/keyvault/keyvault_error.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/keyvault/keyvault_service.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/log.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/logging.conf +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/maps/JSP1_intermediate_deck.json +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/maps/JSP1_weather_deck.json +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/maps/default_map.json +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/maps/klab_b.json +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/maps/klab_compressor.json +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/maps/klab_turtlebot.json +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/maps/turtleworld.json +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/predefined_mission_definition/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/predefined_mission_definition/default_exr.json +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/predefined_mission_definition/default_mission.json +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/predefined_mission_definition/default_turtlebot.json +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/predefined_missions/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/predefined_poses/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/config/predefined_poses/predefined_poses.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/mission_planner/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/mission_planner/mission_planner_interface.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/models/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/models/communication/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/models/communication/message.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/models/communication/queues/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/models/communication/queues/queue_io.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/models/communication/queues/queue_timeout_error.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/models/communication/queues/queues.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/models/communication/queues/status_queue.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/models/mission_metadata/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/modules.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/services/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/services/auth/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/services/auth/azure_credentials.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/services/readers/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/services/readers/base_reader.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/services/service_connections/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/services/service_connections/mqtt/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/services/service_connections/mqtt/robot_info_publisher.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/services/service_connections/request_handler.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/services/service_connections/stid/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/services/utilities/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/services/utilities/queue_utilities.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/services/utilities/threaded_request.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/state_machine/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/state_machine/states/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/state_machine/states/off.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/state_machine/states_enum.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/storage/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/storage/blob_storage.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/storage/local_storage.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/storage/slimm_storage.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/storage/storage_interface.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/storage/uploader.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar/storage/utilities.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar.egg-info/dependency_links.txt +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar.egg-info/entry_points.txt +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar.egg-info/requires.txt +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/isar.egg-info/top_level.txt +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/models/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/models/exceptions/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/models/initialize/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/models/initialize/initialize_params.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/models/inspection/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/models/mission/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/models/robots/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/models/robots/robot_model.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/telemetry/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/telemetry/media_connection_type.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/telemetry/mqtt_client.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/telemetry/payloads.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/test_robot_interface.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/utilities/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/utilities/json_service.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/src/robot_interface/utilities/uuid_string_factory.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/conftest.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/integration/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/integration/turtlebot/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/integration/turtlebot/config/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/integration/turtlebot/config/maps/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/integration/turtlebot/config/maps/turtleworld.json +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/integration/turtlebot/config/missions/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/integration/turtlebot/config/missions/default.json +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/apis/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/apis/scheduler/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/apis/security/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/apis/security/test_authentication.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/mission/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/models/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/models/communication/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/models/communication/test_queues.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/services/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/services/readers/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/services/service_connections/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/services/service_connections/echo/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/services/service_connections/test_base_request_handler.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/services/utilities/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/services/utilities/test_queue_utilities.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/state_machine/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/state_machine/states/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/isar/storage/test_blob_storage.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/mocks/__init__.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/mocks/blob_storage.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/mocks/mqtt_client.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/mocks/pose.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/mocks/request.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/mocks/status.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/mocks/token.py +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/test_data/test_json_file.json +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/test_data/test_map_config/test_map_config.json +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/test_data/test_mission_not_working.json +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/test_data/test_mission_working_no_tasks.json +0 -0
- {isar-1.22.3 → isar-1.23.0}/tests/test_modules.py +0 -0
|
@@ -8,23 +8,23 @@ alitra==1.1.3
|
|
|
8
8
|
# via isar (pyproject.toml)
|
|
9
9
|
annotated-types==0.7.0
|
|
10
10
|
# via pydantic
|
|
11
|
-
anyio==4.
|
|
11
|
+
anyio==4.6.0
|
|
12
12
|
# via
|
|
13
13
|
# httpx
|
|
14
14
|
# starlette
|
|
15
|
-
azure-core==1.
|
|
15
|
+
azure-core==1.31.0
|
|
16
16
|
# via
|
|
17
17
|
# azure-identity
|
|
18
18
|
# azure-keyvault-secrets
|
|
19
19
|
# azure-storage-blob
|
|
20
20
|
# opencensus-ext-azure
|
|
21
|
-
azure-identity==1.
|
|
21
|
+
azure-identity==1.18.0
|
|
22
22
|
# via
|
|
23
23
|
# isar (pyproject.toml)
|
|
24
24
|
# opencensus-ext-azure
|
|
25
25
|
azure-keyvault-secrets==4.8.0
|
|
26
26
|
# via isar (pyproject.toml)
|
|
27
|
-
azure-storage-blob==12.
|
|
27
|
+
azure-storage-blob==12.23.1
|
|
28
28
|
# via isar (pyproject.toml)
|
|
29
29
|
backoff==2.2.1
|
|
30
30
|
# via isar (pyproject.toml)
|
|
@@ -54,15 +54,15 @@ dacite==1.8.1
|
|
|
54
54
|
# via
|
|
55
55
|
# alitra
|
|
56
56
|
# isar (pyproject.toml)
|
|
57
|
-
fastapi==0.
|
|
57
|
+
fastapi==0.115.0
|
|
58
58
|
# via
|
|
59
59
|
# fastapi-azure-auth
|
|
60
60
|
# isar (pyproject.toml)
|
|
61
61
|
fastapi-azure-auth==5.0.1
|
|
62
62
|
# via isar (pyproject.toml)
|
|
63
|
-
google-api-core==2.
|
|
63
|
+
google-api-core==2.20.0
|
|
64
64
|
# via opencensus
|
|
65
|
-
google-auth==2.
|
|
65
|
+
google-auth==2.35.0
|
|
66
66
|
# via google-api-core
|
|
67
67
|
googleapis-common-protos==1.65.0
|
|
68
68
|
# via google-api-core
|
|
@@ -70,18 +70,18 @@ h11==0.14.0
|
|
|
70
70
|
# via
|
|
71
71
|
# httpcore
|
|
72
72
|
# uvicorn
|
|
73
|
-
httpcore==1.0.
|
|
73
|
+
httpcore==1.0.6
|
|
74
74
|
# via httpx
|
|
75
75
|
httpx==0.27.2
|
|
76
76
|
# via fastapi-azure-auth
|
|
77
|
-
idna==3.
|
|
77
|
+
idna==3.10
|
|
78
78
|
# via
|
|
79
79
|
# anyio
|
|
80
80
|
# httpx
|
|
81
81
|
# requests
|
|
82
82
|
injector==0.22.0
|
|
83
83
|
# via isar (pyproject.toml)
|
|
84
|
-
isodate==0.
|
|
84
|
+
isodate==0.7.0
|
|
85
85
|
# via
|
|
86
86
|
# azure-keyvault-secrets
|
|
87
87
|
# azure-storage-blob
|
|
@@ -91,7 +91,7 @@ msal==1.31.0
|
|
|
91
91
|
# msal-extensions
|
|
92
92
|
msal-extensions==1.2.0
|
|
93
93
|
# via azure-identity
|
|
94
|
-
numpy==2.1.
|
|
94
|
+
numpy==2.1.2
|
|
95
95
|
# via
|
|
96
96
|
# alitra
|
|
97
97
|
# isar (pyproject.toml)
|
|
@@ -115,7 +115,7 @@ portalocker==2.10.1
|
|
|
115
115
|
# via msal-extensions
|
|
116
116
|
proto-plus==1.24.0
|
|
117
117
|
# via google-api-core
|
|
118
|
-
protobuf==5.28.
|
|
118
|
+
protobuf==5.28.2
|
|
119
119
|
# via
|
|
120
120
|
# google-api-core
|
|
121
121
|
# googleapis-common-protos
|
|
@@ -130,12 +130,12 @@ pyasn1-modules==0.4.1
|
|
|
130
130
|
# via google-auth
|
|
131
131
|
pycparser==2.22
|
|
132
132
|
# via cffi
|
|
133
|
-
pydantic==2.9.
|
|
133
|
+
pydantic==2.9.2
|
|
134
134
|
# via
|
|
135
135
|
# fastapi
|
|
136
136
|
# isar (pyproject.toml)
|
|
137
137
|
# pydantic-settings
|
|
138
|
-
pydantic-core==2.23.
|
|
138
|
+
pydantic-core==2.23.4
|
|
139
139
|
# via pydantic
|
|
140
140
|
pydantic-settings==2.5.2
|
|
141
141
|
# via isar (pyproject.toml)
|
|
@@ -168,14 +168,13 @@ scipy==1.14.1
|
|
|
168
168
|
six==1.16.0
|
|
169
169
|
# via
|
|
170
170
|
# azure-core
|
|
171
|
-
# isodate
|
|
172
171
|
# opencensus
|
|
173
172
|
# transitions
|
|
174
173
|
sniffio==1.3.1
|
|
175
174
|
# via
|
|
176
175
|
# anyio
|
|
177
176
|
# httpx
|
|
178
|
-
starlette==0.38.
|
|
177
|
+
starlette==0.38.6
|
|
179
178
|
# via fastapi
|
|
180
179
|
transitions==0.9.2
|
|
181
180
|
# via isar (pyproject.toml)
|
|
@@ -188,9 +187,9 @@ typing-extensions==4.12.2
|
|
|
188
187
|
# fastapi
|
|
189
188
|
# pydantic
|
|
190
189
|
# pydantic-core
|
|
191
|
-
urllib3==2.2.
|
|
190
|
+
urllib3==2.2.3
|
|
192
191
|
# via requests
|
|
193
|
-
uvicorn==0.
|
|
192
|
+
uvicorn==0.31.0
|
|
194
193
|
# via isar (pyproject.toml)
|
|
195
194
|
wrapt==1.16.0
|
|
196
195
|
# via opencensus-ext-requests
|
|
@@ -3,16 +3,13 @@ from typing import List, Optional
|
|
|
3
3
|
from alitra import Frame, Orientation, Pose, Position
|
|
4
4
|
from pydantic import BaseModel, Field
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
class StepResponse(BaseModel):
|
|
8
|
-
id: str
|
|
9
|
-
type: str
|
|
6
|
+
from robot_interface.models.mission.task import TaskTypes
|
|
10
7
|
|
|
11
8
|
|
|
12
9
|
class TaskResponse(BaseModel):
|
|
13
10
|
id: str
|
|
14
11
|
tag_id: Optional[str] = None
|
|
15
|
-
|
|
12
|
+
type: TaskTypes
|
|
16
13
|
|
|
17
14
|
|
|
18
15
|
class StartMissionResponse(BaseModel):
|
|
@@ -25,8 +22,6 @@ class ControlMissionResponse(BaseModel):
|
|
|
25
22
|
mission_status: str
|
|
26
23
|
task_id: str
|
|
27
24
|
task_status: str
|
|
28
|
-
step_id: str
|
|
29
|
-
step_status: str
|
|
30
25
|
|
|
31
26
|
|
|
32
27
|
class RobotInfoResponse(BaseModel):
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import time
|
|
2
|
+
from enum import Enum
|
|
3
|
+
from typing import Any, Dict, List, Optional
|
|
4
|
+
|
|
5
|
+
from alitra import Frame, Orientation, Pose, Position
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
from isar.apis.models.models import InputPose, InputPosition
|
|
9
|
+
from isar.config.settings import settings
|
|
10
|
+
from isar.mission_planner.mission_planner_interface import MissionPlannerError
|
|
11
|
+
from robot_interface.models.inspection.inspection import Inspection, InspectionMetadata
|
|
12
|
+
from robot_interface.models.mission.mission import Mission
|
|
13
|
+
from robot_interface.models.mission.task import (
|
|
14
|
+
TASKS,
|
|
15
|
+
DockingProcedure,
|
|
16
|
+
Localize,
|
|
17
|
+
RecordAudio,
|
|
18
|
+
ReturnToHome,
|
|
19
|
+
TakeImage,
|
|
20
|
+
TakeThermalImage,
|
|
21
|
+
TakeThermalVideo,
|
|
22
|
+
TakeVideo,
|
|
23
|
+
)
|
|
24
|
+
from robot_interface.models.mission.task import Task
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class InspectionTypes(str, Enum):
|
|
28
|
+
image: str = "Image"
|
|
29
|
+
thermal_image: str = "ThermalImage"
|
|
30
|
+
video: str = "Video"
|
|
31
|
+
thermal_video: str = "ThermalVideo"
|
|
32
|
+
audio: str = "Audio"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class TaskType(str, Enum):
|
|
36
|
+
Inspection: str = "inspection"
|
|
37
|
+
Localization: str = "localization"
|
|
38
|
+
ReturnToHome: str = "return_to_home"
|
|
39
|
+
Dock: str = "dock"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class StartMissionInspectionDefinition(BaseModel):
|
|
43
|
+
type: InspectionTypes = Field(default=InspectionTypes.image)
|
|
44
|
+
inspection_target: InputPosition
|
|
45
|
+
analysis_type: Optional[str] = None
|
|
46
|
+
duration: Optional[float] = None
|
|
47
|
+
metadata: Optional[dict] = None
|
|
48
|
+
id: Optional[str] = None
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class StartMissionTaskDefinition(BaseModel):
|
|
52
|
+
type: TaskType = Field(default=TaskType.Inspection)
|
|
53
|
+
pose: InputPose
|
|
54
|
+
inspection: StartMissionInspectionDefinition
|
|
55
|
+
tag: Optional[str] = None
|
|
56
|
+
id: Optional[str] = None
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class StartMissionDefinition(BaseModel):
|
|
60
|
+
tasks: List[StartMissionTaskDefinition]
|
|
61
|
+
id: Optional[str] = None
|
|
62
|
+
name: Optional[str] = None
|
|
63
|
+
start_pose: Optional[InputPose] = None
|
|
64
|
+
dock: Optional[bool] = None
|
|
65
|
+
undock: Optional[bool] = None
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def to_isar_mission(start_mission_definition: StartMissionDefinition) -> Mission:
|
|
69
|
+
isar_tasks: List[TASKS] = []
|
|
70
|
+
|
|
71
|
+
for start_mission_task_definition in start_mission_definition.tasks:
|
|
72
|
+
task: TASKS = create_isar_task(start_mission_task_definition)
|
|
73
|
+
if start_mission_task_definition.id:
|
|
74
|
+
task.id = start_mission_task_definition.id
|
|
75
|
+
isar_tasks.append(task)
|
|
76
|
+
|
|
77
|
+
if not isar_tasks:
|
|
78
|
+
raise MissionPlannerError("Mission does not contain any valid tasks")
|
|
79
|
+
|
|
80
|
+
check_for_duplicate_ids(isar_tasks)
|
|
81
|
+
|
|
82
|
+
isar_mission: Mission = Mission(tasks=isar_tasks)
|
|
83
|
+
|
|
84
|
+
isar_mission.dock = start_mission_definition.dock
|
|
85
|
+
isar_mission.undock = start_mission_definition.undock
|
|
86
|
+
|
|
87
|
+
if start_mission_definition.name:
|
|
88
|
+
isar_mission.name = start_mission_definition.name
|
|
89
|
+
else:
|
|
90
|
+
isar_mission.name = _build_mission_name()
|
|
91
|
+
|
|
92
|
+
if start_mission_definition.id:
|
|
93
|
+
isar_mission.id = start_mission_definition.id
|
|
94
|
+
|
|
95
|
+
if start_mission_definition.start_pose:
|
|
96
|
+
input_pose: InputPose = start_mission_definition.start_pose
|
|
97
|
+
input_frame: Frame = Frame(name=input_pose.frame_name)
|
|
98
|
+
input_position: Position = Position(
|
|
99
|
+
input_pose.position.x,
|
|
100
|
+
input_pose.position.y,
|
|
101
|
+
input_pose.position.z,
|
|
102
|
+
input_frame,
|
|
103
|
+
)
|
|
104
|
+
input_orientation: Orientation = Orientation(
|
|
105
|
+
input_pose.orientation.x,
|
|
106
|
+
input_pose.orientation.y,
|
|
107
|
+
input_pose.orientation.z,
|
|
108
|
+
input_pose.orientation.w,
|
|
109
|
+
input_frame,
|
|
110
|
+
)
|
|
111
|
+
isar_mission.start_pose = Pose(
|
|
112
|
+
position=input_position, orientation=input_orientation, frame=input_frame
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
return isar_mission
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def check_for_duplicate_ids(items: List[TASKS]):
|
|
119
|
+
duplicate_ids = get_duplicate_ids(items=items)
|
|
120
|
+
if len(duplicate_ids) > 0:
|
|
121
|
+
raise MissionPlannerError(
|
|
122
|
+
f"Failed to create as there were duplicate IDs which is not allowed "
|
|
123
|
+
f"({duplicate_ids})"
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def create_isar_task(start_mission_task_definition) -> TASKS:
|
|
128
|
+
|
|
129
|
+
if start_mission_task_definition.type == TaskType.Inspection:
|
|
130
|
+
return create_inspection_task(start_mission_task_definition)
|
|
131
|
+
elif start_mission_task_definition.type == TaskType.Localization:
|
|
132
|
+
return create_localization_task(start_mission_task_definition)
|
|
133
|
+
elif start_mission_task_definition.type == TaskType.ReturnToHome:
|
|
134
|
+
return create_return_to_home_task(start_mission_task_definition)
|
|
135
|
+
elif start_mission_task_definition.type == TaskType.Dock:
|
|
136
|
+
return create_dock_task()
|
|
137
|
+
else:
|
|
138
|
+
raise MissionPlannerError(
|
|
139
|
+
f"Failed to create task: '{start_mission_task_definition.type}' is not a valid"
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def create_inspection_task(
|
|
144
|
+
start_mission_task_definition: StartMissionTaskDefinition,
|
|
145
|
+
) -> TASKS:
|
|
146
|
+
|
|
147
|
+
if start_mission_task_definition.inspection.type == InspectionTypes.image:
|
|
148
|
+
return TakeImage(
|
|
149
|
+
target=start_mission_task_definition.inspection.inspection_target.to_alitra_position(),
|
|
150
|
+
tag_id=start_mission_task_definition.tag,
|
|
151
|
+
robot_pose=start_mission_task_definition.pose.to_alitra_pose(),
|
|
152
|
+
metadata=start_mission_task_definition.inspection.metadata,
|
|
153
|
+
)
|
|
154
|
+
elif start_mission_task_definition.inspection.type == InspectionTypes.video:
|
|
155
|
+
return TakeVideo(
|
|
156
|
+
target=start_mission_task_definition.inspection.inspection_target.to_alitra_position(),
|
|
157
|
+
duration=start_mission_task_definition.inspection.duration,
|
|
158
|
+
tag_id=start_mission_task_definition.tag,
|
|
159
|
+
robot_pose=start_mission_task_definition.pose.to_alitra_pose(),
|
|
160
|
+
metadata=start_mission_task_definition.inspection.metadata,
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
elif start_mission_task_definition.inspection.type == InspectionTypes.thermal_image:
|
|
164
|
+
return TakeThermalImage(
|
|
165
|
+
target=start_mission_task_definition.inspection.inspection_target.to_alitra_position(),
|
|
166
|
+
tag_id=start_mission_task_definition.tag,
|
|
167
|
+
robot_pose=start_mission_task_definition.pose.to_alitra_pose(),
|
|
168
|
+
metadata=start_mission_task_definition.inspection.metadata,
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
elif start_mission_task_definition.inspection.type == InspectionTypes.thermal_video:
|
|
172
|
+
return TakeThermalVideo(
|
|
173
|
+
target=start_mission_task_definition.inspection.inspection_target.to_alitra_position(),
|
|
174
|
+
duration=start_mission_task_definition.inspection.duration,
|
|
175
|
+
tag_id=start_mission_task_definition.tag,
|
|
176
|
+
robot_pose=start_mission_task_definition.pose.to_alitra_pose(),
|
|
177
|
+
metadata=start_mission_task_definition.inspection.metadata,
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
elif start_mission_task_definition.inspection.type == InspectionTypes.audio:
|
|
181
|
+
return RecordAudio(
|
|
182
|
+
target=start_mission_task_definition.inspection.inspection_target.to_alitra_position(),
|
|
183
|
+
duration=start_mission_task_definition.inspection.duration,
|
|
184
|
+
tag_id=start_mission_task_definition.tag,
|
|
185
|
+
robot_pose=start_mission_task_definition.pose.to_alitra_pose(),
|
|
186
|
+
metadata=start_mission_task_definition.inspection.metadata,
|
|
187
|
+
)
|
|
188
|
+
else:
|
|
189
|
+
raise ValueError(
|
|
190
|
+
f"Inspection type '{start_mission_task_definition.inspection.type}' not supported"
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
def create_localization_task(
|
|
195
|
+
start_mission_task_definition: StartMissionTaskDefinition,
|
|
196
|
+
) -> Localize:
|
|
197
|
+
return Localize(
|
|
198
|
+
localization_pose=start_mission_task_definition.pose.to_alitra_pose()
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
def create_return_to_home_task(
|
|
203
|
+
start_mission_task_definition: StartMissionTaskDefinition,
|
|
204
|
+
) -> ReturnToHome:
|
|
205
|
+
return ReturnToHome(pose=start_mission_task_definition.pose.to_alitra_pose())
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def create_dock_task() -> DockingProcedure:
|
|
209
|
+
return DockingProcedure(behavior="dock")
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def get_duplicate_ids(items: List[TASKS]) -> List[str]:
|
|
213
|
+
unique_ids: List[str] = []
|
|
214
|
+
duplicate_ids: List[str] = []
|
|
215
|
+
for item in items:
|
|
216
|
+
id: str = item.id
|
|
217
|
+
if id not in unique_ids:
|
|
218
|
+
unique_ids.append(id)
|
|
219
|
+
else:
|
|
220
|
+
duplicate_ids.append(id)
|
|
221
|
+
|
|
222
|
+
return duplicate_ids
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
def _build_mission_name() -> str:
|
|
226
|
+
return f"{settings.PLANT_SHORT_NAME}{settings.ROBOT_NAME}{int(time.time())}"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from http import HTTPStatus
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import Optional
|
|
4
4
|
|
|
5
5
|
from alitra import Pose
|
|
6
6
|
from fastapi import Body, HTTPException, Path
|
|
@@ -21,8 +21,8 @@ from isar.mission_planner.mission_planner_interface import MissionPlannerError
|
|
|
21
21
|
from isar.services.utilities.scheduling_utilities import SchedulingUtilities
|
|
22
22
|
from isar.state_machine.states_enum import States
|
|
23
23
|
from robot_interface.models.mission.mission import Mission
|
|
24
|
-
from robot_interface.models.mission.
|
|
25
|
-
|
|
24
|
+
from robot_interface.models.mission.task import (
|
|
25
|
+
TASKS,
|
|
26
26
|
Localize,
|
|
27
27
|
MoveArm,
|
|
28
28
|
ReturnToHome,
|
|
@@ -67,8 +67,7 @@ class SchedulingController:
|
|
|
67
67
|
mission: Mission = self.scheduling_utilities.get_mission(mission_id)
|
|
68
68
|
if return_pose:
|
|
69
69
|
pose: Pose = return_pose.to_alitra_pose()
|
|
70
|
-
|
|
71
|
-
mission.tasks.append(Task(steps=[step]))
|
|
70
|
+
mission.tasks.append(ReturnToHome(pose=pose))
|
|
72
71
|
|
|
73
72
|
self.scheduling_utilities.verify_robot_capable_of_mission(
|
|
74
73
|
mission=mission, robot_capabilities=robot_settings.CAPABILITIES
|
|
@@ -136,8 +135,7 @@ class SchedulingController:
|
|
|
136
135
|
)
|
|
137
136
|
if return_pose:
|
|
138
137
|
pose: Pose = return_pose.to_alitra_pose()
|
|
139
|
-
|
|
140
|
-
mission.tasks.append(Task(steps=[step]))
|
|
138
|
+
mission.tasks.append(ReturnToHome(pose=pose))
|
|
141
139
|
|
|
142
140
|
initial_pose_alitra: Optional[Pose] = (
|
|
143
141
|
initial_pose.to_alitra_pose() if initial_pose else None
|
|
@@ -211,7 +209,7 @@ class SchedulingController:
|
|
|
211
209
|
target_pose: InputPose = Body(
|
|
212
210
|
default=None,
|
|
213
211
|
title="Target Pose",
|
|
214
|
-
description="The target pose for the drive_to
|
|
212
|
+
description="The target pose for the drive_to task",
|
|
215
213
|
),
|
|
216
214
|
) -> StartMissionResponse:
|
|
217
215
|
self.logger.info("Received request to start new drive-to mission")
|
|
@@ -221,8 +219,7 @@ class SchedulingController:
|
|
|
221
219
|
self.scheduling_utilities.verify_state_machine_ready_to_receive_mission(state)
|
|
222
220
|
|
|
223
221
|
pose: Pose = target_pose.to_alitra_pose()
|
|
224
|
-
|
|
225
|
-
mission: Mission = Mission(tasks=[Task(steps=[step])])
|
|
222
|
+
mission: Mission = Mission(tasks=[ReturnToHome(pose=pose)])
|
|
226
223
|
|
|
227
224
|
self.logger.info(
|
|
228
225
|
f"Starting drive to mission with ISAR Mission ID: '{mission.id}'"
|
|
@@ -246,8 +243,7 @@ class SchedulingController:
|
|
|
246
243
|
self.scheduling_utilities.verify_state_machine_ready_to_receive_mission(state)
|
|
247
244
|
|
|
248
245
|
pose: Pose = localization_pose.to_alitra_pose()
|
|
249
|
-
|
|
250
|
-
mission: Mission = Mission(tasks=[Task(steps=[step])])
|
|
246
|
+
mission: Mission = Mission(tasks=[Localize(localization_pose=pose)])
|
|
251
247
|
|
|
252
248
|
self.logger.info(
|
|
253
249
|
f"Starting localization mission with ISAR Mission ID: '{mission.id}'"
|
|
@@ -294,8 +290,7 @@ class SchedulingController:
|
|
|
294
290
|
|
|
295
291
|
self.scheduling_utilities.verify_state_machine_ready_to_receive_mission(state)
|
|
296
292
|
|
|
297
|
-
|
|
298
|
-
mission: Mission = Mission(tasks=[Task(steps=[step])])
|
|
293
|
+
mission: Mission = Mission(tasks=[MoveArm(arm_pose=arm_pose_literal)])
|
|
299
294
|
|
|
300
295
|
self.logger.info(
|
|
301
296
|
f"Starting move arm mission with ISAR Mission ID: '{mission.id}'"
|
|
@@ -322,9 +317,5 @@ class SchedulingController:
|
|
|
322
317
|
tasks=[self._task_api_response(task) for task in mission.tasks],
|
|
323
318
|
)
|
|
324
319
|
|
|
325
|
-
def _task_api_response(self, task:
|
|
326
|
-
|
|
327
|
-
for step in task.steps:
|
|
328
|
-
steps.append({"id": step.id, "type": step.__class__.__name__})
|
|
329
|
-
|
|
330
|
-
return TaskResponse(id=task.id, tag_id=task.tag_id, steps=steps)
|
|
320
|
+
def _task_api_response(self, task: TASKS) -> TaskResponse:
|
|
321
|
+
return TaskResponse(id=task.id, tag_id=task.tag_id, type=task.type)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "1",
|
|
3
|
+
"tasks": [
|
|
4
|
+
{
|
|
5
|
+
"type": "take_image",
|
|
6
|
+
"robot_pose": {
|
|
7
|
+
"position": {
|
|
8
|
+
"x": -2,
|
|
9
|
+
"y": -2,
|
|
10
|
+
"z": 0,
|
|
11
|
+
"frame": "asset"
|
|
12
|
+
},
|
|
13
|
+
"orientation": {
|
|
14
|
+
"x": 0,
|
|
15
|
+
"y": 0,
|
|
16
|
+
"z": 0.4794255,
|
|
17
|
+
"w": 0.8775826,
|
|
18
|
+
"frame": "asset"
|
|
19
|
+
},
|
|
20
|
+
"frame": "asset"
|
|
21
|
+
},
|
|
22
|
+
"target": {
|
|
23
|
+
"x": 2,
|
|
24
|
+
"y": 2,
|
|
25
|
+
"z": 0,
|
|
26
|
+
"frame": "robot"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"type": "take_thermal_image",
|
|
31
|
+
"robot_pose": {
|
|
32
|
+
"position": {
|
|
33
|
+
"x": -2,
|
|
34
|
+
"y": 2,
|
|
35
|
+
"z": 0,
|
|
36
|
+
"frame": "asset"
|
|
37
|
+
},
|
|
38
|
+
"orientation": {
|
|
39
|
+
"x": 0,
|
|
40
|
+
"y": 0,
|
|
41
|
+
"z": 0.4794255,
|
|
42
|
+
"w": 0.8775826,
|
|
43
|
+
"frame": "asset"
|
|
44
|
+
},
|
|
45
|
+
"frame": "asset"
|
|
46
|
+
},
|
|
47
|
+
"target": {
|
|
48
|
+
"x": 2,
|
|
49
|
+
"y": 2,
|
|
50
|
+
"z": 0,
|
|
51
|
+
"frame": "robot"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"type": "return_to_home",
|
|
56
|
+
"pose": {
|
|
57
|
+
"position": {
|
|
58
|
+
"x": 2,
|
|
59
|
+
"y": 2,
|
|
60
|
+
"z": 0,
|
|
61
|
+
"frame": "asset"
|
|
62
|
+
},
|
|
63
|
+
"orientation": {
|
|
64
|
+
"x": 0,
|
|
65
|
+
"y": 0,
|
|
66
|
+
"z": 0.4794255,
|
|
67
|
+
"w": 0.8775826,
|
|
68
|
+
"frame": "asset"
|
|
69
|
+
},
|
|
70
|
+
"frame": "asset"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "2",
|
|
3
|
+
"tasks": [
|
|
4
|
+
{
|
|
5
|
+
"type": "take_image",
|
|
6
|
+
"robot_pose": {
|
|
7
|
+
"position": {
|
|
8
|
+
"x": -3.6,
|
|
9
|
+
"y": 4,
|
|
10
|
+
"z": 0,
|
|
11
|
+
"frame": "asset"
|
|
12
|
+
},
|
|
13
|
+
"orientation": {
|
|
14
|
+
"x": 0,
|
|
15
|
+
"y": 0,
|
|
16
|
+
"z": -0.7286672256879113,
|
|
17
|
+
"w": -0.6848660759820616,
|
|
18
|
+
"frame": "asset"
|
|
19
|
+
},
|
|
20
|
+
"frame": "asset"
|
|
21
|
+
},
|
|
22
|
+
"target": {
|
|
23
|
+
"x": -4.7,
|
|
24
|
+
"y": 4.9,
|
|
25
|
+
"z": 0,
|
|
26
|
+
"frame": "robot"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
{
|
|
31
|
+
"type": "take_image",
|
|
32
|
+
"robot_pose": {
|
|
33
|
+
"position": {
|
|
34
|
+
"x": 4.7,
|
|
35
|
+
"y": 3,
|
|
36
|
+
"z": 0,
|
|
37
|
+
"frame": "asset"
|
|
38
|
+
},
|
|
39
|
+
"orientation": {
|
|
40
|
+
"x": 0,
|
|
41
|
+
"y": 0,
|
|
42
|
+
"z": 0.5769585,
|
|
43
|
+
"w": 0.8167734,
|
|
44
|
+
"frame": "asset"
|
|
45
|
+
},
|
|
46
|
+
"frame": "asset"
|
|
47
|
+
},
|
|
48
|
+
"target": {
|
|
49
|
+
"x": 5.6,
|
|
50
|
+
"y": 5.2,
|
|
51
|
+
"z": 0,
|
|
52
|
+
"frame": "robot"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"type": "take_thermal_image",
|
|
57
|
+
"robot_pose": {
|
|
58
|
+
"position": {
|
|
59
|
+
"x": 4.7,
|
|
60
|
+
"y": 3,
|
|
61
|
+
"z": 0,
|
|
62
|
+
"frame": "asset"
|
|
63
|
+
},
|
|
64
|
+
"orientation": {
|
|
65
|
+
"x": 0,
|
|
66
|
+
"y": 0,
|
|
67
|
+
"z": 0.5769585,
|
|
68
|
+
"w": 0.8167734,
|
|
69
|
+
"frame": "asset"
|
|
70
|
+
},
|
|
71
|
+
"frame": "asset"
|
|
72
|
+
},
|
|
73
|
+
"target": {
|
|
74
|
+
"x": 3.1,
|
|
75
|
+
"y": 5.2,
|
|
76
|
+
"z": 0,
|
|
77
|
+
"frame": "robot"
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"type": "take_thermal_image",
|
|
82
|
+
"robot_pose": {
|
|
83
|
+
"position": {
|
|
84
|
+
"x": 0.95,
|
|
85
|
+
"y": 2.6,
|
|
86
|
+
"z": 0,
|
|
87
|
+
"frame": "asset"
|
|
88
|
+
},
|
|
89
|
+
"orientation": {
|
|
90
|
+
"x": 0,
|
|
91
|
+
"y": 0,
|
|
92
|
+
"z": -0.6992469,
|
|
93
|
+
"w": 0.7148802,
|
|
94
|
+
"frame": "asset"
|
|
95
|
+
},
|
|
96
|
+
"frame": "asset"
|
|
97
|
+
},
|
|
98
|
+
"target": {
|
|
99
|
+
"x": 1.9,
|
|
100
|
+
"y": 1.9,
|
|
101
|
+
"z": 0,
|
|
102
|
+
"frame": "robot"
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
]
|
|
106
|
+
}
|