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
viam/components/arm/arm.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import abc
|
|
2
|
-
from typing import Any, Dict, Final, Optional
|
|
2
|
+
from typing import Any, Dict, Final, Optional, Tuple
|
|
3
3
|
|
|
4
|
-
from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
4
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
5
5
|
|
|
6
6
|
from ..component_base import ComponentBase
|
|
7
|
-
from . import JointPositions, Pose
|
|
7
|
+
from . import JointPositions, KinematicsFileFormat, Pose
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class Arm(ComponentBase):
|
|
@@ -14,9 +14,19 @@ class Arm(ComponentBase):
|
|
|
14
14
|
This acts as an abstract base class for any drivers representing specific
|
|
15
15
|
arm implementations. This cannot be used on its own. If the ``__init__()`` function is
|
|
16
16
|
overridden, it must call the ``super().__init__()`` function.
|
|
17
|
+
|
|
18
|
+
::
|
|
19
|
+
|
|
20
|
+
from viam.components.arm import Arm
|
|
21
|
+
# To use move_to_position:
|
|
22
|
+
from viam.proto.common import Pose
|
|
23
|
+
# To use move_to_joint_positions:
|
|
24
|
+
from viam.proto.component.arm import JointPositions
|
|
25
|
+
|
|
26
|
+
For more information, see `Arm component <https://docs.viam.com/dev/reference/apis/components/arm/>`_.
|
|
17
27
|
"""
|
|
18
28
|
|
|
19
|
-
|
|
29
|
+
API: Final = API(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "arm") # pyright: ignore [reportIncompatibleVariableOverride]
|
|
20
30
|
|
|
21
31
|
@abc.abstractmethod
|
|
22
32
|
async def get_end_position(
|
|
@@ -27,10 +37,22 @@ class Arm(ComponentBase):
|
|
|
27
37
|
**kwargs,
|
|
28
38
|
) -> Pose:
|
|
29
39
|
"""
|
|
30
|
-
Get the current position of the end of the arm expressed as a Pose
|
|
40
|
+
Get the current position of the end of the arm expressed as a ``Pose``.
|
|
41
|
+
|
|
42
|
+
::
|
|
43
|
+
|
|
44
|
+
my_arm = Arm.from_robot(robot=machine, name="my_arm")
|
|
45
|
+
|
|
46
|
+
# Get the end position of the arm as a Pose.
|
|
47
|
+
pos = await my_arm.get_end_position()
|
|
31
48
|
|
|
32
49
|
Returns:
|
|
33
|
-
Pose:
|
|
50
|
+
Pose: A representation of the arm's current position as a 6 DOF (six degrees of freedom) pose.
|
|
51
|
+
The ``Pose`` is composed of values for location and orientation with respect to the origin.
|
|
52
|
+
Location is expressed as distance, which is represented by x, y, and z coordinate values.
|
|
53
|
+
Orientation is expressed as an orientation vector, which is represented by o_x, o_y, o_z, and theta values.
|
|
54
|
+
|
|
55
|
+
For more information, see `Arm component <https://docs.viam.com/dev/reference/apis/components/arm/#getendposition>`_.
|
|
34
56
|
"""
|
|
35
57
|
...
|
|
36
58
|
|
|
@@ -46,8 +68,23 @@ class Arm(ComponentBase):
|
|
|
46
68
|
"""
|
|
47
69
|
Move the end of the arm to the Pose specified in ``pose``.
|
|
48
70
|
|
|
71
|
+
::
|
|
72
|
+
|
|
73
|
+
my_arm = Arm.from_robot(robot=machine, name="my_arm")
|
|
74
|
+
|
|
75
|
+
# Create a Pose for the arm.
|
|
76
|
+
examplePose = Pose(x=5, y=5, z=5, o_x=5, o_y=5, o_z=5, theta=20)
|
|
77
|
+
|
|
78
|
+
# Move your arm to the Pose.
|
|
79
|
+
await my_arm.move_to_position(pose=examplePose)
|
|
80
|
+
|
|
49
81
|
Args:
|
|
50
|
-
pose (Pose): The destination Pose for the arm.
|
|
82
|
+
pose (Pose): The destination ``Pose`` for the arm. The ``Pose`` is composed of values for location and orientation
|
|
83
|
+
with respect to the origin.
|
|
84
|
+
Location is expressed as distance, which is represented by x, y, and z coordinate values.
|
|
85
|
+
Orientation is expressed as an orientation vector, which is represented by o_x, o_y, o_z, and theta values.
|
|
86
|
+
|
|
87
|
+
For more information, see `Arm component <https://docs.viam.com/dev/reference/apis/components/arm/#movetoposition>`_.
|
|
51
88
|
"""
|
|
52
89
|
...
|
|
53
90
|
|
|
@@ -63,8 +100,24 @@ class Arm(ComponentBase):
|
|
|
63
100
|
"""
|
|
64
101
|
Move each joint on the arm to the corresponding angle specified in ``positions``.
|
|
65
102
|
|
|
103
|
+
::
|
|
104
|
+
|
|
105
|
+
my_arm = Arm.from_robot(robot=machine, name="my_arm")
|
|
106
|
+
|
|
107
|
+
# Declare a list of values with your desired rotational value for each joint on
|
|
108
|
+
# the arm. This example is for a 5dof arm.
|
|
109
|
+
degrees = [0.0, 45.0, 0.0, 0.0, 0.0]
|
|
110
|
+
|
|
111
|
+
# Declare a new JointPositions with these values.
|
|
112
|
+
jointPos = JointPositions(values=degrees)
|
|
113
|
+
|
|
114
|
+
# Move each joint of the arm to the position these values specify.
|
|
115
|
+
await my_arm.move_to_joint_positions(positions=jointPos)
|
|
116
|
+
|
|
66
117
|
Args:
|
|
67
118
|
positions (JointPositions): The destination ``JointPositions`` for the arm.
|
|
119
|
+
|
|
120
|
+
For more information, see `Arm component <https://docs.viam.com/dev/reference/apis/components/arm/#movetojointpositions>`_.
|
|
68
121
|
"""
|
|
69
122
|
...
|
|
70
123
|
|
|
@@ -79,8 +132,19 @@ class Arm(ComponentBase):
|
|
|
79
132
|
"""
|
|
80
133
|
Get the JointPositions representing the current position of the arm.
|
|
81
134
|
|
|
135
|
+
::
|
|
136
|
+
|
|
137
|
+
my_arm = Arm.from_robot(robot=machine, name="my_arm")
|
|
138
|
+
|
|
139
|
+
# Get the current position of each joint on the arm as JointPositions.
|
|
140
|
+
pos = await my_arm.get_joint_positions()
|
|
141
|
+
|
|
82
142
|
Returns:
|
|
83
|
-
JointPositions: The current JointPositions for the arm.
|
|
143
|
+
JointPositions: The current ``JointPositions`` for the arm.
|
|
144
|
+
``JointPositions`` can have one attribute, ``values``, a list of joint positions with rotational values (degrees)
|
|
145
|
+
and translational values (mm).
|
|
146
|
+
|
|
147
|
+
For more information, see `Arm component <https://docs.viam.com/dev/reference/apis/components/arm/#getjointpositions>`_.
|
|
84
148
|
"""
|
|
85
149
|
...
|
|
86
150
|
|
|
@@ -94,6 +158,15 @@ class Arm(ComponentBase):
|
|
|
94
158
|
):
|
|
95
159
|
"""
|
|
96
160
|
Stop all motion of the arm. It is assumed that the arm stops immediately.
|
|
161
|
+
|
|
162
|
+
::
|
|
163
|
+
|
|
164
|
+
my_arm = Arm.from_robot(robot=machine, name="my_arm")
|
|
165
|
+
|
|
166
|
+
# Stop all motion of the arm. It is assumed that the arm stops immediately.
|
|
167
|
+
await my_arm.stop()
|
|
168
|
+
|
|
169
|
+
For more information, see `Arm component <https://docs.viam.com/dev/reference/apis/components/arm/#stop>`_.
|
|
97
170
|
"""
|
|
98
171
|
...
|
|
99
172
|
|
|
@@ -102,7 +175,49 @@ class Arm(ComponentBase):
|
|
|
102
175
|
"""
|
|
103
176
|
Get if the arm is currently moving.
|
|
104
177
|
|
|
178
|
+
::
|
|
179
|
+
|
|
180
|
+
my_arm = Arm.from_robot(robot=machine, name="my_arm")
|
|
181
|
+
|
|
182
|
+
# Stop all motion of the arm. It is assumed that the arm stops immediately.
|
|
183
|
+
await my_arm.stop()
|
|
184
|
+
|
|
185
|
+
# Print if the arm is currently moving.
|
|
186
|
+
print(await my_arm.is_moving())
|
|
187
|
+
|
|
105
188
|
Returns:
|
|
106
189
|
bool: Whether the arm is moving.
|
|
190
|
+
|
|
191
|
+
For more information, see `Arm component <https://docs.viam.com/dev/reference/apis/components/arm/#ismoving>`_.
|
|
192
|
+
"""
|
|
193
|
+
...
|
|
194
|
+
|
|
195
|
+
@abc.abstractmethod
|
|
196
|
+
async def get_kinematics(
|
|
197
|
+
self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
|
|
198
|
+
) -> Tuple[KinematicsFileFormat.ValueType, bytes]:
|
|
199
|
+
"""
|
|
200
|
+
Get the kinematics information associated with the arm.
|
|
201
|
+
|
|
202
|
+
::
|
|
203
|
+
|
|
204
|
+
my_arm = Arm.from_robot(robot=machine, name="my_arm")
|
|
205
|
+
|
|
206
|
+
# Get the kinematics information associated with the arm.
|
|
207
|
+
kinematics = await my_arm.get_kinematics()
|
|
208
|
+
|
|
209
|
+
# Get the format of the kinematics file.
|
|
210
|
+
k_file = kinematics[0]
|
|
211
|
+
|
|
212
|
+
# Get the byte contents of the file.
|
|
213
|
+
k_bytes = kinematics[1]
|
|
214
|
+
|
|
215
|
+
Returns:
|
|
216
|
+
Tuple[KinematicsFileFormat.ValueType, bytes]: A tuple containing two values; the first [0] value represents the format of the
|
|
217
|
+
file, either in URDF format (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_URDF``) or
|
|
218
|
+
Viam's kinematic parameter format (spatial vector algebra) (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA``),
|
|
219
|
+
and the second [1] value represents the byte contents of the file.
|
|
220
|
+
|
|
221
|
+
For more information, see `Arm component <https://docs.viam.com/dev/reference/apis/components/arm/#getkinematics>`_.
|
|
107
222
|
"""
|
|
108
223
|
...
|
viam/components/arm/client.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
from typing import Any, Dict, Mapping, Optional
|
|
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, GetKinematicsRequest, GetKinematicsResponse
|
|
6
6
|
from viam.proto.component.arm import (
|
|
7
7
|
ArmServiceStub,
|
|
8
8
|
GetEndPositionRequest,
|
|
@@ -17,9 +17,9 @@ from viam.proto.component.arm import (
|
|
|
17
17
|
StopRequest,
|
|
18
18
|
)
|
|
19
19
|
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
20
|
-
from viam.utils import ValueTypes, dict_to_struct, struct_to_dict
|
|
20
|
+
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
|
|
21
21
|
|
|
22
|
-
from . import Arm, Pose
|
|
22
|
+
from . import Arm, KinematicsFileFormat, Pose
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
class ArmClient(Arm, ReconfigurableResourceRPCClientBase):
|
|
@@ -39,11 +39,11 @@ class ArmClient(Arm, ReconfigurableResourceRPCClientBase):
|
|
|
39
39
|
*,
|
|
40
40
|
extra: Optional[Dict[str, Any]] = None,
|
|
41
41
|
timeout: Optional[float] = None,
|
|
42
|
+
**kwargs,
|
|
42
43
|
) -> Pose:
|
|
43
|
-
|
|
44
|
-
extra = {}
|
|
44
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
45
45
|
request = GetEndPositionRequest(name=self.name, extra=dict_to_struct(extra))
|
|
46
|
-
response: GetEndPositionResponse = await self.client.GetEndPosition(request, timeout=timeout)
|
|
46
|
+
response: GetEndPositionResponse = await self.client.GetEndPosition(request, timeout=timeout, metadata=md)
|
|
47
47
|
return response.pose
|
|
48
48
|
|
|
49
49
|
async def move_to_position(
|
|
@@ -52,22 +52,22 @@ class ArmClient(Arm, ReconfigurableResourceRPCClientBase):
|
|
|
52
52
|
*,
|
|
53
53
|
extra: Optional[Dict[str, Any]] = None,
|
|
54
54
|
timeout: Optional[float] = None,
|
|
55
|
+
**kwargs,
|
|
55
56
|
):
|
|
56
|
-
|
|
57
|
-
extra = {}
|
|
57
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
58
58
|
request = MoveToPositionRequest(name=self.name, to=pose, extra=dict_to_struct(extra))
|
|
59
|
-
await self.client.MoveToPosition(request, timeout=timeout)
|
|
59
|
+
await self.client.MoveToPosition(request, timeout=timeout, metadata=md)
|
|
60
60
|
|
|
61
61
|
async def get_joint_positions(
|
|
62
62
|
self,
|
|
63
63
|
*,
|
|
64
64
|
extra: Optional[Dict[str, Any]] = None,
|
|
65
65
|
timeout: Optional[float] = None,
|
|
66
|
+
**kwargs,
|
|
66
67
|
) -> JointPositions:
|
|
67
|
-
|
|
68
|
-
extra = {}
|
|
68
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
69
69
|
request = GetJointPositionsRequest(name=self.name, extra=dict_to_struct(extra))
|
|
70
|
-
response: GetJointPositionsResponse = await self.client.GetJointPositions(request, timeout=timeout)
|
|
70
|
+
response: GetJointPositionsResponse = await self.client.GetJointPositions(request, timeout=timeout, metadata=md)
|
|
71
71
|
return response.positions
|
|
72
72
|
|
|
73
73
|
async def move_to_joint_positions(
|
|
@@ -76,28 +76,27 @@ class ArmClient(Arm, ReconfigurableResourceRPCClientBase):
|
|
|
76
76
|
*,
|
|
77
77
|
extra: Optional[Dict[str, Any]] = None,
|
|
78
78
|
timeout: Optional[float] = None,
|
|
79
|
+
**kwargs,
|
|
79
80
|
):
|
|
80
|
-
|
|
81
|
-
extra = {}
|
|
81
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
82
82
|
request = MoveToJointPositionsRequest(name=self.name, positions=positions, extra=dict_to_struct(extra))
|
|
83
|
-
await self.client.MoveToJointPositions(request, timeout=timeout)
|
|
83
|
+
await self.client.MoveToJointPositions(request, timeout=timeout, metadata=md)
|
|
84
84
|
|
|
85
85
|
async def stop(
|
|
86
86
|
self,
|
|
87
87
|
*,
|
|
88
88
|
extra: Optional[Dict[str, Any]] = None,
|
|
89
89
|
timeout: Optional[float] = None,
|
|
90
|
+
**kwargs,
|
|
90
91
|
):
|
|
91
|
-
|
|
92
|
-
extra = {}
|
|
92
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
93
93
|
request = StopRequest(name=self.name, extra=dict_to_struct(extra))
|
|
94
|
-
await self.client.Stop(request, timeout=timeout)
|
|
94
|
+
await self.client.Stop(request, timeout=timeout, metadata=md)
|
|
95
95
|
|
|
96
|
-
async def is_moving(self, *,
|
|
97
|
-
|
|
98
|
-
extra = {}
|
|
96
|
+
async def is_moving(self, *, timeout: Optional[float] = None, **kwargs) -> bool:
|
|
97
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
99
98
|
request = IsMovingRequest(name=self.name)
|
|
100
|
-
response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout)
|
|
99
|
+
response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout, metadata=md)
|
|
101
100
|
return response.is_moving
|
|
102
101
|
|
|
103
102
|
async def do_command(
|
|
@@ -105,7 +104,21 @@ class ArmClient(Arm, ReconfigurableResourceRPCClientBase):
|
|
|
105
104
|
command: Mapping[str, Any],
|
|
106
105
|
*,
|
|
107
106
|
timeout: Optional[float] = None,
|
|
107
|
+
**kwargs,
|
|
108
108
|
) -> Mapping[str, ValueTypes]:
|
|
109
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
109
110
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
110
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
111
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
111
112
|
return struct_to_dict(response.result)
|
|
113
|
+
|
|
114
|
+
async def get_kinematics(
|
|
115
|
+
self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
|
|
116
|
+
) -> Tuple[KinematicsFileFormat.ValueType, bytes]:
|
|
117
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
118
|
+
request = GetKinematicsRequest(name=self.name, extra=dict_to_struct(extra))
|
|
119
|
+
response: GetKinematicsResponse = await self.client.GetKinematics(request, timeout=timeout, metadata=md)
|
|
120
|
+
return (response.format, response.kinematics_data)
|
|
121
|
+
|
|
122
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
123
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
124
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
viam/components/arm/service.py
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
from grpclib.server import Stream
|
|
2
2
|
|
|
3
|
-
from viam.
|
|
4
|
-
|
|
3
|
+
from viam.proto.common import (
|
|
4
|
+
DoCommandRequest,
|
|
5
|
+
DoCommandResponse,
|
|
6
|
+
GetGeometriesRequest,
|
|
7
|
+
GetGeometriesResponse,
|
|
8
|
+
GetKinematicsRequest,
|
|
9
|
+
GetKinematicsResponse,
|
|
10
|
+
)
|
|
5
11
|
from viam.proto.component.arm import (
|
|
6
|
-
ArmServiceBase,
|
|
7
12
|
GetEndPositionRequest,
|
|
8
13
|
GetEndPositionResponse,
|
|
9
14
|
GetJointPositionsRequest,
|
|
@@ -16,6 +21,7 @@ from viam.proto.component.arm import (
|
|
|
16
21
|
MoveToPositionResponse,
|
|
17
22
|
StopRequest,
|
|
18
23
|
StopResponse,
|
|
24
|
+
UnimplementedArmServiceBase,
|
|
19
25
|
)
|
|
20
26
|
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
21
27
|
from viam.utils import dict_to_struct, struct_to_dict
|
|
@@ -23,7 +29,7 @@ from viam.utils import dict_to_struct, struct_to_dict
|
|
|
23
29
|
from .arm import Arm
|
|
24
30
|
|
|
25
31
|
|
|
26
|
-
class ArmRPCService(
|
|
32
|
+
class ArmRPCService(UnimplementedArmServiceBase, ResourceRPCServiceBase[Arm]):
|
|
27
33
|
"""
|
|
28
34
|
gRPC Service for an Arm
|
|
29
35
|
"""
|
|
@@ -34,10 +40,7 @@ class ArmRPCService(ArmServiceBase, ResourceRPCServiceBase[Arm]):
|
|
|
34
40
|
request = await stream.recv_message()
|
|
35
41
|
assert request is not None
|
|
36
42
|
name = request.name
|
|
37
|
-
|
|
38
|
-
arm = self.get_resource(name)
|
|
39
|
-
except ResourceNotFoundError as e:
|
|
40
|
-
raise e.grpc_error
|
|
43
|
+
arm = self.get_resource(name)
|
|
41
44
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
42
45
|
position = await arm.get_end_position(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
43
46
|
response = GetEndPositionResponse(pose=position)
|
|
@@ -47,10 +50,7 @@ class ArmRPCService(ArmServiceBase, ResourceRPCServiceBase[Arm]):
|
|
|
47
50
|
request = await stream.recv_message()
|
|
48
51
|
assert request is not None
|
|
49
52
|
name = request.name
|
|
50
|
-
|
|
51
|
-
arm = self.get_resource(name)
|
|
52
|
-
except ResourceNotFoundError as e:
|
|
53
|
-
raise e.grpc_error
|
|
53
|
+
arm = self.get_resource(name)
|
|
54
54
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
55
55
|
await arm.move_to_position(request.to, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
56
56
|
response = MoveToPositionResponse()
|
|
@@ -60,10 +60,7 @@ class ArmRPCService(ArmServiceBase, ResourceRPCServiceBase[Arm]):
|
|
|
60
60
|
request = await stream.recv_message()
|
|
61
61
|
assert request is not None
|
|
62
62
|
name = request.name
|
|
63
|
-
|
|
64
|
-
arm = self.get_resource(name)
|
|
65
|
-
except ResourceNotFoundError as e:
|
|
66
|
-
raise e.grpc_error
|
|
63
|
+
arm = self.get_resource(name)
|
|
67
64
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
68
65
|
positions = await arm.get_joint_positions(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
69
66
|
response = GetJointPositionsResponse(positions=positions)
|
|
@@ -73,10 +70,7 @@ class ArmRPCService(ArmServiceBase, ResourceRPCServiceBase[Arm]):
|
|
|
73
70
|
request = await stream.recv_message()
|
|
74
71
|
assert request is not None
|
|
75
72
|
name = request.name
|
|
76
|
-
|
|
77
|
-
arm = self.get_resource(name)
|
|
78
|
-
except ResourceNotFoundError as e:
|
|
79
|
-
raise e.grpc_error
|
|
73
|
+
arm = self.get_resource(name)
|
|
80
74
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
81
75
|
await arm.move_to_joint_positions(request.positions, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
82
76
|
response = MoveToJointPositionsResponse()
|
|
@@ -86,10 +80,7 @@ class ArmRPCService(ArmServiceBase, ResourceRPCServiceBase[Arm]):
|
|
|
86
80
|
request = await stream.recv_message()
|
|
87
81
|
assert request is not None
|
|
88
82
|
name = request.name
|
|
89
|
-
|
|
90
|
-
arm = self.get_resource(name)
|
|
91
|
-
except ResourceNotFoundError as e:
|
|
92
|
-
raise e.grpc_error
|
|
83
|
+
arm = self.get_resource(name)
|
|
93
84
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
94
85
|
await arm.stop(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
95
86
|
response = StopResponse()
|
|
@@ -99,10 +90,7 @@ class ArmRPCService(ArmServiceBase, ResourceRPCServiceBase[Arm]):
|
|
|
99
90
|
request = await stream.recv_message()
|
|
100
91
|
assert request is not None
|
|
101
92
|
name = request.name
|
|
102
|
-
|
|
103
|
-
arm = self.get_resource(name)
|
|
104
|
-
except ResourceNotFoundError as e:
|
|
105
|
-
raise e.grpc_error
|
|
93
|
+
arm = self.get_resource(name)
|
|
106
94
|
is_moving = await arm.is_moving()
|
|
107
95
|
response = IsMovingResponse(is_moving=is_moving)
|
|
108
96
|
await stream.send_message(response)
|
|
@@ -110,11 +98,26 @@ class ArmRPCService(ArmServiceBase, ResourceRPCServiceBase[Arm]):
|
|
|
110
98
|
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
111
99
|
request = await stream.recv_message()
|
|
112
100
|
assert request is not None
|
|
113
|
-
|
|
114
|
-
arm = self.get_resource(request.name)
|
|
115
|
-
except ResourceNotFoundError as e:
|
|
116
|
-
raise e.grpc_error
|
|
101
|
+
arm = self.get_resource(request.name)
|
|
117
102
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
118
103
|
result = await arm.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
119
104
|
response = DoCommandResponse(result=dict_to_struct(result))
|
|
120
105
|
await stream.send_message(response)
|
|
106
|
+
|
|
107
|
+
async def GetKinematics(self, stream: Stream[GetKinematicsRequest, GetKinematicsResponse]) -> None:
|
|
108
|
+
request = await stream.recv_message()
|
|
109
|
+
assert request is not None
|
|
110
|
+
arm = self.get_resource(request.name)
|
|
111
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
112
|
+
format, kinematics_data = await arm.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
113
|
+
response = GetKinematicsResponse(format=format, kinematics_data=kinematics_data)
|
|
114
|
+
await stream.send_message(response)
|
|
115
|
+
|
|
116
|
+
async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
|
|
117
|
+
request = await stream.recv_message()
|
|
118
|
+
assert request is not None
|
|
119
|
+
arm = self.get_resource(request.name)
|
|
120
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
121
|
+
geometries = await arm.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
|
|
122
|
+
response = GetGeometriesResponse(geometries=geometries)
|
|
123
|
+
await stream.send_message(response)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from viam.media.audio import AudioCodec
|
|
2
|
+
from viam.proto.common import AudioInfo
|
|
3
|
+
from viam.resource.registry import Registry, ResourceRegistration
|
|
4
|
+
|
|
5
|
+
from .audio_in import AudioIn
|
|
6
|
+
from .client import AudioInClient
|
|
7
|
+
from .service import AudioInRPCService
|
|
8
|
+
|
|
9
|
+
AudioResponse = AudioIn.AudioResponse
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"AudioIn",
|
|
13
|
+
"AudioResponse",
|
|
14
|
+
"AudioInfo",
|
|
15
|
+
"AudioCodec",
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
Registry.register_api(
|
|
19
|
+
ResourceRegistration(
|
|
20
|
+
AudioIn,
|
|
21
|
+
AudioInRPCService,
|
|
22
|
+
lambda name, channel: AudioInClient(name, channel),
|
|
23
|
+
)
|
|
24
|
+
)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import abc
|
|
2
|
+
import sys
|
|
3
|
+
from typing import Final, Optional
|
|
4
|
+
|
|
5
|
+
from viam.proto.common import GetPropertiesResponse
|
|
6
|
+
from viam.proto.component.audioin import GetAudioResponse
|
|
7
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
8
|
+
from viam.streams import Stream
|
|
9
|
+
|
|
10
|
+
from ..component_base import ComponentBase
|
|
11
|
+
|
|
12
|
+
if sys.version_info >= (3, 10):
|
|
13
|
+
from typing import TypeAlias
|
|
14
|
+
else:
|
|
15
|
+
from typing_extensions import TypeAlias
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class AudioIn(ComponentBase):
|
|
19
|
+
"""AudioIn represents a component that can capture audio.
|
|
20
|
+
|
|
21
|
+
This acts as an abstract base class for any drivers representing specific
|
|
22
|
+
audio input implementations. This cannot be used on its own. If the ``__init__()`` function is
|
|
23
|
+
overridden, it must call the ``super().__init__()`` function.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
27
|
+
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "audio_in"
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
Properties: "TypeAlias" = GetPropertiesResponse
|
|
31
|
+
AudioResponse: "TypeAlias" = GetAudioResponse
|
|
32
|
+
AudioStream = Stream[AudioResponse]
|
|
33
|
+
|
|
34
|
+
@abc.abstractmethod
|
|
35
|
+
async def get_audio(
|
|
36
|
+
self, codec: str, duration_seconds: float, previous_timestamp_ns: int, *, timeout: Optional[float] = None, **kwargs
|
|
37
|
+
) -> AudioStream:
|
|
38
|
+
"""
|
|
39
|
+
Get a stream of audio from the device
|
|
40
|
+
|
|
41
|
+
::
|
|
42
|
+
|
|
43
|
+
my_audio_in = AudioIn.from_robot(robot=machine, name="my_audio_in")
|
|
44
|
+
|
|
45
|
+
stream = await my_audio_in.get_audio(
|
|
46
|
+
codec=AudioCodec.PCM16,
|
|
47
|
+
duration_seconds=10.0,
|
|
48
|
+
previous_timestamp_ns=0
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
codec (str): The desired codec of the returned audio data
|
|
53
|
+
duration_seconds (float): duration of the stream. 0 = indefinite stream
|
|
54
|
+
previous_timestamp_ns (int): starting timestamp in nanoseconds for recording continuity.
|
|
55
|
+
Set to 0 to begin recording from the current time.
|
|
56
|
+
Returns:
|
|
57
|
+
AudioStream: stream of audio chunks.
|
|
58
|
+
...
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
@abc.abstractmethod
|
|
62
|
+
async def get_properties(self, *, timeout: Optional[float] = None, **kwargs) -> Properties:
|
|
63
|
+
"""
|
|
64
|
+
Get the audio device's properties
|
|
65
|
+
|
|
66
|
+
::
|
|
67
|
+
|
|
68
|
+
my_audio_in = AudioIn.from_robot(robot=machine, name="my_audio_in")
|
|
69
|
+
properties = await my_audio_in.get_properties()
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
Properties: The properties of the audio in device.
|
|
73
|
+
...
|
|
74
|
+
"""
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import uuid
|
|
2
|
+
from typing import Any, Dict, List, Mapping, Optional
|
|
3
|
+
|
|
4
|
+
from grpclib.client import Channel
|
|
5
|
+
from grpclib.client import Stream as ClientStream
|
|
6
|
+
|
|
7
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetPropertiesRequest
|
|
8
|
+
from viam.proto.component.audioin import AudioInServiceStub, GetAudioRequest, GetAudioResponse
|
|
9
|
+
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
10
|
+
from viam.streams import StreamWithIterator
|
|
11
|
+
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
|
|
12
|
+
|
|
13
|
+
from .audio_in import AudioIn
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class AudioInClient(AudioIn, ReconfigurableResourceRPCClientBase):
|
|
17
|
+
def __init__(self, name: str, channel: Channel) -> None:
|
|
18
|
+
self.channel = channel
|
|
19
|
+
self.client = AudioInServiceStub(channel)
|
|
20
|
+
super().__init__(name)
|
|
21
|
+
|
|
22
|
+
async def get_audio(
|
|
23
|
+
self,
|
|
24
|
+
codec: str,
|
|
25
|
+
duration_seconds: float,
|
|
26
|
+
previous_timestamp_ns: int,
|
|
27
|
+
*,
|
|
28
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
29
|
+
**kwargs,
|
|
30
|
+
):
|
|
31
|
+
request = GetAudioRequest(
|
|
32
|
+
name=self.name,
|
|
33
|
+
codec=codec,
|
|
34
|
+
duration_seconds=duration_seconds,
|
|
35
|
+
previous_timestamp_nanoseconds=previous_timestamp_ns,
|
|
36
|
+
request_id=str(uuid.uuid4()),
|
|
37
|
+
extra=dict_to_struct(extra),
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
async def read():
|
|
41
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
42
|
+
audio_stream: ClientStream[GetAudioRequest, GetAudioResponse]
|
|
43
|
+
async with self.client.GetAudio.open(metadata=md) as audio_stream:
|
|
44
|
+
try:
|
|
45
|
+
await audio_stream.send_message(request, end=True)
|
|
46
|
+
async for response in audio_stream:
|
|
47
|
+
yield response
|
|
48
|
+
except Exception as e:
|
|
49
|
+
raise (e)
|
|
50
|
+
|
|
51
|
+
return StreamWithIterator(read())
|
|
52
|
+
|
|
53
|
+
async def get_properties(
|
|
54
|
+
self,
|
|
55
|
+
*,
|
|
56
|
+
timeout: Optional[float] = None,
|
|
57
|
+
**kwargs,
|
|
58
|
+
) -> AudioIn.Properties:
|
|
59
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
60
|
+
return await self.client.GetProperties(GetPropertiesRequest(name=self.name), timeout=timeout, metadata=md)
|
|
61
|
+
|
|
62
|
+
async def do_command(
|
|
63
|
+
self,
|
|
64
|
+
command: Mapping[str, ValueTypes],
|
|
65
|
+
*,
|
|
66
|
+
timeout: Optional[float] = None,
|
|
67
|
+
**kwargs,
|
|
68
|
+
) -> Mapping[str, ValueTypes]:
|
|
69
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
70
|
+
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
71
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
72
|
+
return struct_to_dict(response.result)
|
|
73
|
+
|
|
74
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
75
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
76
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|