11import asyncio
22import datetime
33import enum
4+ import logging
45import math
56import os .path
67import pathlib
1718from bosdyn .api .data_chunk_pb2 import DataChunk
1819from bosdyn .api .spot_cam import audio_pb2
1920from bosdyn .api .spot_cam .camera_pb2 import Camera
21+ from bosdyn .api .spot_cam .compositor_pb2 import IrColorMap
2022from bosdyn .api .spot_cam .logging_pb2 import Logpoint
23+ from bosdyn .api .spot_cam .power_pb2 import PowerStatus
2124from bosdyn .api .spot_cam .ptz_pb2 import PtzDescription , PtzPosition , PtzVelocity
2225from bosdyn .client import Robot , spot_cam
2326from bosdyn .client .payload import PayloadClient
@@ -50,7 +53,7 @@ class LEDPosition(enum.Enum):
5053 FRONT_RIGHT = 2
5154 REAR_RIGHT = 3
5255
53- def __init__ (self , robot : Robot , logger ) -> None :
56+ def __init__ (self , robot : Robot , logger : logging . Logger ) -> None :
5457 self .logger = logger
5558 self .client : LightingClient = robot .ensure_client (LightingClient .default_service_name )
5659
@@ -82,11 +85,11 @@ class PowerWrapper:
8285 Wrapper for power interaction
8386 """
8487
85- def __init__ (self , robot : Robot , logger ) -> None :
88+ def __init__ (self , robot : Robot , logger : logging . Logger ) -> None :
8689 self .logger = logger
8790 self .client : PowerClient = robot .ensure_client (PowerClient .default_service_name )
8891
89- def get_power_status (self ):
92+ def get_power_status (self ) -> PowerStatus :
9093 """
9194 Get power status for the devices
9295 """
@@ -134,7 +137,7 @@ class CompositorWrapper:
134137 Wrapper for compositor interaction
135138 """
136139
137- def __init__ (self , robot : Robot , logger ) -> None :
140+ def __init__ (self , robot : Robot , logger : logging . Logger ) -> None :
138141 self .logger = logger
139142 self .client : CompositorClient = robot .ensure_client (CompositorClient .default_service_name )
140143
@@ -175,7 +178,7 @@ def get_screen(self) -> str:
175178 """
176179 return self .client .get_screen ()
177180
178- def set_ir_colormap (self , colormap , min_temp : float , max_temp : float , auto_scale : bool = True ) -> None :
181+ def set_ir_colormap (self , colormap : IrColorMap , min_temp : float , max_temp : float , auto_scale : bool = True ) -> None :
179182 """
180183 Set the colormap used for the IR camera
181184
@@ -205,7 +208,7 @@ class HealthWrapper:
205208 Wrapper for health details
206209 """
207210
208- def __init__ (self , robot : Robot , logger ) -> None :
211+ def __init__ (self , robot : Robot , logger : logging . Logger ) -> None :
209212 self .client : HealthClient = robot .ensure_client (HealthClient .default_service_name )
210213 self .logger = logger
211214
@@ -250,7 +253,7 @@ class AudioWrapper:
250253 Wrapper for audio commands on the camera
251254 """
252255
253- def __init__ (self , robot : Robot , logger ) -> None :
256+ def __init__ (self , robot : Robot , logger : logging . Logger ) -> None :
254257 self .client : AudioClient = robot .ensure_client (AudioClient .default_service_name )
255258 self .logger = logger
256259
@@ -334,11 +337,11 @@ class StreamQualityWrapper:
334337 Wrapper for stream quality commands
335338 """
336339
337- def __init__ (self , robot : Robot , logger ) -> None :
340+ def __init__ (self , robot : Robot , logger : logging . Logger ) -> None :
338341 self .client : StreamQualityClient = robot .ensure_client (StreamQualityClient .default_service_name )
339342 self .logger = logger
340343
341- def set_stream_params (self , target_bitrate : int , refresh_interval : int , idr_interval : int , awb ) -> None :
344+ def set_stream_params (self , target_bitrate : int , refresh_interval : int , idr_interval : int , awb : typing . Any ) -> None :
342345 """
343346 Set image compression and postprocessing parameters
344347
@@ -402,7 +405,7 @@ class MediaLogWrapper:
402405 Some functionality adapted from https://github.com/boston-dynamics/spot-sdk/blob/master/python/examples/spot_cam/media_log.py
403406 """
404407
405- def __init__ (self , robot : Robot , logger ) -> None :
408+ def __init__ (self , robot : Robot , logger : logging . Logger ) -> None :
406409 self .client : MediaLogClient = robot .ensure_client (MediaLogClient .default_service_name )
407410 self .logger = logger
408411
@@ -656,7 +659,7 @@ class PTZWrapper:
656659 Wrapper for controlling the PTZ unit
657660 """
658661
659- def __init__ (self , robot : Robot , logger ) -> None :
662+ def __init__ (self , robot : Robot , logger : logging . Logger ) -> None :
660663 self .client : PtzClient = robot .ensure_client (PtzClient .default_service_name )
661664 self .logger = logger
662665 self .ptzs = {}
@@ -681,7 +684,7 @@ def list_ptz(self) -> typing.Dict[str, typing.Dict]:
681684
682685 return ptzs
683686
684- def _get_ptz_description (self , name ) :
687+ def _get_ptz_description (self , name : str ) -> PtzDescription :
685688 """
686689 Get the bosdyn version of the ptz description
687690
@@ -697,7 +700,7 @@ def _get_ptz_description(self, name):
697700
698701 return self .ptzs [name ]
699702
700- def _clamp_value_to_limits (self , value , limits : PtzDescription .Limits ):
703+ def _clamp_value_to_limits (self , value : float , limits : PtzDescription .Limits ) -> float :
701704 """
702705 Clamp the given value to the specified limits. If the limits are unspecified (i.e. both 0), the value is not
703706 clamped
@@ -717,7 +720,9 @@ def _clamp_value_to_limits(self, value, limits: PtzDescription.Limits):
717720
718721 return max (min (value , limits .max .value ), limits .min .value )
719722
720- def _clamp_request_to_limits (self , ptz_name , pan , tilt , zoom ) -> typing .Tuple [float , float , float ]:
723+ def _clamp_request_to_limits (
724+ self , ptz_name : str , pan : float , tilt : float , zoom : float
725+ ) -> typing .Tuple [float , float , float ]:
721726 """
722727
723728 Args:
@@ -734,7 +739,7 @@ def _clamp_request_to_limits(self, ptz_name, pan, tilt, zoom) -> typing.Tuple[fl
734739 self ._clamp_value_to_limits (zoom , ptz_desc .zoom_limit ),
735740 )
736741
737- def get_ptz_position (self , ptz_name ) -> PtzPosition :
742+ def get_ptz_position (self , ptz_name : str ) -> PtzPosition :
738743 """
739744 Get the position of the ptz with the given name
740745
@@ -746,7 +751,7 @@ def get_ptz_position(self, ptz_name) -> PtzPosition:
746751 """
747752 return self .client .get_ptz_position (PtzDescription (name = ptz_name ))
748753
749- def set_ptz_position (self , ptz_name , pan , tilt , zoom , blocking = False ):
754+ def set_ptz_position (self , ptz_name : str , pan : float , tilt : float , zoom : float , blocking : bool = False ) -> None :
750755 """
751756 Set the position of the specified ptz
752757
@@ -771,7 +776,7 @@ def set_ptz_position(self, ptz_name, pan, tilt, zoom, blocking=False):
771776 current_position = self .client .get_ptz_position (self ._get_ptz_description (ptz_name ))
772777 time .sleep (0.2 )
773778
774- def get_ptz_velocity (self , ptz_name ) -> PtzVelocity :
779+ def get_ptz_velocity (self , ptz_name : str ) -> PtzVelocity :
775780 """
776781 Get the velocity of the ptz with the given name
777782
@@ -783,7 +788,7 @@ def get_ptz_velocity(self, ptz_name) -> PtzVelocity:
783788 """
784789 return self .client .get_ptz_velocity (PtzDescription (name = ptz_name ))
785790
786- def set_ptz_velocity (self , ptz_name , pan , tilt , zoom ) -> None :
791+ def set_ptz_velocity (self , ptz_name : str , pan : float , tilt : float , zoom : float ) -> None :
787792 """
788793 Set the velocity of the various axes of the specified ptz
789794
@@ -820,10 +825,10 @@ def __init__(
820825 self ,
821826 hostname : str ,
822827 robot : Robot ,
823- logger ,
824- sdp_port = 31102 ,
825- sdp_filename = "h264.sdp" ,
826- cam_ssl_cert_path = None ,
828+ logger : logging . Logger ,
829+ sdp_port : int = 31102 ,
830+ sdp_filename : str = "h264.sdp" ,
831+ cam_ssl_cert_path : typing . Optional [ str ] = None ,
827832 ) -> None :
828833 """
829834 Initialise the wrapper
@@ -895,7 +900,9 @@ async def _process_func(self) -> None:
895900
896901
897902class SpotCamWrapper :
898- def __init__ (self , hostname , username , password , logger , port : typing .Optional [int ] = None ) -> None :
903+ def __init__ (
904+ self , hostname : str , username : str , password : str , logger : logging .Logger , port : typing .Optional [int ] = None
905+ ) -> None :
899906 self ._hostname = hostname
900907 self ._username = username
901908 self ._password = password
0 commit comments