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.

Files changed (476) hide show
  1. viam/__init__.py +71 -0
  2. viam/app/__init__.py +0 -0
  3. viam/app/_logs.py +34 -0
  4. viam/app/app_client.py +2525 -0
  5. viam/app/billing_client.py +143 -0
  6. viam/app/data_client.py +1715 -0
  7. viam/app/ml_training_client.py +251 -0
  8. viam/app/provisioning_client.py +95 -0
  9. viam/app/viam_client.py +260 -0
  10. viam/components/__init__.py +0 -0
  11. viam/components/arm/__init__.py +16 -0
  12. viam/components/arm/arm.py +223 -0
  13. viam/components/arm/client.py +124 -0
  14. viam/components/arm/service.py +123 -0
  15. viam/components/audio_input/__init__.py +18 -0
  16. viam/components/audio_input/audio_input.py +81 -0
  17. viam/components/audio_input/client.py +70 -0
  18. viam/components/audio_input/service.py +114 -0
  19. viam/components/base/__init__.py +13 -0
  20. viam/components/base/base.py +260 -0
  21. viam/components/base/client.py +153 -0
  22. viam/components/base/service.py +138 -0
  23. viam/components/board/__init__.py +9 -0
  24. viam/components/board/board.py +414 -0
  25. viam/components/board/client.py +241 -0
  26. viam/components/board/service.py +223 -0
  27. viam/components/button/__init__.py +10 -0
  28. viam/components/button/button.py +41 -0
  29. viam/components/button/client.py +52 -0
  30. viam/components/button/service.py +46 -0
  31. viam/components/camera/__init__.py +22 -0
  32. viam/components/camera/camera.py +138 -0
  33. viam/components/camera/client.py +98 -0
  34. viam/components/camera/service.py +105 -0
  35. viam/components/component_base.py +65 -0
  36. viam/components/encoder/__init__.py +18 -0
  37. viam/components/encoder/client.py +83 -0
  38. viam/components/encoder/encoder.py +118 -0
  39. viam/components/encoder/service.py +72 -0
  40. viam/components/gantry/__init__.py +11 -0
  41. viam/components/gantry/client.py +115 -0
  42. viam/components/gantry/gantry.py +156 -0
  43. viam/components/gantry/service.py +113 -0
  44. viam/components/generic/__init__.py +18 -0
  45. viam/components/generic/client.py +62 -0
  46. viam/components/generic/generic.py +76 -0
  47. viam/components/generic/service.py +40 -0
  48. viam/components/gripper/__init__.py +11 -0
  49. viam/components/gripper/client.py +85 -0
  50. viam/components/gripper/gripper.py +114 -0
  51. viam/components/gripper/service.py +81 -0
  52. viam/components/input/__init__.py +15 -0
  53. viam/components/input/client.py +194 -0
  54. viam/components/input/input.py +297 -0
  55. viam/components/input/service.py +175 -0
  56. viam/components/motor/__init__.py +11 -0
  57. viam/components/motor/client.py +168 -0
  58. viam/components/motor/motor.py +301 -0
  59. viam/components/motor/service.py +150 -0
  60. viam/components/movement_sensor/__init__.py +21 -0
  61. viam/components/movement_sensor/client.py +161 -0
  62. viam/components/movement_sensor/movement_sensor.py +253 -0
  63. viam/components/movement_sensor/service.py +146 -0
  64. viam/components/pose_tracker/__init__.py +17 -0
  65. viam/components/pose_tracker/client.py +50 -0
  66. viam/components/pose_tracker/pose_tracker.py +40 -0
  67. viam/components/pose_tracker/service.py +45 -0
  68. viam/components/power_sensor/__init__.py +17 -0
  69. viam/components/power_sensor/client.py +86 -0
  70. viam/components/power_sensor/power_sensor.py +104 -0
  71. viam/components/power_sensor/service.py +72 -0
  72. viam/components/sensor/__init__.py +18 -0
  73. viam/components/sensor/client.py +49 -0
  74. viam/components/sensor/sensor.py +48 -0
  75. viam/components/sensor/service.py +51 -0
  76. viam/components/servo/__init__.py +11 -0
  77. viam/components/servo/client.py +86 -0
  78. viam/components/servo/service.py +80 -0
  79. viam/components/servo/servo.py +114 -0
  80. viam/components/switch/__init__.py +10 -0
  81. viam/components/switch/client.py +83 -0
  82. viam/components/switch/service.py +72 -0
  83. viam/components/switch/switch.py +95 -0
  84. viam/errors.py +105 -0
  85. viam/gen/__init__.py +0 -0
  86. viam/gen/app/__init__.py +0 -0
  87. viam/gen/app/agent/__init__.py +0 -0
  88. viam/gen/app/agent/v1/__init__.py +0 -0
  89. viam/gen/app/agent/v1/agent_grpc.py +29 -0
  90. viam/gen/app/agent/v1/agent_pb2.py +47 -0
  91. viam/gen/app/agent/v1/agent_pb2.pyi +280 -0
  92. viam/gen/app/cloudslam/__init__.py +0 -0
  93. viam/gen/app/cloudslam/v1/__init__.py +0 -0
  94. viam/gen/app/cloudslam/v1/cloud_slam_grpc.py +70 -0
  95. viam/gen/app/cloudslam/v1/cloud_slam_pb2.py +54 -0
  96. viam/gen/app/cloudslam/v1/cloud_slam_pb2.pyi +384 -0
  97. viam/gen/app/data/__init__.py +0 -0
  98. viam/gen/app/data/v1/__init__.py +0 -0
  99. viam/gen/app/data/v1/data_grpc.py +206 -0
  100. viam/gen/app/data/v1/data_pb2.py +178 -0
  101. viam/gen/app/data/v1/data_pb2.pyi +1485 -0
  102. viam/gen/app/datapipelines/__init__.py +0 -0
  103. viam/gen/app/datapipelines/v1/__init__.py +0 -0
  104. viam/gen/app/datapipelines/v1/data_pipelines_grpc.py +84 -0
  105. viam/gen/app/datapipelines/v1/data_pipelines_pb2.py +56 -0
  106. viam/gen/app/datapipelines/v1/data_pipelines_pb2.pyi +370 -0
  107. viam/gen/app/dataset/__init__.py +0 -0
  108. viam/gen/app/dataset/v1/__init__.py +0 -0
  109. viam/gen/app/dataset/v1/dataset_grpc.py +60 -0
  110. viam/gen/app/dataset/v1/dataset_pb2.py +40 -0
  111. viam/gen/app/dataset/v1/dataset_pb2.pyi +179 -0
  112. viam/gen/app/datasync/__init__.py +0 -0
  113. viam/gen/app/datasync/v1/__init__.py +0 -0
  114. viam/gen/app/datasync/v1/data_sync_grpc.py +47 -0
  115. viam/gen/app/datasync/v1/data_sync_pb2.py +70 -0
  116. viam/gen/app/datasync/v1/data_sync_pb2.pyi +425 -0
  117. viam/gen/app/mlinference/__init__.py +0 -0
  118. viam/gen/app/mlinference/v1/__init__.py +0 -0
  119. viam/gen/app/mlinference/v1/ml_inference_grpc.py +28 -0
  120. viam/gen/app/mlinference/v1/ml_inference_pb2.py +23 -0
  121. viam/gen/app/mlinference/v1/ml_inference_pb2.pyi +63 -0
  122. viam/gen/app/mltraining/__init__.py +0 -0
  123. viam/gen/app/mltraining/v1/__init__.py +0 -0
  124. viam/gen/app/mltraining/v1/ml_training_grpc.py +78 -0
  125. viam/gen/app/mltraining/v1/ml_training_pb2.py +124 -0
  126. viam/gen/app/mltraining/v1/ml_training_pb2.pyi +415 -0
  127. viam/gen/app/packages/__init__.py +0 -0
  128. viam/gen/app/packages/v1/__init__.py +0 -0
  129. viam/gen/app/packages/v1/packages_grpc.py +54 -0
  130. viam/gen/app/packages/v1/packages_pb2.py +52 -0
  131. viam/gen/app/packages/v1/packages_pb2.pyi +311 -0
  132. viam/gen/app/v1/__init__.py +0 -0
  133. viam/gen/app/v1/app_grpc.py +863 -0
  134. viam/gen/app/v1/app_pb2.py +649 -0
  135. viam/gen/app/v1/app_pb2.pyi +5279 -0
  136. viam/gen/app/v1/billing_grpc.py +76 -0
  137. viam/gen/app/v1/billing_pb2.py +92 -0
  138. viam/gen/app/v1/billing_pb2.pyi +463 -0
  139. viam/gen/app/v1/end_user_grpc.py +59 -0
  140. viam/gen/app/v1/end_user_pb2.py +55 -0
  141. viam/gen/app/v1/end_user_pb2.pyi +181 -0
  142. viam/gen/app/v1/robot_grpc.py +55 -0
  143. viam/gen/app/v1/robot_pb2.py +127 -0
  144. viam/gen/app/v1/robot_pb2.pyi +1202 -0
  145. viam/gen/common/__init__.py +0 -0
  146. viam/gen/common/v1/__init__.py +0 -0
  147. viam/gen/common/v1/common_grpc.py +0 -0
  148. viam/gen/common/v1/common_pb2.py +78 -0
  149. viam/gen/common/v1/common_pb2.pyi +687 -0
  150. viam/gen/component/__init__.py +0 -0
  151. viam/gen/component/arm/__init__.py +0 -0
  152. viam/gen/component/arm/v1/__init__.py +0 -0
  153. viam/gen/component/arm/v1/arm_grpc.py +102 -0
  154. viam/gen/component/arm/v1/arm_pb2.py +74 -0
  155. viam/gen/component/arm/v1/arm_pb2.pyi +344 -0
  156. viam/gen/component/audioinput/__init__.py +0 -0
  157. viam/gen/component/audioinput/v1/__init__.py +0 -0
  158. viam/gen/component/audioinput/v1/audioinput_grpc.py +63 -0
  159. viam/gen/component/audioinput/v1/audioinput_pb2.py +45 -0
  160. viam/gen/component/audioinput/v1/audioinput_pb2.pyi +179 -0
  161. viam/gen/component/base/__init__.py +0 -0
  162. viam/gen/component/base/v1/__init__.py +0 -0
  163. viam/gen/component/base/v1/base_grpc.py +94 -0
  164. viam/gen/component/base/v1/base_pb2.py +66 -0
  165. viam/gen/component/base/v1/base_pb2.pyi +258 -0
  166. viam/gen/component/board/__init__.py +0 -0
  167. viam/gen/component/board/v1/__init__.py +0 -0
  168. viam/gen/component/board/v1/board_grpc.py +127 -0
  169. viam/gen/component/board/v1/board_pb2.py +103 -0
  170. viam/gen/component/board/v1/board_pb2.pyi +496 -0
  171. viam/gen/component/button/__init__.py +0 -0
  172. viam/gen/component/button/v1/__init__.py +0 -0
  173. viam/gen/component/button/v1/button_grpc.py +38 -0
  174. viam/gen/component/button/v1/button_pb2.py +28 -0
  175. viam/gen/component/button/v1/button_pb2.pyi +39 -0
  176. viam/gen/component/camera/__init__.py +0 -0
  177. viam/gen/component/camera/v1/__init__.py +0 -0
  178. viam/gen/component/camera/v1/camera_grpc.py +79 -0
  179. viam/gen/component/camera/v1/camera_pb2.py +67 -0
  180. viam/gen/component/camera/v1/camera_pb2.pyi +373 -0
  181. viam/gen/component/encoder/__init__.py +0 -0
  182. viam/gen/component/encoder/v1/__init__.py +0 -0
  183. viam/gen/component/encoder/v1/encoder_grpc.py +62 -0
  184. viam/gen/component/encoder/v1/encoder_pb2.py +44 -0
  185. viam/gen/component/encoder/v1/encoder_pb2.pyi +147 -0
  186. viam/gen/component/gantry/__init__.py +0 -0
  187. viam/gen/component/gantry/v1/__init__.py +0 -0
  188. viam/gen/component/gantry/v1/gantry_grpc.py +86 -0
  189. viam/gen/component/gantry/v1/gantry_pb2.py +62 -0
  190. viam/gen/component/gantry/v1/gantry_pb2.pyi +239 -0
  191. viam/gen/component/generic/__init__.py +0 -0
  192. viam/gen/component/generic/v1/__init__.py +0 -0
  193. viam/gen/component/generic/v1/generic_grpc.py +37 -0
  194. viam/gen/component/generic/v1/generic_pb2.py +23 -0
  195. viam/gen/component/generic/v1/generic_pb2.pyi +6 -0
  196. viam/gen/component/gripper/__init__.py +0 -0
  197. viam/gen/component/gripper/v1/__init__.py +0 -0
  198. viam/gen/component/gripper/v1/gripper_grpc.py +70 -0
  199. viam/gen/component/gripper/v1/gripper_pb2.py +48 -0
  200. viam/gen/component/gripper/v1/gripper_pb2.pyi +137 -0
  201. viam/gen/component/inputcontroller/__init__.py +0 -0
  202. viam/gen/component/inputcontroller/v1/__init__.py +0 -0
  203. viam/gen/component/inputcontroller/v1/input_controller_grpc.py +71 -0
  204. viam/gen/component/inputcontroller/v1/input_controller_pb2.py +55 -0
  205. viam/gen/component/inputcontroller/v1/input_controller_pb2.pyi +243 -0
  206. viam/gen/component/motor/__init__.py +0 -0
  207. viam/gen/component/motor/v1/__init__.py +0 -0
  208. viam/gen/component/motor/v1/motor_grpc.py +118 -0
  209. viam/gen/component/motor/v1/motor_pb2.py +86 -0
  210. viam/gen/component/motor/v1/motor_pb2.pyi +368 -0
  211. viam/gen/component/movementsensor/__init__.py +0 -0
  212. viam/gen/component/movementsensor/v1/__init__.py +0 -0
  213. viam/gen/component/movementsensor/v1/movementsensor_grpc.py +110 -0
  214. viam/gen/component/movementsensor/v1/movementsensor_pb2.py +78 -0
  215. viam/gen/component/movementsensor/v1/movementsensor_pb2.pyi +384 -0
  216. viam/gen/component/posetracker/__init__.py +0 -0
  217. viam/gen/component/posetracker/v1/__init__.py +0 -0
  218. viam/gen/component/posetracker/v1/pose_tracker_grpc.py +46 -0
  219. viam/gen/component/posetracker/v1/pose_tracker_pb2.py +34 -0
  220. viam/gen/component/posetracker/v1/pose_tracker_pb2.pyi +79 -0
  221. viam/gen/component/powersensor/__init__.py +0 -0
  222. viam/gen/component/powersensor/v1/__init__.py +0 -0
  223. viam/gen/component/powersensor/v1/powersensor_grpc.py +62 -0
  224. viam/gen/component/powersensor/v1/powersensor_pb2.py +42 -0
  225. viam/gen/component/powersensor/v1/powersensor_pb2.pyi +124 -0
  226. viam/gen/component/sensor/__init__.py +0 -0
  227. viam/gen/component/sensor/v1/__init__.py +0 -0
  228. viam/gen/component/sensor/v1/sensor_grpc.py +45 -0
  229. viam/gen/component/sensor/v1/sensor_pb2.py +25 -0
  230. viam/gen/component/sensor/v1/sensor_pb2.pyi +6 -0
  231. viam/gen/component/servo/__init__.py +0 -0
  232. viam/gen/component/servo/v1/__init__.py +0 -0
  233. viam/gen/component/servo/v1/servo_grpc.py +70 -0
  234. viam/gen/component/servo/v1/servo_pb2.py +50 -0
  235. viam/gen/component/servo/v1/servo_pb2.pyi +150 -0
  236. viam/gen/component/switch/__init__.py +0 -0
  237. viam/gen/component/switch/v1/__init__.py +0 -0
  238. viam/gen/component/switch/v1/switch_grpc.py +54 -0
  239. viam/gen/component/switch/v1/switch_pb2.py +40 -0
  240. viam/gen/component/switch/v1/switch_pb2.pyi +109 -0
  241. viam/gen/component/testecho/__init__.py +0 -0
  242. viam/gen/component/testecho/v1/__init__.py +0 -0
  243. viam/gen/component/testecho/v1/testecho_grpc.py +52 -0
  244. viam/gen/component/testecho/v1/testecho_pb2.py +36 -0
  245. viam/gen/component/testecho/v1/testecho_pb2.pyi +114 -0
  246. viam/gen/module/__init__.py +0 -0
  247. viam/gen/module/v1/__init__.py +0 -0
  248. viam/gen/module/v1/module_grpc.py +61 -0
  249. viam/gen/module/v1/module_pb2.py +43 -0
  250. viam/gen/module/v1/module_pb2.pyi +211 -0
  251. viam/gen/proto/__init__.py +0 -0
  252. viam/gen/proto/rpc/__init__.py +0 -0
  253. viam/gen/proto/rpc/examples/__init__.py +0 -0
  254. viam/gen/proto/rpc/examples/echo/__init__.py +0 -0
  255. viam/gen/proto/rpc/examples/echo/v1/__init__.py +0 -0
  256. viam/gen/proto/rpc/examples/echo/v1/echo_grpc.py +44 -0
  257. viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +32 -0
  258. viam/gen/proto/rpc/examples/echo/v1/echo_pb2.pyi +87 -0
  259. viam/gen/proto/rpc/examples/echoresource/__init__.py +0 -0
  260. viam/gen/proto/rpc/examples/echoresource/v1/__init__.py +0 -0
  261. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_grpc.py +43 -0
  262. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +29 -0
  263. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.pyi +93 -0
  264. viam/gen/proto/rpc/v1/__init__.py +0 -0
  265. viam/gen/proto/rpc/v1/auth_grpc.py +47 -0
  266. viam/gen/proto/rpc/v1/auth_pb2.py +34 -0
  267. viam/gen/proto/rpc/v1/auth_pb2.pyi +92 -0
  268. viam/gen/proto/rpc/webrtc/__init__.py +0 -0
  269. viam/gen/proto/rpc/webrtc/v1/__init__.py +0 -0
  270. viam/gen/proto/rpc/webrtc/v1/grpc_grpc.py +0 -0
  271. viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +43 -0
  272. viam/gen/proto/rpc/webrtc/v1/grpc_pb2.pyi +304 -0
  273. viam/gen/proto/rpc/webrtc/v1/signaling_grpc.py +54 -0
  274. viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +70 -0
  275. viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +496 -0
  276. viam/gen/provisioning/__init__.py +0 -0
  277. viam/gen/provisioning/v1/__init__.py +0 -0
  278. viam/gen/provisioning/v1/provisioning_grpc.py +51 -0
  279. viam/gen/provisioning/v1/provisioning_pb2.py +39 -0
  280. viam/gen/provisioning/v1/provisioning_pb2.pyi +188 -0
  281. viam/gen/robot/__init__.py +0 -0
  282. viam/gen/robot/v1/__init__.py +0 -0
  283. viam/gen/robot/v1/robot_grpc.py +208 -0
  284. viam/gen/robot/v1/robot_pb2.py +188 -0
  285. viam/gen/robot/v1/robot_pb2.pyi +1020 -0
  286. viam/gen/service/__init__.py +0 -0
  287. viam/gen/service/datamanager/__init__.py +0 -0
  288. viam/gen/service/datamanager/v1/__init__.py +0 -0
  289. viam/gen/service/datamanager/v1/data_manager_grpc.py +38 -0
  290. viam/gen/service/datamanager/v1/data_manager_pb2.py +28 -0
  291. viam/gen/service/datamanager/v1/data_manager_pb2.pyi +39 -0
  292. viam/gen/service/discovery/__init__.py +0 -0
  293. viam/gen/service/discovery/v1/__init__.py +0 -0
  294. viam/gen/service/discovery/v1/discovery_grpc.py +39 -0
  295. viam/gen/service/discovery/v1/discovery_pb2.py +29 -0
  296. viam/gen/service/discovery/v1/discovery_pb2.pyi +51 -0
  297. viam/gen/service/generic/__init__.py +0 -0
  298. viam/gen/service/generic/v1/__init__.py +0 -0
  299. viam/gen/service/generic/v1/generic_grpc.py +29 -0
  300. viam/gen/service/generic/v1/generic_pb2.py +21 -0
  301. viam/gen/service/generic/v1/generic_pb2.pyi +6 -0
  302. viam/gen/service/mlmodel/__init__.py +0 -0
  303. viam/gen/service/mlmodel/v1/__init__.py +0 -0
  304. viam/gen/service/mlmodel/v1/mlmodel_grpc.py +37 -0
  305. viam/gen/service/mlmodel/v1/mlmodel_pb2.py +83 -0
  306. viam/gen/service/mlmodel/v1/mlmodel_pb2.pyi +480 -0
  307. viam/gen/service/motion/__init__.py +0 -0
  308. viam/gen/service/motion/v1/__init__.py +0 -0
  309. viam/gen/service/motion/v1/motion_grpc.py +87 -0
  310. viam/gen/service/motion/v1/motion_pb2.py +97 -0
  311. viam/gen/service/motion/v1/motion_pb2.pyi +838 -0
  312. viam/gen/service/navigation/__init__.py +0 -0
  313. viam/gen/service/navigation/v1/__init__.py +0 -0
  314. viam/gen/service/navigation/v1/navigation_grpc.py +102 -0
  315. viam/gen/service/navigation/v1/navigation_pb2.py +84 -0
  316. viam/gen/service/navigation/v1/navigation_pb2.pyi +419 -0
  317. viam/gen/service/sensors/__init__.py +0 -0
  318. viam/gen/service/sensors/v1/__init__.py +0 -0
  319. viam/gen/service/sensors/v1/sensors_grpc.py +46 -0
  320. viam/gen/service/sensors/v1/sensors_pb2.py +68 -0
  321. viam/gen/service/sensors/v1/sensors_pb2.pyi +137 -0
  322. viam/gen/service/shell/__init__.py +0 -0
  323. viam/gen/service/shell/v1/__init__.py +0 -0
  324. viam/gen/service/shell/v1/shell_grpc.py +55 -0
  325. viam/gen/service/shell/v1/shell_pb2.py +45 -0
  326. viam/gen/service/shell/v1/shell_pb2.pyi +307 -0
  327. viam/gen/service/slam/__init__.py +0 -0
  328. viam/gen/service/slam/v1/__init__.py +0 -0
  329. viam/gen/service/slam/v1/slam_grpc.py +61 -0
  330. viam/gen/service/slam/v1/slam_pb2.py +51 -0
  331. viam/gen/service/slam/v1/slam_pb2.pyi +213 -0
  332. viam/gen/service/vision/__init__.py +0 -0
  333. viam/gen/service/vision/v1/__init__.py +0 -0
  334. viam/gen/service/vision/v1/vision_grpc.py +87 -0
  335. viam/gen/service/vision/v1/vision_pb2.py +69 -0
  336. viam/gen/service/vision/v1/vision_pb2.pyi +454 -0
  337. viam/gen/stream/__init__.py +0 -0
  338. viam/gen/stream/v1/__init__.py +0 -0
  339. viam/gen/stream/v1/stream_grpc.py +59 -0
  340. viam/gen/stream/v1/stream_pb2.py +39 -0
  341. viam/gen/stream/v1/stream_pb2.pyi +161 -0
  342. viam/gen/tagger/__init__.py +0 -0
  343. viam/gen/tagger/v1/__init__.py +0 -0
  344. viam/gen/tagger/v1/tagger_grpc.py +0 -0
  345. viam/gen/tagger/v1/tagger_pb2.py +16 -0
  346. viam/gen/tagger/v1/tagger_pb2.pyi +15 -0
  347. viam/logging.py +216 -0
  348. viam/media/__init__.py +0 -0
  349. viam/media/audio.py +16 -0
  350. viam/media/utils/__init__.py +0 -0
  351. viam/media/utils/pil/__init__.py +51 -0
  352. viam/media/utils/pil/viam_rgba_plugin.py +73 -0
  353. viam/media/viam_rgba.py +10 -0
  354. viam/media/video.py +217 -0
  355. viam/module/__init__.py +5 -0
  356. viam/module/module.py +281 -0
  357. viam/module/service.py +66 -0
  358. viam/module/types.py +23 -0
  359. viam/operations.py +124 -0
  360. viam/proto/__init__.py +0 -0
  361. viam/proto/app/__init__.py +554 -0
  362. viam/proto/app/agent/__init__.py +28 -0
  363. viam/proto/app/billing.py +58 -0
  364. viam/proto/app/cloudslam/__init__.py +48 -0
  365. viam/proto/app/data/__init__.py +138 -0
  366. viam/proto/app/datapipelines/__init__.py +56 -0
  367. viam/proto/app/dataset/__init__.py +36 -0
  368. viam/proto/app/datasync/__init__.py +44 -0
  369. viam/proto/app/end_user.py +34 -0
  370. viam/proto/app/mlinference/__init__.py +15 -0
  371. viam/proto/app/mltraining/__init__.py +52 -0
  372. viam/proto/app/packages/__init__.py +38 -0
  373. viam/proto/app/robot.py +84 -0
  374. viam/proto/common/__init__.py +66 -0
  375. viam/proto/component/__init__.py +0 -0
  376. viam/proto/component/arm/__init__.py +48 -0
  377. viam/proto/component/audioinput/__init__.py +30 -0
  378. viam/proto/component/base/__init__.py +42 -0
  379. viam/proto/component/board/__init__.py +62 -0
  380. viam/proto/component/button/__init__.py +15 -0
  381. viam/proto/component/camera/__init__.py +46 -0
  382. viam/proto/component/encoder/__init__.py +28 -0
  383. viam/proto/component/gantry/__init__.py +40 -0
  384. viam/proto/component/generic/__init__.py +12 -0
  385. viam/proto/component/gripper/__init__.py +30 -0
  386. viam/proto/component/inputcontroller/__init__.py +38 -0
  387. viam/proto/component/motor/__init__.py +56 -0
  388. viam/proto/component/movementsensor/__init__.py +50 -0
  389. viam/proto/component/posetracker/__init__.py +19 -0
  390. viam/proto/component/powersensor/__init__.py +30 -0
  391. viam/proto/component/sensor/__init__.py +12 -0
  392. viam/proto/component/servo/__init__.py +32 -0
  393. viam/proto/component/switch/__init__.py +26 -0
  394. viam/proto/component/testecho/__init__.py +30 -0
  395. viam/proto/module/__init__.py +38 -0
  396. viam/proto/provisioning/__init__.py +36 -0
  397. viam/proto/robot/__init__.py +130 -0
  398. viam/proto/rpc/__init__.py +0 -0
  399. viam/proto/rpc/auth.py +34 -0
  400. viam/proto/rpc/examples/__init__.py +0 -0
  401. viam/proto/rpc/examples/echo/__init__.py +26 -0
  402. viam/proto/rpc/examples/echoresource/__init__.py +30 -0
  403. viam/proto/rpc/webrtc/__init__.py +0 -0
  404. viam/proto/rpc/webrtc/grpc.py +36 -0
  405. viam/proto/rpc/webrtc/signaling.py +58 -0
  406. viam/proto/service/__init__.py +0 -0
  407. viam/proto/service/datamanager/__init__.py +19 -0
  408. viam/proto/service/discovery/__init__.py +15 -0
  409. viam/proto/service/generic/__init__.py +12 -0
  410. viam/proto/service/mlmodel/__init__.py +54 -0
  411. viam/proto/service/motion/__init__.py +68 -0
  412. viam/proto/service/navigation/__init__.py +58 -0
  413. viam/proto/service/sensors/__init__.py +18 -0
  414. viam/proto/service/shell/__init__.py +36 -0
  415. viam/proto/service/slam/__init__.py +36 -0
  416. viam/proto/service/vision/__init__.py +46 -0
  417. viam/proto/stream/__init__.py +36 -0
  418. viam/proto/tagger/__init__.py +6 -0
  419. viam/py.typed +0 -0
  420. viam/resource/__init__.py +0 -0
  421. viam/resource/base.py +123 -0
  422. viam/resource/easy_resource.py +153 -0
  423. viam/resource/manager.py +126 -0
  424. viam/resource/registry.py +199 -0
  425. viam/resource/rpc_client_base.py +65 -0
  426. viam/resource/rpc_service_base.py +48 -0
  427. viam/resource/types.py +213 -0
  428. viam/robot/__init__.py +0 -0
  429. viam/robot/client.py +909 -0
  430. viam/robot/service.py +69 -0
  431. viam/rpc/__init__.py +0 -0
  432. viam/rpc/dial.py +420 -0
  433. viam/rpc/libviam_rust_utils.dll +0 -0
  434. viam/rpc/server.py +201 -0
  435. viam/rpc/signaling.py +29 -0
  436. viam/rpc/types.py +22 -0
  437. viam/services/__init__.py +0 -0
  438. viam/services/discovery/__init__.py +12 -0
  439. viam/services/discovery/client.py +55 -0
  440. viam/services/discovery/discovery.py +52 -0
  441. viam/services/discovery/service.py +43 -0
  442. viam/services/generic/__init__.py +18 -0
  443. viam/services/generic/client.py +58 -0
  444. viam/services/generic/generic.py +58 -0
  445. viam/services/generic/service.py +29 -0
  446. viam/services/mlmodel/__init__.py +24 -0
  447. viam/services/mlmodel/client.py +37 -0
  448. viam/services/mlmodel/mlmodel.py +78 -0
  449. viam/services/mlmodel/service.py +38 -0
  450. viam/services/mlmodel/utils.py +101 -0
  451. viam/services/motion/__init__.py +17 -0
  452. viam/services/motion/client.py +215 -0
  453. viam/services/motion/motion.py +378 -0
  454. viam/services/motion/service.py +132 -0
  455. viam/services/navigation/__init__.py +11 -0
  456. viam/services/navigation/client.py +99 -0
  457. viam/services/navigation/navigation.py +250 -0
  458. viam/services/navigation/service.py +137 -0
  459. viam/services/service_base.py +78 -0
  460. viam/services/service_client_base.py +46 -0
  461. viam/services/slam/__init__.py +17 -0
  462. viam/services/slam/client.py +62 -0
  463. viam/services/slam/service.py +75 -0
  464. viam/services/slam/slam.py +111 -0
  465. viam/services/vision/__init__.py +15 -0
  466. viam/services/vision/client.py +206 -0
  467. viam/services/vision/service.py +146 -0
  468. viam/services/vision/vision.py +315 -0
  469. viam/sessions_client.py +245 -0
  470. viam/streams.py +44 -0
  471. viam/utils.py +365 -0
  472. viam/version_metadata.py +4 -0
  473. viam_sdk-0.45.2.dist-info/METADATA +157 -0
  474. viam_sdk-0.45.2.dist-info/RECORD +476 -0
  475. viam_sdk-0.45.2.dist-info/WHEEL +4 -0
  476. viam_sdk-0.45.2.dist-info/licenses/LICENSE +202 -0
@@ -0,0 +1,175 @@
1
+ import asyncio
2
+ from multiprocessing import Pipe
3
+ from typing import Optional
4
+
5
+ from grpclib.server import Stream
6
+ from h2.exceptions import StreamClosedError
7
+
8
+ import viam
9
+ from viam.errors import NotSupportedError
10
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
11
+ from viam.proto.component.inputcontroller import (
12
+ GetControlsRequest,
13
+ GetControlsResponse,
14
+ GetEventsRequest,
15
+ GetEventsResponse,
16
+ InputControllerServiceBase,
17
+ StreamEventsRequest,
18
+ StreamEventsResponse,
19
+ TriggerEventRequest,
20
+ TriggerEventResponse,
21
+ )
22
+ from viam.resource.rpc_service_base import ResourceRPCServiceBase
23
+ from viam.utils import dict_to_struct, struct_to_dict
24
+
25
+ from .input import Control, Controller, Event, EventType
26
+
27
+ LOGGER = viam.logging.getLogger(__name__)
28
+
29
+
30
+ class InputControllerRPCService(InputControllerServiceBase, ResourceRPCServiceBase[Controller]):
31
+ """
32
+ gRPC Service for an input controller
33
+ """
34
+
35
+ RESOURCE_TYPE = Controller
36
+
37
+ async def GetControls(self, stream: Stream[GetControlsRequest, GetControlsResponse]) -> None:
38
+ request = await stream.recv_message()
39
+ assert request is not None
40
+ name = request.controller
41
+ controller = self.get_resource(name)
42
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
43
+ controls = await controller.get_controls(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
44
+ response = GetControlsResponse(controls=[c.value for c in controls])
45
+ await stream.send_message(response)
46
+
47
+ async def GetEvents(self, stream: Stream[GetEventsRequest, GetEventsResponse]) -> None:
48
+ request = await stream.recv_message()
49
+ assert request is not None
50
+ name = request.controller
51
+ controller = self.get_resource(name)
52
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
53
+ events = await controller.get_events(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
54
+ pb_events = [e.proto for e in events.values()]
55
+ response = GetEventsResponse(events=pb_events)
56
+ await stream.send_message(response)
57
+
58
+ async def StreamEvents(self, stream: Stream[StreamEventsRequest, StreamEventsResponse]) -> None:
59
+ request = await stream.recv_message()
60
+ assert request is not None
61
+ name = request.controller
62
+ controller = self.get_resource(name)
63
+
64
+ loop = asyncio.get_running_loop()
65
+ # Using Pipes to send event data back to this function so it can be streamed to clients
66
+ # The write pipe is added to the callbacks for a control, so whenever that control sends a watched event,
67
+ # that event is sent through the pipe, where it will be read (further down) and sent over the stream
68
+ pipe_r, pipe_w = Pipe(duplex=False)
69
+
70
+ def ctrlFunc(event: Event):
71
+ try:
72
+ pipe_w.send(event)
73
+ except Exception as e:
74
+ LOGGER.error(e)
75
+ cleanup(e)
76
+
77
+ # Register the pipe callbacks
78
+ for event in request.events:
79
+ triggers = [EventType(et) for et in event.events]
80
+ if len(triggers):
81
+ controller.register_control_callback(
82
+ Control(event.control),
83
+ triggers,
84
+ ctrlFunc,
85
+ extra=struct_to_dict(request.extra),
86
+ )
87
+
88
+ cancelled_triggers = [EventType(et) for et in event.cancelled_events]
89
+ if len(cancelled_triggers):
90
+ controller.register_control_callback(
91
+ Control(event.control),
92
+ cancelled_triggers,
93
+ None,
94
+ extra=struct_to_dict(request.extra),
95
+ )
96
+
97
+ # Asynchronously wait for messages to come over the read pipe and run the READ function whenever the pipe is ready.
98
+ def read():
99
+ ev: Event = pipe_r.recv()
100
+ pb_ev = ev.proto
101
+ response = StreamEventsResponse(event=pb_ev)
102
+
103
+ async def send_message():
104
+ try:
105
+ stream._cancel_done = False # Undo hack, see below
106
+ await stream.send_message(response)
107
+ except StreamClosedError:
108
+ cleanup()
109
+ except Exception as e:
110
+ cleanup(e)
111
+
112
+ loop.create_task(send_message(), name=f"{viam._TASK_PREFIX}-input_send_event")
113
+
114
+ loop.add_reader(pipe_r, read)
115
+
116
+ # HACK: Keep the stream open when this function returns.
117
+ # When the StreamEvents function returns, the Stream is closed. But we don't want the stream to close because we still need
118
+ # to send events to any clients who have registered callbacks.
119
+ # By setting ``stream._cancel_done`` to ``True``, this tricks grpclib into thinking it already closed the stream, so it doesn't
120
+ # perform any cleanup (like removing the stream). We eventually do want to actually close this stream, so we undo this hack
121
+ # every time we send a message. That way, the trailing metadata is sent when either the server closes or the client disconnects.
122
+ stream._cancel_done = True
123
+
124
+ # Remove ctrl functions when this stream is closed
125
+ def cleanup(exc: Optional[Exception] = None):
126
+ loop.remove_reader(pipe_r)
127
+ pipe_w.close()
128
+ pipe_r.close()
129
+ unregister_pipe_callbacks()
130
+ asyncio.create_task(stream.__aexit__(None, exc, None))
131
+
132
+ def unregister_pipe_callbacks():
133
+ for event in request.events:
134
+ triggers = [EventType(et) for et in event.events]
135
+ if len(triggers):
136
+ controller.register_control_callback(
137
+ Control(event.control),
138
+ triggers,
139
+ None,
140
+ extra=struct_to_dict(request.extra),
141
+ )
142
+
143
+ async def TriggerEvent(self, stream: Stream[TriggerEventRequest, TriggerEventResponse]) -> None:
144
+ request = await stream.recv_message()
145
+ assert request is not None
146
+ name = request.controller
147
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
148
+ controller = self.get_resource(name)
149
+ try:
150
+ pb_event = request.event
151
+ event = Event.from_proto(pb_event)
152
+ await controller.trigger_event(event, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
153
+ except NotSupportedError as e:
154
+ raise e.grpc_error
155
+
156
+ response = TriggerEventResponse()
157
+ await stream.send_message(response)
158
+
159
+ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
160
+ request = await stream.recv_message()
161
+ assert request is not None
162
+ controller = self.get_resource(request.name)
163
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
164
+ result = await controller.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
165
+ response = DoCommandResponse(result=dict_to_struct(result))
166
+ await stream.send_message(response)
167
+
168
+ async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
169
+ request = await stream.recv_message()
170
+ assert request is not None
171
+ arm = self.get_resource(request.name)
172
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
173
+ geometries = await arm.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
174
+ response = GetGeometriesResponse(geometries=geometries)
175
+ await stream.send_message(response)
@@ -0,0 +1,11 @@
1
+ from viam.resource.registry import Registry, ResourceRegistration
2
+
3
+ from .client import MotorClient
4
+ from .motor import Motor
5
+ from .service import MotorRPCService
6
+
7
+ __all__ = [
8
+ "Motor",
9
+ ]
10
+
11
+ Registry.register_api(ResourceRegistration(Motor, MotorRPCService, lambda name, channel: MotorClient(name, channel)))
@@ -0,0 +1,168 @@
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.motor import (
7
+ GetPositionRequest,
8
+ GetPositionResponse,
9
+ GetPropertiesRequest,
10
+ GetPropertiesResponse,
11
+ GoForRequest,
12
+ GoToRequest,
13
+ IsMovingRequest,
14
+ IsMovingResponse,
15
+ IsPoweredRequest,
16
+ IsPoweredResponse,
17
+ MotorServiceStub,
18
+ ResetZeroPositionRequest,
19
+ SetPowerRequest,
20
+ SetRPMRequest,
21
+ StopRequest,
22
+ )
23
+ from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
24
+ from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
25
+
26
+ from .motor import Motor
27
+
28
+
29
+ class MotorClient(Motor, ReconfigurableResourceRPCClientBase):
30
+ """
31
+ gRPC client for the Motor component.
32
+ """
33
+
34
+ def __init__(self, name: str, channel: Channel):
35
+ self.channel = channel
36
+ self.client = MotorServiceStub(channel)
37
+ super().__init__(name)
38
+
39
+ async def set_power(
40
+ self,
41
+ power: float,
42
+ *,
43
+ extra: Optional[Dict[str, Any]] = None,
44
+ timeout: Optional[float] = None,
45
+ **kwargs,
46
+ ):
47
+ md = kwargs.get("metadata", self.Metadata()).proto
48
+ request = SetPowerRequest(name=self.name, power_pct=power, extra=dict_to_struct(extra))
49
+ await self.client.SetPower(request, timeout=timeout, metadata=md)
50
+
51
+ async def go_for(
52
+ self,
53
+ rpm: float,
54
+ revolutions: float,
55
+ *,
56
+ extra: Optional[Dict[str, Any]] = None,
57
+ timeout: Optional[float] = None,
58
+ **kwargs,
59
+ ):
60
+ md = kwargs.get("metadata", self.Metadata()).proto
61
+ request = GoForRequest(name=self.name, rpm=rpm, revolutions=revolutions, extra=dict_to_struct(extra))
62
+ await self.client.GoFor(request, timeout=timeout, metadata=md)
63
+
64
+ async def go_to(
65
+ self,
66
+ rpm: float,
67
+ position_revolutions: float,
68
+ *,
69
+ extra: Optional[Dict[str, Any]] = None,
70
+ timeout: Optional[float] = None,
71
+ **kwargs,
72
+ ):
73
+ md = kwargs.get("metadata", self.Metadata()).proto
74
+ request = GoToRequest(name=self.name, rpm=rpm, position_revolutions=position_revolutions, extra=dict_to_struct(extra))
75
+ await self.client.GoTo(request, timeout=timeout, metadata=md)
76
+
77
+ async def set_rpm(
78
+ self,
79
+ rpm: float,
80
+ *,
81
+ extra: Optional[Dict[str, Any]] = None,
82
+ timeout: Optional[float] = None,
83
+ **kwargs,
84
+ ):
85
+ md = kwargs.get("metadata", self.Metadata()).proto
86
+ request = SetRPMRequest(name=self.name, rpm=rpm, extra=dict_to_struct(extra))
87
+ await self.client.SetRPM(request, timeout=timeout, metadata=md)
88
+
89
+ async def reset_zero_position(
90
+ self,
91
+ offset: float,
92
+ *,
93
+ extra: Optional[Dict[str, Any]] = None,
94
+ timeout: Optional[float] = None,
95
+ **kwargs,
96
+ ):
97
+ md = kwargs.get("metadata", self.Metadata()).proto
98
+ request = ResetZeroPositionRequest(name=self.name, offset=offset, extra=dict_to_struct(extra))
99
+ await self.client.ResetZeroPosition(request, timeout=timeout, metadata=md)
100
+
101
+ async def get_position(
102
+ self,
103
+ *,
104
+ extra: Optional[Dict[str, Any]] = None,
105
+ timeout: Optional[float] = None,
106
+ **kwargs,
107
+ ) -> float:
108
+ md = kwargs.get("metadata", self.Metadata()).proto
109
+ request = GetPositionRequest(name=self.name, extra=dict_to_struct(extra))
110
+ response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
111
+ return response.position
112
+
113
+ async def get_properties(
114
+ self,
115
+ *,
116
+ extra: Optional[Dict[str, Any]] = None,
117
+ timeout: Optional[float] = None,
118
+ **kwargs,
119
+ ) -> Motor.Properties:
120
+ md = kwargs.get("metadata", self.Metadata()).proto
121
+ request = GetPropertiesRequest(name=self.name, extra=dict_to_struct(extra))
122
+ response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout, metadata=md)
123
+ return Motor.Properties(position_reporting=response.position_reporting)
124
+
125
+ async def stop(
126
+ self,
127
+ *,
128
+ extra: Optional[Dict[str, Any]] = None,
129
+ timeout: Optional[float] = None,
130
+ **kwargs,
131
+ ):
132
+ md = kwargs.get("metadata", self.Metadata()).proto
133
+ request = StopRequest(name=self.name, extra=dict_to_struct(extra))
134
+ await self.client.Stop(request, timeout=timeout, metadata=md)
135
+
136
+ async def is_powered(
137
+ self,
138
+ *,
139
+ extra: Optional[Dict[str, Any]] = None,
140
+ timeout: Optional[float] = None,
141
+ **kwargs,
142
+ ) -> Tuple[bool, float]:
143
+ md = kwargs.get("metadata", self.Metadata()).proto
144
+ request = IsPoweredRequest(name=self.name, extra=dict_to_struct(extra))
145
+ response: IsPoweredResponse = await self.client.IsPowered(request, timeout=timeout, metadata=md)
146
+ return response.is_on, response.power_pct
147
+
148
+ async def is_moving(self, *, timeout: Optional[float] = None, **kwargs) -> bool:
149
+ md = kwargs.get("metadata", self.Metadata()).proto
150
+ request = IsMovingRequest(name=self.name)
151
+ response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout, metadata=md)
152
+ return response.is_moving
153
+
154
+ async def do_command(
155
+ self,
156
+ command: Mapping[str, ValueTypes],
157
+ *,
158
+ timeout: Optional[float] = None,
159
+ **kwargs,
160
+ ) -> Mapping[str, ValueTypes]:
161
+ md = kwargs.get("metadata", self.Metadata()).proto
162
+ request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
163
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
164
+ return struct_to_dict(response.result)
165
+
166
+ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
167
+ md = kwargs.get("metadata", self.Metadata())
168
+ return await get_geometries(self.client, self.name, extra, timeout, md)
@@ -0,0 +1,301 @@
1
+ import abc
2
+ from dataclasses import dataclass
3
+ from typing import Any, Dict, Final, Optional, Tuple
4
+
5
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
6
+
7
+ from ..component_base import ComponentBase
8
+
9
+
10
+ class Motor(ComponentBase):
11
+ """Motor represents a physical motor.
12
+
13
+ This acts as an abstract base class for any drivers representing specific
14
+ motor implementations. This cannot be used on its own. If the ``__init__()`` function is
15
+ overridden, it must call the ``super().__init__()`` function.
16
+
17
+ ::
18
+
19
+ from viam.components.motor import Motor
20
+
21
+ For more information, see `Motor component <https://docs.viam.com/dev/reference/apis/components/motor/>`_.
22
+ """
23
+
24
+ @dataclass
25
+ class Properties:
26
+ position_reporting: bool
27
+
28
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
29
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "motor"
30
+ )
31
+
32
+ @abc.abstractmethod
33
+ async def set_power(
34
+ self,
35
+ power: float,
36
+ *,
37
+ extra: Optional[Dict[str, Any]] = None,
38
+ timeout: Optional[float] = None,
39
+ **kwargs,
40
+ ):
41
+ """
42
+ Sets the "percentage" of power the motor should employ between -1 and 1.
43
+ When ``power`` is negative, the rotation will be in the backward direction.
44
+
45
+ ::
46
+
47
+ my_motor = Motor.from_robot(robot=machine, name="my_motor")
48
+
49
+ # Set the power to 40% forwards.
50
+ await my_motor.set_power(power=0.4)
51
+
52
+ Args:
53
+ power (float): Power between -1 and 1
54
+ (negative implies backwards).
55
+
56
+ For more information, see `Motor component <https://docs.viam.com/dev/reference/apis/components/motor/#setpower>`_.
57
+ """
58
+ ...
59
+
60
+ @abc.abstractmethod
61
+ async def go_for(
62
+ self,
63
+ rpm: float,
64
+ revolutions: float,
65
+ *,
66
+ extra: Optional[Dict[str, Any]] = None,
67
+ timeout: Optional[float] = None,
68
+ **kwargs,
69
+ ):
70
+ """
71
+ Spin the motor the specified number of ``revolutions`` at specified ``rpm``.
72
+ When ``rpm`` or ``revolutions`` is a negative value, the rotation will be in the backward direction.
73
+ Note: if both ``rpm`` and ``revolutions`` are negative, the motor will spin in the forward direction.
74
+
75
+ ::
76
+
77
+ my_motor = Motor.from_robot(robot=machine, name="my_motor")
78
+
79
+ # Turn the motor 7.2 revolutions at 60 RPM.
80
+ await my_motor.go_for(rpm=60, revolutions=7.2)
81
+
82
+ Args:
83
+ rpm (float): Speed at which the motor should move in rotations per minute
84
+ (negative implies backwards).
85
+ revolutions (float): Number of revolutions the motor should run for
86
+ (negative implies backwards).
87
+
88
+ For more information, see `Motor component <https://docs.viam.com/dev/reference/apis/components/motor/#gofor>`_.
89
+ """
90
+ ...
91
+
92
+ @abc.abstractmethod
93
+ async def go_to(
94
+ self,
95
+ rpm: float,
96
+ position_revolutions: float,
97
+ *,
98
+ extra: Optional[Dict[str, Any]] = None,
99
+ timeout: Optional[float] = None,
100
+ **kwargs,
101
+ ):
102
+ """
103
+ Spin the motor to the specified position (provided in revolutions from home/zero),
104
+ at the specified speed, in revolutions per minute.
105
+ Regardless of the directionality of the ``rpm`` this function will move
106
+ the motor towards the specified position.
107
+
108
+ ::
109
+
110
+ my_motor = Motor.from_robot(robot=machine, name="my_motor")
111
+
112
+ # Turn the motor to 8.3 revolutions from home at 75 RPM.
113
+ await my_motor.go_to(rpm=75, revolutions=8.3)
114
+
115
+ Args:
116
+ rpm (float): Speed at which the motor should rotate (absolute value).
117
+ position_revolutions (float): Target position relative to home/zero, in revolutions.
118
+
119
+ For more information, see `Motor component <https://docs.viam.com/dev/reference/apis/components/motor/#goto>`_.
120
+ """
121
+ ...
122
+
123
+ @abc.abstractmethod
124
+ async def set_rpm(
125
+ self,
126
+ rpm: float,
127
+ *,
128
+ extra: Optional[Dict[str, Any]] = None,
129
+ timeout: Optional[float] = None,
130
+ **kwargs,
131
+ ):
132
+ """
133
+ Spin the motor indefinitely at the specified speed, in revolutions per minute.
134
+ Positive ``rpm`` will result in forward movement and negative ``rpm`` will result in backwards movement
135
+
136
+ ::
137
+
138
+ my_motor = Motor.from_robot(robot=machine, name="my_motor")
139
+
140
+ # Spin the motor at 75 RPM.
141
+ await my_motor.set_rpm(rpm=75)
142
+
143
+ Args:
144
+ rpm (float): Speed at which the motor should rotate.
145
+
146
+ For more information, see `Motor component <https://docs.viam.com/dev/reference/apis/components/motor/#setrpm>`_.
147
+ """
148
+ ...
149
+
150
+ @abc.abstractmethod
151
+ async def reset_zero_position(
152
+ self,
153
+ offset: float,
154
+ *,
155
+ extra: Optional[Dict[str, Any]] = None,
156
+ timeout: Optional[float] = None,
157
+ **kwargs,
158
+ ):
159
+ """
160
+ Set the current position (modified by ``offset``) to be the new zero (home) position.
161
+
162
+ ::
163
+
164
+ my_motor = Motor.from_robot(robot=machine, name="my_motor")
165
+
166
+ # Set the current position as the new home position with no offset.
167
+ await my_motor.reset_zero_position(offset=0.0)
168
+
169
+ Args:
170
+ offset (float): The offset from the current position to new home/zero position.
171
+
172
+ For more information, see `Motor component <https://docs.viam.com/dev/reference/apis/components/motor/#resetzeroposition>`_.
173
+ """
174
+ ...
175
+
176
+ @abc.abstractmethod
177
+ async def get_position(
178
+ self,
179
+ *,
180
+ extra: Optional[Dict[str, Any]] = None,
181
+ timeout: Optional[float] = None,
182
+ **kwargs,
183
+ ) -> float:
184
+ """
185
+ Report the position of the motor based on its encoder.
186
+ The value returned is the number of revolutions relative to its zero position.
187
+ This method will raise an exception if position reporting is not supported by the motor.
188
+
189
+ ::
190
+
191
+ my_motor = Motor.from_robot(robot=machine, name="my_motor")
192
+
193
+ # Get the current position of the motor.
194
+ position = await my_motor.get_position()
195
+
196
+ Returns:
197
+ float: Number of revolutions the motor is away from zero/home.
198
+
199
+ For more information, see `Motor component <https://docs.viam.com/dev/reference/apis/components/motor/#getposition>`_.
200
+ """
201
+ ...
202
+
203
+ @abc.abstractmethod
204
+ async def get_properties(
205
+ self,
206
+ *,
207
+ extra: Optional[Dict[str, Any]] = None,
208
+ timeout: Optional[float] = None,
209
+ **kwargs,
210
+ ) -> Properties:
211
+ """
212
+ Report a dictionary mapping optional properties to
213
+ whether it is supported by this motor.
214
+
215
+ ::
216
+
217
+ my_motor = Motor.from_robot(robot=machine, name="my_motor")
218
+
219
+ # Report a dictionary mapping optional properties to whether it is supported by
220
+ # this motor.
221
+ properties = await my_motor.get_properties()
222
+
223
+ # Print out the properties.
224
+ print(f'Properties: {properties}')
225
+
226
+ Returns:
227
+ Properties: Map of feature names to supported status.
228
+
229
+ For more information, see `Motor component <https://docs.viam.com/dev/reference/apis/components/motor/#getproperties>`_.
230
+ """
231
+ ...
232
+
233
+ @abc.abstractmethod
234
+ async def stop(
235
+ self,
236
+ *,
237
+ extra: Optional[Dict[str, Any]] = None,
238
+ timeout: Optional[float] = None,
239
+ **kwargs,
240
+ ):
241
+ """
242
+ Stop the motor immediately, without any gradual step down.
243
+
244
+ ::
245
+
246
+ my_motor = Motor.from_robot(robot=machine, name="my_motor")
247
+
248
+ # Stop the motor.
249
+ await my_motor.stop()
250
+
251
+ For more information, see `Motor component <https://docs.viam.com/dev/reference/apis/components/motor/#stop>`_.
252
+ """
253
+ ...
254
+
255
+ @abc.abstractmethod
256
+ async def is_powered(
257
+ self,
258
+ *,
259
+ extra: Optional[Dict[str, Any]] = None,
260
+ timeout: Optional[float] = None,
261
+ **kwargs,
262
+ ) -> Tuple[bool, float]:
263
+ """
264
+ Returns whether or not the motor is currently running.
265
+
266
+ ::
267
+
268
+ my_motor = Motor.from_robot(robot=machine, name="my_motor")
269
+
270
+ # Check whether the motor is currently running.
271
+ powered = await my_motor.is_powered()
272
+
273
+ print('Powered: ', powered)
274
+
275
+ Returns:
276
+ Tuple[bool, float]: A tuple containing two values; the first [0] value indicates whether the motor is currently powered, and
277
+ the second [1] value indicates the current power percentage of the motor.
278
+
279
+ For more information, see `Motor component <https://docs.viam.com/dev/reference/apis/components/motor/#ispowered>`_.
280
+ """
281
+ ...
282
+
283
+ @abc.abstractmethod
284
+ async def is_moving(self) -> bool:
285
+ """
286
+ Get if the motor is currently moving.
287
+
288
+ ::
289
+
290
+ my_motor = Motor.from_robot(robot=machine, name="my_motor")
291
+
292
+ # Check whether the motor is currently moving.
293
+ moving = await my_motor.is_moving()
294
+ print('Moving: ', moving)
295
+
296
+ Returns:
297
+ bool: Whether the motor is moving.
298
+
299
+ For more information, see `Motor component <https://docs.viam.com/dev/reference/apis/components/motor/#ismoving>`_.
300
+ """
301
+ ...