viam-sdk 0.45.2__py3-none-win_amd64.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 +71 -0
- viam/app/__init__.py +0 -0
- viam/app/_logs.py +34 -0
- viam/app/app_client.py +2525 -0
- viam/app/billing_client.py +143 -0
- viam/app/data_client.py +1715 -0
- viam/app/ml_training_client.py +251 -0
- viam/app/provisioning_client.py +95 -0
- viam/app/viam_client.py +260 -0
- viam/components/__init__.py +0 -0
- viam/components/arm/__init__.py +16 -0
- viam/components/arm/arm.py +223 -0
- viam/components/arm/client.py +124 -0
- viam/components/arm/service.py +123 -0
- viam/components/audio_input/__init__.py +18 -0
- viam/components/audio_input/audio_input.py +81 -0
- viam/components/audio_input/client.py +70 -0
- viam/components/audio_input/service.py +114 -0
- viam/components/base/__init__.py +13 -0
- viam/components/base/base.py +260 -0
- viam/components/base/client.py +153 -0
- viam/components/base/service.py +138 -0
- viam/components/board/__init__.py +9 -0
- viam/components/board/board.py +414 -0
- viam/components/board/client.py +241 -0
- viam/components/board/service.py +223 -0
- 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 +22 -0
- viam/components/camera/camera.py +138 -0
- viam/components/camera/client.py +98 -0
- viam/components/camera/service.py +105 -0
- viam/components/component_base.py +65 -0
- viam/components/encoder/__init__.py +18 -0
- viam/components/encoder/client.py +83 -0
- viam/components/encoder/encoder.py +118 -0
- viam/components/encoder/service.py +72 -0
- viam/components/gantry/__init__.py +11 -0
- viam/components/gantry/client.py +115 -0
- viam/components/gantry/gantry.py +156 -0
- viam/components/gantry/service.py +113 -0
- viam/components/generic/__init__.py +18 -0
- viam/components/generic/client.py +62 -0
- viam/components/generic/generic.py +76 -0
- viam/components/generic/service.py +40 -0
- viam/components/gripper/__init__.py +11 -0
- viam/components/gripper/client.py +85 -0
- viam/components/gripper/gripper.py +114 -0
- viam/components/gripper/service.py +81 -0
- viam/components/input/__init__.py +15 -0
- viam/components/input/client.py +194 -0
- viam/components/input/input.py +297 -0
- viam/components/input/service.py +175 -0
- viam/components/motor/__init__.py +11 -0
- viam/components/motor/client.py +168 -0
- viam/components/motor/motor.py +301 -0
- viam/components/motor/service.py +150 -0
- viam/components/movement_sensor/__init__.py +21 -0
- viam/components/movement_sensor/client.py +161 -0
- viam/components/movement_sensor/movement_sensor.py +253 -0
- viam/components/movement_sensor/service.py +146 -0
- viam/components/pose_tracker/__init__.py +17 -0
- viam/components/pose_tracker/client.py +50 -0
- viam/components/pose_tracker/pose_tracker.py +40 -0
- viam/components/pose_tracker/service.py +45 -0
- 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 +18 -0
- viam/components/sensor/client.py +49 -0
- viam/components/sensor/sensor.py +48 -0
- viam/components/sensor/service.py +51 -0
- viam/components/servo/__init__.py +11 -0
- viam/components/servo/client.py +86 -0
- viam/components/servo/service.py +80 -0
- viam/components/servo/servo.py +114 -0
- 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 +95 -0
- viam/errors.py +105 -0
- viam/gen/__init__.py +0 -0
- viam/gen/app/__init__.py +0 -0
- viam/gen/app/agent/__init__.py +0 -0
- viam/gen/app/agent/v1/__init__.py +0 -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/__init__.py +0 -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/__init__.py +0 -0
- viam/gen/app/data/v1/__init__.py +0 -0
- viam/gen/app/data/v1/data_grpc.py +206 -0
- viam/gen/app/data/v1/data_pb2.py +178 -0
- viam/gen/app/data/v1/data_pb2.pyi +1485 -0
- 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 +56 -0
- viam/gen/app/datapipelines/v1/data_pipelines_pb2.pyi +370 -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 +60 -0
- viam/gen/app/dataset/v1/dataset_pb2.py +40 -0
- viam/gen/app/dataset/v1/dataset_pb2.pyi +179 -0
- viam/gen/app/datasync/__init__.py +0 -0
- viam/gen/app/datasync/v1/__init__.py +0 -0
- viam/gen/app/datasync/v1/data_sync_grpc.py +47 -0
- viam/gen/app/datasync/v1/data_sync_pb2.py +70 -0
- viam/gen/app/datasync/v1/data_sync_pb2.pyi +425 -0
- 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/__init__.py +0 -0
- viam/gen/app/mltraining/v1/__init__.py +0 -0
- viam/gen/app/mltraining/v1/ml_training_grpc.py +78 -0
- viam/gen/app/mltraining/v1/ml_training_pb2.py +124 -0
- viam/gen/app/mltraining/v1/ml_training_pb2.pyi +415 -0
- viam/gen/app/packages/__init__.py +0 -0
- viam/gen/app/packages/v1/__init__.py +0 -0
- viam/gen/app/packages/v1/packages_grpc.py +54 -0
- viam/gen/app/packages/v1/packages_pb2.py +52 -0
- viam/gen/app/packages/v1/packages_pb2.pyi +311 -0
- viam/gen/app/v1/__init__.py +0 -0
- viam/gen/app/v1/app_grpc.py +863 -0
- viam/gen/app/v1/app_pb2.py +649 -0
- viam/gen/app/v1/app_pb2.pyi +5279 -0
- viam/gen/app/v1/billing_grpc.py +76 -0
- viam/gen/app/v1/billing_pb2.py +92 -0
- viam/gen/app/v1/billing_pb2.pyi +463 -0
- 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 +55 -0
- viam/gen/app/v1/robot_pb2.py +127 -0
- viam/gen/app/v1/robot_pb2.pyi +1202 -0
- viam/gen/common/__init__.py +0 -0
- viam/gen/common/v1/__init__.py +0 -0
- viam/gen/common/v1/common_grpc.py +0 -0
- viam/gen/common/v1/common_pb2.py +78 -0
- viam/gen/common/v1/common_pb2.pyi +687 -0
- viam/gen/component/__init__.py +0 -0
- viam/gen/component/arm/__init__.py +0 -0
- viam/gen/component/arm/v1/__init__.py +0 -0
- viam/gen/component/arm/v1/arm_grpc.py +102 -0
- viam/gen/component/arm/v1/arm_pb2.py +74 -0
- viam/gen/component/arm/v1/arm_pb2.pyi +344 -0
- viam/gen/component/audioinput/__init__.py +0 -0
- viam/gen/component/audioinput/v1/__init__.py +0 -0
- viam/gen/component/audioinput/v1/audioinput_grpc.py +63 -0
- viam/gen/component/audioinput/v1/audioinput_pb2.py +45 -0
- viam/gen/component/audioinput/v1/audioinput_pb2.pyi +179 -0
- viam/gen/component/base/__init__.py +0 -0
- viam/gen/component/base/v1/__init__.py +0 -0
- viam/gen/component/base/v1/base_grpc.py +94 -0
- viam/gen/component/base/v1/base_pb2.py +66 -0
- viam/gen/component/base/v1/base_pb2.pyi +258 -0
- viam/gen/component/board/__init__.py +0 -0
- viam/gen/component/board/v1/__init__.py +0 -0
- viam/gen/component/board/v1/board_grpc.py +127 -0
- viam/gen/component/board/v1/board_pb2.py +103 -0
- viam/gen/component/board/v1/board_pb2.pyi +496 -0
- 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/__init__.py +0 -0
- viam/gen/component/camera/v1/__init__.py +0 -0
- viam/gen/component/camera/v1/camera_grpc.py +79 -0
- viam/gen/component/camera/v1/camera_pb2.py +67 -0
- viam/gen/component/camera/v1/camera_pb2.pyi +373 -0
- viam/gen/component/encoder/__init__.py +0 -0
- viam/gen/component/encoder/v1/__init__.py +0 -0
- viam/gen/component/encoder/v1/encoder_grpc.py +62 -0
- viam/gen/component/encoder/v1/encoder_pb2.py +44 -0
- viam/gen/component/encoder/v1/encoder_pb2.pyi +147 -0
- viam/gen/component/gantry/__init__.py +0 -0
- viam/gen/component/gantry/v1/__init__.py +0 -0
- viam/gen/component/gantry/v1/gantry_grpc.py +86 -0
- viam/gen/component/gantry/v1/gantry_pb2.py +62 -0
- viam/gen/component/gantry/v1/gantry_pb2.pyi +239 -0
- viam/gen/component/generic/__init__.py +0 -0
- viam/gen/component/generic/v1/__init__.py +0 -0
- viam/gen/component/generic/v1/generic_grpc.py +37 -0
- viam/gen/component/generic/v1/generic_pb2.py +23 -0
- viam/gen/component/generic/v1/generic_pb2.pyi +6 -0
- viam/gen/component/gripper/__init__.py +0 -0
- viam/gen/component/gripper/v1/__init__.py +0 -0
- viam/gen/component/gripper/v1/gripper_grpc.py +70 -0
- viam/gen/component/gripper/v1/gripper_pb2.py +48 -0
- viam/gen/component/gripper/v1/gripper_pb2.pyi +137 -0
- viam/gen/component/inputcontroller/__init__.py +0 -0
- viam/gen/component/inputcontroller/v1/__init__.py +0 -0
- viam/gen/component/inputcontroller/v1/input_controller_grpc.py +71 -0
- viam/gen/component/inputcontroller/v1/input_controller_pb2.py +55 -0
- viam/gen/component/inputcontroller/v1/input_controller_pb2.pyi +243 -0
- viam/gen/component/motor/__init__.py +0 -0
- viam/gen/component/motor/v1/__init__.py +0 -0
- viam/gen/component/motor/v1/motor_grpc.py +118 -0
- viam/gen/component/motor/v1/motor_pb2.py +86 -0
- viam/gen/component/motor/v1/motor_pb2.pyi +368 -0
- viam/gen/component/movementsensor/__init__.py +0 -0
- viam/gen/component/movementsensor/v1/__init__.py +0 -0
- viam/gen/component/movementsensor/v1/movementsensor_grpc.py +110 -0
- viam/gen/component/movementsensor/v1/movementsensor_pb2.py +78 -0
- viam/gen/component/movementsensor/v1/movementsensor_pb2.pyi +384 -0
- viam/gen/component/posetracker/__init__.py +0 -0
- viam/gen/component/posetracker/v1/__init__.py +0 -0
- viam/gen/component/posetracker/v1/pose_tracker_grpc.py +46 -0
- viam/gen/component/posetracker/v1/pose_tracker_pb2.py +34 -0
- viam/gen/component/posetracker/v1/pose_tracker_pb2.pyi +79 -0
- 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/__init__.py +0 -0
- viam/gen/component/sensor/v1/__init__.py +0 -0
- viam/gen/component/sensor/v1/sensor_grpc.py +45 -0
- viam/gen/component/sensor/v1/sensor_pb2.py +25 -0
- viam/gen/component/sensor/v1/sensor_pb2.pyi +6 -0
- viam/gen/component/servo/__init__.py +0 -0
- viam/gen/component/servo/v1/__init__.py +0 -0
- viam/gen/component/servo/v1/servo_grpc.py +70 -0
- viam/gen/component/servo/v1/servo_pb2.py +50 -0
- viam/gen/component/servo/v1/servo_pb2.pyi +150 -0
- 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 +109 -0
- viam/gen/component/testecho/__init__.py +0 -0
- viam/gen/component/testecho/v1/__init__.py +0 -0
- viam/gen/component/testecho/v1/testecho_grpc.py +52 -0
- viam/gen/component/testecho/v1/testecho_pb2.py +36 -0
- viam/gen/component/testecho/v1/testecho_pb2.pyi +114 -0
- viam/gen/module/__init__.py +0 -0
- viam/gen/module/v1/__init__.py +0 -0
- viam/gen/module/v1/module_grpc.py +61 -0
- viam/gen/module/v1/module_pb2.py +43 -0
- viam/gen/module/v1/module_pb2.pyi +211 -0
- viam/gen/proto/__init__.py +0 -0
- viam/gen/proto/rpc/__init__.py +0 -0
- viam/gen/proto/rpc/examples/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echo/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echo/v1/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_grpc.py +44 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +32 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_pb2.pyi +87 -0
- viam/gen/proto/rpc/examples/echoresource/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echoresource/v1/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_grpc.py +43 -0
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +29 -0
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.pyi +93 -0
- viam/gen/proto/rpc/v1/__init__.py +0 -0
- viam/gen/proto/rpc/v1/auth_grpc.py +47 -0
- viam/gen/proto/rpc/v1/auth_pb2.py +34 -0
- viam/gen/proto/rpc/v1/auth_pb2.pyi +92 -0
- viam/gen/proto/rpc/webrtc/__init__.py +0 -0
- viam/gen/proto/rpc/webrtc/v1/__init__.py +0 -0
- viam/gen/proto/rpc/webrtc/v1/grpc_grpc.py +0 -0
- viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +43 -0
- viam/gen/proto/rpc/webrtc/v1/grpc_pb2.pyi +304 -0
- viam/gen/proto/rpc/webrtc/v1/signaling_grpc.py +54 -0
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +70 -0
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +496 -0
- viam/gen/provisioning/__init__.py +0 -0
- viam/gen/provisioning/v1/__init__.py +0 -0
- viam/gen/provisioning/v1/provisioning_grpc.py +51 -0
- viam/gen/provisioning/v1/provisioning_pb2.py +39 -0
- viam/gen/provisioning/v1/provisioning_pb2.pyi +188 -0
- viam/gen/robot/__init__.py +0 -0
- viam/gen/robot/v1/__init__.py +0 -0
- viam/gen/robot/v1/robot_grpc.py +208 -0
- viam/gen/robot/v1/robot_pb2.py +188 -0
- viam/gen/robot/v1/robot_pb2.pyi +1020 -0
- viam/gen/service/__init__.py +0 -0
- viam/gen/service/datamanager/__init__.py +0 -0
- viam/gen/service/datamanager/v1/__init__.py +0 -0
- viam/gen/service/datamanager/v1/data_manager_grpc.py +38 -0
- viam/gen/service/datamanager/v1/data_manager_pb2.py +28 -0
- viam/gen/service/datamanager/v1/data_manager_pb2.pyi +39 -0
- 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/__init__.py +0 -0
- viam/gen/service/mlmodel/v1/__init__.py +0 -0
- viam/gen/service/mlmodel/v1/mlmodel_grpc.py +37 -0
- viam/gen/service/mlmodel/v1/mlmodel_pb2.py +83 -0
- viam/gen/service/mlmodel/v1/mlmodel_pb2.pyi +480 -0
- viam/gen/service/motion/__init__.py +0 -0
- viam/gen/service/motion/v1/__init__.py +0 -0
- viam/gen/service/motion/v1/motion_grpc.py +87 -0
- viam/gen/service/motion/v1/motion_pb2.py +97 -0
- viam/gen/service/motion/v1/motion_pb2.pyi +838 -0
- viam/gen/service/navigation/__init__.py +0 -0
- viam/gen/service/navigation/v1/__init__.py +0 -0
- viam/gen/service/navigation/v1/navigation_grpc.py +102 -0
- viam/gen/service/navigation/v1/navigation_pb2.py +84 -0
- viam/gen/service/navigation/v1/navigation_pb2.pyi +419 -0
- viam/gen/service/sensors/__init__.py +0 -0
- viam/gen/service/sensors/v1/__init__.py +0 -0
- viam/gen/service/sensors/v1/sensors_grpc.py +46 -0
- viam/gen/service/sensors/v1/sensors_pb2.py +68 -0
- viam/gen/service/sensors/v1/sensors_pb2.pyi +137 -0
- viam/gen/service/shell/__init__.py +0 -0
- viam/gen/service/shell/v1/__init__.py +0 -0
- viam/gen/service/shell/v1/shell_grpc.py +55 -0
- viam/gen/service/shell/v1/shell_pb2.py +45 -0
- viam/gen/service/shell/v1/shell_pb2.pyi +307 -0
- viam/gen/service/slam/__init__.py +0 -0
- viam/gen/service/slam/v1/__init__.py +0 -0
- viam/gen/service/slam/v1/slam_grpc.py +61 -0
- viam/gen/service/slam/v1/slam_pb2.py +51 -0
- viam/gen/service/slam/v1/slam_pb2.pyi +213 -0
- viam/gen/service/vision/__init__.py +0 -0
- viam/gen/service/vision/v1/__init__.py +0 -0
- viam/gen/service/vision/v1/vision_grpc.py +87 -0
- viam/gen/service/vision/v1/vision_pb2.py +69 -0
- viam/gen/service/vision/v1/vision_pb2.pyi +454 -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/__init__.py +0 -0
- viam/gen/tagger/v1/__init__.py +0 -0
- viam/gen/tagger/v1/tagger_grpc.py +0 -0
- viam/gen/tagger/v1/tagger_pb2.py +16 -0
- viam/gen/tagger/v1/tagger_pb2.pyi +15 -0
- viam/logging.py +216 -0
- viam/media/__init__.py +0 -0
- viam/media/audio.py +16 -0
- viam/media/utils/__init__.py +0 -0
- viam/media/utils/pil/__init__.py +51 -0
- viam/media/utils/pil/viam_rgba_plugin.py +73 -0
- viam/media/viam_rgba.py +10 -0
- viam/media/video.py +217 -0
- viam/module/__init__.py +5 -0
- viam/module/module.py +281 -0
- viam/module/service.py +66 -0
- viam/module/types.py +23 -0
- viam/operations.py +124 -0
- viam/proto/__init__.py +0 -0
- viam/proto/app/__init__.py +554 -0
- viam/proto/app/agent/__init__.py +28 -0
- viam/proto/app/billing.py +58 -0
- viam/proto/app/cloudslam/__init__.py +48 -0
- viam/proto/app/data/__init__.py +138 -0
- viam/proto/app/datapipelines/__init__.py +56 -0
- viam/proto/app/dataset/__init__.py +36 -0
- viam/proto/app/datasync/__init__.py +44 -0
- viam/proto/app/end_user.py +34 -0
- viam/proto/app/mlinference/__init__.py +15 -0
- viam/proto/app/mltraining/__init__.py +52 -0
- viam/proto/app/packages/__init__.py +38 -0
- viam/proto/app/robot.py +84 -0
- viam/proto/common/__init__.py +66 -0
- viam/proto/component/__init__.py +0 -0
- viam/proto/component/arm/__init__.py +48 -0
- viam/proto/component/audioinput/__init__.py +30 -0
- viam/proto/component/base/__init__.py +42 -0
- viam/proto/component/board/__init__.py +62 -0
- viam/proto/component/button/__init__.py +15 -0
- viam/proto/component/camera/__init__.py +46 -0
- viam/proto/component/encoder/__init__.py +28 -0
- viam/proto/component/gantry/__init__.py +40 -0
- viam/proto/component/generic/__init__.py +12 -0
- viam/proto/component/gripper/__init__.py +30 -0
- viam/proto/component/inputcontroller/__init__.py +38 -0
- viam/proto/component/motor/__init__.py +56 -0
- viam/proto/component/movementsensor/__init__.py +50 -0
- viam/proto/component/posetracker/__init__.py +19 -0
- viam/proto/component/powersensor/__init__.py +30 -0
- viam/proto/component/sensor/__init__.py +12 -0
- viam/proto/component/servo/__init__.py +32 -0
- viam/proto/component/switch/__init__.py +26 -0
- viam/proto/component/testecho/__init__.py +30 -0
- viam/proto/module/__init__.py +38 -0
- viam/proto/provisioning/__init__.py +36 -0
- viam/proto/robot/__init__.py +130 -0
- viam/proto/rpc/__init__.py +0 -0
- viam/proto/rpc/auth.py +34 -0
- viam/proto/rpc/examples/__init__.py +0 -0
- viam/proto/rpc/examples/echo/__init__.py +26 -0
- viam/proto/rpc/examples/echoresource/__init__.py +30 -0
- viam/proto/rpc/webrtc/__init__.py +0 -0
- viam/proto/rpc/webrtc/grpc.py +36 -0
- viam/proto/rpc/webrtc/signaling.py +58 -0
- viam/proto/service/__init__.py +0 -0
- viam/proto/service/datamanager/__init__.py +19 -0
- viam/proto/service/discovery/__init__.py +15 -0
- viam/proto/service/generic/__init__.py +12 -0
- viam/proto/service/mlmodel/__init__.py +54 -0
- viam/proto/service/motion/__init__.py +68 -0
- viam/proto/service/navigation/__init__.py +58 -0
- viam/proto/service/sensors/__init__.py +18 -0
- viam/proto/service/shell/__init__.py +36 -0
- viam/proto/service/slam/__init__.py +36 -0
- viam/proto/service/vision/__init__.py +46 -0
- viam/proto/stream/__init__.py +36 -0
- viam/proto/tagger/__init__.py +6 -0
- viam/py.typed +0 -0
- viam/resource/__init__.py +0 -0
- viam/resource/base.py +123 -0
- viam/resource/easy_resource.py +153 -0
- viam/resource/manager.py +126 -0
- viam/resource/registry.py +199 -0
- viam/resource/rpc_client_base.py +65 -0
- viam/resource/rpc_service_base.py +48 -0
- viam/resource/types.py +213 -0
- viam/robot/__init__.py +0 -0
- viam/robot/client.py +909 -0
- viam/robot/service.py +69 -0
- viam/rpc/__init__.py +0 -0
- viam/rpc/dial.py +420 -0
- viam/rpc/libviam_rust_utils.dll +0 -0
- viam/rpc/server.py +201 -0
- viam/rpc/signaling.py +29 -0
- viam/rpc/types.py +22 -0
- viam/services/__init__.py +0 -0
- 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 +24 -0
- viam/services/mlmodel/client.py +37 -0
- viam/services/mlmodel/mlmodel.py +78 -0
- viam/services/mlmodel/service.py +38 -0
- viam/services/mlmodel/utils.py +101 -0
- viam/services/motion/__init__.py +17 -0
- viam/services/motion/client.py +215 -0
- viam/services/motion/motion.py +378 -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 +78 -0
- viam/services/service_client_base.py +46 -0
- viam/services/slam/__init__.py +17 -0
- viam/services/slam/client.py +62 -0
- viam/services/slam/service.py +75 -0
- viam/services/slam/slam.py +111 -0
- viam/services/vision/__init__.py +15 -0
- viam/services/vision/client.py +206 -0
- viam/services/vision/service.py +146 -0
- viam/services/vision/vision.py +315 -0
- viam/sessions_client.py +245 -0
- viam/streams.py +44 -0
- viam/utils.py +365 -0
- viam/version_metadata.py +4 -0
- viam_sdk-0.45.2.dist-info/METADATA +157 -0
- viam_sdk-0.45.2.dist-info/RECORD +476 -0
- viam_sdk-0.45.2.dist-info/WHEEL +4 -0
- viam_sdk-0.45.2.dist-info/licenses/LICENSE +202 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# TODO: Update type checking based with RSDK-4089
|
|
2
|
+
# pyright: reportGeneralTypeIssues=false
|
|
3
|
+
from google.api.httpbody_pb2 import HttpBody # type: ignore
|
|
4
|
+
from grpclib.server import Stream
|
|
5
|
+
|
|
6
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
|
|
7
|
+
from viam.proto.component.camera import (
|
|
8
|
+
CameraServiceBase,
|
|
9
|
+
GetImageRequest,
|
|
10
|
+
GetImageResponse,
|
|
11
|
+
GetImagesRequest,
|
|
12
|
+
GetImagesResponse,
|
|
13
|
+
GetPointCloudRequest,
|
|
14
|
+
GetPointCloudResponse,
|
|
15
|
+
GetPropertiesRequest,
|
|
16
|
+
GetPropertiesResponse,
|
|
17
|
+
Image,
|
|
18
|
+
RenderFrameRequest,
|
|
19
|
+
)
|
|
20
|
+
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
21
|
+
from viam.utils import dict_to_struct, struct_to_dict
|
|
22
|
+
|
|
23
|
+
from . import Camera
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class CameraRPCService(CameraServiceBase, ResourceRPCServiceBase[Camera]):
|
|
27
|
+
"""
|
|
28
|
+
gRPC Service for a generic Camera
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
RESOURCE_TYPE = Camera
|
|
32
|
+
|
|
33
|
+
async def GetImage(self, stream: Stream[GetImageRequest, GetImageResponse]) -> None:
|
|
34
|
+
request = await stream.recv_message()
|
|
35
|
+
assert request is not None
|
|
36
|
+
name = request.name
|
|
37
|
+
camera = self.get_resource(name)
|
|
38
|
+
|
|
39
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
40
|
+
image = await camera.get_image(request.mime_type, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
41
|
+
response = GetImageResponse(mime_type=image.mime_type, image=image.data)
|
|
42
|
+
await stream.send_message(response)
|
|
43
|
+
|
|
44
|
+
async def GetImages(self, stream: Stream[GetImagesRequest, GetImagesResponse]) -> None:
|
|
45
|
+
request = await stream.recv_message()
|
|
46
|
+
assert request is not None
|
|
47
|
+
name = request.name
|
|
48
|
+
camera = self.get_resource(name)
|
|
49
|
+
|
|
50
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
51
|
+
images, metadata = await camera.get_images(timeout=timeout, metadata=stream.metadata)
|
|
52
|
+
img_bytes_lst = []
|
|
53
|
+
for img in images:
|
|
54
|
+
fmt = img.mime_type.to_proto()
|
|
55
|
+
img_bytes = img.data
|
|
56
|
+
img_bytes_lst.append(Image(source_name=name, format=fmt, image=img_bytes))
|
|
57
|
+
response = GetImagesResponse(images=img_bytes_lst, response_metadata=metadata)
|
|
58
|
+
await stream.send_message(response)
|
|
59
|
+
|
|
60
|
+
async def RenderFrame(self, stream: Stream[RenderFrameRequest, HttpBody]) -> None: # pyright: ignore [reportInvalidTypeForm]
|
|
61
|
+
request = await stream.recv_message()
|
|
62
|
+
assert request is not None
|
|
63
|
+
name = request.name
|
|
64
|
+
camera = self.get_resource(name)
|
|
65
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
66
|
+
image = await camera.get_image(request.mime_type, timeout=timeout, metadata=stream.metadata)
|
|
67
|
+
response = HttpBody(data=image.data, content_type=image.mime_type) # type: ignore
|
|
68
|
+
await stream.send_message(response)
|
|
69
|
+
|
|
70
|
+
async def GetPointCloud(self, stream: Stream[GetPointCloudRequest, GetPointCloudResponse]) -> None:
|
|
71
|
+
request = await stream.recv_message()
|
|
72
|
+
assert request is not None
|
|
73
|
+
name = request.name
|
|
74
|
+
camera = self.get_resource(name)
|
|
75
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
76
|
+
pc, mimetype = await camera.get_point_cloud(timeout=timeout, extra=struct_to_dict(request.extra), metadata=stream.metadata)
|
|
77
|
+
response = GetPointCloudResponse(mime_type=mimetype, point_cloud=pc)
|
|
78
|
+
await stream.send_message(response)
|
|
79
|
+
|
|
80
|
+
async def GetProperties(self, stream: Stream[GetPropertiesRequest, GetPropertiesResponse]) -> None:
|
|
81
|
+
request = await stream.recv_message()
|
|
82
|
+
assert request is not None
|
|
83
|
+
name = request.name
|
|
84
|
+
camera = self.get_resource(name)
|
|
85
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
86
|
+
properties = await camera.get_properties(timeout=timeout, metadata=stream.metadata)
|
|
87
|
+
await stream.send_message(properties)
|
|
88
|
+
|
|
89
|
+
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
90
|
+
request = await stream.recv_message()
|
|
91
|
+
assert request is not None
|
|
92
|
+
camera = self.get_resource(request.name)
|
|
93
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
94
|
+
result = await camera.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
95
|
+
response = DoCommandResponse(result=dict_to_struct(result))
|
|
96
|
+
await stream.send_message(response)
|
|
97
|
+
|
|
98
|
+
async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
|
|
99
|
+
request = await stream.recv_message()
|
|
100
|
+
assert request is not None
|
|
101
|
+
camera = self.get_resource(request.name)
|
|
102
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
103
|
+
geometries = await camera.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
|
|
104
|
+
response = GetGeometriesResponse(geometries=geometries)
|
|
105
|
+
await stream.send_message(response)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import abc
|
|
2
|
+
from logging import Logger
|
|
3
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Dict, List, Mapping, Optional, SupportsBytes, SupportsFloat, Union, cast
|
|
4
|
+
|
|
5
|
+
from typing_extensions import Self
|
|
6
|
+
|
|
7
|
+
from viam.errors import MethodNotImplementedError
|
|
8
|
+
from viam.logging import getLogger
|
|
9
|
+
from viam.proto.common import Geometry
|
|
10
|
+
from viam.resource.base import ResourceBase
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from viam.resource.types import API
|
|
14
|
+
from viam.robot.client import RobotClient
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
ValueTypes = Union[bool, SupportsBytes, SupportsFloat, List, Mapping, str, None]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ComponentBase(abc.ABC, ResourceBase):
|
|
21
|
+
"""
|
|
22
|
+
Base component.
|
|
23
|
+
All components must inherit from this class.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
API: ClassVar["API"]
|
|
27
|
+
|
|
28
|
+
def __init__(self, name: str, *, logger: Optional[Logger] = None):
|
|
29
|
+
self.name = name
|
|
30
|
+
self.logger = logger if logger is not None else getLogger(f"{self.API}.{name}")
|
|
31
|
+
|
|
32
|
+
@classmethod
|
|
33
|
+
def from_robot(cls, robot: "RobotClient", name: str) -> Self:
|
|
34
|
+
"""Get the component named ``name`` from the provided robot.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
robot (RobotClient): The robot
|
|
38
|
+
name (str): The name of the component
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
Self: The component, if it exists on the robot
|
|
42
|
+
"""
|
|
43
|
+
component = robot.get_component(cls.get_resource_name(name))
|
|
44
|
+
return cast(cls, component) # type: ignore
|
|
45
|
+
|
|
46
|
+
async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs) -> Mapping[str, ValueTypes]:
|
|
47
|
+
raise NotImplementedError()
|
|
48
|
+
|
|
49
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[Geometry]:
|
|
50
|
+
"""
|
|
51
|
+
Get all geometries associated with the component, in their current configuration, in the
|
|
52
|
+
`frame <https://docs.viam.com/operate/mobility/define-geometry/>`__ of the component.
|
|
53
|
+
|
|
54
|
+
::
|
|
55
|
+
|
|
56
|
+
geometries = await component.get_geometries()
|
|
57
|
+
|
|
58
|
+
if geometries:
|
|
59
|
+
# Get the center of the first geometry
|
|
60
|
+
print(f"Pose of the first geometry's centerpoint: {geometries[0].center}")
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
List[Geometry]: The geometries associated with the Component.
|
|
64
|
+
"""
|
|
65
|
+
raise MethodNotImplementedError("get_geometries")
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from viam.resource.registry import Registry, ResourceRegistration
|
|
2
|
+
|
|
3
|
+
from .client import EncoderClient
|
|
4
|
+
from .encoder import Encoder
|
|
5
|
+
from .service import EncoderRPCService
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"Encoder",
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
Registry.register_api(
|
|
13
|
+
ResourceRegistration(
|
|
14
|
+
Encoder,
|
|
15
|
+
EncoderRPCService,
|
|
16
|
+
lambda name, channel: EncoderClient(name, channel),
|
|
17
|
+
)
|
|
18
|
+
)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Mapping, Optional, Tuple
|
|
2
|
+
|
|
3
|
+
from grpclib.client import Channel
|
|
4
|
+
|
|
5
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry
|
|
6
|
+
from viam.proto.component.encoder import (
|
|
7
|
+
EncoderServiceStub,
|
|
8
|
+
GetPositionRequest,
|
|
9
|
+
GetPositionResponse,
|
|
10
|
+
GetPropertiesRequest,
|
|
11
|
+
GetPropertiesResponse,
|
|
12
|
+
PositionType,
|
|
13
|
+
ResetPositionRequest,
|
|
14
|
+
)
|
|
15
|
+
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
16
|
+
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
|
|
17
|
+
|
|
18
|
+
from .encoder import Encoder
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class EncoderClient(Encoder, ReconfigurableResourceRPCClientBase):
|
|
22
|
+
"""
|
|
23
|
+
gRPC client for the Encoder component.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(self, name: str, channel: Channel):
|
|
27
|
+
self.channel = channel
|
|
28
|
+
self.client = EncoderServiceStub(channel)
|
|
29
|
+
super().__init__(name)
|
|
30
|
+
|
|
31
|
+
async def reset_position(
|
|
32
|
+
self,
|
|
33
|
+
*,
|
|
34
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
35
|
+
timeout: Optional[float] = None,
|
|
36
|
+
**kwargs,
|
|
37
|
+
):
|
|
38
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
39
|
+
request = ResetPositionRequest(name=self.name, extra=dict_to_struct(extra))
|
|
40
|
+
await self.client.ResetPosition(request, timeout=timeout, metadata=md)
|
|
41
|
+
|
|
42
|
+
async def get_position(
|
|
43
|
+
self,
|
|
44
|
+
position_type: Optional[PositionType.ValueType] = None,
|
|
45
|
+
*,
|
|
46
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
47
|
+
timeout: Optional[float] = None,
|
|
48
|
+
**kwargs,
|
|
49
|
+
) -> Tuple[float, PositionType.ValueType]:
|
|
50
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
51
|
+
request = GetPositionRequest(name=self.name, position_type=position_type, extra=dict_to_struct(extra))
|
|
52
|
+
response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
|
|
53
|
+
return response.value, response.position_type
|
|
54
|
+
|
|
55
|
+
async def get_properties(
|
|
56
|
+
self,
|
|
57
|
+
*,
|
|
58
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
59
|
+
timeout: Optional[float] = None,
|
|
60
|
+
**kwargs,
|
|
61
|
+
) -> Encoder.Properties:
|
|
62
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
63
|
+
request = GetPropertiesRequest(name=self.name, extra=dict_to_struct(extra))
|
|
64
|
+
response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout, metadata=md)
|
|
65
|
+
return Encoder.Properties(
|
|
66
|
+
ticks_count_supported=response.ticks_count_supported, angle_degrees_supported=response.angle_degrees_supported
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
async def do_command(
|
|
70
|
+
self,
|
|
71
|
+
command: Mapping[str, ValueTypes],
|
|
72
|
+
*,
|
|
73
|
+
timeout: Optional[float] = None,
|
|
74
|
+
**kwargs,
|
|
75
|
+
) -> Mapping[str, ValueTypes]:
|
|
76
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
77
|
+
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
78
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
79
|
+
return struct_to_dict(response.result)
|
|
80
|
+
|
|
81
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
82
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
83
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import abc
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from typing import Any, Dict, Final, Optional, Tuple
|
|
4
|
+
|
|
5
|
+
from viam.proto.component.encoder import PositionType
|
|
6
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
7
|
+
|
|
8
|
+
from ..component_base import ComponentBase
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class Encoder(ComponentBase):
|
|
12
|
+
@dataclass
|
|
13
|
+
class Properties:
|
|
14
|
+
ticks_count_supported: bool
|
|
15
|
+
angle_degrees_supported: bool
|
|
16
|
+
|
|
17
|
+
"""
|
|
18
|
+
Encoder represents a physical encoder.
|
|
19
|
+
|
|
20
|
+
This acts as an abstract base class for any drivers representing specific
|
|
21
|
+
encoder implementations. This cannot be used on its own. If the ``__init__()`` function is
|
|
22
|
+
overridden, it must call the ``super().__init__()`` function.
|
|
23
|
+
|
|
24
|
+
::
|
|
25
|
+
|
|
26
|
+
from viam.components.encoder import Encoder
|
|
27
|
+
|
|
28
|
+
For more information, see `Encoder component <https://docs.viam.com/dev/reference/apis/components/encoder/>`_.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
32
|
+
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "encoder"
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
@abc.abstractmethod
|
|
36
|
+
async def reset_position(
|
|
37
|
+
self,
|
|
38
|
+
*,
|
|
39
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
40
|
+
timeout: Optional[float] = None,
|
|
41
|
+
**kwargs,
|
|
42
|
+
):
|
|
43
|
+
"""
|
|
44
|
+
Set the current position to be the new zero (home) position.
|
|
45
|
+
|
|
46
|
+
::
|
|
47
|
+
|
|
48
|
+
my_encoder = Encoder.from_robot(robot=machine, name='my_encoder')
|
|
49
|
+
|
|
50
|
+
# Reset the zero position of the encoder.
|
|
51
|
+
await my_encoder.reset_position()
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
For more information, see `Encoder component <https://docs.viam.com/dev/reference/apis/components/encoder/#resetposition>`_.
|
|
55
|
+
"""
|
|
56
|
+
...
|
|
57
|
+
|
|
58
|
+
@abc.abstractmethod
|
|
59
|
+
async def get_position(
|
|
60
|
+
self,
|
|
61
|
+
position_type: Optional[PositionType.ValueType] = None,
|
|
62
|
+
*,
|
|
63
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
64
|
+
timeout: Optional[float] = None,
|
|
65
|
+
**kwargs,
|
|
66
|
+
) -> Tuple[float, PositionType.ValueType]:
|
|
67
|
+
"""
|
|
68
|
+
Report the position of the encoder.
|
|
69
|
+
The value returned is the current position in terms of it's ``position_type``.
|
|
70
|
+
The position will be either in relative units (ticks away from a zero position) for
|
|
71
|
+
``PositionType.POSITION_TYPE_TICKS_COUNT`` or absolute units (degrees along a circle)
|
|
72
|
+
for ``PositionType.POSITION_TYPE_ANGLE_DEGREES``.
|
|
73
|
+
|
|
74
|
+
::
|
|
75
|
+
|
|
76
|
+
my_encoder = Encoder.from_robot(robot=machine, name='my_encoder')
|
|
77
|
+
|
|
78
|
+
# Get the position of the encoder in ticks
|
|
79
|
+
position = await my_encoder.get_position(PositionType.POSITION_TYPE_TICKS_COUNT)
|
|
80
|
+
print("The encoder position is currently ", position[0], position[1])
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
position_type (PositionType): The desired output type of the position.
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
Tuple[float, PositionType]:
|
|
87
|
+
A tuple containing two values; the first [0] the position of the encoder which can either be
|
|
88
|
+
ticks since last zeroing for a relative encoder or degrees for an absolute encoder, and the second [1] the type of
|
|
89
|
+
position the encoder returns (ticks or degrees).
|
|
90
|
+
|
|
91
|
+
For more information, see `Encoder component <https://docs.viam.com/dev/reference/apis/components/encoder/#getposition>`_.
|
|
92
|
+
"""
|
|
93
|
+
...
|
|
94
|
+
|
|
95
|
+
@abc.abstractmethod
|
|
96
|
+
async def get_properties(
|
|
97
|
+
self,
|
|
98
|
+
*,
|
|
99
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
100
|
+
timeout: Optional[float] = None,
|
|
101
|
+
**kwargs,
|
|
102
|
+
) -> Properties:
|
|
103
|
+
"""
|
|
104
|
+
Return a dictionary of the types of position reporting this encoder supports.
|
|
105
|
+
|
|
106
|
+
::
|
|
107
|
+
|
|
108
|
+
my_encoder = Encoder.from_robot(robot=machine, name='my_encoder')
|
|
109
|
+
|
|
110
|
+
# Get whether the encoder returns position in ticks or degrees.
|
|
111
|
+
properties = await my_encoder.get_properties()
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
Encoder.Properties: Map of position types to supported status.
|
|
115
|
+
|
|
116
|
+
For more information, see `Encoder component <https://docs.viam.com/dev/reference/apis/components/encoder/#getproperties>`_.
|
|
117
|
+
"""
|
|
118
|
+
...
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
from grpclib.server import Stream
|
|
2
|
+
|
|
3
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
|
|
4
|
+
from viam.proto.component.encoder import (
|
|
5
|
+
EncoderServiceBase,
|
|
6
|
+
GetPositionRequest,
|
|
7
|
+
GetPositionResponse,
|
|
8
|
+
GetPropertiesRequest,
|
|
9
|
+
GetPropertiesResponse,
|
|
10
|
+
ResetPositionRequest,
|
|
11
|
+
ResetPositionResponse,
|
|
12
|
+
)
|
|
13
|
+
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
14
|
+
from viam.utils import dict_to_struct, struct_to_dict
|
|
15
|
+
|
|
16
|
+
from .encoder import Encoder
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class EncoderRPCService(EncoderServiceBase, ResourceRPCServiceBase[Encoder]):
|
|
20
|
+
"""
|
|
21
|
+
gRPC Service for an Encoder
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
RESOURCE_TYPE = Encoder
|
|
25
|
+
|
|
26
|
+
async def ResetPosition(self, stream: Stream[ResetPositionRequest, ResetPositionResponse]) -> None:
|
|
27
|
+
request = await stream.recv_message()
|
|
28
|
+
assert request is not None
|
|
29
|
+
name = request.name
|
|
30
|
+
encoder = self.get_resource(name)
|
|
31
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
32
|
+
await encoder.reset_position(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
33
|
+
await stream.send_message(ResetPositionResponse())
|
|
34
|
+
|
|
35
|
+
async def GetPosition(self, stream: Stream[GetPositionRequest, GetPositionResponse]) -> None:
|
|
36
|
+
request = await stream.recv_message()
|
|
37
|
+
assert request is not None
|
|
38
|
+
name = request.name
|
|
39
|
+
encoder = self.get_resource(name)
|
|
40
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
41
|
+
position, pos_type = await encoder.get_position(
|
|
42
|
+
position_type=request.position_type, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata
|
|
43
|
+
)
|
|
44
|
+
await stream.send_message(GetPositionResponse(value=position, position_type=pos_type))
|
|
45
|
+
|
|
46
|
+
async def GetProperties(self, stream: Stream[GetPropertiesRequest, GetPropertiesResponse]) -> None:
|
|
47
|
+
request = await stream.recv_message()
|
|
48
|
+
assert request is not None
|
|
49
|
+
name = request.name
|
|
50
|
+
encoder = self.get_resource(name)
|
|
51
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
52
|
+
properties = await encoder.get_properties(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
53
|
+
response = GetPropertiesResponse(**properties.__dict__)
|
|
54
|
+
await stream.send_message(response)
|
|
55
|
+
|
|
56
|
+
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
57
|
+
request = await stream.recv_message()
|
|
58
|
+
assert request is not None
|
|
59
|
+
encoder = self.get_resource(request.name)
|
|
60
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
61
|
+
result = await encoder.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
62
|
+
response = DoCommandResponse(result=dict_to_struct(result))
|
|
63
|
+
await stream.send_message(response)
|
|
64
|
+
|
|
65
|
+
async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
|
|
66
|
+
request = await stream.recv_message()
|
|
67
|
+
assert request is not None
|
|
68
|
+
arm = self.get_resource(request.name)
|
|
69
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
70
|
+
geometries = await arm.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
|
|
71
|
+
response = GetGeometriesResponse(geometries=geometries)
|
|
72
|
+
await stream.send_message(response)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from viam.resource.registry import Registry, ResourceRegistration
|
|
2
|
+
|
|
3
|
+
from .client import GantryClient
|
|
4
|
+
from .gantry import Gantry
|
|
5
|
+
from .service import GantryRPCService
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"Gantry",
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
Registry.register_api(ResourceRegistration(Gantry, GantryRPCService, lambda name, channel: GantryClient(name, channel)))
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Mapping, Optional
|
|
2
|
+
|
|
3
|
+
from grpclib.client import Channel
|
|
4
|
+
|
|
5
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry
|
|
6
|
+
from viam.proto.component.gantry import (
|
|
7
|
+
GantryServiceStub,
|
|
8
|
+
GetLengthsRequest,
|
|
9
|
+
GetLengthsResponse,
|
|
10
|
+
GetPositionRequest,
|
|
11
|
+
GetPositionResponse,
|
|
12
|
+
HomeRequest,
|
|
13
|
+
HomeResponse,
|
|
14
|
+
IsMovingRequest,
|
|
15
|
+
IsMovingResponse,
|
|
16
|
+
MoveToPositionRequest,
|
|
17
|
+
StopRequest,
|
|
18
|
+
)
|
|
19
|
+
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
20
|
+
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
|
|
21
|
+
|
|
22
|
+
from .gantry import Gantry
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class GantryClient(Gantry, ReconfigurableResourceRPCClientBase):
|
|
26
|
+
"""
|
|
27
|
+
gRPC client for the Gantry component.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(self, name: str, channel: Channel):
|
|
31
|
+
self.channel = channel
|
|
32
|
+
self.client = GantryServiceStub(channel)
|
|
33
|
+
super().__init__(name)
|
|
34
|
+
|
|
35
|
+
async def get_position(
|
|
36
|
+
self,
|
|
37
|
+
*,
|
|
38
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
39
|
+
timeout: Optional[float] = None,
|
|
40
|
+
**kwargs,
|
|
41
|
+
) -> List[float]:
|
|
42
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
43
|
+
request = GetPositionRequest(name=self.name, extra=dict_to_struct(extra))
|
|
44
|
+
response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
|
|
45
|
+
return list(response.positions_mm)
|
|
46
|
+
|
|
47
|
+
async def move_to_position(
|
|
48
|
+
self,
|
|
49
|
+
positions: List[float],
|
|
50
|
+
speeds: List[float],
|
|
51
|
+
*,
|
|
52
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
53
|
+
timeout: Optional[float] = None,
|
|
54
|
+
**kwargs,
|
|
55
|
+
):
|
|
56
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
57
|
+
request = MoveToPositionRequest(name=self.name, positions_mm=positions, speeds_mm_per_sec=speeds, extra=dict_to_struct(extra))
|
|
58
|
+
await self.client.MoveToPosition(request, timeout=timeout, metadata=md)
|
|
59
|
+
|
|
60
|
+
async def home(
|
|
61
|
+
self,
|
|
62
|
+
*,
|
|
63
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
64
|
+
timeout: Optional[float] = None,
|
|
65
|
+
**kwargs,
|
|
66
|
+
) -> bool:
|
|
67
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
68
|
+
request = HomeRequest(name=self.name, extra=dict_to_struct(extra))
|
|
69
|
+
response: HomeResponse = await self.client.Home(request, timeout=timeout, metadata=md)
|
|
70
|
+
return response.homed
|
|
71
|
+
|
|
72
|
+
async def get_lengths(
|
|
73
|
+
self,
|
|
74
|
+
*,
|
|
75
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
76
|
+
timeout: Optional[float] = None,
|
|
77
|
+
**kwargs,
|
|
78
|
+
) -> List[float]:
|
|
79
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
80
|
+
request = GetLengthsRequest(name=self.name, extra=dict_to_struct(extra))
|
|
81
|
+
response: GetLengthsResponse = await self.client.GetLengths(request, timeout=timeout, metadata=md)
|
|
82
|
+
return list(response.lengths_mm)
|
|
83
|
+
|
|
84
|
+
async def stop(
|
|
85
|
+
self,
|
|
86
|
+
*,
|
|
87
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
88
|
+
timeout: Optional[float] = None,
|
|
89
|
+
**kwargs,
|
|
90
|
+
):
|
|
91
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
92
|
+
request = StopRequest(name=self.name, extra=dict_to_struct(extra))
|
|
93
|
+
await self.client.Stop(request, timeout=timeout, metadata=md)
|
|
94
|
+
|
|
95
|
+
async def is_moving(self, *, timeout: Optional[float] = None, **kwargs) -> bool:
|
|
96
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
97
|
+
request = IsMovingRequest(name=self.name)
|
|
98
|
+
response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout, metadata=md)
|
|
99
|
+
return response.is_moving
|
|
100
|
+
|
|
101
|
+
async def do_command(
|
|
102
|
+
self,
|
|
103
|
+
command: Mapping[str, ValueTypes],
|
|
104
|
+
*,
|
|
105
|
+
timeout: Optional[float] = None,
|
|
106
|
+
**kwargs,
|
|
107
|
+
) -> Mapping[str, ValueTypes]:
|
|
108
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
109
|
+
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
110
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
111
|
+
return struct_to_dict(response.result)
|
|
112
|
+
|
|
113
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
114
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
115
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|