From 6b8a60ea3ce3a48f480a9f93296595c3429a7c7c Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 15 Dec 2023 09:21:13 +0000 Subject: [PATCH] Update ProtocolDefinitions --- ProtocolDefinitions | 2 +- blueye/protocol/protos.py | 80 +++ blueye/protocol/types/__init__.py | 82 +++ blueye/protocol/types/control.py | 45 ++ blueye/protocol/types/message_formats.py | 129 ++++- blueye/protocol/types/mission_planning.py | 575 ++++++++++++++++++++++ blueye/protocol/types/req_rep.py | 65 +++ blueye/protocol/types/telemetry.py | 82 ++- 8 files changed, 1031 insertions(+), 29 deletions(-) create mode 100644 blueye/protocol/types/mission_planning.py diff --git a/ProtocolDefinitions b/ProtocolDefinitions index 9cd1cd7..d2db0e8 160000 --- a/ProtocolDefinitions +++ b/ProtocolDefinitions @@ -1 +1 @@ -Subproject commit 9cd1cd7b8d7a9d10e1bd9dbf98a64f8bd67cb4e8 +Subproject commit d2db0e8f77265adb36472d24bb11c69474054eea diff --git a/blueye/protocol/protos.py b/blueye/protocol/protos.py index 6b5da33..e064a32 100644 --- a/blueye/protocol/protos.py +++ b/blueye/protocol/protos.py @@ -35,7 +35,10 @@ from .types.control import AutoAltitudeCtrl from .types.control import AutoDepthCtrl from .types.control import AutoHeadingCtrl +from .types.control import AutoPilotHeaveCtrl +from .types.control import AutoPilotSurgeYawCtrl from .types.control import CancelCalibrationCtrl +from .types.control import ClearMissionCtrl from .types.control import DeactivateGuestPortsCtrl from .types.control import FinishCalibrationCtrl from .types.control import GenericServoCtrl @@ -45,12 +48,14 @@ from .types.control import LightsCtrl from .types.control import MotionInputCtrl from .types.control import MultibeamServoCtrl +from .types.control import PauseMissionCtrl from .types.control import PilotGPSPositionCtrl from .types.control import PingerConfigurationCtrl from .types.control import RecordCtrl from .types.control import ResetOdometerCtrl from .types.control import ResetPositionCtrl from .types.control import RestartGuestPortsCtrl +from .types.control import RunMissionCtrl from .types.control import SetAquaTrollConnectionStatusCtrl from .types.control import SetAquaTrollParameterUnitCtrl from .types.control import StartCalibrationCtrl @@ -67,6 +72,8 @@ from .types.message_formats import AutoAltitudeState from .types.message_formats import AutoDepthState from .types.message_formats import AutoHeadingState +from .types.message_formats import AutoPilotHeaveState +from .types.message_formats import AutoPilotSurgeYawState from .types.message_formats import Battery from .types.message_formats import BatteryBQ40Z50 from .types.message_formats import BinlogRecord @@ -117,6 +124,9 @@ from .types.message_formats import NStreamers from .types.message_formats import NavigationSensorID from .types.message_formats import NavigationSensorStatus +from .types.message_formats import Notification +from .types.message_formats import NotificationLevel +from .types.message_formats import NotificationType from .types.message_formats import OverlayParameters from .types.message_formats import PingerConfiguration from .types.message_formats import PositionEstimate @@ -140,6 +150,27 @@ from .types.message_formats import WaterDensity from .types.message_formats import WaterTemperature from .types.message_formats import WeatherVaningState +from .types.mission_planning import CameraAction +from .types.mission_planning import CameraCommand +from .types.mission_planning import ControlModeCommand +from .types.mission_planning import DepthSetPoint +from .types.mission_planning import DepthSetPointCommand +from .types.mission_planning import DepthZeroReference +from .types.mission_planning import GoToHomeCommand +from .types.mission_planning import GoToSeaBottomCommand +from .types.mission_planning import GoToSurfaceCommand +from .types.mission_planning import Instruction +from .types.mission_planning import InstructionType +from .types.mission_planning import Mission +from .types.mission_planning import MissionState +from .types.mission_planning import MissionStatus +from .types.mission_planning import PathSegment +from .types.mission_planning import ReferenceAutoPilot +from .types.mission_planning import TiltMainCameraCommand +from .types.mission_planning import TiltServoCommand +from .types.mission_planning import WaitForCommand +from .types.mission_planning import Waypoint +from .types.mission_planning import WaypointCommand from .types.req_rep import ConnectClientRep from .types.req_rep import ConnectClientReq from .types.req_rep import DisconnectClientRep @@ -148,6 +179,8 @@ from .types.req_rep import GetBatteryReq from .types.req_rep import GetCameraParametersRep from .types.req_rep import GetCameraParametersReq +from .types.req_rep import GetMissionRep +from .types.req_rep import GetMissionReq from .types.req_rep import GetOverlayParametersRep from .types.req_rep import GetOverlayParametersReq from .types.req_rep import GetTelemetryRep @@ -156,6 +189,10 @@ from .types.req_rep import PingReq from .types.req_rep import SetCameraParametersRep from .types.req_rep import SetCameraParametersReq +from .types.req_rep import SetInstructionUpdateRep +from .types.req_rep import SetInstructionUpdateReq +from .types.req_rep import SetMissionRep +from .types.req_rep import SetMissionReq from .types.req_rep import SetOverlayParametersRep from .types.req_rep import SetOverlayParametersReq from .types.req_rep import SetPubFrequencyRep @@ -199,11 +236,14 @@ from .types.telemetry import LaserTel from .types.telemetry import LightsTel from .types.telemetry import MedusaSpectrometerDataTel +from .types.telemetry import MissionStatusTel from .types.telemetry import MultibeamServoTel from .types.telemetry import NStreamersTel +from .types.telemetry import NotificationTel from .types.telemetry import PilotGPSPositionTel from .types.telemetry import PositionEstimateTel from .types.telemetry import RecordStateTel +from .types.telemetry import ReferenceAutoPilotTel from .types.telemetry import ReferenceTel from .types.telemetry import ThicknessGaugeTel from .types.telemetry import TiltAngleTel @@ -240,6 +280,10 @@ 'AutoDepthState', 'AutoHeadingCtrl', 'AutoHeadingState', + 'AutoPilotHeaveCtrl', + 'AutoPilotHeaveState', + 'AutoPilotSurgeYawCtrl', + 'AutoPilotSurgeYawState', 'Battery', 'BatteryBQ40Z50', 'BatteryBQ40Z50Tel', @@ -250,6 +294,8 @@ 'CalibrationState', 'CalibrationStateTel', 'Camera', + 'CameraAction', + 'CameraCommand', 'CameraParameters', 'CancelCalibrationCtrl', 'CanisterBottomHumidityTel', @@ -258,6 +304,7 @@ 'CanisterTemperature', 'CanisterTopHumidityTel', 'CanisterTopTemperatureTel', + 'ClearMissionCtrl', 'ClientInfo', 'ConnectClientRep', 'ConnectClientReq', @@ -267,6 +314,7 @@ 'ControlForce', 'ControlForceTel', 'ControlMode', + 'ControlModeCommand', 'ControlModeTel', 'ControllerHealth', 'ControllerHealthTel', @@ -275,8 +323,11 @@ 'DataStorageSpaceTel', 'DeactivateGuestPortsCtrl', 'Depth', + 'DepthSetPoint', + 'DepthSetPointCommand', 'DepthTel', 'DepthUnit', + 'DepthZeroReference', 'DisconnectClientRep', 'DisconnectClientReq', 'DiveTime', @@ -298,10 +349,15 @@ 'GetBatteryReq', 'GetCameraParametersRep', 'GetCameraParametersReq', + 'GetMissionRep', + 'GetMissionReq', 'GetOverlayParametersRep', 'GetOverlayParametersReq', 'GetTelemetryRep', 'GetTelemetryReq', + 'GoToHomeCommand', + 'GoToSeaBottomCommand', + 'GoToSurfaceCommand', 'GripperCtrl', 'GripperVelocities', 'GuestPortConnectorInfo', @@ -321,6 +377,8 @@ 'Imu', 'Imu1Tel', 'Imu2Tel', + 'Instruction', + 'InstructionType', 'IperfStatus', 'IperfTel', 'Laser', @@ -333,6 +391,10 @@ 'LogoType', 'MedusaSpectrometerData', 'MedusaSpectrometerDataTel', + 'Mission', + 'MissionState', + 'MissionStatus', + 'MissionStatusTel', 'Model', 'MotionInput', 'MotionInputCtrl', @@ -343,7 +405,13 @@ 'NStreamersTel', 'NavigationSensorID', 'NavigationSensorStatus', + 'Notification', + 'NotificationLevel', + 'NotificationTel', + 'NotificationType', 'OverlayParameters', + 'PathSegment', + 'PauseMissionCtrl', 'PilotGPSPositionCtrl', 'PilotGPSPositionTel', 'PingRep', @@ -358,6 +426,8 @@ 'RecordState', 'RecordStateTel', 'Reference', + 'ReferenceAutoPilot', + 'ReferenceAutoPilotTel', 'ReferenceTel', 'ResetCoordinateSource', 'ResetOdometerCtrl', @@ -365,12 +435,17 @@ 'ResetPositionSettings', 'Resolution', 'RestartGuestPortsCtrl', + 'RunMissionCtrl', 'SetAquaTrollConnectionStatus', 'SetAquaTrollConnectionStatusCtrl', 'SetAquaTrollParameterUnit', 'SetAquaTrollParameterUnitCtrl', 'SetCameraParametersRep', 'SetCameraParametersReq', + 'SetInstructionUpdateRep', + 'SetInstructionUpdateReq', + 'SetMissionRep', + 'SetMissionReq', 'SetOverlayParametersRep', 'SetOverlayParametersReq', 'SetPubFrequencyRep', @@ -392,6 +467,8 @@ 'ThicknessUnit', 'TiltAngle', 'TiltAngleTel', + 'TiltMainCameraCommand', + 'TiltServoCommand', 'TiltStabilizationCtrl', 'TiltStabilizationState', 'TiltStabilizationTel', @@ -400,11 +477,14 @@ 'Type', 'Vector3', 'VideoStorageSpaceTel', + 'WaitForCommand', 'WatchdogCtrl', 'WaterDensity', 'WaterDensityCtrl', 'WaterTemperature', 'WaterTemperatureTel', + 'Waypoint', + 'WaypointCommand', 'WeatherVaningCtrl', 'WeatherVaningState', 'BinlogRecord', diff --git a/blueye/protocol/types/__init__.py b/blueye/protocol/types/__init__.py index b99db33..5f5ee11 100644 --- a/blueye/protocol/types/__init__.py +++ b/blueye/protocol/types/__init__.py @@ -27,6 +27,8 @@ AutoAltitudeState, StationKeepingState, WeatherVaningState, + AutoPilotSurgeYawState, + AutoPilotHeaveState, ControlMode, TiltStabilizationState, SystemTime, @@ -49,6 +51,7 @@ ResetPositionSettings, Depth, Reference, + Notification, ControlForce, ControllerHealth, DiveTime, @@ -79,6 +82,8 @@ MedusaSpectrometerData, HeadingSource, ResetCoordinateSource, + NotificationType, + NotificationLevel, Model, PressureSensorType, Resolution, @@ -95,6 +100,29 @@ GuestPortDetachStatus, GuestPortError, ) +from .mission_planning import ( + Mission, + Instruction, + DepthSetPoint, + Waypoint, + ControlModeCommand, + WaypointCommand, + DepthSetPointCommand, + TiltMainCameraCommand, + TiltServoCommand, + WaitForCommand, + CameraCommand, + GoToSurfaceCommand, + GoToSeaBottomCommand, + GoToHomeCommand, + PathSegment, + ReferenceAutoPilot, + MissionStatus, + DepthZeroReference, + CameraAction, + InstructionType, + MissionState, +) from .req_rep import ( SetOverlayParametersReq, SetOverlayParametersRep, @@ -116,6 +144,12 @@ DisconnectClientRep, GetBatteryReq, GetBatteryRep, + SetMissionReq, + SetMissionRep, + GetMissionReq, + GetMissionRep, + SetInstructionUpdateReq, + SetInstructionUpdateRep, SetPubFrequencyReq, SetPubFrequencyRep, GetTelemetryReq, @@ -157,6 +191,11 @@ AutoAltitudeCtrl, StationKeepingCtrl, WeatherVaningCtrl, + AutoPilotSurgeYawCtrl, + AutoPilotHeaveCtrl, + RunMissionCtrl, + PauseMissionCtrl, + ClearMissionCtrl, ResetPositionCtrl, ResetOdometerCtrl, TiltStabilizationCtrl, @@ -179,6 +218,9 @@ PositionEstimateTel, DepthTel, ReferenceTel, + ReferenceAutoPilotTel, + MissionStatusTel, + NotificationTel, ControlForceTel, ControllerHealthTel, LightsTel, @@ -233,6 +275,8 @@ 'AutoAltitudeState', 'StationKeepingState', 'WeatherVaningState', + 'AutoPilotSurgeYawState', + 'AutoPilotHeaveState', 'ControlMode', 'TiltStabilizationState', 'SystemTime', @@ -255,6 +299,7 @@ 'ResetPositionSettings', 'Depth', 'Reference', + 'Notification', 'ControlForce', 'ControllerHealth', 'DiveTime', @@ -285,6 +330,8 @@ 'MedusaSpectrometerData', 'HeadingSource', 'ResetCoordinateSource', + 'NotificationType', + 'NotificationLevel', 'Model', 'PressureSensorType', 'Resolution', @@ -300,6 +347,27 @@ 'NavigationSensorID', 'GuestPortDetachStatus', 'GuestPortError', + 'Mission', + 'Instruction', + 'DepthSetPoint', + 'Waypoint', + 'ControlModeCommand', + 'WaypointCommand', + 'DepthSetPointCommand', + 'TiltMainCameraCommand', + 'TiltServoCommand', + 'WaitForCommand', + 'CameraCommand', + 'GoToSurfaceCommand', + 'GoToSeaBottomCommand', + 'GoToHomeCommand', + 'PathSegment', + 'ReferenceAutoPilot', + 'MissionStatus', + 'DepthZeroReference', + 'CameraAction', + 'InstructionType', + 'MissionState', 'SetOverlayParametersReq', 'SetOverlayParametersRep', 'GetOverlayParametersReq', @@ -320,6 +388,12 @@ 'DisconnectClientRep', 'GetBatteryReq', 'GetBatteryRep', + 'SetMissionReq', + 'SetMissionRep', + 'GetMissionReq', + 'GetMissionRep', + 'SetInstructionUpdateReq', + 'SetInstructionUpdateRep', 'SetPubFrequencyReq', 'SetPubFrequencyRep', 'GetTelemetryReq', @@ -357,6 +431,11 @@ 'AutoAltitudeCtrl', 'StationKeepingCtrl', 'WeatherVaningCtrl', + 'AutoPilotSurgeYawCtrl', + 'AutoPilotHeaveCtrl', + 'RunMissionCtrl', + 'PauseMissionCtrl', + 'ClearMissionCtrl', 'ResetPositionCtrl', 'ResetOdometerCtrl', 'TiltStabilizationCtrl', @@ -377,6 +456,9 @@ 'PositionEstimateTel', 'DepthTel', 'ReferenceTel', + 'ReferenceAutoPilotTel', + 'MissionStatusTel', + 'NotificationTel', 'ControlForceTel', 'ControllerHealthTel', 'LightsTel', diff --git a/blueye/protocol/types/control.py b/blueye/protocol/types/control.py index 0fe8f9b..4dcc756 100644 --- a/blueye/protocol/types/control.py +++ b/blueye/protocol/types/control.py @@ -42,6 +42,11 @@ 'AutoAltitudeCtrl', 'StationKeepingCtrl', 'WeatherVaningCtrl', + 'AutoPilotSurgeYawCtrl', + 'AutoPilotHeaveCtrl', + 'RunMissionCtrl', + 'PauseMissionCtrl', + 'ClearMissionCtrl', 'ResetPositionCtrl', 'ResetOdometerCtrl', 'TiltStabilizationCtrl', @@ -259,6 +264,46 @@ class WeatherVaningCtrl(proto.Message): ) +class AutoPilotSurgeYawCtrl(proto.Message): + r"""Issue a command to set Auto Pilot for cruising and turning to + a desired state. + + Attributes: + state (blueye.protocol.types.AutoPilotSurgeYawState): + State of the auto pilot surge yaw controller + """ + + state = proto.Field(proto.MESSAGE, number=1, + message=message_formats.AutoPilotSurgeYawState, + ) + + +class AutoPilotHeaveCtrl(proto.Message): + r"""Issue a command to set Auto Pilot for vertiacl movement to a + desired state. + + Attributes: + state (blueye.protocol.types.AutoPilotHeaveState): + State of the auto pilot heave controller + """ + + state = proto.Field(proto.MESSAGE, number=1, + message=message_formats.AutoPilotHeaveState, + ) + + +class RunMissionCtrl(proto.Message): + r"""Issue a command to start and pause the loaded mission.""" + + +class PauseMissionCtrl(proto.Message): + r"""Issue a command to pause the loaded mission.""" + + +class ClearMissionCtrl(proto.Message): + r"""Clear the loaded mission.""" + + class ResetPositionCtrl(proto.Message): r"""Issue a command to reset the position estimate. diff --git a/blueye/protocol/types/message_formats.py b/blueye/protocol/types/message_formats.py index 1e07d4d..b3d20f6 100644 --- a/blueye/protocol/types/message_formats.py +++ b/blueye/protocol/types/message_formats.py @@ -19,7 +19,7 @@ from google.protobuf import any_pb2 as gp_any # type: ignore -from google.protobuf import timestamp_pb2 as timestamp # type: ignore +from google.protobuf import timestamp_pb2 as gp_timestamp # type: ignore __protobuf__ = proto.module( @@ -27,6 +27,8 @@ manifest={ 'HeadingSource', 'ResetCoordinateSource', + 'NotificationType', + 'NotificationLevel', 'Model', 'PressureSensorType', 'Resolution', @@ -53,6 +55,8 @@ 'AutoAltitudeState', 'StationKeepingState', 'WeatherVaningState', + 'AutoPilotSurgeYawState', + 'AutoPilotHeaveState', 'ControlMode', 'TiltStabilizationState', 'SystemTime', @@ -75,6 +79,7 @@ 'ResetPositionSettings', 'Depth', 'Reference', + 'Notification', 'ControlForce', 'ControllerHealth', 'DiveTime', @@ -121,6 +126,45 @@ class ResetCoordinateSource(proto.Enum): RESET_COORDINATE_SOURCE_MANUAL = 2 +class NotificationType(proto.Enum): + r"""Notification is used for displaying info, warnings, and + errors to the user. + """ + NOTIFICATION_TYPE_UNSPECIFIED = 0 + NOTIFICATION_TYPE_POSITION_ESTIMATE_IS_INACCURATE = 1 + NOTIFICATION_TYPE_DRONE_POSITION_IS_UNKNOWN = 2 + NOTIFICATION_TYPE_USER_POSITION_IS_UNKNOWN = 3 + NOTIFICATION_TYPE_NO_MISSION_LOADED = 4 + NOTIFICATION_TYPE_MISSION_LOADED = 5 + NOTIFICATION_TYPE_FAILED_TO_LOAD_MISSION = 6 + NOTIFICATION_TYPE_MISSION_COMPLETE = 7 + NOTIFICATION_TYPE_INSTRUCTION_COMPLETE = 8 + NOTIFICATION_TYPE_WAYPOINT_REACHED = 9 + NOTIFICATION_TYPE_DEPTH_TARGET_REACHED = 10 + NOTIFICATION_TYPE_ALTITUDE_TARGET_REACHED = 11 + NOTIFICATION_TYPE_WAYPOINT_IS_TO_FAR_AWAY = 12 + NOTIFICATION_TYPE_DEPTH_SET_POINT_IS_TO_FAR_AWAY = 13 + NOTIFICATION_TYPE_TIME_TO_COMPLETE_IS_TOO_LONG = 14 + NOTIFICATION_TYPE_RETURNING_TO_HOME = 15 + NOTIFICATION_TYPE_GO_TO_SURFACE = 16 + NOTIFICATION_TYPE_GO_TO_SEA_BOTTOM = 17 + NOTIFICATION_TYPE_GO_TO_WAYPOINT = 18 + NOTIFICATION_TYPE_GO_TO_DEPTH_SET_POINT = 19 + NOTIFICATION_TYPE_GO_TO_WAYPOINT_WITH_DEPTH_SET_POINT = 20 + NOTIFICATION_TYPE_MISSION_STARTED = 21 + NOTIFICATION_TYPE_MISSION_PAUSED = 22 + NOTIFICATION_TYPE_MISSION_RESUMED = 23 + NOTIFICATION_TYPE_MISSION_ABORTED = 24 + + +class NotificationLevel(proto.Enum): + r"""List of available notification levels.""" + NOTIFICATION_LEVEL_UNSPECIFIED = 0 + NOTIFICATION_LEVEL_INFO = 1 + NOTIFICATION_LEVEL_WARNING = 2 + NOTIFICATION_LEVEL_ERROR = 3 + + class Model(proto.Enum): r"""Drone models produced by Blueye""" MODEL_UNSPECIFIED = 0 @@ -300,11 +344,11 @@ class BinlogRecord(proto.Message): ) unix_timestamp = proto.Field(proto.MESSAGE, number=2, - message=timestamp.Timestamp, + message=gp_timestamp.Timestamp, ) clock_monotonic = proto.Field(proto.MESSAGE, number=3, - message=timestamp.Timestamp, + message=gp_timestamp.Timestamp, ) @@ -458,6 +502,28 @@ class WeatherVaningState(proto.Message): enabled = proto.Field(proto.BOOL, number=1) +class AutoPilotSurgeYawState(proto.Message): + r"""Auto pilot surge yaw state. + + Attributes: + enabled (bool): + If auto pilot surge yaw is enabled + """ + + enabled = proto.Field(proto.BOOL, number=1) + + +class AutoPilotHeaveState(proto.Message): + r"""Auto pilot heave state. + + Attributes: + enabled (bool): + If auto pilot heave is enabled + """ + + enabled = proto.Field(proto.BOOL, number=1) + + class ControlMode(proto.Message): r"""Control mode from drone supervisor @@ -472,6 +538,10 @@ class ControlMode(proto.Message): If station keeping is enabled weather_vaning (bool): If weather vaning is enabled + auto_pilot_surge_yaw (bool): + If auto pilot surge yaw is enabled + auto_pilot_heave (bool): + If auto pilot heave is enabled """ auto_depth = proto.Field(proto.BOOL, number=1) @@ -484,6 +554,10 @@ class ControlMode(proto.Message): weather_vaning = proto.Field(proto.BOOL, number=5) + auto_pilot_surge_yaw = proto.Field(proto.BOOL, number=6) + + auto_pilot_heave = proto.Field(proto.BOOL, number=7) + class TiltStabilizationState(proto.Message): r"""Tilt stabilization state. @@ -507,7 +581,7 @@ class SystemTime(proto.Message): """ unix_timestamp = proto.Field(proto.MESSAGE, number=1, - message=timestamp.Timestamp, + message=gp_timestamp.Timestamp, ) @@ -603,7 +677,7 @@ class RecordState(proto.Message): class WaterDensity(proto.Message): r"""Water density. Used to specify the water density the drone is operating in, to - achieve more accruate depth measurements. + achieve more accurate depth measurements. Attributes: value (float): @@ -1141,7 +1215,7 @@ class BatteryChargingEvents(proto.Message): design_capacity = proto.Field(proto.FLOAT, number=20) manufacture_date = proto.Field(proto.MESSAGE, number=21, - message=timestamp.Timestamp, + message=gp_timestamp.Timestamp, ) serial_number = proto.Field(proto.UINT32, number=22) @@ -1200,8 +1274,8 @@ class Altitude(proto.Message): class ForwardDistance(proto.Message): - r"""Distance to an object infront of the drone, typically - obtained from an 1D pinger. + r"""Distance to an object infront of the drone + Typically obtained from a 1D pinger. Attributes: value (float): @@ -1318,7 +1392,7 @@ class Depth(proto.Message): class Reference(proto.Message): r"""Reference for the control system. Note that the internal heading - referece is not relative to North. Use (ControlHealth.heading_error + reference is not relative to North, use (ControlHealth.heading_error + pose.yaw) instead. Attributes: @@ -1354,6 +1428,39 @@ class Reference(proto.Message): altitude = proto.Field(proto.FLOAT, number=7) +class Notification(proto.Message): + r"""Notification is used for displaying info, warnings, and + errors to the user. + + Attributes: + type_ (blueye.protocol.types.NotificationType): + Notification to be displayed to the user + level (blueye.protocol.types.NotificationLevel): + Level of the notification, info, warning or + error + value (google.protobuf.any_pb2.Any): + Optional value to be displayed in the message + timestamp (google.protobuf.timestamp_pb2.Timestamp): + Timestamp of the notification + """ + + type_ = proto.Field(proto.ENUM, number=1, + enum='NotificationType', + ) + + level = proto.Field(proto.ENUM, number=2, + enum='NotificationLevel', + ) + + value = proto.Field(proto.MESSAGE, number=3, + message=gp_any.Any, + ) + + timestamp = proto.Field(proto.MESSAGE, number=4, + message=gp_timestamp.Timestamp, + ) + + class ControlForce(proto.Message): r"""Control Force is used for showing the requested control force in each direction in Newtons. @@ -2259,11 +2366,11 @@ class MedusaSpectrometerData(proto.Message): """ drone_time = proto.Field(proto.MESSAGE, number=6, - message=timestamp.Timestamp, + message=gp_timestamp.Timestamp, ) sensor_time = proto.Field(proto.MESSAGE, number=7, - message=timestamp.Timestamp, + message=gp_timestamp.Timestamp, ) realtime = proto.Field(proto.FLOAT, number=1) diff --git a/blueye/protocol/types/mission_planning.py b/blueye/protocol/types/mission_planning.py new file mode 100644 index 0000000..2f2b78e --- /dev/null +++ b/blueye/protocol/types/mission_planning.py @@ -0,0 +1,575 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import proto # type: ignore + + +from blueye.protocol.types import message_formats + + +__protobuf__ = proto.module( + package='blueye.protocol', + manifest={ + 'DepthZeroReference', + 'CameraAction', + 'InstructionType', + 'MissionState', + 'Mission', + 'Instruction', + 'DepthSetPoint', + 'Waypoint', + 'ControlModeCommand', + 'WaypointCommand', + 'DepthSetPointCommand', + 'TiltMainCameraCommand', + 'TiltServoCommand', + 'WaitForCommand', + 'CameraCommand', + 'GoToSurfaceCommand', + 'GoToSeaBottomCommand', + 'GoToHomeCommand', + 'PathSegment', + 'ReferenceAutoPilot', + 'MissionStatus', + }, +) + + +class DepthZeroReference(proto.Enum): + r"""Depth zero reference from surface for depth, and seabed for + altitude. + """ + DEPTH_ZERO_REFERENCE_UNSPECIFIED = 0 + DEPTH_ZERO_REFERENCE_SURFACE = 1 + DEPTH_ZERO_REFERENCE_SEABED = 2 + + +class CameraAction(proto.Enum): + r"""List of available camera actions.""" + CAMERA_ACTION_UNSPECIFIED = 0 + CAMERA_ACTION_TAKE_PHOTO = 1 + CAMERA_ACTION_TAKE_PHOTOS_TIME = 2 + CAMERA_ACTION_TAKE_PHOTOS_DISTANCE = 3 + CAMERA_ACTION_STOP_TAKING_PHOTOS = 4 + CAMERA_ACTION_START_RECORDING = 5 + CAMERA_ACTION_STOP_RECORDING = 6 + + +class InstructionType(proto.Enum): + r"""List of available instruction types.""" + INSTRUCTION_TYPE_UNSPECIFIED = 0 + INSTRUCTION_TYPE_NONE = 1 + INSTRUCTION_TYPE_GO_TO_WAYPOINT = 2 + INSTRUCTION_TYPE_GO_TO_WAYPOINT_WITH_DEPTH_SET_POINT = 3 + INSTRUCTION_TYPE_GO_TO_DEPTH_SET_POINT = 4 + INSTRUCTION_TYPE_SET_CAMERA_ACTION = 5 + INSTRUCTION_TYPE_SET_CONTROL_MODE = 6 + INSTRUCTION_TYPE_SET_TILT_MAIN_CAMERA = 7 + INSTRUCTION_TYPE_SET_TILT_SERVO = 8 + INSTRUCTION_TYPE_WAIT_FOR_SEC = 9 + INSTRUCTION_TYPE_RETURN_TO_SURFACE = 10 + INSTRUCTION_TYPE_RETURN_TO_HOME = 11 + + +class MissionState(proto.Enum): + r"""List of mission supervisor states.""" + MISSION_STATE_UNSPECIFIED = 0 + MISSION_STATE_INACTIVE = 1 + MISSION_STATE_READY = 2 + MISSION_STATE_RUNNING = 3 + MISSION_STATE_PAUSED = 4 + MISSION_STATE_COMPLETED = 5 + MISSION_STATE_ABORTED = 6 + MISSION_STATE_FAILED_TO_LOAD_MISSION = 7 + MISSION_STATE_FAILED_TO_START_MISSION = 8 + + +class Mission(proto.Message): + r"""A list of waypoints describes a mission that the auto pilot + can execute. + + Attributes: + id (int): + mission id + name (str): + mission name provided from the app + instructions (Sequence[blueye.protocol.types.Instruction]): + list of instructions in the mission + path_segments (Sequence[blueye.protocol.types.PathSegment]): + calculated path segments from the reference + generator (optinal) + total_distance (int): + total distance of the mission (m) (optinal) + total_duration_time (int): + total duration time of the mission (s) + (optinal) + default_surge_speed (float): + default cruise speed of the mission (m/s) + (optinal) + default_heave_speed (float): + default heave speed of the mission (m/s) + (optinal) + default_circle_of_acceptance (float): + default circle of acceptance for waypoints + (m) (optinal) + """ + + id = proto.Field(proto.UINT32, number=1) + + name = proto.Field(proto.STRING, number=2) + + instructions = proto.RepeatedField(proto.MESSAGE, number=3, + message='Instruction', + ) + + path_segments = proto.RepeatedField(proto.MESSAGE, number=4, + message='PathSegment', + ) + + total_distance = proto.Field(proto.UINT32, number=5) + + total_duration_time = proto.Field(proto.UINT32, number=6) + + default_surge_speed = proto.Field(proto.FLOAT, number=7) + + default_heave_speed = proto.Field(proto.FLOAT, number=8) + + default_circle_of_acceptance = proto.Field(proto.FLOAT, number=9) + + +class Instruction(proto.Message): + r"""A mission consitst of one or multiple instructions. One + instruction can be of different types. + + Attributes: + id (int): + + group_id (int): + group id used for polygoons + auto_continue (bool): + false will pause the mission after this + instruction + waypoint_command (blueye.protocol.types.WaypointCommand): + go to waypoint + depth_set_point_command (blueye.protocol.types.DepthSetPointCommand): + go to depth + camera_command (blueye.protocol.types.CameraCommand): + camera commands + control_mode_command (blueye.protocol.types.ControlModeCommand): + set control modes + tilt_main_camera_command (blueye.protocol.types.TiltMainCameraCommand): + set camera to angle x + tilt_servo_command (blueye.protocol.types.TiltServoCommand): + set tilt angle + wait_for_command (blueye.protocol.types.WaitForCommand): + wait for x seconds + go_to_surface_command (blueye.protocol.types.GoToSurfaceCommand): + go to surface + go_to_sea_bottom_command (blueye.protocol.types.GoToSeaBottomCommand): + go to sea bottom + go_to_home_command (blueye.protocol.types.GoToHomeCommand): + go to home position + """ + + id = proto.Field(proto.UINT32, number=1) + + group_id = proto.Field(proto.UINT32, number=2) + + auto_continue = proto.Field(proto.BOOL, number=3) + + waypoint_command = proto.Field(proto.MESSAGE, number=4, oneof='command', + message='WaypointCommand', + ) + + depth_set_point_command = proto.Field(proto.MESSAGE, number=5, oneof='command', + message='DepthSetPointCommand', + ) + + camera_command = proto.Field(proto.MESSAGE, number=6, oneof='command', + message='CameraCommand', + ) + + control_mode_command = proto.Field(proto.MESSAGE, number=7, oneof='command', + message='ControlModeCommand', + ) + + tilt_main_camera_command = proto.Field(proto.MESSAGE, number=8, oneof='command', + message='TiltMainCameraCommand', + ) + + tilt_servo_command = proto.Field(proto.MESSAGE, number=9, oneof='command', + message='TiltServoCommand', + ) + + wait_for_command = proto.Field(proto.MESSAGE, number=10, oneof='command', + message='WaitForCommand', + ) + + go_to_surface_command = proto.Field(proto.MESSAGE, number=11, oneof='command', + message='GoToSurfaceCommand', + ) + + go_to_sea_bottom_command = proto.Field(proto.MESSAGE, number=12, oneof='command', + message='GoToSeaBottomCommand', + ) + + go_to_home_command = proto.Field(proto.MESSAGE, number=13, oneof='command', + message='GoToHomeCommand', + ) + + +class DepthSetPoint(proto.Message): + r"""Depth set point is used to describe a depth setpoint relative + to the surface or the seabottom. + + Attributes: + depth (float): + desired depth at the wp (m) + speed_to_depth (float): + desired speed to desired depth set point + (m/s) + depth_zero_reference (blueye.protocol.types.DepthZeroReference): + used to destinguish desired altitude or depth + """ + + depth = proto.Field(proto.FLOAT, number=1) + + speed_to_depth = proto.Field(proto.FLOAT, number=2) + + depth_zero_reference = proto.Field(proto.ENUM, number=3, + enum='DepthZeroReference', + ) + + +class Waypoint(proto.Message): + r"""Waypoints used to describe a path for the auto pilot. + + Attributes: + id (int): + waypoint id + name (str): + waypoint name provided from the app + global_position (blueye.protocol.types.LatLongPosition): + position if the waypoint (decimal degrees) + circle_of_acceptance (float): + radius of the accepance circle around the + waypoint (m) + speed_to_target (float): + desired speed over ground to waypoint (m/s) + depth_set_point (blueye.protocol.types.DepthSetPoint): + depth set point (optional) + """ + + id = proto.Field(proto.UINT32, number=1) + + name = proto.Field(proto.STRING, number=2) + + global_position = proto.Field(proto.MESSAGE, number=3, + message=message_formats.LatLongPosition, + ) + + circle_of_acceptance = proto.Field(proto.FLOAT, number=4) + + speed_to_target = proto.Field(proto.FLOAT, number=5) + + depth_set_point = proto.Field(proto.MESSAGE, number=6, + message='DepthSetPoint', + ) + + +class ControlModeCommand(proto.Message): + r"""A ControlModeCommand is used to enable a controlmode during a + mission. + + Attributes: + control_mode (blueye.protocol.types.ControlMode): + requested control mode + """ + + control_mode = proto.Field(proto.MESSAGE, number=1, + message=message_formats.ControlMode, + ) + + +class WaypointCommand(proto.Message): + r"""A WaypointCommand will request the drone to drive to a point + automatically. + + Attributes: + waypoint (blueye.protocol.types.Waypoint): + waypoint to go to + """ + + waypoint = proto.Field(proto.MESSAGE, number=1, + message='Waypoint', + ) + + +class DepthSetPointCommand(proto.Message): + r"""A DepthSetPointCommand is used to go to a desired depth or + altitude. + + Attributes: + depth_set_point (blueye.protocol.types.DepthSetPoint): + depth set point to go to + """ + + depth_set_point = proto.Field(proto.MESSAGE, number=1, + message='DepthSetPoint', + ) + + +class TiltMainCameraCommand(proto.Message): + r"""The TiltMainCameraCommand can set the desired camera tilt + angle. + + Attributes: + tilt_angle (blueye.protocol.types.TiltAngle): + tilt angle of the camera (-30..30) + """ + + tilt_angle = proto.Field(proto.MESSAGE, number=1, + message=message_formats.TiltAngle, + ) + + +class TiltServoCommand(proto.Message): + r"""The TiltServoCommand is used to set the tilt angle of the + servo. + + Attributes: + tilt_angle (blueye.protocol.types.MultibeamServo): + tilt angle for the servo, i.e. multibeam + """ + + tilt_angle = proto.Field(proto.MESSAGE, number=1, + message=message_formats.MultibeamServo, + ) + + +class WaitForCommand(proto.Message): + r"""WaitForCommand is used to wait duringing a mission. + + Attributes: + wait_for_seconds (float): + wait for x seconds + """ + + wait_for_seconds = proto.Field(proto.FLOAT, number=1) + + +class CameraCommand(proto.Message): + r"""CameraCommands are used to control the camera from a mission. + + Attributes: + camera_action (blueye.protocol.types.CameraAction): + camera command + action_param (float): + used for taking photos based on a time or + distance interval + """ + + camera_action = proto.Field(proto.ENUM, number=1, + enum='CameraAction', + ) + + action_param = proto.Field(proto.FLOAT, number=2) + + +class GoToSurfaceCommand(proto.Message): + r"""GoToSurfaceCommand is used to go to the surface. + + Attributes: + desired_speed (float): + desired speed to surface (m/s) + """ + + desired_speed = proto.Field(proto.FLOAT, number=1) + + +class GoToSeaBottomCommand(proto.Message): + r"""GoToSeaBottomCommand is used to go to the sea bottom. + + Attributes: + desired_speed (float): + desired speed to seabed (m/s) + """ + + desired_speed = proto.Field(proto.FLOAT, number=1) + + +class GoToHomeCommand(proto.Message): + r"""GoToHomeCommand is used to go to the home position. + + Attributes: + desired_speed (float): + desired speed to home (m/s) + """ + + desired_speed = proto.Field(proto.FLOAT, number=1) + + +class PathSegment(proto.Message): + r"""Path segment used to describe segments of a mission as a line + between to waypoints. + + Attributes: + id (int): + path segment id starting at 0, -1 for + inactive + speed_to_target (float): + desired speed over ground in (m/s) + course_to_target (float): + course to target relative to north (rad) [-pi, pi] + depth_speed (float): + desired speed in heave (m/s) + horizontal_length (float): + horizontal length of the path segment (m) + vertical_length (float): + vertical legth of the path segment (m) + from_wp_id (int): + id of the starting waypoint + to_wp_id (int): + id of the ending waypoint + duration_time (float): + estmated time it takes to complete given + legth and desired speed (s) + """ + + id = proto.Field(proto.UINT32, number=1) + + speed_to_target = proto.Field(proto.FLOAT, number=2) + + course_to_target = proto.Field(proto.FLOAT, number=3) + + depth_speed = proto.Field(proto.FLOAT, number=4) + + horizontal_length = proto.Field(proto.FLOAT, number=5) + + vertical_length = proto.Field(proto.FLOAT, number=6) + + from_wp_id = proto.Field(proto.UINT32, number=7) + + to_wp_id = proto.Field(proto.UINT32, number=8) + + duration_time = proto.Field(proto.FLOAT, number=9) + + +class ReferenceAutoPilot(proto.Message): + r"""Reference for the auto pilot when a mission is active. + + Attributes: + instruction_type (blueye.protocol.types.InstructionType): + Instruction type + active_instruction_id (int): + Id of the active instruction + active_path_segment_id (int): + Id of the active path segment + course_to_target (float): + Course to the next waypoint from north (rad) [-pi, pi] + speed_over_ground (float): + Desired speed over ground (m/s) + horizontal_distance_to_target (float): + Horizontal distance to the next waypoint (m) + circle_of_acceptance (float): + Circle of acceptance to mark waypoint as + visited (m) + depth_set_point (float): + Desired depth set point (m) + heave_velocity (float): + Desired heave velocity (m/s) + vertical_distance_to_target (float): + Vertical distance to the next waypoint (m) + depth_zero_reference (blueye.protocol.types.DepthZeroReference): + Indicates if depth is measured from the + surface or seabottom + time_to_complete (float): + Estimated time to complete the instruction + (s) + """ + + instruction_type = proto.Field(proto.ENUM, number=1, + enum='InstructionType', + ) + + active_instruction_id = proto.Field(proto.UINT32, number=2) + + active_path_segment_id = proto.Field(proto.UINT32, number=3) + + course_to_target = proto.Field(proto.FLOAT, number=4) + + speed_over_ground = proto.Field(proto.FLOAT, number=5) + + horizontal_distance_to_target = proto.Field(proto.FLOAT, number=6) + + circle_of_acceptance = proto.Field(proto.FLOAT, number=7) + + depth_set_point = proto.Field(proto.FLOAT, number=8) + + heave_velocity = proto.Field(proto.FLOAT, number=9) + + vertical_distance_to_target = proto.Field(proto.FLOAT, number=10) + + depth_zero_reference = proto.Field(proto.ENUM, number=11, + enum='DepthZeroReference', + ) + + time_to_complete = proto.Field(proto.FLOAT, number=12) + + +class MissionStatus(proto.Message): + r"""Mission Status is used for showing the status of the mission. + + Attributes: + state (blueye.protocol.types.MissionState): + State of the mission supervisor + time_elapsed (int): + Time elapsed since mission started (s) + estimated_time_to_complete (int): + Estimated time to complete the mission (s) + distance_to_complete (int): + Distance left of the mission (m) + completed_instruction_ids (Sequence[int]): + Ids of the completed instructions + total_number_of_instructions (int): + Total number of instructions in the mission + completed_path_segment_ids (Sequence[int]): + Ids of the completed path segments + total_number_of_path_segments (int): + Total number of path segments in the mission + """ + + state = proto.Field(proto.ENUM, number=1, + enum='MissionState', + ) + + time_elapsed = proto.Field(proto.UINT32, number=2) + + estimated_time_to_complete = proto.Field(proto.UINT32, number=3) + + distance_to_complete = proto.Field(proto.UINT32, number=4) + + completed_instruction_ids = proto.RepeatedField(proto.UINT32, number=5) + + total_number_of_instructions = proto.Field(proto.UINT32, number=6) + + completed_path_segment_ids = proto.RepeatedField(proto.UINT32, number=7) + + total_number_of_path_segments = proto.Field(proto.UINT32, number=8) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/blueye/protocol/types/req_rep.py b/blueye/protocol/types/req_rep.py index 80fb15c..921bf33 100644 --- a/blueye/protocol/types/req_rep.py +++ b/blueye/protocol/types/req_rep.py @@ -19,6 +19,7 @@ from blueye.protocol.types import message_formats +from blueye.protocol.types import mission_planning from google.protobuf import any_pb2 as gp_any # type: ignore @@ -45,6 +46,12 @@ 'DisconnectClientRep', 'GetBatteryReq', 'GetBatteryRep', + 'SetMissionReq', + 'SetMissionRep', + 'GetMissionReq', + 'GetMissionRep', + 'SetInstructionUpdateReq', + 'SetInstructionUpdateRep', 'SetPubFrequencyReq', 'SetPubFrequencyRep', 'GetTelemetryReq', @@ -275,6 +282,64 @@ class GetBatteryRep(proto.Message): ) +class SetMissionReq(proto.Message): + r"""Issue a desired mission to the reference_generator. + + Attributes: + mission (blueye.protocol.types.Mission): + requested mission isseued to the reference + generator + """ + + mission = proto.Field(proto.MESSAGE, number=1, + message=mission_planning.Mission, + ) + + +class SetMissionRep(proto.Message): + r"""Response after setting a new mission.""" + + +class GetMissionReq(proto.Message): + r"""Service request to the reference_generator to get the active + mission. + """ + + +class GetMissionRep(proto.Message): + r"""Get active mission response. + + Attributes: + mission (blueye.protocol.types.Mission): + active mission with waypoints + """ + + mission = proto.Field(proto.MESSAGE, number=1, + message=mission_planning.Mission, + ) + + +class SetInstructionUpdateReq(proto.Message): + r"""Updates an instruction in current mission with a new + instruction payload. + + Attributes: + instruction (blueye.protocol.types.Instruction): + instruction that will replace the desired + instruction + """ + + instruction = proto.Field(proto.MESSAGE, number=1, + message=mission_planning.Instruction, + ) + + +class SetInstructionUpdateRep(proto.Message): + r"""Response after updating an instruction in the current + mission. + """ + + class SetPubFrequencyReq(proto.Message): r"""Request to update the publish frequency diff --git a/blueye/protocol/types/telemetry.py b/blueye/protocol/types/telemetry.py index 93cc42e..9cf3e07 100644 --- a/blueye/protocol/types/telemetry.py +++ b/blueye/protocol/types/telemetry.py @@ -20,6 +20,7 @@ from blueye.protocol.types import aquatroll from blueye.protocol.types import message_formats +from blueye.protocol.types import mission_planning __protobuf__ = proto.module( @@ -31,6 +32,9 @@ 'PositionEstimateTel', 'DepthTel', 'ReferenceTel', + 'ReferenceAutoPilotTel', + 'MissionStatusTel', + 'NotificationTel', 'ControlForceTel', 'ControllerHealthTel', 'LightsTel', @@ -102,7 +106,8 @@ class AltitudeTel(proto.Message): class ForwardDistanceTel(proto.Message): - r""" + r"""Distance to an object in front of the drone when a 1D pinger + is mounted forwards. Attributes: forward_distance (blueye.protocol.types.ForwardDistance): @@ -115,7 +120,8 @@ class ForwardDistanceTel(proto.Message): class PositionEstimateTel(proto.Message): - r""" + r"""Position estimate of the drone if a DVL or a positioning + system is available. Attributes: position_estimate (blueye.protocol.types.PositionEstimate): @@ -128,7 +134,8 @@ class PositionEstimateTel(proto.Message): class DepthTel(proto.Message): - r""" + r"""Measurement of the drones position relative to the sea + surface. Attributes: depth (blueye.protocol.types.Depth): @@ -141,7 +148,7 @@ class DepthTel(proto.Message): class ReferenceTel(proto.Message): - r""" + r"""Reference signals indicating desired states. Attributes: reference (blueye.protocol.types.Reference): @@ -153,8 +160,47 @@ class ReferenceTel(proto.Message): ) +class ReferenceAutoPilotTel(proto.Message): + r"""Reference for the auto pilot when a mission is active. + + Attributes: + reference_auto_pilot (blueye.protocol.types.ReferenceAutoPilot): + + """ + + reference_auto_pilot = proto.Field(proto.MESSAGE, number=1, + message=mission_planning.ReferenceAutoPilot, + ) + + +class MissionStatusTel(proto.Message): + r"""Mission status from the mission supervisor. + + Attributes: + mission_status (blueye.protocol.types.MissionStatus): + + """ + + mission_status = proto.Field(proto.MESSAGE, number=1, + message=mission_planning.MissionStatus, + ) + + +class NotificationTel(proto.Message): + r"""Notification from the control system. + + Attributes: + notification (blueye.protocol.types.Notification): + + """ + + notification = proto.Field(proto.MESSAGE, number=1, + message=message_formats.Notification, + ) + + class ControlForceTel(proto.Message): - r""" + r"""Control force in all directions. Attributes: control_force (blueye.protocol.types.ControlForce): @@ -167,7 +213,8 @@ class ControlForceTel(proto.Message): class ControllerHealthTel(proto.Message): - r""" + r"""Controller health indicating the load of the controller, used + to set a color in the heading and depth bar. Attributes: controller_health (blueye.protocol.types.ControllerHealth): @@ -220,7 +267,7 @@ class LaserTel(proto.Message): class PilotGPSPositionTel(proto.Message): - r""" + r"""Pilot position (originating from device GPS) for logging. Attributes: position (blueye.protocol.types.LatLongPosition): @@ -233,7 +280,7 @@ class PilotGPSPositionTel(proto.Message): class RecordStateTel(proto.Message): - r""" + r"""Record state from the drone. Attributes: record_state (blueye.protocol.types.RecordState): @@ -306,7 +353,7 @@ class DroneTimeTel(proto.Message): class WaterTemperatureTel(proto.Message): - r""" + r"""Water temerature from the depth sensor. Attributes: temperature (blueye.protocol.types.WaterTemperature): @@ -319,7 +366,7 @@ class WaterTemperatureTel(proto.Message): class CPUTemperatureTel(proto.Message): - r""" + r"""Drone CPU temperature Attributes: temperature (blueye.protocol.types.CPUTemperature): @@ -384,7 +431,7 @@ class CanisterBottomHumidityTel(proto.Message): class VideoStorageSpaceTel(proto.Message): - r""" + r"""Video storage info. Attributes: storage_space (blueye.protocol.types.StorageSpace): @@ -397,7 +444,7 @@ class VideoStorageSpaceTel(proto.Message): class DataStorageSpaceTel(proto.Message): - r""" + r"""Data storage info. Attributes: storage_space (blueye.protocol.types.StorageSpace): @@ -410,7 +457,7 @@ class DataStorageSpaceTel(proto.Message): class CalibrationStateTel(proto.Message): - r""" + r"""Calibration state used for calibration rotine. Attributes: calibration_state (blueye.protocol.types.CalibrationState): @@ -423,7 +470,7 @@ class CalibrationStateTel(proto.Message): class TiltStabilizationTel(proto.Message): - r""" + r"""Tilt stabilization state. Attributes: state (blueye.protocol.types.TiltStabilizationState): @@ -436,7 +483,8 @@ class TiltStabilizationTel(proto.Message): class IperfTel(proto.Message): - r""" + r"""Iperf indicates the available bandwidth on the tether from + drone to surface unit. Attributes: status (blueye.protocol.types.IperfStatus): @@ -449,7 +497,7 @@ class IperfTel(proto.Message): class NStreamersTel(proto.Message): - r""" + r"""Number of connected clients streaming video. Attributes: n_streamers (blueye.protocol.types.NStreamers): @@ -462,7 +510,7 @@ class NStreamersTel(proto.Message): class TiltAngleTel(proto.Message): - r""" + r"""Tilt angle state on main camera. Attributes: angle (blueye.protocol.types.TiltAngle):