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,12 +1,12 @@
|
|
|
1
|
-
from typing import Any, Mapping, Optional
|
|
1
|
+
from typing import Any, Dict, List, Mapping, Optional
|
|
2
2
|
|
|
3
3
|
from grpclib import GRPCError, Status
|
|
4
4
|
from grpclib.client import Channel
|
|
5
5
|
|
|
6
|
-
from viam.proto.common import DoCommandRequest, DoCommandResponse
|
|
6
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry
|
|
7
7
|
from viam.proto.component.generic import GenericServiceStub
|
|
8
|
-
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
9
|
-
from viam.utils import ValueTypes, dict_to_struct, struct_to_dict
|
|
8
|
+
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase, ResourceRPCClientBase
|
|
9
|
+
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
|
|
10
10
|
|
|
11
11
|
from .generic import Generic
|
|
12
12
|
|
|
@@ -17,13 +17,21 @@ class GenericClient(Generic, ReconfigurableResourceRPCClientBase):
|
|
|
17
17
|
"""
|
|
18
18
|
|
|
19
19
|
def __init__(self, name: str, channel: Channel):
|
|
20
|
+
self.channel = channel
|
|
20
21
|
self.client = GenericServiceStub(channel)
|
|
21
22
|
super().__init__(name)
|
|
22
23
|
|
|
23
|
-
async def do_command(
|
|
24
|
+
async def do_command(
|
|
25
|
+
self,
|
|
26
|
+
command: Mapping[str, Any],
|
|
27
|
+
*,
|
|
28
|
+
timeout: Optional[float] = None,
|
|
29
|
+
**kwargs,
|
|
30
|
+
) -> Mapping[str, Any]:
|
|
31
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
24
32
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
25
33
|
try:
|
|
26
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
34
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
27
35
|
except GRPCError as e:
|
|
28
36
|
if e.status == Status.UNIMPLEMENTED:
|
|
29
37
|
raise NotImplementedError()
|
|
@@ -31,9 +39,13 @@ class GenericClient(Generic, ReconfigurableResourceRPCClientBase):
|
|
|
31
39
|
|
|
32
40
|
return struct_to_dict(response.result)
|
|
33
41
|
|
|
42
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
43
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
44
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
|
45
|
+
|
|
34
46
|
|
|
35
47
|
async def do_command(
|
|
36
|
-
channel: Channel, name: str, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None
|
|
48
|
+
channel: Channel, name: str, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs
|
|
37
49
|
) -> Mapping[str, ValueTypes]:
|
|
38
50
|
"""Convenience method to allow component clients to execute ``do_command`` functions
|
|
39
51
|
|
|
@@ -45,5 +57,6 @@ async def do_command(
|
|
|
45
57
|
Returns:
|
|
46
58
|
Dict[str, Any]: The result of the executed command
|
|
47
59
|
"""
|
|
60
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
48
61
|
client = GenericClient(name, channel)
|
|
49
|
-
return await client.do_command(command, timeout=timeout)
|
|
62
|
+
return await client.do_command(command, timeout=timeout, metadata=md)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from typing import Final
|
|
2
2
|
|
|
3
|
-
from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
3
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
4
4
|
|
|
5
5
|
from ..component_base import ComponentBase
|
|
6
6
|
|
|
@@ -15,6 +15,10 @@ class Generic(ComponentBase):
|
|
|
15
15
|
To create a Generic component (an arbitrary component that can process commands), this ``Generic`` component should be subclassed
|
|
16
16
|
and the ``do_command`` function implemented.
|
|
17
17
|
|
|
18
|
+
::
|
|
19
|
+
|
|
20
|
+
from viam.components.generic import Generic
|
|
21
|
+
|
|
18
22
|
Example::
|
|
19
23
|
|
|
20
24
|
class ComplexComponent(Generic):
|
|
@@ -63,6 +67,10 @@ class Generic(ComponentBase):
|
|
|
63
67
|
component.power # 1
|
|
64
68
|
await asyncio.sleep(10)
|
|
65
69
|
component.power # 0
|
|
70
|
+
|
|
71
|
+
For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/generic/>`_.
|
|
66
72
|
"""
|
|
67
73
|
|
|
68
|
-
|
|
74
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
75
|
+
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "generic"
|
|
76
|
+
)
|
|
@@ -2,8 +2,7 @@ from grpclib import GRPCError, Status
|
|
|
2
2
|
from grpclib.server import Stream
|
|
3
3
|
|
|
4
4
|
from viam.components.component_base import ComponentBase
|
|
5
|
-
from viam.
|
|
6
|
-
from viam.proto.common import DoCommandRequest, DoCommandResponse
|
|
5
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
|
|
7
6
|
from viam.proto.component.generic import GenericServiceBase
|
|
8
7
|
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
9
8
|
from viam.utils import dict_to_struct, struct_to_dict
|
|
@@ -11,7 +10,7 @@ from viam.utils import dict_to_struct, struct_to_dict
|
|
|
11
10
|
# from .generic import Generic
|
|
12
11
|
|
|
13
12
|
|
|
14
|
-
class GenericRPCService(GenericServiceBase, ResourceRPCServiceBase
|
|
13
|
+
class GenericRPCService(GenericServiceBase, ResourceRPCServiceBase):
|
|
15
14
|
"""
|
|
16
15
|
gRPC Service for a Generic component
|
|
17
16
|
"""
|
|
@@ -22,10 +21,7 @@ class GenericRPCService(GenericServiceBase, ResourceRPCServiceBase[ComponentBase
|
|
|
22
21
|
request = await stream.recv_message()
|
|
23
22
|
assert request is not None
|
|
24
23
|
name = request.name
|
|
25
|
-
|
|
26
|
-
component = self.get_resource(name)
|
|
27
|
-
except ResourceNotFoundError as e:
|
|
28
|
-
raise e.grpc_error
|
|
24
|
+
component = self.get_resource(name)
|
|
29
25
|
try:
|
|
30
26
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
31
27
|
result = await component.do_command(struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
@@ -33,3 +29,12 @@ class GenericRPCService(GenericServiceBase, ResourceRPCServiceBase[ComponentBase
|
|
|
33
29
|
raise GRPCError(Status.UNIMPLEMENTED, f"``DO`` command is unimplemented for component named: {name}")
|
|
34
30
|
response = DoCommandResponse(result=dict_to_struct(result))
|
|
35
31
|
await stream.send_message(response)
|
|
32
|
+
|
|
33
|
+
async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
|
|
34
|
+
request = await stream.recv_message()
|
|
35
|
+
assert request is not None
|
|
36
|
+
component = self.get_resource(request.name)
|
|
37
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
38
|
+
geometries = await component.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
|
|
39
|
+
response = GetGeometriesResponse(geometries=geometries)
|
|
40
|
+
await stream.send_message(response)
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
from viam.
|
|
2
|
-
from viam.proto.common import ActuatorStatus
|
|
3
|
-
from viam.proto.robot import Status
|
|
1
|
+
from viam.proto.common import KinematicsFileFormat
|
|
4
2
|
from viam.resource.registry import Registry, ResourceRegistration
|
|
5
|
-
from viam.utils import message_to_struct
|
|
6
3
|
|
|
7
4
|
from .client import GripperClient
|
|
8
5
|
from .gripper import Gripper
|
|
@@ -10,14 +7,7 @@ from .service import GripperRPCService
|
|
|
10
7
|
|
|
11
8
|
__all__ = [
|
|
12
9
|
"Gripper",
|
|
10
|
+
"KinematicsFileFormat",
|
|
13
11
|
]
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
async def create_status(component: Gripper) -> Status:
|
|
17
|
-
s = ActuatorStatus(is_moving=await component.is_moving())
|
|
18
|
-
return Status(name=Gripper.get_resource_name(component.name), status=message_to_struct(s))
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
Registry.register_subtype(
|
|
22
|
-
ResourceRegistration(Gripper, GripperRPCService, lambda name, channel: GripperClient(name, channel), create_status)
|
|
23
|
-
)
|
|
13
|
+
Registry.register_api(ResourceRegistration(Gripper, GripperRPCService, lambda name, channel: GripperClient(name, channel)))
|
|
@@ -1,20 +1,23 @@
|
|
|
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.gripper import (
|
|
7
7
|
GrabRequest,
|
|
8
8
|
GrabResponse,
|
|
9
9
|
GripperServiceStub,
|
|
10
|
+
IsHoldingSomethingRequest,
|
|
11
|
+
IsHoldingSomethingResponse,
|
|
10
12
|
IsMovingRequest,
|
|
11
13
|
IsMovingResponse,
|
|
12
14
|
OpenRequest,
|
|
13
15
|
StopRequest,
|
|
14
16
|
)
|
|
15
17
|
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
16
|
-
from viam.utils import ValueTypes, dict_to_struct, struct_to_dict
|
|
18
|
+
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
|
|
17
19
|
|
|
20
|
+
from . import KinematicsFileFormat
|
|
18
21
|
from .gripper import Gripper
|
|
19
22
|
|
|
20
23
|
|
|
@@ -28,33 +31,78 @@ class GripperClient(Gripper, ReconfigurableResourceRPCClientBase):
|
|
|
28
31
|
self.client = GripperServiceStub(channel)
|
|
29
32
|
super().__init__(name)
|
|
30
33
|
|
|
31
|
-
async def open(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
async def open(
|
|
35
|
+
self,
|
|
36
|
+
*,
|
|
37
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
38
|
+
timeout: Optional[float] = None,
|
|
39
|
+
**kwargs,
|
|
40
|
+
):
|
|
41
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
34
42
|
request = OpenRequest(name=self.name, extra=dict_to_struct(extra))
|
|
35
|
-
await self.client.Open(request, timeout=timeout)
|
|
43
|
+
await self.client.Open(request, timeout=timeout, metadata=md)
|
|
36
44
|
|
|
37
|
-
async def grab(
|
|
38
|
-
|
|
39
|
-
|
|
45
|
+
async def grab(
|
|
46
|
+
self,
|
|
47
|
+
*,
|
|
48
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
49
|
+
timeout: Optional[float] = None,
|
|
50
|
+
**kwargs,
|
|
51
|
+
) -> bool:
|
|
52
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
40
53
|
request = GrabRequest(name=self.name, extra=dict_to_struct(extra))
|
|
41
|
-
response: GrabResponse = await self.client.Grab(request, timeout=timeout)
|
|
54
|
+
response: GrabResponse = await self.client.Grab(request, timeout=timeout, metadata=md)
|
|
42
55
|
return response.success
|
|
43
56
|
|
|
44
|
-
async def stop(
|
|
45
|
-
|
|
46
|
-
|
|
57
|
+
async def stop(
|
|
58
|
+
self,
|
|
59
|
+
*,
|
|
60
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
61
|
+
timeout: Optional[float] = None,
|
|
62
|
+
**kwargs,
|
|
63
|
+
):
|
|
64
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
47
65
|
request = StopRequest(name=self.name, extra=dict_to_struct(extra))
|
|
48
|
-
await self.client.Stop(request, timeout=timeout)
|
|
66
|
+
await self.client.Stop(request, timeout=timeout, metadata=md)
|
|
49
67
|
|
|
50
|
-
async def
|
|
51
|
-
|
|
52
|
-
|
|
68
|
+
async def is_holding_something(
|
|
69
|
+
self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
|
|
70
|
+
) -> Gripper.HoldingStatus:
|
|
71
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
72
|
+
request = IsHoldingSomethingRequest(name=self.name, extra=dict_to_struct(extra))
|
|
73
|
+
response: IsHoldingSomethingResponse = await self.client.IsHoldingSomething(request, timeout=timeout, metadata=md)
|
|
74
|
+
return Gripper.HoldingStatus(response.is_holding_something, meta=struct_to_dict(response.meta))
|
|
75
|
+
|
|
76
|
+
async def is_moving(self, *, timeout: Optional[float] = None, **kwargs) -> bool:
|
|
77
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
53
78
|
request = IsMovingRequest(name=self.name)
|
|
54
|
-
response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout)
|
|
79
|
+
response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout, metadata=md)
|
|
55
80
|
return response.is_moving
|
|
56
81
|
|
|
57
|
-
async def do_command(
|
|
82
|
+
async def do_command(
|
|
83
|
+
self,
|
|
84
|
+
command: Mapping[str, ValueTypes],
|
|
85
|
+
*,
|
|
86
|
+
timeout: Optional[float] = None,
|
|
87
|
+
**kwargs,
|
|
88
|
+
) -> Mapping[str, ValueTypes]:
|
|
89
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
58
90
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
59
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
91
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
60
92
|
return struct_to_dict(response.result)
|
|
93
|
+
|
|
94
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
95
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
96
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
|
97
|
+
|
|
98
|
+
async def get_kinematics(
|
|
99
|
+
self,
|
|
100
|
+
*,
|
|
101
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
102
|
+
timeout: Optional[float] = None,
|
|
103
|
+
**kwargs,
|
|
104
|
+
) -> Tuple[KinematicsFileFormat.ValueType, bytes]:
|
|
105
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
106
|
+
request = GetKinematicsRequest(name=self.name, extra=dict_to_struct(extra))
|
|
107
|
+
response: GetKinematicsResponse = await self.client.GetKinematics(request, timeout=timeout, metadata=md)
|
|
108
|
+
return (response.format, response.kinematics_data)
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import abc
|
|
2
|
-
from
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from typing import Any, Dict, Final, Optional, Tuple
|
|
3
4
|
|
|
4
5
|
from viam.components.component_base import ComponentBase
|
|
5
|
-
from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
6
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
7
|
+
|
|
8
|
+
from . import KinematicsFileFormat
|
|
6
9
|
|
|
7
10
|
|
|
8
11
|
class Gripper(ComponentBase):
|
|
@@ -12,9 +15,28 @@ class Gripper(ComponentBase):
|
|
|
12
15
|
This acts as an abstract base class for any drivers representing specific
|
|
13
16
|
gripper implementations. This cannot be used on its own. If the ``__init__()`` function is
|
|
14
17
|
overridden, it must call the ``super().__init__()`` function.
|
|
18
|
+
|
|
19
|
+
::
|
|
20
|
+
|
|
21
|
+
from viam.components.gripper import Gripper
|
|
22
|
+
|
|
23
|
+
For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/>`_.
|
|
15
24
|
"""
|
|
16
25
|
|
|
17
|
-
|
|
26
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
27
|
+
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "gripper"
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
@dataclass
|
|
31
|
+
class HoldingStatus:
|
|
32
|
+
"""
|
|
33
|
+
HoldingStatus represents whether the gripper is currently holding onto an object. The
|
|
34
|
+
additional ``meta`` attribute contains other optional contextual information (i.e. confidence
|
|
35
|
+
interval, pressure, etc.)
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
is_holding_something: bool
|
|
39
|
+
meta: Optional[Dict[str, Any]] = None
|
|
18
40
|
|
|
19
41
|
@abc.abstractmethod
|
|
20
42
|
async def open(
|
|
@@ -26,6 +48,15 @@ class Gripper(ComponentBase):
|
|
|
26
48
|
):
|
|
27
49
|
"""
|
|
28
50
|
Open the gripper.
|
|
51
|
+
|
|
52
|
+
::
|
|
53
|
+
|
|
54
|
+
my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
|
|
55
|
+
|
|
56
|
+
# Open the gripper.
|
|
57
|
+
await my_gripper.open()
|
|
58
|
+
|
|
59
|
+
For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#open>`_.
|
|
29
60
|
"""
|
|
30
61
|
...
|
|
31
62
|
|
|
@@ -40,11 +71,47 @@ class Gripper(ComponentBase):
|
|
|
40
71
|
"""
|
|
41
72
|
Instruct the gripper to grab.
|
|
42
73
|
|
|
74
|
+
::
|
|
75
|
+
|
|
76
|
+
my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
|
|
77
|
+
|
|
78
|
+
# Grab with the gripper.
|
|
79
|
+
grabbed = await my_gripper.grab()
|
|
80
|
+
|
|
43
81
|
Returns:
|
|
44
82
|
bool: Indicates if the gripper grabbed something.
|
|
83
|
+
|
|
84
|
+
For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#grab>`_.
|
|
45
85
|
"""
|
|
46
86
|
...
|
|
47
87
|
|
|
88
|
+
@abc.abstractmethod
|
|
89
|
+
async def is_holding_something(
|
|
90
|
+
self,
|
|
91
|
+
*,
|
|
92
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
93
|
+
timeout: Optional[float] = None,
|
|
94
|
+
**kwargs,
|
|
95
|
+
) -> HoldingStatus:
|
|
96
|
+
"""
|
|
97
|
+
Get information about whether the gripper is currently holding onto an object.
|
|
98
|
+
|
|
99
|
+
::
|
|
100
|
+
|
|
101
|
+
my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
|
|
102
|
+
|
|
103
|
+
# Grab with the gripper.
|
|
104
|
+
holding_status = await my_gripper.is_holding_something()
|
|
105
|
+
# get the boolean result
|
|
106
|
+
is_holding_something = holding_status.is_holding_something
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
HoldingStatus: see documentation on `HoldingStatus` for more information
|
|
110
|
+
|
|
111
|
+
For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#grab>`_.
|
|
112
|
+
|
|
113
|
+
"""
|
|
114
|
+
|
|
48
115
|
@abc.abstractmethod
|
|
49
116
|
async def stop(
|
|
50
117
|
self,
|
|
@@ -55,6 +122,15 @@ class Gripper(ComponentBase):
|
|
|
55
122
|
):
|
|
56
123
|
"""
|
|
57
124
|
Stop the gripper. It is assumed the gripper stops immediately.
|
|
125
|
+
|
|
126
|
+
::
|
|
127
|
+
|
|
128
|
+
my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
|
|
129
|
+
|
|
130
|
+
# Stop the gripper.
|
|
131
|
+
await my_gripper.stop()
|
|
132
|
+
|
|
133
|
+
For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#stop>`_.
|
|
58
134
|
"""
|
|
59
135
|
...
|
|
60
136
|
|
|
@@ -63,7 +139,51 @@ class Gripper(ComponentBase):
|
|
|
63
139
|
"""
|
|
64
140
|
Get if the gripper is currently moving.
|
|
65
141
|
|
|
142
|
+
::
|
|
143
|
+
|
|
144
|
+
my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
|
|
145
|
+
|
|
146
|
+
# Check whether the gripper is currently moving.
|
|
147
|
+
moving = await my_gripper.is_moving()
|
|
148
|
+
print('Moving:', moving)
|
|
149
|
+
|
|
66
150
|
Returns:
|
|
67
151
|
bool: Whether the gripper is moving.
|
|
152
|
+
|
|
153
|
+
For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#is_moving>`_.
|
|
154
|
+
"""
|
|
155
|
+
...
|
|
156
|
+
|
|
157
|
+
@abc.abstractmethod
|
|
158
|
+
async def get_kinematics(
|
|
159
|
+
self,
|
|
160
|
+
*,
|
|
161
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
162
|
+
timeout: Optional[float] = None,
|
|
163
|
+
**kwargs,
|
|
164
|
+
) -> Tuple[KinematicsFileFormat.ValueType, bytes]:
|
|
165
|
+
"""
|
|
166
|
+
Get the kinematics information associated with the gripper.
|
|
167
|
+
|
|
168
|
+
::
|
|
169
|
+
|
|
170
|
+
my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
|
|
171
|
+
|
|
172
|
+
# Get the kinematics information associated with the gripper.
|
|
173
|
+
kinematics = await my_gripper.get_kinematics()
|
|
174
|
+
|
|
175
|
+
# Get the format of the kinematics file.
|
|
176
|
+
k_file = kinematics[0]
|
|
177
|
+
|
|
178
|
+
# Get the byte contents of the file.
|
|
179
|
+
k_bytes = kinematics[1]
|
|
180
|
+
|
|
181
|
+
Returns:
|
|
182
|
+
Tuple[KinematicsFileFormat.ValueType, bytes]: A tuple containing two values; the first [0] value represents the format of the
|
|
183
|
+
file, either in URDF format (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_URDF``) or
|
|
184
|
+
Viam's kinematic parameter format (spatial vector algebra) (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA``),
|
|
185
|
+
and the second [1] value represents the byte contents of the file.
|
|
186
|
+
|
|
187
|
+
For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#getkinematics>`_.
|
|
68
188
|
"""
|
|
69
189
|
...
|
|
@@ -1,11 +1,19 @@
|
|
|
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.gripper import (
|
|
6
12
|
GrabRequest,
|
|
7
13
|
GrabResponse,
|
|
8
14
|
GripperServiceBase,
|
|
15
|
+
IsHoldingSomethingRequest,
|
|
16
|
+
IsHoldingSomethingResponse,
|
|
9
17
|
IsMovingRequest,
|
|
10
18
|
IsMovingResponse,
|
|
11
19
|
OpenRequest,
|
|
@@ -30,10 +38,7 @@ class GripperRPCService(GripperServiceBase, ResourceRPCServiceBase[Gripper]):
|
|
|
30
38
|
request = await stream.recv_message()
|
|
31
39
|
assert request is not None
|
|
32
40
|
name = request.name
|
|
33
|
-
|
|
34
|
-
gripper = self.get_resource(name)
|
|
35
|
-
except ResourceNotFoundError as e:
|
|
36
|
-
raise e.grpc_error
|
|
41
|
+
gripper = self.get_resource(name)
|
|
37
42
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
38
43
|
await gripper.open(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
39
44
|
response = OpenResponse()
|
|
@@ -43,10 +48,7 @@ class GripperRPCService(GripperServiceBase, ResourceRPCServiceBase[Gripper]):
|
|
|
43
48
|
request = await stream.recv_message()
|
|
44
49
|
assert request is not None
|
|
45
50
|
name = request.name
|
|
46
|
-
|
|
47
|
-
gripper = self.get_resource(name)
|
|
48
|
-
except ResourceNotFoundError as e:
|
|
49
|
-
raise e.grpc_error
|
|
51
|
+
gripper = self.get_resource(name)
|
|
50
52
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
51
53
|
grabbed = await gripper.grab(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
52
54
|
response = GrabResponse(success=grabbed)
|
|
@@ -55,10 +57,7 @@ class GripperRPCService(GripperServiceBase, ResourceRPCServiceBase[Gripper]):
|
|
|
55
57
|
async def Stop(self, stream: Stream[StopRequest, StopResponse]) -> None:
|
|
56
58
|
request = await stream.recv_message()
|
|
57
59
|
assert request is not None
|
|
58
|
-
|
|
59
|
-
gripper = self.get_resource(request.name)
|
|
60
|
-
except ResourceNotFoundError as e:
|
|
61
|
-
raise e.grpc_error
|
|
60
|
+
gripper = self.get_resource(request.name)
|
|
62
61
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
63
62
|
await gripper.stop(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
64
63
|
await stream.send_message(StopResponse())
|
|
@@ -67,22 +66,45 @@ class GripperRPCService(GripperServiceBase, ResourceRPCServiceBase[Gripper]):
|
|
|
67
66
|
request = await stream.recv_message()
|
|
68
67
|
assert request is not None
|
|
69
68
|
name = request.name
|
|
70
|
-
|
|
71
|
-
gripper = self.get_resource(name)
|
|
72
|
-
except ResourceNotFoundError as e:
|
|
73
|
-
raise e.grpc_error
|
|
69
|
+
gripper = self.get_resource(name)
|
|
74
70
|
is_moving = await gripper.is_moving()
|
|
75
71
|
response = IsMovingResponse(is_moving=is_moving)
|
|
76
72
|
await stream.send_message(response)
|
|
77
73
|
|
|
74
|
+
async def IsHoldingSomething(self, stream: Stream[IsHoldingSomethingRequest, IsHoldingSomethingResponse]) -> None:
|
|
75
|
+
request = await stream.recv_message()
|
|
76
|
+
assert request is not None
|
|
77
|
+
name = request.name
|
|
78
|
+
gripper = self.get_resource(name)
|
|
79
|
+
holding_status = await gripper.is_holding_something()
|
|
80
|
+
response = IsHoldingSomethingResponse(
|
|
81
|
+
is_holding_something=holding_status.is_holding_something, meta=dict_to_struct(holding_status.meta)
|
|
82
|
+
)
|
|
83
|
+
await stream.send_message(response)
|
|
84
|
+
|
|
78
85
|
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
79
86
|
request = await stream.recv_message()
|
|
80
87
|
assert request is not None
|
|
81
|
-
|
|
82
|
-
gripper = self.get_resource(request.name)
|
|
83
|
-
except ResourceNotFoundError as e:
|
|
84
|
-
raise e.grpc_error
|
|
88
|
+
gripper = self.get_resource(request.name)
|
|
85
89
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
86
90
|
result = await gripper.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
87
91
|
response = DoCommandResponse(result=dict_to_struct(result))
|
|
88
92
|
await stream.send_message(response)
|
|
93
|
+
|
|
94
|
+
async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
|
|
95
|
+
request = await stream.recv_message()
|
|
96
|
+
assert request is not None
|
|
97
|
+
gripper = self.get_resource(request.name)
|
|
98
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
99
|
+
geometries = await gripper.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
|
|
100
|
+
response = GetGeometriesResponse(geometries=geometries)
|
|
101
|
+
await stream.send_message(response)
|
|
102
|
+
|
|
103
|
+
async def GetKinematics(self, stream: Stream[GetKinematicsRequest, GetKinematicsResponse]) -> None:
|
|
104
|
+
request = await stream.recv_message()
|
|
105
|
+
assert request is not None
|
|
106
|
+
gripper = self.get_resource(request.name)
|
|
107
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
108
|
+
format, kinematics_data = await gripper.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout)
|
|
109
|
+
response = GetKinematicsResponse(format=format, kinematics_data=kinematics_data)
|
|
110
|
+
await stream.send_message(response)
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
from viam.proto.component.inputcontroller import Status as InputStatus
|
|
2
|
-
from viam.proto.robot import Status
|
|
3
1
|
from viam.resource.registry import Registry, ResourceRegistration
|
|
4
|
-
from viam.utils import message_to_struct
|
|
5
2
|
|
|
6
3
|
from .client import ControllerClient
|
|
7
4
|
from .input import Control, ControlFunction, Controller, Event, EventType
|
|
@@ -15,14 +12,4 @@ __all__ = [
|
|
|
15
12
|
"EventType",
|
|
16
13
|
]
|
|
17
14
|
|
|
18
|
-
|
|
19
|
-
async def create_status(component: Controller) -> Status:
|
|
20
|
-
return Status(
|
|
21
|
-
name=Controller.get_resource_name(component.name),
|
|
22
|
-
status=message_to_struct(InputStatus(events=[event.proto for event in (await component.get_events()).values()])),
|
|
23
|
-
)
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
Registry.register_subtype(
|
|
27
|
-
ResourceRegistration(Controller, InputControllerRPCService, lambda name, channel: ControllerClient(name, channel), create_status)
|
|
28
|
-
)
|
|
15
|
+
Registry.register_api(ResourceRegistration(Controller, InputControllerRPCService, lambda name, channel: ControllerClient(name, channel)))
|