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.

Files changed (452) hide show
  1. viam/__init__.py +29 -2
  2. viam/app/_logs.py +34 -0
  3. viam/app/app_client.py +2696 -0
  4. viam/app/billing_client.py +185 -0
  5. viam/app/data_client.py +2231 -0
  6. viam/app/ml_training_client.py +249 -0
  7. viam/app/provisioning_client.py +93 -0
  8. viam/app/viam_client.py +275 -0
  9. viam/components/arm/__init__.py +3 -26
  10. viam/components/arm/arm.py +123 -8
  11. viam/components/arm/client.py +37 -24
  12. viam/components/arm/service.py +35 -32
  13. viam/components/audio_in/__init__.py +24 -0
  14. viam/components/audio_in/audio_in.py +74 -0
  15. viam/components/audio_in/client.py +76 -0
  16. viam/components/audio_in/service.py +83 -0
  17. viam/components/audio_out/__init__.py +21 -0
  18. viam/components/audio_out/audio_out.py +72 -0
  19. viam/components/audio_out/client.py +67 -0
  20. viam/components/audio_out/service.py +63 -0
  21. viam/components/base/__init__.py +6 -11
  22. viam/components/base/base.py +134 -8
  23. viam/components/base/client.py +51 -23
  24. viam/components/base/service.py +33 -30
  25. viam/components/board/__init__.py +3 -12
  26. viam/components/board/board.py +247 -91
  27. viam/components/board/client.py +149 -83
  28. viam/components/board/service.py +63 -33
  29. viam/components/button/__init__.py +10 -0
  30. viam/components/button/button.py +41 -0
  31. viam/components/button/client.py +52 -0
  32. viam/components/button/service.py +46 -0
  33. viam/components/camera/__init__.py +3 -3
  34. viam/components/camera/camera.py +62 -27
  35. viam/components/camera/client.py +59 -27
  36. viam/components/camera/service.py +42 -65
  37. viam/components/component_base.py +28 -5
  38. viam/components/encoder/__init__.py +1 -1
  39. viam/components/encoder/client.py +25 -14
  40. viam/components/encoder/encoder.py +48 -10
  41. viam/components/encoder/service.py +14 -18
  42. viam/components/gantry/__init__.py +1 -13
  43. viam/components/gantry/client.py +80 -25
  44. viam/components/gantry/gantry.py +123 -9
  45. viam/components/gantry/service.py +51 -29
  46. viam/components/generic/__init__.py +1 -1
  47. viam/components/generic/client.py +21 -8
  48. viam/components/generic/generic.py +10 -2
  49. viam/components/generic/service.py +12 -7
  50. viam/components/gripper/__init__.py +3 -13
  51. viam/components/gripper/client.py +69 -21
  52. viam/components/gripper/gripper.py +123 -3
  53. viam/components/gripper/service.py +44 -22
  54. viam/components/input/__init__.py +1 -14
  55. viam/components/input/client.py +55 -23
  56. viam/components/input/input.py +106 -3
  57. viam/components/input/service.py +16 -21
  58. viam/components/motor/__init__.py +1 -21
  59. viam/components/motor/client.py +56 -33
  60. viam/components/motor/motor.py +127 -4
  61. viam/components/motor/service.py +33 -44
  62. viam/components/movement_sensor/__init__.py +1 -1
  63. viam/components/movement_sensor/client.py +102 -45
  64. viam/components/movement_sensor/movement_sensor.py +130 -61
  65. viam/components/movement_sensor/service.py +38 -41
  66. viam/components/pose_tracker/__init__.py +1 -1
  67. viam/components/pose_tracker/client.py +18 -7
  68. viam/components/pose_tracker/pose_tracker.py +4 -2
  69. viam/components/pose_tracker/service.py +12 -10
  70. viam/components/power_sensor/__init__.py +17 -0
  71. viam/components/power_sensor/client.py +86 -0
  72. viam/components/power_sensor/power_sensor.py +104 -0
  73. viam/components/power_sensor/service.py +72 -0
  74. viam/components/sensor/__init__.py +2 -1
  75. viam/components/sensor/client.py +26 -10
  76. viam/components/sensor/sensor.py +22 -4
  77. viam/components/sensor/service.py +20 -11
  78. viam/components/servo/__init__.py +1 -13
  79. viam/components/servo/client.py +47 -21
  80. viam/components/servo/service.py +15 -22
  81. viam/components/servo/servo.py +61 -2
  82. viam/components/switch/__init__.py +10 -0
  83. viam/components/switch/client.py +83 -0
  84. viam/components/switch/service.py +72 -0
  85. viam/components/switch/switch.py +98 -0
  86. viam/errors.py +10 -0
  87. viam/gen/app/agent/v1/agent_grpc.py +29 -0
  88. viam/gen/app/agent/v1/agent_pb2.py +47 -0
  89. viam/gen/app/agent/v1/agent_pb2.pyi +280 -0
  90. viam/gen/app/cloudslam/v1/__init__.py +0 -0
  91. viam/gen/app/cloudslam/v1/cloud_slam_grpc.py +70 -0
  92. viam/gen/app/cloudslam/v1/cloud_slam_pb2.py +54 -0
  93. viam/gen/app/cloudslam/v1/cloud_slam_pb2.pyi +384 -0
  94. viam/gen/app/data/v1/data_grpc.py +197 -8
  95. viam/gen/app/data/v1/data_pb2.py +238 -99
  96. viam/gen/app/data/v1/data_pb2.pyi +1222 -259
  97. viam/gen/app/datapipelines/__init__.py +0 -0
  98. viam/gen/app/datapipelines/v1/__init__.py +0 -0
  99. viam/gen/app/datapipelines/v1/data_pipelines_grpc.py +84 -0
  100. viam/gen/app/datapipelines/v1/data_pipelines_pb2.py +57 -0
  101. viam/gen/app/datapipelines/v1/data_pipelines_pb2.pyi +387 -0
  102. viam/gen/app/dataset/__init__.py +0 -0
  103. viam/gen/app/dataset/v1/__init__.py +0 -0
  104. viam/gen/app/dataset/v1/dataset_grpc.py +68 -0
  105. viam/gen/app/dataset/v1/dataset_pb2.py +44 -0
  106. viam/gen/app/dataset/v1/dataset_pb2.pyi +214 -0
  107. viam/gen/app/datasync/v1/data_sync_grpc.py +21 -4
  108. viam/gen/app/datasync/v1/data_sync_pb2.py +62 -128
  109. viam/gen/app/datasync/v1/data_sync_pb2.pyi +156 -199
  110. viam/gen/app/mlinference/__init__.py +0 -0
  111. viam/gen/app/mlinference/v1/__init__.py +0 -0
  112. viam/gen/app/mlinference/v1/ml_inference_grpc.py +28 -0
  113. viam/gen/app/mlinference/v1/ml_inference_pb2.py +23 -0
  114. viam/gen/app/mlinference/v1/ml_inference_pb2.pyi +63 -0
  115. viam/gen/app/mltraining/v1/ml_training_grpc.py +51 -3
  116. viam/gen/app/mltraining/v1/ml_training_pb2.py +135 -58
  117. viam/gen/app/mltraining/v1/ml_training_pb2.pyi +328 -39
  118. viam/gen/app/packages/v1/packages_grpc.py +15 -1
  119. viam/gen/app/packages/v1/packages_pb2.py +44 -64
  120. viam/gen/app/packages/v1/packages_pb2.pyi +75 -85
  121. viam/gen/app/v1/app_grpc.py +644 -3
  122. viam/gen/app/v1/app_pb2.py +695 -295
  123. viam/gen/app/v1/app_pb2.pyi +4488 -635
  124. viam/gen/app/v1/billing_grpc.py +53 -11
  125. viam/gen/app/v1/billing_pb2.py +94 -39
  126. viam/gen/app/v1/billing_pb2.pyi +391 -191
  127. viam/gen/app/v1/end_user_grpc.py +59 -0
  128. viam/gen/app/v1/end_user_pb2.py +55 -0
  129. viam/gen/app/v1/end_user_pb2.pyi +181 -0
  130. viam/gen/app/v1/robot_grpc.py +16 -1
  131. viam/gen/app/v1/robot_pb2.py +122 -94
  132. viam/gen/app/v1/robot_pb2.pyi +463 -123
  133. viam/gen/common/v1/common_pb2.py +87 -58
  134. viam/gen/common/v1/common_pb2.pyi +456 -149
  135. viam/gen/component/arm/v1/arm_grpc.py +58 -2
  136. viam/gen/component/arm/v1/arm_pb2.py +68 -51
  137. viam/gen/component/arm/v1/arm_pb2.pyi +108 -42
  138. viam/gen/component/audioin/__init__.py +0 -0
  139. viam/gen/component/audioin/v1/__init__.py +0 -0
  140. viam/gen/component/audioin/v1/audioin_grpc.py +54 -0
  141. viam/gen/component/audioin/v1/audioin_pb2.py +34 -0
  142. viam/gen/component/audioin/v1/audioin_pb2.pyi +94 -0
  143. viam/gen/component/audioinput/v1/audioinput_grpc.py +25 -2
  144. viam/gen/component/audioinput/v1/audioinput_pb2.py +36 -31
  145. viam/gen/component/audioinput/v1/audioinput_pb2.pyi +22 -22
  146. viam/gen/component/audioout/__init__.py +0 -0
  147. viam/gen/component/audioout/v1/__init__.py +0 -0
  148. viam/gen/component/audioout/v1/audioout_grpc.py +54 -0
  149. viam/gen/component/audioout/v1/audioout_pb2.py +32 -0
  150. viam/gen/component/audioout/v1/audioout_pb2.pyi +47 -0
  151. viam/gen/component/base/v1/base_grpc.py +42 -2
  152. viam/gen/component/base/v1/base_pb2.py +58 -47
  153. viam/gen/component/base/v1/base_pb2.pyi +65 -30
  154. viam/gen/component/board/v1/board_grpc.py +59 -7
  155. viam/gen/component/board/v1/board_pb2.py +94 -73
  156. viam/gen/component/board/v1/board_pb2.pyi +165 -68
  157. viam/gen/component/button/__init__.py +0 -0
  158. viam/gen/component/button/v1/__init__.py +0 -0
  159. viam/gen/component/button/v1/button_grpc.py +38 -0
  160. viam/gen/component/button/v1/button_pb2.py +28 -0
  161. viam/gen/component/button/v1/button_pb2.pyi +39 -0
  162. viam/gen/component/camera/v1/camera_grpc.py +38 -2
  163. viam/gen/component/camera/v1/camera_pb2.py +60 -43
  164. viam/gen/component/camera/v1/camera_pb2.pyi +191 -37
  165. viam/gen/component/encoder/v1/encoder_grpc.py +25 -2
  166. viam/gen/component/encoder/v1/encoder_pb2.py +36 -31
  167. viam/gen/component/encoder/v1/encoder_pb2.pyi +15 -15
  168. viam/gen/component/gantry/v1/gantry_grpc.py +47 -2
  169. viam/gen/component/gantry/v1/gantry_pb2.py +56 -43
  170. viam/gen/component/gantry/v1/gantry_pb2.pyi +67 -31
  171. viam/gen/component/generic/v1/generic_grpc.py +16 -2
  172. viam/gen/component/generic/v1/generic_pb2.py +16 -11
  173. viam/gen/component/gripper/v1/gripper_grpc.py +44 -2
  174. viam/gen/component/gripper/v1/gripper_pb2.py +48 -35
  175. viam/gen/component/gripper/v1/gripper_pb2.pyi +62 -24
  176. viam/gen/component/inputcontroller/v1/input_controller_grpc.py +28 -2
  177. viam/gen/component/inputcontroller/v1/input_controller_pb2.py +46 -41
  178. viam/gen/component/inputcontroller/v1/input_controller_pb2.pyi +32 -36
  179. viam/gen/component/motor/v1/motor_grpc.py +51 -2
  180. viam/gen/component/motor/v1/motor_pb2.py +78 -67
  181. viam/gen/component/motor/v1/motor_pb2.pyi +75 -46
  182. viam/gen/component/movementsensor/v1/movementsensor_grpc.py +48 -2
  183. viam/gen/component/movementsensor/v1/movementsensor_pb2.py +70 -63
  184. viam/gen/component/movementsensor/v1/movementsensor_pb2.pyi +84 -57
  185. viam/gen/component/posetracker/v1/pose_tracker_grpc.py +19 -2
  186. viam/gen/component/posetracker/v1/pose_tracker_pb2.py +26 -21
  187. viam/gen/component/posetracker/v1/pose_tracker_pb2.pyi +9 -13
  188. viam/gen/component/powersensor/__init__.py +0 -0
  189. viam/gen/component/powersensor/v1/__init__.py +0 -0
  190. viam/gen/component/powersensor/v1/powersensor_grpc.py +62 -0
  191. viam/gen/component/powersensor/v1/powersensor_pb2.py +42 -0
  192. viam/gen/component/powersensor/v1/powersensor_pb2.pyi +124 -0
  193. viam/gen/component/sensor/v1/sensor_grpc.py +21 -5
  194. viam/gen/component/sensor/v1/sensor_pb2.py +18 -22
  195. viam/gen/component/sensor/v1/sensor_pb2.pyi +1 -69
  196. viam/gen/component/servo/v1/servo_grpc.py +28 -2
  197. viam/gen/component/servo/v1/servo_pb2.py +42 -37
  198. viam/gen/component/servo/v1/servo_pb2.pyi +22 -26
  199. viam/gen/component/switch/__init__.py +0 -0
  200. viam/gen/component/switch/v1/__init__.py +0 -0
  201. viam/gen/component/switch/v1/switch_grpc.py +54 -0
  202. viam/gen/component/switch/v1/switch_pb2.py +40 -0
  203. viam/gen/component/switch/v1/switch_pb2.pyi +116 -0
  204. viam/gen/component/testecho/v1/testecho_grpc.py +15 -0
  205. viam/gen/component/testecho/v1/testecho_pb2.py +29 -26
  206. viam/gen/component/testecho/v1/testecho_pb2.pyi +16 -20
  207. viam/gen/module/v1/module_grpc.py +18 -0
  208. viam/gen/module/v1/module_pb2.py +36 -33
  209. viam/gen/module/v1/module_pb2.pyi +39 -34
  210. viam/gen/opentelemetry/__init__.py +0 -0
  211. viam/gen/opentelemetry/proto/__init__.py +0 -0
  212. viam/gen/opentelemetry/proto/common/__init__.py +0 -0
  213. viam/gen/opentelemetry/proto/common/v1/__init__.py +0 -0
  214. viam/gen/opentelemetry/proto/common/v1/common_grpc.py +0 -0
  215. viam/gen/opentelemetry/proto/common/v1/common_pb2.py +27 -0
  216. viam/gen/opentelemetry/proto/common/v1/common_pb2.pyi +208 -0
  217. viam/gen/opentelemetry/proto/resource/__init__.py +0 -0
  218. viam/gen/opentelemetry/proto/resource/v1/__init__.py +0 -0
  219. viam/gen/opentelemetry/proto/resource/v1/resource_grpc.py +0 -0
  220. viam/gen/opentelemetry/proto/resource/v1/resource_pb2.py +18 -0
  221. viam/gen/opentelemetry/proto/resource/v1/resource_pb2.pyi +59 -0
  222. viam/gen/opentelemetry/proto/trace/__init__.py +0 -0
  223. viam/gen/opentelemetry/proto/trace/v1/__init__.py +0 -0
  224. viam/gen/opentelemetry/proto/trace/v1/trace_grpc.py +0 -0
  225. viam/gen/opentelemetry/proto/trace/v1/trace_pb2.py +37 -0
  226. viam/gen/opentelemetry/proto/trace/v1/trace_pb2.pyi +402 -0
  227. viam/gen/proto/rpc/examples/echo/v1/echo_grpc.py +12 -0
  228. viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +25 -22
  229. viam/gen/proto/rpc/examples/echo/v1/echo_pb2.pyi +13 -17
  230. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_grpc.py +12 -0
  231. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +23 -20
  232. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.pyi +13 -17
  233. viam/gen/proto/rpc/v1/auth_grpc.py +11 -0
  234. viam/gen/proto/rpc/v1/auth_pb2.py +27 -24
  235. viam/gen/proto/rpc/v1/auth_pb2.pyi +12 -16
  236. viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +35 -32
  237. viam/gen/proto/rpc/webrtc/v1/grpc_pb2.pyi +37 -41
  238. viam/gen/proto/rpc/webrtc/v1/signaling_grpc.py +15 -0
  239. viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +62 -57
  240. viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +78 -69
  241. viam/gen/provisioning/__init__.py +0 -0
  242. viam/gen/provisioning/v1/__init__.py +0 -0
  243. viam/gen/provisioning/v1/provisioning_grpc.py +59 -0
  244. viam/gen/provisioning/v1/provisioning_pb2.py +45 -0
  245. viam/gen/provisioning/v1/provisioning_pb2.pyi +229 -0
  246. viam/gen/robot/v1/robot_grpc.py +144 -15
  247. viam/gen/robot/v1/robot_pb2.py +193 -119
  248. viam/gen/robot/v1/robot_pb2.pyi +565 -137
  249. viam/gen/service/datamanager/v1/data_manager_grpc.py +20 -2
  250. viam/gen/service/datamanager/v1/data_manager_pb2.py +27 -17
  251. viam/gen/service/datamanager/v1/data_manager_pb2.pyi +52 -10
  252. viam/gen/service/discovery/__init__.py +0 -0
  253. viam/gen/service/discovery/v1/__init__.py +0 -0
  254. viam/gen/service/discovery/v1/discovery_grpc.py +39 -0
  255. viam/gen/service/discovery/v1/discovery_pb2.py +29 -0
  256. viam/gen/service/discovery/v1/discovery_pb2.pyi +51 -0
  257. viam/gen/service/generic/__init__.py +0 -0
  258. viam/gen/service/generic/v1/__init__.py +0 -0
  259. viam/gen/service/generic/v1/generic_grpc.py +29 -0
  260. viam/gen/service/generic/v1/generic_pb2.py +21 -0
  261. viam/gen/service/generic/v1/generic_pb2.pyi +6 -0
  262. viam/gen/service/mlmodel/v1/mlmodel_grpc.py +9 -0
  263. viam/gen/service/mlmodel/v1/mlmodel_pb2.py +76 -29
  264. viam/gen/service/mlmodel/v1/mlmodel_pb2.pyi +307 -28
  265. viam/gen/service/motion/v1/motion_grpc.py +42 -4
  266. viam/gen/service/motion/v1/motion_pb2.py +119 -51
  267. viam/gen/service/motion/v1/motion_pb2.pyi +595 -120
  268. viam/gen/service/navigation/v1/navigation_grpc.py +49 -1
  269. viam/gen/service/navigation/v1/navigation_pb2.py +76 -51
  270. viam/gen/service/navigation/v1/navigation_pb2.pyi +188 -33
  271. viam/gen/service/sensors/v1/sensors_grpc.py +12 -0
  272. viam/gen/service/sensors/v1/sensors_pb2.py +60 -29
  273. viam/gen/service/sensors/v1/sensors_pb2.pyi +18 -21
  274. viam/gen/service/shell/v1/shell_grpc.py +27 -1
  275. viam/gen/service/shell/v1/shell_pb2.py +37 -15
  276. viam/gen/service/shell/v1/shell_pb2.pyi +260 -7
  277. viam/gen/service/slam/v1/slam_grpc.py +24 -2
  278. viam/gen/service/slam/v1/slam_pb2.py +44 -30
  279. viam/gen/service/slam/v1/slam_pb2.pyi +128 -27
  280. viam/gen/service/video/__init__.py +0 -0
  281. viam/gen/service/video/v1/__init__.py +0 -0
  282. viam/gen/service/video/v1/video_grpc.py +39 -0
  283. viam/gen/service/video/v1/video_pb2.py +29 -0
  284. viam/gen/service/video/v1/video_pb2.pyi +72 -0
  285. viam/gen/service/vision/v1/vision_grpc.py +39 -1
  286. viam/gen/service/vision/v1/vision_pb2.py +61 -45
  287. viam/gen/service/vision/v1/vision_pb2.pyi +180 -41
  288. viam/gen/service/worldstatestore/__init__.py +0 -0
  289. viam/gen/service/worldstatestore/v1/__init__.py +0 -0
  290. viam/gen/service/worldstatestore/v1/world_state_store_grpc.py +55 -0
  291. viam/gen/service/worldstatestore/v1/world_state_store_pb2.py +39 -0
  292. viam/gen/service/worldstatestore/v1/world_state_store_pb2.pyi +171 -0
  293. viam/gen/stream/__init__.py +0 -0
  294. viam/gen/stream/v1/__init__.py +0 -0
  295. viam/gen/stream/v1/stream_grpc.py +59 -0
  296. viam/gen/stream/v1/stream_pb2.py +39 -0
  297. viam/gen/stream/v1/stream_pb2.pyi +161 -0
  298. viam/gen/tagger/v1/tagger_pb2.py +9 -8
  299. viam/logging.py +160 -17
  300. viam/media/__init__.py +0 -9
  301. viam/media/audio.py +22 -10
  302. viam/media/utils/__init__.py +0 -0
  303. viam/media/utils/pil/__init__.py +55 -0
  304. viam/media/{viam_rgba_plugin.py → utils/pil/viam_rgba_plugin.py} +10 -16
  305. viam/media/viam_rgba.py +10 -0
  306. viam/media/video.py +197 -73
  307. viam/module/module.py +191 -44
  308. viam/module/resource_data_consumer.py +41 -0
  309. viam/module/service.py +9 -1
  310. viam/module/types.py +4 -5
  311. viam/operations.py +4 -3
  312. viam/proto/app/__init__.py +361 -5
  313. viam/proto/app/agent/__init__.py +28 -0
  314. viam/proto/app/billing.py +51 -27
  315. viam/proto/app/cloudslam/__init__.py +48 -0
  316. viam/proto/app/data/__init__.py +103 -17
  317. viam/proto/app/datapipelines/__init__.py +56 -0
  318. viam/proto/app/dataset/__init__.py +40 -0
  319. viam/proto/app/datasync/__init__.py +11 -5
  320. viam/proto/app/end_user.py +34 -0
  321. viam/proto/app/mlinference/__init__.py +15 -0
  322. viam/proto/app/mltraining/__init__.py +25 -1
  323. viam/proto/app/packages/__init__.py +3 -3
  324. viam/proto/app/robot.py +19 -1
  325. viam/proto/common/__init__.py +35 -8
  326. viam/proto/component/arm/__init__.py +9 -1
  327. viam/proto/component/audioin/__init__.py +16 -0
  328. viam/proto/component/audioinput/__init__.py +3 -1
  329. viam/proto/component/audioout/__init__.py +15 -0
  330. viam/proto/component/base/__init__.py +7 -1
  331. viam/proto/component/board/__init__.py +13 -5
  332. viam/proto/component/button/__init__.py +15 -0
  333. viam/proto/component/camera/__init__.py +9 -1
  334. viam/proto/component/encoder/__init__.py +3 -1
  335. viam/proto/component/gantry/__init__.py +7 -1
  336. viam/proto/component/generic/__init__.py +3 -1
  337. viam/proto/component/gripper/__init__.py +7 -1
  338. viam/proto/component/inputcontroller/__init__.py +7 -1
  339. viam/proto/component/motor/__init__.py +7 -1
  340. viam/proto/component/movementsensor/__init__.py +7 -1
  341. viam/proto/component/posetracker/__init__.py +7 -1
  342. viam/proto/component/powersensor/__init__.py +30 -0
  343. viam/proto/component/sensor/__init__.py +3 -4
  344. viam/proto/component/servo/__init__.py +3 -1
  345. viam/proto/component/switch/__init__.py +26 -0
  346. viam/proto/component/testecho/__init__.py +3 -1
  347. viam/proto/module/__init__.py +3 -1
  348. viam/proto/opentelemetry/__init__.py +0 -0
  349. viam/proto/opentelemetry/proto/__init__.py +0 -0
  350. viam/proto/opentelemetry/proto/common/__init__.py +15 -0
  351. viam/proto/opentelemetry/proto/resource/__init__.py +10 -0
  352. viam/proto/opentelemetry/proto/trace/__init__.py +15 -0
  353. viam/proto/provisioning/__init__.py +42 -0
  354. viam/proto/robot/__init__.py +57 -9
  355. viam/proto/rpc/auth.py +11 -1
  356. viam/proto/rpc/examples/echo/__init__.py +3 -1
  357. viam/proto/rpc/examples/echoresource/__init__.py +7 -1
  358. viam/proto/rpc/webrtc/grpc.py +3 -1
  359. viam/proto/rpc/webrtc/signaling.py +5 -1
  360. viam/proto/service/datamanager/__init__.py +15 -2
  361. viam/proto/service/discovery/__init__.py +15 -0
  362. viam/proto/service/generic/__init__.py +12 -0
  363. viam/proto/service/mlmodel/__init__.py +27 -1
  364. viam/proto/service/motion/__init__.py +35 -5
  365. viam/proto/service/navigation/__init__.py +19 -1
  366. viam/proto/service/sensors/__init__.py +3 -1
  367. viam/proto/service/shell/__init__.py +25 -2
  368. viam/proto/service/slam/__init__.py +13 -1
  369. viam/proto/service/video/__init__.py +15 -0
  370. viam/proto/service/vision/__init__.py +11 -1
  371. viam/proto/service/worldstatestore/__init__.py +32 -0
  372. viam/proto/stream/__init__.py +36 -0
  373. viam/py.typed +0 -0
  374. viam/resource/base.py +45 -8
  375. viam/resource/easy_resource.py +149 -0
  376. viam/resource/manager.py +35 -14
  377. viam/resource/registry.py +40 -52
  378. viam/resource/rpc_client_base.py +33 -1
  379. viam/resource/rpc_service_base.py +15 -8
  380. viam/resource/types.py +39 -26
  381. viam/robot/client.py +458 -91
  382. viam/robot/service.py +13 -107
  383. viam/rpc/dial.py +133 -15
  384. viam/rpc/libviam_rust_utils.so +0 -0
  385. viam/rpc/server.py +59 -15
  386. viam/rpc/types.py +2 -4
  387. viam/services/discovery/__init__.py +12 -0
  388. viam/services/discovery/client.py +55 -0
  389. viam/services/discovery/discovery.py +52 -0
  390. viam/services/discovery/service.py +43 -0
  391. viam/services/generic/__init__.py +18 -0
  392. viam/services/generic/client.py +58 -0
  393. viam/services/generic/generic.py +58 -0
  394. viam/services/generic/service.py +29 -0
  395. viam/services/mlmodel/__init__.py +15 -1
  396. viam/services/mlmodel/client.py +20 -15
  397. viam/services/mlmodel/mlmodel.py +44 -7
  398. viam/services/mlmodel/service.py +9 -13
  399. viam/services/mlmodel/utils.py +101 -0
  400. viam/services/motion/__init__.py +15 -3
  401. viam/services/motion/client.py +109 -150
  402. viam/services/motion/motion.py +380 -0
  403. viam/services/motion/service.py +132 -0
  404. viam/services/navigation/__init__.py +11 -0
  405. viam/services/navigation/client.py +99 -0
  406. viam/services/navigation/navigation.py +250 -0
  407. viam/services/navigation/service.py +137 -0
  408. viam/services/service_base.py +43 -4
  409. viam/services/service_client_base.py +4 -4
  410. viam/services/slam/__init__.py +4 -1
  411. viam/services/slam/client.py +21 -11
  412. viam/services/slam/service.py +16 -19
  413. viam/services/slam/slam.py +66 -5
  414. viam/services/vision/__init__.py +8 -0
  415. viam/services/vision/client.py +115 -111
  416. viam/services/vision/service.py +143 -0
  417. viam/services/vision/vision.py +317 -0
  418. viam/services/worldstatestore/__init__.py +18 -0
  419. viam/services/worldstatestore/client.py +94 -0
  420. viam/services/worldstatestore/service.py +55 -0
  421. viam/services/worldstatestore/worldstatestore.py +90 -0
  422. viam/sessions_client.py +254 -0
  423. viam/streams.py +44 -0
  424. viam/utils.py +143 -15
  425. viam/version_metadata.py +4 -0
  426. viam_sdk-0.66.0.dist-info/METADATA +157 -0
  427. viam_sdk-0.66.0.dist-info/RECORD +531 -0
  428. {viam_sdk-0.3.0.dist-info → viam_sdk-0.66.0.dist-info}/WHEEL +1 -1
  429. viam/components/audio_input/__init__.py +0 -18
  430. viam/components/audio_input/audio_input.py +0 -79
  431. viam/components/audio_input/client.py +0 -60
  432. viam/components/audio_input/service.py +0 -118
  433. viam/components/types.py +0 -5
  434. viam/gen/app/model/v1/model_grpc.py +0 -39
  435. viam/gen/app/model/v1/model_pb2.py +0 -71
  436. viam/gen/app/model/v1/model_pb2.pyi +0 -285
  437. viam/gen/proto/rpc/examples/fileupload/v1/fileupload_grpc.py +0 -21
  438. viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.py +0 -18
  439. viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.pyi +0 -49
  440. viam/media/media.py +0 -53
  441. viam/proto/app/model/__init__.py +0 -40
  442. viam/proto/rpc/examples/fileupload/__init__.py +0 -13
  443. viam/services/sensors/__init__.py +0 -5
  444. viam/services/sensors/client.py +0 -63
  445. viam_sdk-0.3.0.dist-info/LICENSE +0 -202
  446. viam_sdk-0.3.0.dist-info/METADATA +0 -122
  447. viam_sdk-0.3.0.dist-info/RECORD +0 -372
  448. /viam/{gen/app/model → app}/__init__.py +0 -0
  449. /viam/gen/app/{model/v1 → agent}/__init__.py +0 -0
  450. /viam/gen/{proto/rpc/examples/fileupload → app/agent/v1}/__init__.py +0 -0
  451. /viam/gen/{proto/rpc/examples/fileupload/v1 → app/cloudslam}/__init__.py +0 -0
  452. /LICENSE → /viam_sdk-0.66.0.dist-info/licenses/LICENSE +0 -0
@@ -3,7 +3,7 @@ from dataclasses import dataclass
3
3
  from typing import Any, Dict, Final, Optional, Tuple
4
4
 
5
5
  from viam.proto.component.encoder import PositionType
6
- from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, Subtype
6
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
7
7
 
8
8
  from ..component_base import ComponentBase
9
9
 
@@ -20,9 +20,17 @@ class Encoder(ComponentBase):
20
20
  This acts as an abstract base class for any drivers representing specific
21
21
  encoder implementations. This cannot be used on its own. If the ``__init__()`` function is
22
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/>`_.
23
29
  """
24
30
 
25
- SUBTYPE: Final = Subtype(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "encoder")
31
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
32
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "encoder"
33
+ )
26
34
 
27
35
  @abc.abstractmethod
28
36
  async def reset_position(
@@ -34,6 +42,16 @@ class Encoder(ComponentBase):
34
42
  ):
35
43
  """
36
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>`_.
37
55
  """
38
56
  ...
39
57
 
@@ -50,15 +68,27 @@ class Encoder(ComponentBase):
50
68
  Report the position of the encoder.
51
69
  The value returned is the current position in terms of it's ``position_type``.
52
70
  The position will be either in relative units (ticks away from a zero position) for
53
- ``PositionType.TICKS`` or absolute units (degrees along a circle) for ``PositionType.DEGREES``.
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])
54
81
 
55
82
  Args:
56
- position_type (PositionType.ValueType): The desired output type of the position
83
+ position_type (PositionType): The desired output type of the position.
57
84
 
58
85
  Returns:
59
- float: Position of the encoder which can either be ticks since last zeroing
60
- for a relative encoder or degrees for an absolute encoder.
61
- PositionType: The type of position the encoder returns (ticks or degrees)
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>`_.
62
92
  """
63
93
  ...
64
94
 
@@ -71,10 +101,18 @@ class Encoder(ComponentBase):
71
101
  **kwargs,
72
102
  ) -> Properties:
73
103
  """
74
- Report a dictionary mapping optional properties to
75
- whether it is supported by this encoder.
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()
76
112
 
77
113
  Returns:
78
- Properties: Map of position types to supported status.
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>`_.
79
117
  """
80
118
  ...
@@ -1,7 +1,6 @@
1
1
  from grpclib.server import Stream
2
2
 
3
- from viam.errors import ResourceNotFoundError
4
- from viam.proto.common import DoCommandRequest, DoCommandResponse
3
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
5
4
  from viam.proto.component.encoder import (
6
5
  EncoderServiceBase,
7
6
  GetPositionRequest,
@@ -28,10 +27,7 @@ class EncoderRPCService(EncoderServiceBase, ResourceRPCServiceBase[Encoder]):
28
27
  request = await stream.recv_message()
29
28
  assert request is not None
30
29
  name = request.name
31
- try:
32
- encoder = self.get_resource(name)
33
- except ResourceNotFoundError as e:
34
- raise e.grpc_error
30
+ encoder = self.get_resource(name)
35
31
  timeout = stream.deadline.time_remaining() if stream.deadline else None
36
32
  await encoder.reset_position(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
37
33
  await stream.send_message(ResetPositionResponse())
@@ -40,10 +36,7 @@ class EncoderRPCService(EncoderServiceBase, ResourceRPCServiceBase[Encoder]):
40
36
  request = await stream.recv_message()
41
37
  assert request is not None
42
38
  name = request.name
43
- try:
44
- encoder = self.get_resource(name)
45
- except ResourceNotFoundError as e:
46
- raise e.grpc_error
39
+ encoder = self.get_resource(name)
47
40
  timeout = stream.deadline.time_remaining() if stream.deadline else None
48
41
  position, pos_type = await encoder.get_position(
49
42
  position_type=request.position_type, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata
@@ -54,10 +47,7 @@ class EncoderRPCService(EncoderServiceBase, ResourceRPCServiceBase[Encoder]):
54
47
  request = await stream.recv_message()
55
48
  assert request is not None
56
49
  name = request.name
57
- try:
58
- encoder = self.get_resource(name)
59
- except ResourceNotFoundError as e:
60
- raise e.grpc_error
50
+ encoder = self.get_resource(name)
61
51
  timeout = stream.deadline.time_remaining() if stream.deadline else None
62
52
  properties = await encoder.get_properties(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
63
53
  response = GetPropertiesResponse(**properties.__dict__)
@@ -66,11 +56,17 @@ class EncoderRPCService(EncoderServiceBase, ResourceRPCServiceBase[Encoder]):
66
56
  async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
67
57
  request = await stream.recv_message()
68
58
  assert request is not None
69
- try:
70
- encoder = self.get_resource(request.name)
71
- except ResourceNotFoundError as e:
72
- raise e.grpc_error
59
+ encoder = self.get_resource(request.name)
73
60
  timeout = stream.deadline.time_remaining() if stream.deadline else None
74
61
  result = await encoder.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
75
62
  response = DoCommandResponse(result=dict_to_struct(result))
76
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)
@@ -1,9 +1,4 @@
1
- import asyncio
2
-
3
- from viam.proto.component.gantry import Status as GantryStatus
4
- from viam.proto.robot import Status
5
1
  from viam.resource.registry import Registry, ResourceRegistration
6
- from viam.utils import message_to_struct
7
2
 
8
3
  from .client import GantryClient
9
4
  from .gantry import Gantry
@@ -13,11 +8,4 @@ __all__ = [
13
8
  "Gantry",
14
9
  ]
15
10
 
16
-
17
- async def create_status(component: Gantry) -> Status:
18
- (positions_mm, lengths_mm, is_moving) = await asyncio.gather(component.get_position(), component.get_lengths(), component.is_moving())
19
- s = GantryStatus(positions_mm=positions_mm, lengths_mm=lengths_mm, is_moving=is_moving)
20
- return Status(name=Gantry.get_resource_name(component.name), status=message_to_struct(s))
21
-
22
-
23
- Registry.register_subtype(ResourceRegistration(Gantry, GantryRPCService, lambda name, channel: GantryClient(name, channel), create_status))
11
+ Registry.register_api(ResourceRegistration(Gantry, GantryRPCService, lambda name, channel: GantryClient(name, channel)))
@@ -1,21 +1,30 @@
1
- from typing import Any, Dict, List, 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 (
6
+ DoCommandRequest,
7
+ DoCommandResponse,
8
+ Geometry,
9
+ GetKinematicsRequest,
10
+ GetKinematicsResponse,
11
+ KinematicsFileFormat,
12
+ )
6
13
  from viam.proto.component.gantry import (
7
14
  GantryServiceStub,
8
15
  GetLengthsRequest,
9
16
  GetLengthsResponse,
10
17
  GetPositionRequest,
11
18
  GetPositionResponse,
19
+ HomeRequest,
20
+ HomeResponse,
12
21
  IsMovingRequest,
13
22
  IsMovingResponse,
14
23
  MoveToPositionRequest,
15
24
  StopRequest,
16
25
  )
17
26
  from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
18
- from viam.utils import ValueTypes, dict_to_struct, struct_to_dict
27
+ from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
19
28
 
20
29
  from .gantry import Gantry
21
30
 
@@ -30,46 +39,92 @@ class GantryClient(Gantry, ReconfigurableResourceRPCClientBase):
30
39
  self.client = GantryServiceStub(channel)
31
40
  super().__init__(name)
32
41
 
33
- async def get_position(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[float]:
34
- if extra is None:
35
- extra = {}
42
+ async def get_position(
43
+ self,
44
+ *,
45
+ extra: Optional[Dict[str, Any]] = None,
46
+ timeout: Optional[float] = None,
47
+ **kwargs,
48
+ ) -> List[float]:
49
+ md = kwargs.get("metadata", self.Metadata()).proto
36
50
  request = GetPositionRequest(name=self.name, extra=dict_to_struct(extra))
37
- response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout)
51
+ response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
38
52
  return list(response.positions_mm)
39
53
 
40
54
  async def move_to_position(
41
55
  self,
42
56
  positions: List[float],
57
+ speeds: List[float],
43
58
  *,
44
59
  extra: Optional[Dict[str, Any]] = None,
45
60
  timeout: Optional[float] = None,
61
+ **kwargs,
46
62
  ):
47
- if extra is None:
48
- extra = {}
49
- request = MoveToPositionRequest(name=self.name, positions_mm=positions, extra=dict_to_struct(extra))
50
- await self.client.MoveToPosition(request, timeout=timeout)
63
+ md = kwargs.get("metadata", self.Metadata()).proto
64
+ request = MoveToPositionRequest(name=self.name, positions_mm=positions, speeds_mm_per_sec=speeds, extra=dict_to_struct(extra))
65
+ await self.client.MoveToPosition(request, timeout=timeout, metadata=md)
66
+
67
+ async def home(
68
+ self,
69
+ *,
70
+ extra: Optional[Dict[str, Any]] = None,
71
+ timeout: Optional[float] = None,
72
+ **kwargs,
73
+ ) -> bool:
74
+ md = kwargs.get("metadata", self.Metadata()).proto
75
+ request = HomeRequest(name=self.name, extra=dict_to_struct(extra))
76
+ response: HomeResponse = await self.client.Home(request, timeout=timeout, metadata=md)
77
+ return response.homed
51
78
 
52
- async def get_lengths(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[float]:
53
- if extra is None:
54
- extra = {}
79
+ async def get_lengths(
80
+ self,
81
+ *,
82
+ extra: Optional[Dict[str, Any]] = None,
83
+ timeout: Optional[float] = None,
84
+ **kwargs,
85
+ ) -> List[float]:
86
+ md = kwargs.get("metadata", self.Metadata()).proto
55
87
  request = GetLengthsRequest(name=self.name, extra=dict_to_struct(extra))
56
- response: GetLengthsResponse = await self.client.GetLengths(request, timeout=timeout)
88
+ response: GetLengthsResponse = await self.client.GetLengths(request, timeout=timeout, metadata=md)
57
89
  return list(response.lengths_mm)
58
90
 
59
- async def stop(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None):
60
- if extra is None:
61
- extra = {}
91
+ async def stop(
92
+ self,
93
+ *,
94
+ extra: Optional[Dict[str, Any]] = None,
95
+ timeout: Optional[float] = None,
96
+ **kwargs,
97
+ ):
98
+ md = kwargs.get("metadata", self.Metadata()).proto
62
99
  request = StopRequest(name=self.name, extra=dict_to_struct(extra))
63
- await self.client.Stop(request, timeout=timeout)
100
+ await self.client.Stop(request, timeout=timeout, metadata=md)
64
101
 
65
- async def is_moving(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> bool:
66
- if extra is None:
67
- extra = {}
102
+ async def is_moving(self, *, timeout: Optional[float] = None, **kwargs) -> bool:
103
+ md = kwargs.get("metadata", self.Metadata()).proto
68
104
  request = IsMovingRequest(name=self.name)
69
- response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout)
105
+ response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout, metadata=md)
70
106
  return response.is_moving
71
107
 
72
- async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None) -> Mapping[str, ValueTypes]:
108
+ async def do_command(
109
+ self,
110
+ command: Mapping[str, ValueTypes],
111
+ *,
112
+ timeout: Optional[float] = None,
113
+ **kwargs,
114
+ ) -> Mapping[str, ValueTypes]:
115
+ md = kwargs.get("metadata", self.Metadata()).proto
73
116
  request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
74
- response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
117
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
75
118
  return struct_to_dict(response.result)
119
+
120
+ async def get_kinematics(
121
+ self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
122
+ ) -> Tuple[KinematicsFileFormat.ValueType, bytes]:
123
+ md = kwargs.get("metadata", self.Metadata()).proto
124
+ request = GetKinematicsRequest(name=self.name, extra=dict_to_struct(extra))
125
+ response: GetKinematicsResponse = await self.client.GetKinematics(request, timeout=timeout, metadata=md)
126
+ return (response.format, response.kinematics_data)
127
+
128
+ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
129
+ md = kwargs.get("metadata", self.Metadata())
130
+ return await get_geometries(self.client, self.name, extra, timeout, md)
@@ -1,7 +1,8 @@
1
1
  import abc
2
- from typing import Any, Dict, Final, List, Optional
2
+ from typing import Any, Dict, Final, List, Optional, Tuple
3
3
 
4
- from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, Subtype
4
+ from viam.components.arm import KinematicsFileFormat
5
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
5
6
 
6
7
  from ..component_base import ComponentBase
7
8
 
@@ -13,17 +14,34 @@ class Gantry(ComponentBase):
13
14
  This acts as an abstract base class for any drivers representing specific
14
15
  gantry implementations. This cannot be used on its own. If the ``__init__()`` function is
15
16
  overridden, it must call the ``super().__init__()`` function.
17
+
18
+ ::
19
+
20
+ from viam.components.gantry import Gantry
21
+
22
+ For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/gantry/>`_.
16
23
  """
17
24
 
18
- SUBTYPE: Final = Subtype(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "gantry")
25
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
26
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "gantry"
27
+ )
19
28
 
20
29
  @abc.abstractmethod
21
30
  async def get_position(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[float]:
22
31
  """
23
- Get the position in millimeters.
32
+ Get the positions of the axes of the gantry in millimeters.
33
+
34
+ ::
35
+
36
+ my_gantry = Gantry.from_robot(robot=machine, name="my_gantry")
37
+
38
+ # Get the current positions of the axes of the gantry in millimeters.
39
+ positions = await my_gantry.get_position()
24
40
 
25
41
  Returns:
26
- List[float]: The position of the axes.
42
+ List[float]: A list of the position of the axes of the gantry in millimeters.
43
+
44
+ For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/gantry/#getposition>`_.
27
45
  """
28
46
  ...
29
47
 
@@ -31,27 +49,70 @@ class Gantry(ComponentBase):
31
49
  async def move_to_position(
32
50
  self,
33
51
  positions: List[float],
52
+ speeds: List[float],
34
53
  *,
35
54
  extra: Optional[Dict[str, Any]] = None,
36
55
  timeout: Optional[float] = None,
37
56
  **kwargs,
38
57
  ):
39
58
  """
40
- Move the gantry to a new position.
59
+ Move the axes of the gantry to the desired positions (mm) at the requested speeds (mm/sec).
60
+
61
+ ::
62
+
63
+ my_gantry = Gantry.from_robot(robot=machine, name="my_gantry")
64
+
65
+ # Create a list of positions for the axes of the gantry to move to. Assume in
66
+ # this example that the gantry is multi-axis, with 3 axes.
67
+ examplePositions = [1, 2, 3]
68
+
69
+ exampleSpeeds = [3, 9, 12]
70
+
71
+ # Move the axes of the gantry to the positions specified.
72
+ await my_gantry.move_to_position(
73
+ positions=examplePositions, speeds=exampleSpeeds)
41
74
 
42
75
  Args:
43
- positions (List[float]): List of positions for the axes to move to,
44
- in millimeters.
76
+ positions (List[float]): A list of positions for the axes of the gantry to move to, in millimeters.
77
+ speeds (List[float]): A list of speeds in millimeters per second for the gantry to move at respective to each axis.
78
+
79
+ For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/gantry/#movetoposition>`_.
45
80
  """
46
81
  ...
47
82
 
83
+ @abc.abstractmethod
84
+ async def home(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> bool:
85
+ """
86
+ Run the homing sequence of the gantry to re-calibrate the axes with respect to the limit switches.
87
+
88
+ ::
89
+
90
+ my_gantry = Gantry.from_robot(robot=machine, name="my_gantry")
91
+
92
+ await my_gantry.home()
93
+
94
+ Returns:
95
+ bool: Whether the gantry has run the homing sequence successfully.
96
+
97
+ For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/gantry/#home>`_.
98
+ """
99
+
48
100
  @abc.abstractmethod
49
101
  async def get_lengths(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[float]:
50
102
  """
51
103
  Get the lengths of the axes of the gantry in millimeters.
52
104
 
105
+ ::
106
+
107
+ my_gantry = Gantry.from_robot(robot=machine, name="my_gantry")
108
+
109
+ # Get the lengths of the axes of the gantry in millimeters.
110
+ lengths_mm = await my_gantry.get_lengths()
111
+
53
112
  Returns:
54
- List[float]: The lengths of the axes.
113
+ List[float]: A list of the lengths of the axes of the gantry in millimeters.
114
+
115
+ For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/gantry/#getlengths>`_.
55
116
  """
56
117
  ...
57
118
 
@@ -59,6 +120,16 @@ class Gantry(ComponentBase):
59
120
  async def stop(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs):
60
121
  """
61
122
  Stop all motion of the gantry. It is assumed that the gantry stops immediately.
123
+
124
+ ::
125
+
126
+ my_gantry = Gantry.from_robot(robot=machine, name="my_gantry")
127
+
128
+ # Stop all motion of the gantry. It is assumed that the gantry stops
129
+ # immediately.
130
+ await my_gantry.stop()
131
+
132
+ For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/gantry/#stop>`_.
62
133
  """
63
134
  ...
64
135
 
@@ -67,7 +138,50 @@ class Gantry(ComponentBase):
67
138
  """
68
139
  Get if the gantry is currently moving.
69
140
 
141
+ ::
142
+
143
+ my_gantry = Gantry.from_robot(robot=machine, name="my_gantry")
144
+
145
+ # Stop all motion of the gantry. It is assumed that the
146
+ # gantry stops immediately.
147
+ await my_gantry.stop()
148
+
149
+ # Print if the gantry is currently moving.
150
+ print(await my_gantry.is_moving())
151
+
70
152
  Returns:
71
153
  bool: Whether the gantry is moving.
154
+
155
+ For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/gantry/#ismoving>`_.
156
+ """
157
+ ...
158
+
159
+ @abc.abstractmethod
160
+ async def get_kinematics(
161
+ self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
162
+ ) -> Tuple[KinematicsFileFormat.ValueType, bytes]:
163
+ """
164
+ Get the kinematics information associated with the gantry.
165
+
166
+ ::
167
+
168
+ my_gantry = Gantry.from_robot(robot=machine, name="my_gantry")
169
+
170
+ # Get the kinematics information associated with the gantry.
171
+ kinematics = await my_gantry.get_kinematics()
172
+
173
+ # Get the format of the kinematics file.
174
+ k_file = kinematics[0]
175
+
176
+ # Get the byte contents of the file.
177
+ k_bytes = kinematics[1]
178
+
179
+ Returns:
180
+ Tuple[KinematicsFileFormat.ValueType, bytes]: A tuple containing two values; the first [0] value represents the format of the
181
+ file, either in URDF format (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_URDF``) or
182
+ Viam's kinematic parameter format (spatial vector algebra) (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA``),
183
+ and the second [1] value represents the byte contents of the file.
184
+
185
+ For more information, see `Arm component <https://docs.viam.com/dev/reference/apis/components/arm/#getkinematics>`_.
72
186
  """
73
187
  ...
@@ -1,19 +1,27 @@
1
1
  from grpclib.server import Stream
2
2
 
3
- from viam.errors import ResourceNotFoundError
4
- from viam.proto.common import DoCommandRequest, DoCommandResponse
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.gantry import (
6
- GantryServiceBase,
7
12
  GetLengthsRequest,
8
13
  GetLengthsResponse,
9
14
  GetPositionRequest,
10
15
  GetPositionResponse,
16
+ HomeRequest,
17
+ HomeResponse,
11
18
  IsMovingRequest,
12
19
  IsMovingResponse,
13
20
  MoveToPositionRequest,
14
21
  MoveToPositionResponse,
15
22
  StopRequest,
16
23
  StopResponse,
24
+ UnimplementedGantryServiceBase,
17
25
  )
18
26
  from viam.resource.rpc_service_base import ResourceRPCServiceBase
19
27
  from viam.utils import dict_to_struct, struct_to_dict
@@ -21,7 +29,7 @@ from viam.utils import dict_to_struct, struct_to_dict
21
29
  from .gantry import Gantry
22
30
 
23
31
 
24
- class GantryRPCService(GantryServiceBase, ResourceRPCServiceBase[Gantry]):
32
+ class GantryRPCService(UnimplementedGantryServiceBase, ResourceRPCServiceBase[Gantry]):
25
33
  """
26
34
  gRPC Service for a Gantry
27
35
  """
@@ -32,10 +40,7 @@ class GantryRPCService(GantryServiceBase, ResourceRPCServiceBase[Gantry]):
32
40
  request = await stream.recv_message()
33
41
  assert request is not None
34
42
  name = request.name
35
- try:
36
- gantry = self.get_resource(name)
37
- except ResourceNotFoundError as e:
38
- raise e.grpc_error
43
+ gantry = self.get_resource(name)
39
44
  timeout = stream.deadline.time_remaining() if stream.deadline else None
40
45
  position = await gantry.get_position(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
41
46
  response = GetPositionResponse(positions_mm=position)
@@ -45,25 +50,33 @@ class GantryRPCService(GantryServiceBase, ResourceRPCServiceBase[Gantry]):
45
50
  request = await stream.recv_message()
46
51
  assert request is not None
47
52
  name = request.name
48
- try:
49
- gantry = self.get_resource(name)
50
- except ResourceNotFoundError as e:
51
- raise e.grpc_error
53
+ gantry = self.get_resource(name)
52
54
  timeout = stream.deadline.time_remaining() if stream.deadline else None
53
55
  await gantry.move_to_position(
54
- list(request.positions_mm), extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata
56
+ list(request.positions_mm),
57
+ list(request.speeds_mm_per_sec),
58
+ extra=struct_to_dict(request.extra),
59
+ timeout=timeout,
60
+ metadata=stream.metadata,
55
61
  )
56
62
  response = MoveToPositionResponse()
57
63
  await stream.send_message(response)
58
64
 
65
+ async def Home(self, stream: Stream[HomeRequest, HomeResponse]) -> None:
66
+ request = await stream.recv_message()
67
+ assert request is not None
68
+ name = request.name
69
+ gantry = self.get_resource(name)
70
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
71
+ homed = await gantry.home(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
72
+ response = HomeResponse(homed=homed)
73
+ await stream.send_message(response)
74
+
59
75
  async def GetLengths(self, stream: Stream[GetLengthsRequest, GetLengthsResponse]) -> None:
60
76
  request = await stream.recv_message()
61
77
  assert request is not None
62
78
  name = request.name
63
- try:
64
- gantry = self.get_resource(name)
65
- except ResourceNotFoundError as e:
66
- raise e.grpc_error
79
+ gantry = self.get_resource(name)
67
80
  timeout = stream.deadline.time_remaining() if stream.deadline else None
68
81
  lengths = await gantry.get_lengths(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
69
82
  response = GetLengthsResponse(lengths_mm=lengths)
@@ -73,10 +86,7 @@ class GantryRPCService(GantryServiceBase, ResourceRPCServiceBase[Gantry]):
73
86
  request = await stream.recv_message()
74
87
  assert request is not None
75
88
  name = request.name
76
- try:
77
- gantry = self.get_resource(name)
78
- except ResourceNotFoundError as e:
79
- raise e.grpc_error
89
+ gantry = self.get_resource(name)
80
90
  timeout = stream.deadline.time_remaining() if stream.deadline else None
81
91
  await gantry.stop(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
82
92
  response = StopResponse()
@@ -86,10 +96,7 @@ class GantryRPCService(GantryServiceBase, ResourceRPCServiceBase[Gantry]):
86
96
  request = await stream.recv_message()
87
97
  assert request is not None
88
98
  name = request.name
89
- try:
90
- gantry = self.get_resource(name)
91
- except ResourceNotFoundError as e:
92
- raise e.grpc_error
99
+ gantry = self.get_resource(name)
93
100
  is_moving = await gantry.is_moving()
94
101
  response = IsMovingResponse(is_moving=is_moving)
95
102
  await stream.send_message(response)
@@ -97,11 +104,26 @@ class GantryRPCService(GantryServiceBase, ResourceRPCServiceBase[Gantry]):
97
104
  async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
98
105
  request = await stream.recv_message()
99
106
  assert request is not None
100
- try:
101
- gantry = self.get_resource(request.name)
102
- except ResourceNotFoundError as e:
103
- raise e.grpc_error
107
+ gantry = self.get_resource(request.name)
104
108
  timeout = stream.deadline.time_remaining() if stream.deadline else None
105
109
  result = await gantry.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
106
110
  response = DoCommandResponse(result=dict_to_struct(result))
107
111
  await stream.send_message(response)
112
+
113
+ async def GetKinematics(self, stream: Stream[GetKinematicsRequest, GetKinematicsResponse]) -> None:
114
+ request = await stream.recv_message()
115
+ assert request is not None
116
+ gantry = self.get_resource(request.name)
117
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
118
+ format, data = await gantry.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
119
+ response = GetKinematicsResponse(format=format, kinematics_data=data)
120
+ await stream.send_message(response)
121
+
122
+ async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
123
+ request = await stream.recv_message()
124
+ assert request is not None
125
+ gantry = self.get_resource(request.name)
126
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
127
+ geometries = await gantry.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
128
+ response = GetGeometriesResponse(geometries=geometries)
129
+ await stream.send_message(response)