blueye.sdk.guestport - Blueye SDK

Skip to content

# Module blueye.sdk.guestport

View Source

    import logging

    from typing import TYPE_CHECKING, Optional

    import blueye.protocol as bp

    from packaging import version

    from .camera import Camera

    if TYPE_CHECKING:

        from .drone import Drone

    logger = logging.getLogger(__name__)

    class Peripheral:

        def __init__(

            self, parent_drone: "Drone", port_number: bp.GuestPortNumber, device: bp.GuestPortDevice

        ):

            self.parent_drone = parent_drone

            self.port_number: bp.GuestPortNumber = port_number

            self.name: str = device.name

            self.manufacturer: str = device.manufacturer

            self.serial_number: str = device.serial_number

            self.depth_rating: float = device.depth_rating

            self.required_blunux_version: str = device.required_blunux_version

            self.device_id: bp.GuestPortDeviceID = device.device_id

            if self.required_blunux_version != "":

                if version.parse(self.required_blunux_version) > version.parse(

                    parent_drone.software_version_short

                ):

                    logger.warning(

                        f"Peripheral {self.name} requires Blunux version "

                        f"{self.required_blunux_version}, but the drone is running "

                        f"{parent_drone.software_version_short}"

                    )

    class GuestPortCamera(Camera, Peripheral):

        def __init__(

            self, parent_drone: "Drone", port_number: bp.GuestPortNumber, device: bp.GuestPortDevice

        ):

            Camera.__init__(self, parent_drone, is_guestport_camera=True)

            Peripheral.__init__(self, parent_drone, port_number, device)

    class GuestPortLight(Peripheral):

        def __init__(

            self, parent_drone: "Drone", port_number: bp.GuestPortNumber, device: bp.GuestPortDevice

        ):

            Peripheral.__init__(self, parent_drone, port_number, device)

        def set_intensity(self, intensity: float):

            self.parent_drone._ctrl_client.set_guest_port_lights(intensity)

        def get_intensity(self) -> Optional[float]:

            return self.parent_drone.telemetry.get(bp.GuestPortLightsTel).lights.value

    class Gripper(Peripheral):

        def __init__(

            self, parent_drone: "Drone", port_number: bp.GuestPortNumber, device: bp.GuestPortDevice

        ):

            """

            Initializes a new Gripper object.

            *Arguments*:

            * parent_drone (Drone): The parent Drone object that this Gripper is attached to.

            * port_number (GuestPortNumber): The guest port number that this Gripper is attached to.

            * device (GuestPortDevice): The guest port device that this Gripper is attached to.

            """

            Peripheral.__init__(self, parent_drone, port_number, device)

            self._grip_velocity = 0

            self._rotation_velocity = 0

        @property

        def grip_velocity(self) -> float:

            """

            Gets or sets the current grip velocity of the Gripper.

            When used as a getter, returns the current grip velocity of the Gripper.

            When used as a setter, sets the grip velocity of the Gripper to the specified value.

            *Arguments*:

            * value (float): The new grip velocity to set. Must be a float between -1.0 and 1.0.

            *Returns*:

            * grip_velocity (float): The current grip velocity of the Gripper.

            """

            return self._grip_velocity

        @grip_velocity.setter

        def grip_velocity(self, value: float):

            if value < -1.0 or value > 1.0:

                raise ValueError("Grip velocity must be between -1.0 and 1.0.")

            self._grip_velocity = value

            self.parent_drone._ctrl_client.set_gripper_velocities(

                self._grip_velocity, self._rotation_velocity

            )

        @property

        def rotation_velocity(self) -> float:

            """

            Gets or sets the current rotation velocity of the Gripper.

            When used as a getter, returns the current rotation velocity of the Gripper.

            When used as a setter, sets the rotation velocity of the Gripper to the specified value.

            *Arguments*:

            * value (float): The new rotation velocity to set. Must be a float between -1.0 and 1.0.

            *Returns*:

            * rotation_velocity (float): The current rotation velocity of the Gripper.

            """

            return self._rotation_velocity

        @rotation_velocity.setter

        def rotation_velocity(self, value: float):

            if value < -1.0 or value > 1.0:

                raise ValueError("Rotation velocity must be between -1.0 and 1.0.")

            self._rotation_velocity = value

            self.parent_drone._ctrl_client.set_gripper_velocities(

                self._grip_velocity, self._rotation_velocity

            )

    def device_to_peripheral(

        parent_drone: "Drone", port_number: bp.GuestPortNumber, device: bp.GuestPortDevice

    ) -> Peripheral:

        logger.debug(f"Found a {device.name} at port {port_number}")

        if device.device_id == bp.GuestPortDeviceID.GUEST_PORT_DEVICE_ID_BLUEYE_CAM:

            peripheral = GuestPortCamera(parent_drone, port_number, device)

        elif (

            device.device_id == bp.GuestPortDeviceID.GUEST_PORT_DEVICE_ID_BLUEYE_LIGHT

            or device.device_id == bp.GuestPortDeviceID.GUEST_PORT_DEVICE_ID_BLUEYE_LIGHT_PAIR

            or device.device_id == bp.GuestPortDeviceID.GUEST_PORT_DEVICE_ID_BLUE_ROBOTICS_LUMEN

        ):

            peripheral = GuestPortLight(parent_drone, port_number, device)

        elif (

            device.device_id == bp.GuestPortDeviceID.GUEST_PORT_DEVICE_ID_BLUE_ROBOTICS_NEWTON

            or device.device_id

            == bp.GuestPortDeviceID.GUEST_PORT_DEVICE_ID_BLUE_ROBOTICS_DETACHABLE_NEWTON

            or device.device_id == bp.GuestPortDeviceID.GUEST_PORT_DEVICE_ID_BLUEPRINT_LAB_REACH_ALPHA

        ):

            peripheral = Gripper(parent_drone, port_number, device)

        else:

            peripheral = Peripheral(parent_drone, port_number, device)

        return peripheral

## Variables

    TYPE_CHECKING

    logger

## Functions

### device_to_peripheral

    def device_to_peripheral(
        parent_drone: 'Drone',
        port_number: blueye.protocol.types.message_formats.GuestPortNumber,
        device: blueye.protocol.types.message_formats.GuestPortDevice
    ) -> blueye.sdk.guestport.Peripheral

View Source

    def device_to_peripheral(

        parent_drone: "Drone", port_number: bp.GuestPortNumber, device: bp.GuestPortDevice

    ) -> Peripheral:

        logger.debug(f"Found a {device.name} at port {port_number}")

        if device.device_id == bp.GuestPortDeviceID.GUEST_PORT_DEVICE_ID_BLUEYE_CAM:

            peripheral = GuestPortCamera(parent_drone, port_number, device)

        elif (

            device.device_id == bp.GuestPortDeviceID.GUEST_PORT_DEVICE_ID_BLUEYE_LIGHT

            or device.device_id == bp.GuestPortDeviceID.GUEST_PORT_DEVICE_ID_BLUEYE_LIGHT_PAIR

            or device.device_id == bp.GuestPortDeviceID.GUEST_PORT_DEVICE_ID_BLUE_ROBOTICS_LUMEN

        ):

            peripheral = GuestPortLight(parent_drone, port_number, device)

        elif (

            device.device_id == bp.GuestPortDeviceID.GUEST_PORT_DEVICE_ID_BLUE_ROBOTICS_NEWTON

            or device.device_id

            == bp.GuestPortDeviceID.GUEST_PORT_DEVICE_ID_BLUE_ROBOTICS_DETACHABLE_NEWTON

            or device.device_id == bp.GuestPortDeviceID.GUEST_PORT_DEVICE_ID_BLUEPRINT_LAB_REACH_ALPHA

        ):

            peripheral = Gripper(parent_drone, port_number, device)

        else:

            peripheral = Peripheral(parent_drone, port_number, device)

        return peripheral

## Classes

### Gripper

    class Gripper(
        parent_drone: 'Drone',
        port_number: blueye.protocol.types.message_formats.GuestPortNumber,
        device: blueye.protocol.types.message_formats.GuestPortDevice
    )

View Source

    class Gripper(Peripheral):

        def __init__(

            self, parent_drone: "Drone", port_number: bp.GuestPortNumber, device: bp.GuestPortDevice

        ):

            """

            Initializes a new Gripper object.

            *Arguments*:

            * parent_drone (Drone): The parent Drone object that this Gripper is attached to.

            * port_number (GuestPortNumber): The guest port number that this Gripper is attached to.

            * device (GuestPortDevice): The guest port device that this Gripper is attached to.

            """

            Peripheral.__init__(self, parent_drone, port_number, device)

            self._grip_velocity = 0

            self._rotation_velocity = 0

        @property

        def grip_velocity(self) -> float:

            """

            Gets or sets the current grip velocity of the Gripper.

            When used as a getter, returns the current grip velocity of the Gripper.

            When used as a setter, sets the grip velocity of the Gripper to the specified value.

            *Arguments*:

            * value (float): The new grip velocity to set. Must be a float between -1.0 and 1.0.

            *Returns*:

            * grip_velocity (float): The current grip velocity of the Gripper.

            """

            return self._grip_velocity

        @grip_velocity.setter

        def grip_velocity(self, value: float):

            if value < -1.0 or value > 1.0:

                raise ValueError("Grip velocity must be between -1.0 and 1.0.")

            self._grip_velocity = value

            self.parent_drone._ctrl_client.set_gripper_velocities(

                self._grip_velocity, self._rotation_velocity

            )

        @property

        def rotation_velocity(self) -> float:

            """

            Gets or sets the current rotation velocity of the Gripper.

            When used as a getter, returns the current rotation velocity of the Gripper.

            When used as a setter, sets the rotation velocity of the Gripper to the specified value.

            *Arguments*:

            * value (float): The new rotation velocity to set. Must be a float between -1.0 and 1.0.

            *Returns*:

            * rotation_velocity (float): The current rotation velocity of the Gripper.

            """

            return self._rotation_velocity

        @rotation_velocity.setter

        def rotation_velocity(self, value: float):

            if value < -1.0 or value > 1.0:

                raise ValueError("Rotation velocity must be between -1.0 and 1.0.")

            self._rotation_velocity = value

            self.parent_drone._ctrl_client.set_gripper_velocities(

                self._grip_velocity, self._rotation_velocity

            )

#### Ancestors (in MRO)

- blueye.sdk.guestport.Peripheral

#### Instance variables

    grip_velocity

Gets or sets the current grip velocity of the Gripper.

When used as a getter, returns the current grip velocity of the Gripper.

When used as a setter, sets the grip velocity of the Gripper to the specified value.

Arguments:

- value (float): The new grip velocity to set. Must be a float between -1.0 and 1.0.

Returns:

- grip_velocity (float): The current grip velocity of the Gripper.

    rotation_velocity

Gets or sets the current rotation velocity of the Gripper.

When used as a getter, returns the current rotation velocity of the Gripper.

When used as a setter, sets the rotation velocity of the Gripper to the specified value.

Arguments:

- value (float): The new rotation velocity to set. Must be a float between -1.0 and 1.0.

Returns:

- rotation_velocity (float): The current rotation velocity of the Gripper.

### GuestPortCamera

    class GuestPortCamera(
        parent_drone: 'Drone',
        port_number: blueye.protocol.types.message_formats.GuestPortNumber,
        device: blueye.protocol.types.message_formats.GuestPortDevice
    )

View Source

    class GuestPortCamera(Camera, Peripheral):

        def __init__(

            self, parent_drone: "Drone", port_number: bp.GuestPortNumber, device: bp.GuestPortDevice

        ):

            Camera.__init__(self, parent_drone, is_guestport_camera=True)

            Peripheral.__init__(self, parent_drone, port_number, device)

#### Ancestors (in MRO)

- blueye.sdk.camera.Camera
- blueye.sdk.guestport.Peripheral

#### Instance variables

    bitrate

Set or get the video stream bitrate

Arguments:

- bitrate (int): Set the video stream bitrate in bits, valid values are in range (1 000 000..16 000 000)

Returns:

- bitrate (int): The H264 video stream bitrate

    bitrate_still_picture

Set or get the bitrate for the still picture stream

Arguments:

- bitrate (int): Set the still picture stream bitrate in bits, valid values are in range (1 000 000 .. 300 000 000). Default value is 100 000 000.

Returns:

- bitrate (int): The still picture stream bitrate

    exposure

Set or get the camera exposure

Arguments:

- exposure (int): Set the camera exposure time. Unit is thousandths of a second, ie. 5 = 5s/1000. Valid values are in the range (1 .. 5000) or -1 for auto exposure

Returns:

- exposure (int): Get the camera exposure

    framerate

Set or get the camera frame rate

Arguments:

- framerate (int): Set the camera frame rate in frames per second. Valid values are 25 or 30

Returns:

- framerate (int): Get the camera frame rate

    hue

Set or get the camera hue

Arguments:

- hue (int): Set the camera hue. Valid values are in the range (-40..40)

Returns:

- hue (int): Get the camera hue

    is_recording

Get or set the camera recording state

Arguments:

- start_recording (bool): Set to True to start a recording, set to False to stop the current recording.

Returns:

- Recording state (bool): True if the camera is currently recording, False if not

    record_time

Set or get the duration of the current camera recording

Returns:

- record_time (int): The length in seconds of the current recording, -1 if the camera is not currently recording

    resolution

Set or get the camera resolution

Arguments:

- resolution (int): Set the camera in vertical pixels. Valid values are 720 or 1080

Returns:

- resolution (int): Get the camera resolution

    whitebalance

Set or get the camera white balance

Arguments:

- white_balance (int): Set the camera white balance. Valid values are in the range (2800..9300) or -1 for auto white balance

Returns:

- white_balance (int): Get the camera white balance

#### Methods

#### take_picture

    def take_picture(
        self
    )

Takes a still picture and stores it locally on the drone

These pictures can be downloaded with the Blueye App, or by any WebDAV compatible client.

View Source

        def take_picture(self):

            """Takes a still picture and stores it locally on the drone

            These pictures can be downloaded with the Blueye App, or by any WebDAV compatible client.

            """

            self._parent_drone._ctrl_client.take_still_picture()

### GuestPortLight

    class GuestPortLight(
        parent_drone: 'Drone',
        port_number: blueye.protocol.types.message_formats.GuestPortNumber,
        device: blueye.protocol.types.message_formats.GuestPortDevice
    )

View Source

    class GuestPortLight(Peripheral):

        def __init__(

            self, parent_drone: "Drone", port_number: bp.GuestPortNumber, device: bp.GuestPortDevice

        ):

            Peripheral.__init__(self, parent_drone, port_number, device)

        def set_intensity(self, intensity: float):

            self.parent_drone._ctrl_client.set_guest_port_lights(intensity)

        def get_intensity(self) -> Optional[float]:

            return self.parent_drone.telemetry.get(bp.GuestPortLightsTel).lights.value

#### Ancestors (in MRO)

- blueye.sdk.guestport.Peripheral

#### Methods

#### get_intensity

    def get_intensity(
        self
    ) -> Optional[float]

View Source

        def get_intensity(self) -> Optional[float]:

            return self.parent_drone.telemetry.get(bp.GuestPortLightsTel).lights.value

#### set_intensity

    def set_intensity(
        self,
        intensity: float
    )

View Source

        def set_intensity(self, intensity: float):

            self.parent_drone._ctrl_client.set_guest_port_lights(intensity)

### Peripheral

    class Peripheral(
        parent_drone: 'Drone',
        port_number: blueye.protocol.types.message_formats.GuestPortNumber,
        device: blueye.protocol.types.message_formats.GuestPortDevice
    )

View Source

    class Peripheral:

        def __init__(

            self, parent_drone: "Drone", port_number: bp.GuestPortNumber, device: bp.GuestPortDevice

        ):

            self.parent_drone = parent_drone

            self.port_number: bp.GuestPortNumber = port_number

            self.name: str = device.name

            self.manufacturer: str = device.manufacturer

            self.serial_number: str = device.serial_number

            self.depth_rating: float = device.depth_rating

            self.required_blunux_version: str = device.required_blunux_version

            self.device_id: bp.GuestPortDeviceID = device.device_id

            if self.required_blunux_version != "":

                if version.parse(self.required_blunux_version) > version.parse(

                    parent_drone.software_version_short

                ):

                    logger.warning(

                        f"Peripheral {self.name} requires Blunux version "

                        f"{self.required_blunux_version}, but the drone is running "

                        f"{parent_drone.software_version_short}"

                    )

#### Descendants

- blueye.sdk.guestport.GuestPortCamera
- blueye.sdk.guestport.GuestPortLight
- blueye.sdk.guestport.Gripper