viam-sdk 0.3.0__py3-none-linux_armv6l.whl → 0.66.0__py3-none-linux_armv6l.whl
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 viam-sdk might be problematic. Click here for more details.
- viam/__init__.py +29 -2
- viam/app/_logs.py +34 -0
- viam/app/app_client.py +2696 -0
- viam/app/billing_client.py +185 -0
- viam/app/data_client.py +2231 -0
- viam/app/ml_training_client.py +249 -0
- viam/app/provisioning_client.py +93 -0
- viam/app/viam_client.py +275 -0
- viam/components/arm/__init__.py +3 -26
- viam/components/arm/arm.py +123 -8
- viam/components/arm/client.py +37 -24
- viam/components/arm/service.py +35 -32
- viam/components/audio_in/__init__.py +24 -0
- viam/components/audio_in/audio_in.py +74 -0
- viam/components/audio_in/client.py +76 -0
- viam/components/audio_in/service.py +83 -0
- viam/components/audio_out/__init__.py +21 -0
- viam/components/audio_out/audio_out.py +72 -0
- viam/components/audio_out/client.py +67 -0
- viam/components/audio_out/service.py +63 -0
- viam/components/base/__init__.py +6 -11
- viam/components/base/base.py +134 -8
- viam/components/base/client.py +51 -23
- viam/components/base/service.py +33 -30
- viam/components/board/__init__.py +3 -12
- viam/components/board/board.py +247 -91
- viam/components/board/client.py +149 -83
- viam/components/board/service.py +63 -33
- viam/components/button/__init__.py +10 -0
- viam/components/button/button.py +41 -0
- viam/components/button/client.py +52 -0
- viam/components/button/service.py +46 -0
- viam/components/camera/__init__.py +3 -3
- viam/components/camera/camera.py +62 -27
- viam/components/camera/client.py +59 -27
- viam/components/camera/service.py +42 -65
- viam/components/component_base.py +28 -5
- viam/components/encoder/__init__.py +1 -1
- viam/components/encoder/client.py +25 -14
- viam/components/encoder/encoder.py +48 -10
- viam/components/encoder/service.py +14 -18
- viam/components/gantry/__init__.py +1 -13
- viam/components/gantry/client.py +80 -25
- viam/components/gantry/gantry.py +123 -9
- viam/components/gantry/service.py +51 -29
- viam/components/generic/__init__.py +1 -1
- viam/components/generic/client.py +21 -8
- viam/components/generic/generic.py +10 -2
- viam/components/generic/service.py +12 -7
- viam/components/gripper/__init__.py +3 -13
- viam/components/gripper/client.py +69 -21
- viam/components/gripper/gripper.py +123 -3
- viam/components/gripper/service.py +44 -22
- viam/components/input/__init__.py +1 -14
- viam/components/input/client.py +55 -23
- viam/components/input/input.py +106 -3
- viam/components/input/service.py +16 -21
- viam/components/motor/__init__.py +1 -21
- viam/components/motor/client.py +56 -33
- viam/components/motor/motor.py +127 -4
- viam/components/motor/service.py +33 -44
- viam/components/movement_sensor/__init__.py +1 -1
- viam/components/movement_sensor/client.py +102 -45
- viam/components/movement_sensor/movement_sensor.py +130 -61
- viam/components/movement_sensor/service.py +38 -41
- viam/components/pose_tracker/__init__.py +1 -1
- viam/components/pose_tracker/client.py +18 -7
- viam/components/pose_tracker/pose_tracker.py +4 -2
- viam/components/pose_tracker/service.py +12 -10
- viam/components/power_sensor/__init__.py +17 -0
- viam/components/power_sensor/client.py +86 -0
- viam/components/power_sensor/power_sensor.py +104 -0
- viam/components/power_sensor/service.py +72 -0
- viam/components/sensor/__init__.py +2 -1
- viam/components/sensor/client.py +26 -10
- viam/components/sensor/sensor.py +22 -4
- viam/components/sensor/service.py +20 -11
- viam/components/servo/__init__.py +1 -13
- viam/components/servo/client.py +47 -21
- viam/components/servo/service.py +15 -22
- viam/components/servo/servo.py +61 -2
- viam/components/switch/__init__.py +10 -0
- viam/components/switch/client.py +83 -0
- viam/components/switch/service.py +72 -0
- viam/components/switch/switch.py +98 -0
- viam/errors.py +10 -0
- viam/gen/app/agent/v1/agent_grpc.py +29 -0
- viam/gen/app/agent/v1/agent_pb2.py +47 -0
- viam/gen/app/agent/v1/agent_pb2.pyi +280 -0
- viam/gen/app/cloudslam/v1/__init__.py +0 -0
- viam/gen/app/cloudslam/v1/cloud_slam_grpc.py +70 -0
- viam/gen/app/cloudslam/v1/cloud_slam_pb2.py +54 -0
- viam/gen/app/cloudslam/v1/cloud_slam_pb2.pyi +384 -0
- viam/gen/app/data/v1/data_grpc.py +197 -8
- viam/gen/app/data/v1/data_pb2.py +238 -99
- viam/gen/app/data/v1/data_pb2.pyi +1222 -259
- viam/gen/app/datapipelines/__init__.py +0 -0
- viam/gen/app/datapipelines/v1/__init__.py +0 -0
- viam/gen/app/datapipelines/v1/data_pipelines_grpc.py +84 -0
- viam/gen/app/datapipelines/v1/data_pipelines_pb2.py +57 -0
- viam/gen/app/datapipelines/v1/data_pipelines_pb2.pyi +387 -0
- viam/gen/app/dataset/__init__.py +0 -0
- viam/gen/app/dataset/v1/__init__.py +0 -0
- viam/gen/app/dataset/v1/dataset_grpc.py +68 -0
- viam/gen/app/dataset/v1/dataset_pb2.py +44 -0
- viam/gen/app/dataset/v1/dataset_pb2.pyi +214 -0
- viam/gen/app/datasync/v1/data_sync_grpc.py +21 -4
- viam/gen/app/datasync/v1/data_sync_pb2.py +62 -128
- viam/gen/app/datasync/v1/data_sync_pb2.pyi +156 -199
- viam/gen/app/mlinference/__init__.py +0 -0
- viam/gen/app/mlinference/v1/__init__.py +0 -0
- viam/gen/app/mlinference/v1/ml_inference_grpc.py +28 -0
- viam/gen/app/mlinference/v1/ml_inference_pb2.py +23 -0
- viam/gen/app/mlinference/v1/ml_inference_pb2.pyi +63 -0
- viam/gen/app/mltraining/v1/ml_training_grpc.py +51 -3
- viam/gen/app/mltraining/v1/ml_training_pb2.py +135 -58
- viam/gen/app/mltraining/v1/ml_training_pb2.pyi +328 -39
- viam/gen/app/packages/v1/packages_grpc.py +15 -1
- viam/gen/app/packages/v1/packages_pb2.py +44 -64
- viam/gen/app/packages/v1/packages_pb2.pyi +75 -85
- viam/gen/app/v1/app_grpc.py +644 -3
- viam/gen/app/v1/app_pb2.py +695 -295
- viam/gen/app/v1/app_pb2.pyi +4488 -635
- viam/gen/app/v1/billing_grpc.py +53 -11
- viam/gen/app/v1/billing_pb2.py +94 -39
- viam/gen/app/v1/billing_pb2.pyi +391 -191
- viam/gen/app/v1/end_user_grpc.py +59 -0
- viam/gen/app/v1/end_user_pb2.py +55 -0
- viam/gen/app/v1/end_user_pb2.pyi +181 -0
- viam/gen/app/v1/robot_grpc.py +16 -1
- viam/gen/app/v1/robot_pb2.py +122 -94
- viam/gen/app/v1/robot_pb2.pyi +463 -123
- viam/gen/common/v1/common_pb2.py +87 -58
- viam/gen/common/v1/common_pb2.pyi +456 -149
- viam/gen/component/arm/v1/arm_grpc.py +58 -2
- viam/gen/component/arm/v1/arm_pb2.py +68 -51
- viam/gen/component/arm/v1/arm_pb2.pyi +108 -42
- viam/gen/component/audioin/__init__.py +0 -0
- viam/gen/component/audioin/v1/__init__.py +0 -0
- viam/gen/component/audioin/v1/audioin_grpc.py +54 -0
- viam/gen/component/audioin/v1/audioin_pb2.py +34 -0
- viam/gen/component/audioin/v1/audioin_pb2.pyi +94 -0
- viam/gen/component/audioinput/v1/audioinput_grpc.py +25 -2
- viam/gen/component/audioinput/v1/audioinput_pb2.py +36 -31
- viam/gen/component/audioinput/v1/audioinput_pb2.pyi +22 -22
- viam/gen/component/audioout/__init__.py +0 -0
- viam/gen/component/audioout/v1/__init__.py +0 -0
- viam/gen/component/audioout/v1/audioout_grpc.py +54 -0
- viam/gen/component/audioout/v1/audioout_pb2.py +32 -0
- viam/gen/component/audioout/v1/audioout_pb2.pyi +47 -0
- viam/gen/component/base/v1/base_grpc.py +42 -2
- viam/gen/component/base/v1/base_pb2.py +58 -47
- viam/gen/component/base/v1/base_pb2.pyi +65 -30
- viam/gen/component/board/v1/board_grpc.py +59 -7
- viam/gen/component/board/v1/board_pb2.py +94 -73
- viam/gen/component/board/v1/board_pb2.pyi +165 -68
- viam/gen/component/button/__init__.py +0 -0
- viam/gen/component/button/v1/__init__.py +0 -0
- viam/gen/component/button/v1/button_grpc.py +38 -0
- viam/gen/component/button/v1/button_pb2.py +28 -0
- viam/gen/component/button/v1/button_pb2.pyi +39 -0
- viam/gen/component/camera/v1/camera_grpc.py +38 -2
- viam/gen/component/camera/v1/camera_pb2.py +60 -43
- viam/gen/component/camera/v1/camera_pb2.pyi +191 -37
- viam/gen/component/encoder/v1/encoder_grpc.py +25 -2
- viam/gen/component/encoder/v1/encoder_pb2.py +36 -31
- viam/gen/component/encoder/v1/encoder_pb2.pyi +15 -15
- viam/gen/component/gantry/v1/gantry_grpc.py +47 -2
- viam/gen/component/gantry/v1/gantry_pb2.py +56 -43
- viam/gen/component/gantry/v1/gantry_pb2.pyi +67 -31
- viam/gen/component/generic/v1/generic_grpc.py +16 -2
- viam/gen/component/generic/v1/generic_pb2.py +16 -11
- viam/gen/component/gripper/v1/gripper_grpc.py +44 -2
- viam/gen/component/gripper/v1/gripper_pb2.py +48 -35
- viam/gen/component/gripper/v1/gripper_pb2.pyi +62 -24
- viam/gen/component/inputcontroller/v1/input_controller_grpc.py +28 -2
- viam/gen/component/inputcontroller/v1/input_controller_pb2.py +46 -41
- viam/gen/component/inputcontroller/v1/input_controller_pb2.pyi +32 -36
- viam/gen/component/motor/v1/motor_grpc.py +51 -2
- viam/gen/component/motor/v1/motor_pb2.py +78 -67
- viam/gen/component/motor/v1/motor_pb2.pyi +75 -46
- viam/gen/component/movementsensor/v1/movementsensor_grpc.py +48 -2
- viam/gen/component/movementsensor/v1/movementsensor_pb2.py +70 -63
- viam/gen/component/movementsensor/v1/movementsensor_pb2.pyi +84 -57
- viam/gen/component/posetracker/v1/pose_tracker_grpc.py +19 -2
- viam/gen/component/posetracker/v1/pose_tracker_pb2.py +26 -21
- viam/gen/component/posetracker/v1/pose_tracker_pb2.pyi +9 -13
- viam/gen/component/powersensor/__init__.py +0 -0
- viam/gen/component/powersensor/v1/__init__.py +0 -0
- viam/gen/component/powersensor/v1/powersensor_grpc.py +62 -0
- viam/gen/component/powersensor/v1/powersensor_pb2.py +42 -0
- viam/gen/component/powersensor/v1/powersensor_pb2.pyi +124 -0
- viam/gen/component/sensor/v1/sensor_grpc.py +21 -5
- viam/gen/component/sensor/v1/sensor_pb2.py +18 -22
- viam/gen/component/sensor/v1/sensor_pb2.pyi +1 -69
- viam/gen/component/servo/v1/servo_grpc.py +28 -2
- viam/gen/component/servo/v1/servo_pb2.py +42 -37
- viam/gen/component/servo/v1/servo_pb2.pyi +22 -26
- viam/gen/component/switch/__init__.py +0 -0
- viam/gen/component/switch/v1/__init__.py +0 -0
- viam/gen/component/switch/v1/switch_grpc.py +54 -0
- viam/gen/component/switch/v1/switch_pb2.py +40 -0
- viam/gen/component/switch/v1/switch_pb2.pyi +116 -0
- viam/gen/component/testecho/v1/testecho_grpc.py +15 -0
- viam/gen/component/testecho/v1/testecho_pb2.py +29 -26
- viam/gen/component/testecho/v1/testecho_pb2.pyi +16 -20
- viam/gen/module/v1/module_grpc.py +18 -0
- viam/gen/module/v1/module_pb2.py +36 -33
- viam/gen/module/v1/module_pb2.pyi +39 -34
- viam/gen/opentelemetry/__init__.py +0 -0
- viam/gen/opentelemetry/proto/__init__.py +0 -0
- viam/gen/opentelemetry/proto/common/__init__.py +0 -0
- viam/gen/opentelemetry/proto/common/v1/__init__.py +0 -0
- viam/gen/opentelemetry/proto/common/v1/common_grpc.py +0 -0
- viam/gen/opentelemetry/proto/common/v1/common_pb2.py +27 -0
- viam/gen/opentelemetry/proto/common/v1/common_pb2.pyi +208 -0
- viam/gen/opentelemetry/proto/resource/__init__.py +0 -0
- viam/gen/opentelemetry/proto/resource/v1/__init__.py +0 -0
- viam/gen/opentelemetry/proto/resource/v1/resource_grpc.py +0 -0
- viam/gen/opentelemetry/proto/resource/v1/resource_pb2.py +18 -0
- viam/gen/opentelemetry/proto/resource/v1/resource_pb2.pyi +59 -0
- viam/gen/opentelemetry/proto/trace/__init__.py +0 -0
- viam/gen/opentelemetry/proto/trace/v1/__init__.py +0 -0
- viam/gen/opentelemetry/proto/trace/v1/trace_grpc.py +0 -0
- viam/gen/opentelemetry/proto/trace/v1/trace_pb2.py +37 -0
- viam/gen/opentelemetry/proto/trace/v1/trace_pb2.pyi +402 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_grpc.py +12 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +25 -22
- viam/gen/proto/rpc/examples/echo/v1/echo_pb2.pyi +13 -17
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_grpc.py +12 -0
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +23 -20
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.pyi +13 -17
- viam/gen/proto/rpc/v1/auth_grpc.py +11 -0
- viam/gen/proto/rpc/v1/auth_pb2.py +27 -24
- viam/gen/proto/rpc/v1/auth_pb2.pyi +12 -16
- viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +35 -32
- viam/gen/proto/rpc/webrtc/v1/grpc_pb2.pyi +37 -41
- viam/gen/proto/rpc/webrtc/v1/signaling_grpc.py +15 -0
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +62 -57
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +78 -69
- viam/gen/provisioning/__init__.py +0 -0
- viam/gen/provisioning/v1/__init__.py +0 -0
- viam/gen/provisioning/v1/provisioning_grpc.py +59 -0
- viam/gen/provisioning/v1/provisioning_pb2.py +45 -0
- viam/gen/provisioning/v1/provisioning_pb2.pyi +229 -0
- viam/gen/robot/v1/robot_grpc.py +144 -15
- viam/gen/robot/v1/robot_pb2.py +193 -119
- viam/gen/robot/v1/robot_pb2.pyi +565 -137
- viam/gen/service/datamanager/v1/data_manager_grpc.py +20 -2
- viam/gen/service/datamanager/v1/data_manager_pb2.py +27 -17
- viam/gen/service/datamanager/v1/data_manager_pb2.pyi +52 -10
- viam/gen/service/discovery/__init__.py +0 -0
- viam/gen/service/discovery/v1/__init__.py +0 -0
- viam/gen/service/discovery/v1/discovery_grpc.py +39 -0
- viam/gen/service/discovery/v1/discovery_pb2.py +29 -0
- viam/gen/service/discovery/v1/discovery_pb2.pyi +51 -0
- viam/gen/service/generic/__init__.py +0 -0
- viam/gen/service/generic/v1/__init__.py +0 -0
- viam/gen/service/generic/v1/generic_grpc.py +29 -0
- viam/gen/service/generic/v1/generic_pb2.py +21 -0
- viam/gen/service/generic/v1/generic_pb2.pyi +6 -0
- viam/gen/service/mlmodel/v1/mlmodel_grpc.py +9 -0
- viam/gen/service/mlmodel/v1/mlmodel_pb2.py +76 -29
- viam/gen/service/mlmodel/v1/mlmodel_pb2.pyi +307 -28
- viam/gen/service/motion/v1/motion_grpc.py +42 -4
- viam/gen/service/motion/v1/motion_pb2.py +119 -51
- viam/gen/service/motion/v1/motion_pb2.pyi +595 -120
- viam/gen/service/navigation/v1/navigation_grpc.py +49 -1
- viam/gen/service/navigation/v1/navigation_pb2.py +76 -51
- viam/gen/service/navigation/v1/navigation_pb2.pyi +188 -33
- viam/gen/service/sensors/v1/sensors_grpc.py +12 -0
- viam/gen/service/sensors/v1/sensors_pb2.py +60 -29
- viam/gen/service/sensors/v1/sensors_pb2.pyi +18 -21
- viam/gen/service/shell/v1/shell_grpc.py +27 -1
- viam/gen/service/shell/v1/shell_pb2.py +37 -15
- viam/gen/service/shell/v1/shell_pb2.pyi +260 -7
- viam/gen/service/slam/v1/slam_grpc.py +24 -2
- viam/gen/service/slam/v1/slam_pb2.py +44 -30
- viam/gen/service/slam/v1/slam_pb2.pyi +128 -27
- viam/gen/service/video/__init__.py +0 -0
- viam/gen/service/video/v1/__init__.py +0 -0
- viam/gen/service/video/v1/video_grpc.py +39 -0
- viam/gen/service/video/v1/video_pb2.py +29 -0
- viam/gen/service/video/v1/video_pb2.pyi +72 -0
- viam/gen/service/vision/v1/vision_grpc.py +39 -1
- viam/gen/service/vision/v1/vision_pb2.py +61 -45
- viam/gen/service/vision/v1/vision_pb2.pyi +180 -41
- viam/gen/service/worldstatestore/__init__.py +0 -0
- viam/gen/service/worldstatestore/v1/__init__.py +0 -0
- viam/gen/service/worldstatestore/v1/world_state_store_grpc.py +55 -0
- viam/gen/service/worldstatestore/v1/world_state_store_pb2.py +39 -0
- viam/gen/service/worldstatestore/v1/world_state_store_pb2.pyi +171 -0
- viam/gen/stream/__init__.py +0 -0
- viam/gen/stream/v1/__init__.py +0 -0
- viam/gen/stream/v1/stream_grpc.py +59 -0
- viam/gen/stream/v1/stream_pb2.py +39 -0
- viam/gen/stream/v1/stream_pb2.pyi +161 -0
- viam/gen/tagger/v1/tagger_pb2.py +9 -8
- viam/logging.py +160 -17
- viam/media/__init__.py +0 -9
- viam/media/audio.py +22 -10
- viam/media/utils/__init__.py +0 -0
- viam/media/utils/pil/__init__.py +55 -0
- viam/media/{viam_rgba_plugin.py → utils/pil/viam_rgba_plugin.py} +10 -16
- viam/media/viam_rgba.py +10 -0
- viam/media/video.py +197 -73
- viam/module/module.py +191 -44
- viam/module/resource_data_consumer.py +41 -0
- viam/module/service.py +9 -1
- viam/module/types.py +4 -5
- viam/operations.py +4 -3
- viam/proto/app/__init__.py +361 -5
- viam/proto/app/agent/__init__.py +28 -0
- viam/proto/app/billing.py +51 -27
- viam/proto/app/cloudslam/__init__.py +48 -0
- viam/proto/app/data/__init__.py +103 -17
- viam/proto/app/datapipelines/__init__.py +56 -0
- viam/proto/app/dataset/__init__.py +40 -0
- viam/proto/app/datasync/__init__.py +11 -5
- viam/proto/app/end_user.py +34 -0
- viam/proto/app/mlinference/__init__.py +15 -0
- viam/proto/app/mltraining/__init__.py +25 -1
- viam/proto/app/packages/__init__.py +3 -3
- viam/proto/app/robot.py +19 -1
- viam/proto/common/__init__.py +35 -8
- viam/proto/component/arm/__init__.py +9 -1
- viam/proto/component/audioin/__init__.py +16 -0
- viam/proto/component/audioinput/__init__.py +3 -1
- viam/proto/component/audioout/__init__.py +15 -0
- viam/proto/component/base/__init__.py +7 -1
- viam/proto/component/board/__init__.py +13 -5
- viam/proto/component/button/__init__.py +15 -0
- viam/proto/component/camera/__init__.py +9 -1
- viam/proto/component/encoder/__init__.py +3 -1
- viam/proto/component/gantry/__init__.py +7 -1
- viam/proto/component/generic/__init__.py +3 -1
- viam/proto/component/gripper/__init__.py +7 -1
- viam/proto/component/inputcontroller/__init__.py +7 -1
- viam/proto/component/motor/__init__.py +7 -1
- viam/proto/component/movementsensor/__init__.py +7 -1
- viam/proto/component/posetracker/__init__.py +7 -1
- viam/proto/component/powersensor/__init__.py +30 -0
- viam/proto/component/sensor/__init__.py +3 -4
- viam/proto/component/servo/__init__.py +3 -1
- viam/proto/component/switch/__init__.py +26 -0
- viam/proto/component/testecho/__init__.py +3 -1
- viam/proto/module/__init__.py +3 -1
- viam/proto/opentelemetry/__init__.py +0 -0
- viam/proto/opentelemetry/proto/__init__.py +0 -0
- viam/proto/opentelemetry/proto/common/__init__.py +15 -0
- viam/proto/opentelemetry/proto/resource/__init__.py +10 -0
- viam/proto/opentelemetry/proto/trace/__init__.py +15 -0
- viam/proto/provisioning/__init__.py +42 -0
- viam/proto/robot/__init__.py +57 -9
- viam/proto/rpc/auth.py +11 -1
- viam/proto/rpc/examples/echo/__init__.py +3 -1
- viam/proto/rpc/examples/echoresource/__init__.py +7 -1
- viam/proto/rpc/webrtc/grpc.py +3 -1
- viam/proto/rpc/webrtc/signaling.py +5 -1
- viam/proto/service/datamanager/__init__.py +15 -2
- viam/proto/service/discovery/__init__.py +15 -0
- viam/proto/service/generic/__init__.py +12 -0
- viam/proto/service/mlmodel/__init__.py +27 -1
- viam/proto/service/motion/__init__.py +35 -5
- viam/proto/service/navigation/__init__.py +19 -1
- viam/proto/service/sensors/__init__.py +3 -1
- viam/proto/service/shell/__init__.py +25 -2
- viam/proto/service/slam/__init__.py +13 -1
- viam/proto/service/video/__init__.py +15 -0
- viam/proto/service/vision/__init__.py +11 -1
- viam/proto/service/worldstatestore/__init__.py +32 -0
- viam/proto/stream/__init__.py +36 -0
- viam/py.typed +0 -0
- viam/resource/base.py +45 -8
- viam/resource/easy_resource.py +149 -0
- viam/resource/manager.py +35 -14
- viam/resource/registry.py +40 -52
- viam/resource/rpc_client_base.py +33 -1
- viam/resource/rpc_service_base.py +15 -8
- viam/resource/types.py +39 -26
- viam/robot/client.py +458 -91
- viam/robot/service.py +13 -107
- viam/rpc/dial.py +133 -15
- viam/rpc/libviam_rust_utils.so +0 -0
- viam/rpc/server.py +59 -15
- viam/rpc/types.py +2 -4
- viam/services/discovery/__init__.py +12 -0
- viam/services/discovery/client.py +55 -0
- viam/services/discovery/discovery.py +52 -0
- viam/services/discovery/service.py +43 -0
- viam/services/generic/__init__.py +18 -0
- viam/services/generic/client.py +58 -0
- viam/services/generic/generic.py +58 -0
- viam/services/generic/service.py +29 -0
- viam/services/mlmodel/__init__.py +15 -1
- viam/services/mlmodel/client.py +20 -15
- viam/services/mlmodel/mlmodel.py +44 -7
- viam/services/mlmodel/service.py +9 -13
- viam/services/mlmodel/utils.py +101 -0
- viam/services/motion/__init__.py +15 -3
- viam/services/motion/client.py +109 -150
- viam/services/motion/motion.py +380 -0
- viam/services/motion/service.py +132 -0
- viam/services/navigation/__init__.py +11 -0
- viam/services/navigation/client.py +99 -0
- viam/services/navigation/navigation.py +250 -0
- viam/services/navigation/service.py +137 -0
- viam/services/service_base.py +43 -4
- viam/services/service_client_base.py +4 -4
- viam/services/slam/__init__.py +4 -1
- viam/services/slam/client.py +21 -11
- viam/services/slam/service.py +16 -19
- viam/services/slam/slam.py +66 -5
- viam/services/vision/__init__.py +8 -0
- viam/services/vision/client.py +115 -111
- viam/services/vision/service.py +143 -0
- viam/services/vision/vision.py +317 -0
- viam/services/worldstatestore/__init__.py +18 -0
- viam/services/worldstatestore/client.py +94 -0
- viam/services/worldstatestore/service.py +55 -0
- viam/services/worldstatestore/worldstatestore.py +90 -0
- viam/sessions_client.py +254 -0
- viam/streams.py +44 -0
- viam/utils.py +143 -15
- viam/version_metadata.py +4 -0
- viam_sdk-0.66.0.dist-info/METADATA +157 -0
- viam_sdk-0.66.0.dist-info/RECORD +531 -0
- {viam_sdk-0.3.0.dist-info → viam_sdk-0.66.0.dist-info}/WHEEL +1 -1
- viam/components/audio_input/__init__.py +0 -18
- viam/components/audio_input/audio_input.py +0 -79
- viam/components/audio_input/client.py +0 -60
- viam/components/audio_input/service.py +0 -118
- viam/components/types.py +0 -5
- viam/gen/app/model/v1/model_grpc.py +0 -39
- viam/gen/app/model/v1/model_pb2.py +0 -71
- viam/gen/app/model/v1/model_pb2.pyi +0 -285
- viam/gen/proto/rpc/examples/fileupload/v1/fileupload_grpc.py +0 -21
- viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.py +0 -18
- viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.pyi +0 -49
- viam/media/media.py +0 -53
- viam/proto/app/model/__init__.py +0 -40
- viam/proto/rpc/examples/fileupload/__init__.py +0 -13
- viam/services/sensors/__init__.py +0 -5
- viam/services/sensors/client.py +0 -63
- viam_sdk-0.3.0.dist-info/LICENSE +0 -202
- viam_sdk-0.3.0.dist-info/METADATA +0 -122
- viam_sdk-0.3.0.dist-info/RECORD +0 -372
- /viam/{gen/app/model → app}/__init__.py +0 -0
- /viam/gen/app/{model/v1 → agent}/__init__.py +0 -0
- /viam/gen/{proto/rpc/examples/fileupload → app/agent/v1}/__init__.py +0 -0
- /viam/gen/{proto/rpc/examples/fileupload/v1 → app/cloudslam}/__init__.py +0 -0
- /LICENSE → /viam_sdk-0.66.0.dist-info/licenses/LICENSE +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from viam.media.video import
|
|
1
|
+
from viam.media.video import ViamImage
|
|
2
2
|
from viam.proto.component.camera import DistortionParameters, IntrinsicParameters
|
|
3
3
|
from viam.resource.registry import Registry, ResourceRegistration
|
|
4
4
|
|
|
@@ -10,10 +10,10 @@ __all__ = [
|
|
|
10
10
|
"Camera",
|
|
11
11
|
"IntrinsicParameters",
|
|
12
12
|
"DistortionParameters",
|
|
13
|
-
"
|
|
13
|
+
"ViamImage",
|
|
14
14
|
]
|
|
15
15
|
|
|
16
|
-
Registry.
|
|
16
|
+
Registry.register_api(
|
|
17
17
|
ResourceRegistration(
|
|
18
18
|
Camera,
|
|
19
19
|
CameraRPCService,
|
viam/components/camera/camera.py
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import abc
|
|
2
|
-
|
|
2
|
+
import sys
|
|
3
|
+
from typing import Any, Dict, Final, Optional, Sequence, Tuple
|
|
3
4
|
|
|
4
|
-
from
|
|
5
|
-
|
|
6
|
-
from viam.
|
|
5
|
+
from viam.media.video import NamedImage
|
|
6
|
+
from viam.proto.common import ResponseMetadata
|
|
7
|
+
from viam.proto.component.camera import GetPropertiesResponse
|
|
8
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
7
9
|
|
|
8
10
|
from ..component_base import ComponentBase
|
|
9
|
-
|
|
11
|
+
|
|
12
|
+
if sys.version_info >= (3, 10):
|
|
13
|
+
from typing import TypeAlias
|
|
14
|
+
else:
|
|
15
|
+
from typing_extensions import TypeAlias
|
|
10
16
|
|
|
11
17
|
|
|
12
18
|
class Camera(ComponentBase):
|
|
@@ -16,40 +22,56 @@ class Camera(ComponentBase):
|
|
|
16
22
|
This acts as an abstract base class for any drivers representing specific
|
|
17
23
|
camera implementations. This cannot be used on its own. If the ``__init__()`` function is
|
|
18
24
|
overridden, it must call the ``super().__init__()`` function.
|
|
19
|
-
"""
|
|
20
25
|
|
|
21
|
-
|
|
26
|
+
::
|
|
22
27
|
|
|
23
|
-
|
|
24
|
-
"""The camera's supported features and settings"""
|
|
28
|
+
from viam.components.camera import Camera
|
|
25
29
|
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
For more information, see `Camera component <https://docs.viam.com/dev/reference/apis/components/camera/>`_.
|
|
31
|
+
"""
|
|
28
32
|
|
|
29
|
-
|
|
30
|
-
|
|
33
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
34
|
+
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "camera"
|
|
35
|
+
)
|
|
31
36
|
|
|
32
|
-
|
|
33
|
-
"""The distortion parameters of the camera"""
|
|
37
|
+
Properties: "TypeAlias" = GetPropertiesResponse
|
|
34
38
|
|
|
35
39
|
@abc.abstractmethod
|
|
36
|
-
async def
|
|
37
|
-
|
|
38
|
-
|
|
40
|
+
async def get_images(
|
|
41
|
+
self,
|
|
42
|
+
*,
|
|
43
|
+
filter_source_names: Optional[Sequence[str]] = None,
|
|
44
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
45
|
+
timeout: Optional[float] = None,
|
|
46
|
+
**kwargs,
|
|
47
|
+
) -> Tuple[Sequence[NamedImage], ResponseMetadata]:
|
|
48
|
+
"""Get simultaneous images from different imagers, along with associated metadata.
|
|
49
|
+
This should not be used for getting a time series of images from the same imager.
|
|
39
50
|
|
|
40
|
-
|
|
41
|
-
|
|
51
|
+
::
|
|
52
|
+
|
|
53
|
+
my_camera = Camera.from_robot(robot=machine, name="my_camera")
|
|
54
|
+
|
|
55
|
+
images, metadata = await my_camera.get_images()
|
|
56
|
+
first_image = images[0]
|
|
57
|
+
timestamp = metadata.captured_at
|
|
42
58
|
|
|
43
59
|
Args:
|
|
44
|
-
|
|
60
|
+
filter_source_names (Sequence[str]): The filter_source_names parameter can be used to filter only the images from the specified
|
|
61
|
+
source names. When unspecified, all images are returned.
|
|
45
62
|
|
|
46
63
|
Returns:
|
|
47
|
-
|
|
64
|
+
Tuple[Sequence[NamedImage], ResponseMetadata]: A tuple containing two values; the first [0] a list of images
|
|
65
|
+
returned from the camera system, and the second [1] the metadata associated with this response.
|
|
66
|
+
|
|
67
|
+
For more information, see `Camera component <https://docs.viam.com/dev/reference/apis/components/camera/#getimages>`_.
|
|
48
68
|
"""
|
|
49
69
|
...
|
|
50
70
|
|
|
51
71
|
@abc.abstractmethod
|
|
52
|
-
async def get_point_cloud(
|
|
72
|
+
async def get_point_cloud(
|
|
73
|
+
self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
|
|
74
|
+
) -> Tuple[bytes, str]:
|
|
53
75
|
"""
|
|
54
76
|
Get the next point cloud from the camera. This will be
|
|
55
77
|
returned as bytes with a mimetype describing
|
|
@@ -58,12 +80,15 @@ class Camera(ComponentBase):
|
|
|
58
80
|
by the mimetype.
|
|
59
81
|
|
|
60
82
|
To deserialize the returned information into a numpy array, use the Open3D library.
|
|
83
|
+
|
|
61
84
|
::
|
|
62
85
|
|
|
63
86
|
import numpy as np
|
|
64
87
|
import open3d as o3d
|
|
65
88
|
|
|
66
|
-
|
|
89
|
+
my_camera = Camera.from_robot(robot=machine, name="my_camera")
|
|
90
|
+
|
|
91
|
+
data, _ = await my_camera.get_point_cloud()
|
|
67
92
|
|
|
68
93
|
# write the point cloud into a temporary file
|
|
69
94
|
with open("/tmp/pointcloud_data.pcd", "wb") as f:
|
|
@@ -72,8 +97,10 @@ class Camera(ComponentBase):
|
|
|
72
97
|
points = np.asarray(pcd.points)
|
|
73
98
|
|
|
74
99
|
Returns:
|
|
75
|
-
bytes:
|
|
76
|
-
|
|
100
|
+
Tuple[bytes, str]: A tuple containing two values; the first [0] the pointcloud data,
|
|
101
|
+
and the second [1] the mimetype of the pointcloud (for example, PCD).
|
|
102
|
+
|
|
103
|
+
For more information, see `Camera component <https://docs.viam.com/dev/reference/apis/components/camera/#getpointcloud>`_.
|
|
77
104
|
"""
|
|
78
105
|
...
|
|
79
106
|
|
|
@@ -82,7 +109,15 @@ class Camera(ComponentBase):
|
|
|
82
109
|
"""
|
|
83
110
|
Get the camera intrinsic parameters and camera distortion parameters
|
|
84
111
|
|
|
112
|
+
::
|
|
113
|
+
|
|
114
|
+
my_camera = Camera.from_robot(robot=machine, name="my_camera")
|
|
115
|
+
|
|
116
|
+
properties = await my_camera.get_properties()
|
|
117
|
+
|
|
85
118
|
Returns:
|
|
86
|
-
Properties: The properties of the camera
|
|
119
|
+
Properties: The properties of the camera.
|
|
120
|
+
|
|
121
|
+
For more information, see `Camera component <https://docs.viam.com/dev/reference/apis/components/camera/#getproperties>`_.
|
|
87
122
|
"""
|
|
88
123
|
...
|
viam/components/camera/client.py
CHANGED
|
@@ -1,24 +1,21 @@
|
|
|
1
|
-
from
|
|
2
|
-
from typing import Mapping, Optional, Tuple, Union
|
|
1
|
+
from typing import Any, Dict, Mapping, Optional, Sequence, Tuple
|
|
3
2
|
|
|
4
3
|
from grpclib.client import Channel
|
|
5
|
-
from PIL import Image
|
|
6
4
|
|
|
7
|
-
from viam.media.video import
|
|
8
|
-
from viam.proto.common import DoCommandRequest, DoCommandResponse
|
|
5
|
+
from viam.media.video import CameraMimeType, NamedImage
|
|
6
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, ResponseMetadata
|
|
9
7
|
from viam.proto.component.camera import (
|
|
10
8
|
CameraServiceStub,
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
GetImagesRequest,
|
|
10
|
+
GetImagesResponse,
|
|
13
11
|
GetPointCloudRequest,
|
|
14
12
|
GetPointCloudResponse,
|
|
15
13
|
GetPropertiesRequest,
|
|
16
|
-
GetPropertiesResponse,
|
|
17
14
|
)
|
|
18
15
|
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
19
|
-
from viam.utils import ValueTypes, dict_to_struct, struct_to_dict
|
|
16
|
+
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
|
|
20
17
|
|
|
21
|
-
from . import Camera
|
|
18
|
+
from . import Camera
|
|
22
19
|
|
|
23
20
|
|
|
24
21
|
class CameraClient(Camera, ReconfigurableResourceRPCClientBase):
|
|
@@ -31,25 +28,60 @@ class CameraClient(Camera, ReconfigurableResourceRPCClientBase):
|
|
|
31
28
|
self.client = CameraServiceStub(channel)
|
|
32
29
|
super().__init__(name)
|
|
33
30
|
|
|
34
|
-
async def
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
31
|
+
async def get_images(
|
|
32
|
+
self,
|
|
33
|
+
*,
|
|
34
|
+
filter_source_names: Optional[Sequence[str]] = None,
|
|
35
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
36
|
+
timeout: Optional[float] = None,
|
|
37
|
+
**kwargs,
|
|
38
|
+
) -> Tuple[Sequence[NamedImage], ResponseMetadata]:
|
|
39
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
40
|
+
request = GetImagesRequest(name=self.name, extra=dict_to_struct(extra), filter_source_names=filter_source_names)
|
|
41
|
+
response: GetImagesResponse = await self.client.GetImages(request, timeout=timeout, metadata=md)
|
|
42
|
+
imgs = []
|
|
43
|
+
for img_data in response.images:
|
|
44
|
+
mime_type = CameraMimeType.from_string(img_data.mime_type)
|
|
45
|
+
img = NamedImage(img_data.source_name, img_data.image, mime_type)
|
|
46
|
+
imgs.append(img)
|
|
47
|
+
resp_metadata: ResponseMetadata = response.response_metadata
|
|
48
|
+
return imgs, resp_metadata
|
|
49
|
+
|
|
50
|
+
async def get_point_cloud(
|
|
51
|
+
self,
|
|
52
|
+
*,
|
|
53
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
54
|
+
timeout: Optional[float] = None,
|
|
55
|
+
**kwargs,
|
|
56
|
+
) -> Tuple[bytes, str]:
|
|
57
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
58
|
+
request = GetPointCloudRequest(name=self.name, mime_type=CameraMimeType.PCD, extra=dict_to_struct(extra))
|
|
59
|
+
response: GetPointCloudResponse = await self.client.GetPointCloud(request, timeout=timeout, metadata=md)
|
|
46
60
|
return (response.point_cloud, response.mime_type)
|
|
47
61
|
|
|
48
|
-
async def get_properties(
|
|
49
|
-
|
|
50
|
-
|
|
62
|
+
async def get_properties(
|
|
63
|
+
self,
|
|
64
|
+
*,
|
|
65
|
+
timeout: Optional[float] = None,
|
|
66
|
+
**kwargs,
|
|
67
|
+
) -> Camera.Properties:
|
|
68
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
69
|
+
return await self.client.GetProperties(GetPropertiesRequest(name=self.name), timeout=timeout, metadata=md)
|
|
51
70
|
|
|
52
|
-
async def do_command(
|
|
71
|
+
async def do_command(
|
|
72
|
+
self,
|
|
73
|
+
command: Mapping[str, ValueTypes],
|
|
74
|
+
*,
|
|
75
|
+
timeout: Optional[float] = None,
|
|
76
|
+
**kwargs,
|
|
77
|
+
) -> Mapping[str, ValueTypes]:
|
|
78
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
53
79
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
54
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
80
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
55
81
|
return struct_to_dict(response.result)
|
|
82
|
+
|
|
83
|
+
async def get_geometries(
|
|
84
|
+
self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
|
|
85
|
+
) -> Sequence[Geometry]:
|
|
86
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
87
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
# TODO: Update type checking based with RSDK-4089
|
|
2
|
+
# pyright: reportGeneralTypeIssues=false
|
|
2
3
|
from grpclib.server import Stream
|
|
3
4
|
|
|
4
|
-
from viam.errors import
|
|
5
|
-
from viam.
|
|
6
|
-
from viam.proto.common import DoCommandRequest, DoCommandResponse
|
|
5
|
+
from viam.errors import NotSupportedError
|
|
6
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
|
|
7
7
|
from viam.proto.component.camera import (
|
|
8
8
|
CameraServiceBase,
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
GetImagesRequest,
|
|
10
|
+
GetImagesResponse,
|
|
11
11
|
GetPointCloudRequest,
|
|
12
12
|
GetPointCloudResponse,
|
|
13
13
|
GetPropertiesRequest,
|
|
14
14
|
GetPropertiesResponse,
|
|
15
|
-
|
|
15
|
+
Image,
|
|
16
16
|
)
|
|
17
17
|
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
18
18
|
from viam.utils import dict_to_struct, struct_to_dict
|
|
19
19
|
|
|
20
|
-
from . import Camera
|
|
20
|
+
from . import Camera
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
class CameraRPCService(CameraServiceBase, ResourceRPCServiceBase[Camera]):
|
|
@@ -27,61 +27,40 @@ class CameraRPCService(CameraServiceBase, ResourceRPCServiceBase[Camera]):
|
|
|
27
27
|
|
|
28
28
|
RESOURCE_TYPE = Camera
|
|
29
29
|
|
|
30
|
-
async def GetImage(self, stream: Stream
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
name = request.name
|
|
34
|
-
try:
|
|
35
|
-
camera = self.get_resource(name)
|
|
36
|
-
except ResourceNotFoundError as e:
|
|
37
|
-
raise e.grpc_error
|
|
30
|
+
async def GetImage(self, stream: Stream) -> None:
|
|
31
|
+
"""Deprecated: Use GetImages instead."""
|
|
32
|
+
raise NotSupportedError("GetImage is deprecated. Use GetImages instead.")
|
|
38
33
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
mimetype, is_lazy = CameraMimeType.from_lazy(request.mime_type)
|
|
43
|
-
if CameraMimeType.is_supported(mimetype):
|
|
44
|
-
response_mime = mimetype
|
|
45
|
-
else:
|
|
46
|
-
response_mime = request.mime_type
|
|
47
|
-
response = GetImageResponse(mime_type=response_mime)
|
|
48
|
-
img_bytes = mimetype.encode_image(image)
|
|
49
|
-
finally:
|
|
50
|
-
image.close()
|
|
51
|
-
response.image = img_bytes
|
|
52
|
-
await stream.send_message(response)
|
|
34
|
+
async def RenderFrame(self, stream: Stream) -> None:
|
|
35
|
+
"""Deprecated: Use GetImages instead."""
|
|
36
|
+
raise NotSupportedError("RenderFrame is deprecated. Use GetImages instead.")
|
|
53
37
|
|
|
54
|
-
async def
|
|
38
|
+
async def GetImages(self, stream: Stream[GetImagesRequest, GetImagesResponse]) -> None:
|
|
55
39
|
request = await stream.recv_message()
|
|
56
40
|
assert request is not None
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
camera = self.get_resource(name)
|
|
60
|
-
except ResourceNotFoundError as e:
|
|
61
|
-
raise e.grpc_error
|
|
62
|
-
try:
|
|
63
|
-
mimetype = CameraMimeType(request.mime_type)
|
|
64
|
-
except ValueError:
|
|
65
|
-
mimetype = CameraMimeType.JPEG
|
|
41
|
+
camera = self.get_resource(request.name)
|
|
42
|
+
|
|
66
43
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
44
|
+
images, metadata = await camera.get_images(
|
|
45
|
+
timeout=timeout,
|
|
46
|
+
metadata=stream.metadata,
|
|
47
|
+
extra=struct_to_dict(request.extra),
|
|
48
|
+
filter_source_names=request.filter_source_names,
|
|
49
|
+
)
|
|
50
|
+
img_bytes_lst = []
|
|
51
|
+
for img in images:
|
|
52
|
+
img_bytes = img.data
|
|
53
|
+
img_bytes_lst.append(Image(source_name=img.name, mime_type=img.mime_type, image=img_bytes))
|
|
54
|
+
response = GetImagesResponse(images=img_bytes_lst, response_metadata=metadata)
|
|
73
55
|
await stream.send_message(response)
|
|
74
56
|
|
|
75
57
|
async def GetPointCloud(self, stream: Stream[GetPointCloudRequest, GetPointCloudResponse]) -> None:
|
|
76
58
|
request = await stream.recv_message()
|
|
77
59
|
assert request is not None
|
|
78
60
|
name = request.name
|
|
79
|
-
|
|
80
|
-
camera = self.get_resource(name)
|
|
81
|
-
except ResourceNotFoundError as e:
|
|
82
|
-
raise e.grpc_error
|
|
61
|
+
camera = self.get_resource(name)
|
|
83
62
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
84
|
-
pc, mimetype = await camera.get_point_cloud(timeout=timeout, metadata=stream.metadata)
|
|
63
|
+
pc, mimetype = await camera.get_point_cloud(timeout=timeout, extra=struct_to_dict(request.extra), metadata=stream.metadata)
|
|
85
64
|
response = GetPointCloudResponse(mime_type=mimetype, point_cloud=pc)
|
|
86
65
|
await stream.send_message(response)
|
|
87
66
|
|
|
@@ -89,27 +68,25 @@ class CameraRPCService(CameraServiceBase, ResourceRPCServiceBase[Camera]):
|
|
|
89
68
|
request = await stream.recv_message()
|
|
90
69
|
assert request is not None
|
|
91
70
|
name = request.name
|
|
92
|
-
|
|
93
|
-
camera = self.get_resource(name)
|
|
94
|
-
except ResourceNotFoundError as e:
|
|
95
|
-
raise e.grpc_error
|
|
71
|
+
camera = self.get_resource(name)
|
|
96
72
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
97
73
|
properties = await camera.get_properties(timeout=timeout, metadata=stream.metadata)
|
|
98
|
-
|
|
99
|
-
supports_pcd=properties.supports_pcd,
|
|
100
|
-
intrinsic_parameters=properties.intrinsic_parameters,
|
|
101
|
-
distortion_parameters=properties.distortion_parameters,
|
|
102
|
-
)
|
|
103
|
-
await stream.send_message(response)
|
|
74
|
+
await stream.send_message(properties)
|
|
104
75
|
|
|
105
76
|
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
106
77
|
request = await stream.recv_message()
|
|
107
78
|
assert request is not None
|
|
108
|
-
|
|
109
|
-
camera = self.get_resource(request.name)
|
|
110
|
-
except ResourceNotFoundError as e:
|
|
111
|
-
raise e.grpc_error
|
|
79
|
+
camera = self.get_resource(request.name)
|
|
112
80
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
113
81
|
result = await camera.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
114
82
|
response = DoCommandResponse(result=dict_to_struct(result))
|
|
115
83
|
await stream.send_message(response)
|
|
84
|
+
|
|
85
|
+
async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
|
|
86
|
+
request = await stream.recv_message()
|
|
87
|
+
assert request is not None
|
|
88
|
+
camera = self.get_resource(request.name)
|
|
89
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
90
|
+
geometries = await camera.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
|
|
91
|
+
response = GetGeometriesResponse(geometries=geometries)
|
|
92
|
+
await stream.send_message(response)
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import abc
|
|
2
|
-
from
|
|
2
|
+
from logging import Logger
|
|
3
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Dict, List, Mapping, Optional, Sequence, SupportsBytes, SupportsFloat, Union, cast
|
|
3
4
|
|
|
4
5
|
from typing_extensions import Self
|
|
5
6
|
|
|
7
|
+
from viam.errors import MethodNotImplementedError
|
|
8
|
+
from viam.logging import getLogger
|
|
9
|
+
from viam.proto.common import Geometry
|
|
6
10
|
from viam.resource.base import ResourceBase
|
|
7
11
|
|
|
8
12
|
if TYPE_CHECKING:
|
|
9
|
-
from viam.resource.types import
|
|
13
|
+
from viam.resource.types import API
|
|
10
14
|
from viam.robot.client import RobotClient
|
|
11
15
|
|
|
12
16
|
|
|
@@ -19,10 +23,11 @@ class ComponentBase(abc.ABC, ResourceBase):
|
|
|
19
23
|
All components must inherit from this class.
|
|
20
24
|
"""
|
|
21
25
|
|
|
22
|
-
|
|
26
|
+
API: ClassVar["API"]
|
|
23
27
|
|
|
24
|
-
def __init__(self, name: str):
|
|
28
|
+
def __init__(self, name: str, *, logger: Optional[Logger] = None):
|
|
25
29
|
self.name = name
|
|
30
|
+
self.logger = logger if logger is not None else getLogger(f"{self.API}.{name}")
|
|
26
31
|
|
|
27
32
|
@classmethod
|
|
28
33
|
def from_robot(cls, robot: "RobotClient", name: str) -> Self:
|
|
@@ -36,7 +41,25 @@ class ComponentBase(abc.ABC, ResourceBase):
|
|
|
36
41
|
Self: The component, if it exists on the robot
|
|
37
42
|
"""
|
|
38
43
|
component = robot.get_component(cls.get_resource_name(name))
|
|
39
|
-
return cast(cls, component)
|
|
44
|
+
return cast(cls, component) # type: ignore
|
|
40
45
|
|
|
41
46
|
async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs) -> Mapping[str, ValueTypes]:
|
|
42
47
|
raise NotImplementedError()
|
|
48
|
+
|
|
49
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> Sequence[Geometry]:
|
|
50
|
+
"""
|
|
51
|
+
Get all geometries associated with the component, in their current configuration, in the
|
|
52
|
+
`frame <https://docs.viam.com/operate/mobility/define-geometry/>`__ of the component.
|
|
53
|
+
|
|
54
|
+
::
|
|
55
|
+
|
|
56
|
+
geometries = await component.get_geometries()
|
|
57
|
+
|
|
58
|
+
if geometries:
|
|
59
|
+
# Get the center of the first geometry
|
|
60
|
+
print(f"Pose of the first geometry's centerpoint: {geometries[0].center}")
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
List[Geometry]: The geometries associated with the Component.
|
|
64
|
+
"""
|
|
65
|
+
raise MethodNotImplementedError("get_geometries")
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
from typing import Any, Dict, Mapping, Optional, Tuple
|
|
1
|
+
from typing import Any, Dict, List, Mapping, Optional, Tuple
|
|
2
2
|
|
|
3
3
|
from grpclib.client import Channel
|
|
4
4
|
|
|
5
|
-
from viam.proto.common import DoCommandRequest, DoCommandResponse
|
|
5
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry
|
|
6
6
|
from viam.proto.component.encoder import (
|
|
7
7
|
EncoderServiceStub,
|
|
8
8
|
GetPositionRequest,
|
|
@@ -13,7 +13,7 @@ from viam.proto.component.encoder import (
|
|
|
13
13
|
ResetPositionRequest,
|
|
14
14
|
)
|
|
15
15
|
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
16
|
-
from viam.utils import ValueTypes, dict_to_struct, struct_to_dict
|
|
16
|
+
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
|
|
17
17
|
|
|
18
18
|
from .encoder import Encoder
|
|
19
19
|
|
|
@@ -33,11 +33,11 @@ class EncoderClient(Encoder, ReconfigurableResourceRPCClientBase):
|
|
|
33
33
|
*,
|
|
34
34
|
extra: Optional[Dict[str, Any]] = None,
|
|
35
35
|
timeout: Optional[float] = None,
|
|
36
|
+
**kwargs,
|
|
36
37
|
):
|
|
37
|
-
|
|
38
|
-
extra = {}
|
|
38
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
39
39
|
request = ResetPositionRequest(name=self.name, extra=dict_to_struct(extra))
|
|
40
|
-
await self.client.ResetPosition(request, timeout=timeout)
|
|
40
|
+
await self.client.ResetPosition(request, timeout=timeout, metadata=md)
|
|
41
41
|
|
|
42
42
|
async def get_position(
|
|
43
43
|
self,
|
|
@@ -45,11 +45,11 @@ class EncoderClient(Encoder, ReconfigurableResourceRPCClientBase):
|
|
|
45
45
|
*,
|
|
46
46
|
extra: Optional[Dict[str, Any]] = None,
|
|
47
47
|
timeout: Optional[float] = None,
|
|
48
|
+
**kwargs,
|
|
48
49
|
) -> Tuple[float, PositionType.ValueType]:
|
|
49
|
-
|
|
50
|
-
extra = {}
|
|
50
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
51
51
|
request = GetPositionRequest(name=self.name, position_type=position_type, extra=dict_to_struct(extra))
|
|
52
|
-
response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout)
|
|
52
|
+
response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
|
|
53
53
|
return response.value, response.position_type
|
|
54
54
|
|
|
55
55
|
async def get_properties(
|
|
@@ -57,16 +57,27 @@ class EncoderClient(Encoder, ReconfigurableResourceRPCClientBase):
|
|
|
57
57
|
*,
|
|
58
58
|
extra: Optional[Dict[str, Any]] = None,
|
|
59
59
|
timeout: Optional[float] = None,
|
|
60
|
+
**kwargs,
|
|
60
61
|
) -> Encoder.Properties:
|
|
61
|
-
|
|
62
|
-
extra = {}
|
|
62
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
63
63
|
request = GetPropertiesRequest(name=self.name, extra=dict_to_struct(extra))
|
|
64
|
-
response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout)
|
|
64
|
+
response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout, metadata=md)
|
|
65
65
|
return Encoder.Properties(
|
|
66
66
|
ticks_count_supported=response.ticks_count_supported, angle_degrees_supported=response.angle_degrees_supported
|
|
67
67
|
)
|
|
68
68
|
|
|
69
|
-
async def do_command(
|
|
69
|
+
async def do_command(
|
|
70
|
+
self,
|
|
71
|
+
command: Mapping[str, ValueTypes],
|
|
72
|
+
*,
|
|
73
|
+
timeout: Optional[float] = None,
|
|
74
|
+
**kwargs,
|
|
75
|
+
) -> Mapping[str, ValueTypes]:
|
|
76
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
70
77
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
71
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
78
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
72
79
|
return struct_to_dict(response.result)
|
|
80
|
+
|
|
81
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
82
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
83
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|