wujihandpy 0.2.1__cp311-cp311-manylinux_2_28_x86_64.whl → 1.2.0b0.dev0__cp311-cp311-manylinux_2_28_x86_64.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 wujihandpy might be problematic. Click here for more details.

wujihandpy/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from ._core import __doc__, Hand
3
+ from ._core import *
4
4
  from ._version import __version__
5
5
 
6
- __all__ = ["__doc__", "__version__", "Hand"]
6
+ __all__ = ["__version__", 'Hand', 'Finger', 'Joint', 'IController', 'filter']
@@ -0,0 +1,521 @@
1
+ from __future__ import annotations
2
+ import numpy
3
+ import numpy.typing
4
+ import typing
5
+ from . import filter
6
+ from . import logging
7
+ __all__: list[str] = ['Finger', 'Hand', 'IController', 'Joint', 'filter', 'logging']
8
+ class Finger:
9
+ def get_joint_actual_position(self) -> numpy.typing.NDArray[numpy.float64]:
10
+ ...
11
+ def get_joint_bus_voltage(self) -> numpy.typing.NDArray[numpy.float32]:
12
+ ...
13
+ def get_joint_error_code(self) -> numpy.typing.NDArray[numpy.uint32]:
14
+ ...
15
+ def get_joint_hardware_date(self) -> numpy.typing.NDArray[numpy.uint32]:
16
+ ...
17
+ def get_joint_hardware_version(self) -> numpy.typing.NDArray[numpy.uint32]:
18
+ ...
19
+ def get_joint_lower_limit(self) -> numpy.typing.NDArray[numpy.float64]:
20
+ ...
21
+ def get_joint_temperature(self) -> numpy.typing.NDArray[numpy.float32]:
22
+ ...
23
+ def get_joint_upper_limit(self) -> numpy.typing.NDArray[numpy.float64]:
24
+ ...
25
+ def joint(self, index: typing.SupportsInt) -> Joint:
26
+ ...
27
+ def read_joint_actual_position(self, timeout: typing.SupportsFloat = 0.5) -> numpy.typing.NDArray[numpy.float64]:
28
+ ...
29
+ def read_joint_actual_position_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.typing.NDArray[numpy.float64]]:
30
+ ...
31
+ def read_joint_actual_position_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
32
+ ...
33
+ def read_joint_bus_voltage(self, timeout: typing.SupportsFloat = 0.5) -> numpy.typing.NDArray[numpy.float32]:
34
+ ...
35
+ def read_joint_bus_voltage_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.typing.NDArray[numpy.float32]]:
36
+ ...
37
+ def read_joint_bus_voltage_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
38
+ ...
39
+ def read_joint_error_code(self, timeout: typing.SupportsFloat = 0.5) -> numpy.typing.NDArray[numpy.uint32]:
40
+ ...
41
+ def read_joint_error_code_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.typing.NDArray[numpy.uint32]]:
42
+ ...
43
+ def read_joint_error_code_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
44
+ ...
45
+ def read_joint_hardware_date(self, timeout: typing.SupportsFloat = 0.5) -> numpy.typing.NDArray[numpy.uint32]:
46
+ ...
47
+ def read_joint_hardware_date_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.typing.NDArray[numpy.uint32]]:
48
+ ...
49
+ def read_joint_hardware_date_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
50
+ ...
51
+ def read_joint_hardware_version(self, timeout: typing.SupportsFloat = 0.5) -> numpy.typing.NDArray[numpy.uint32]:
52
+ ...
53
+ def read_joint_hardware_version_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.typing.NDArray[numpy.uint32]]:
54
+ ...
55
+ def read_joint_hardware_version_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
56
+ ...
57
+ def read_joint_lower_limit(self, timeout: typing.SupportsFloat = 0.5) -> numpy.typing.NDArray[numpy.float64]:
58
+ ...
59
+ def read_joint_lower_limit_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.typing.NDArray[numpy.float64]]:
60
+ ...
61
+ def read_joint_lower_limit_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
62
+ ...
63
+ def read_joint_temperature(self, timeout: typing.SupportsFloat = 0.5) -> numpy.typing.NDArray[numpy.float32]:
64
+ ...
65
+ def read_joint_temperature_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.typing.NDArray[numpy.float32]]:
66
+ ...
67
+ def read_joint_temperature_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
68
+ ...
69
+ def read_joint_upper_limit(self, timeout: typing.SupportsFloat = 0.5) -> numpy.typing.NDArray[numpy.float64]:
70
+ ...
71
+ def read_joint_upper_limit_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.typing.NDArray[numpy.float64]]:
72
+ ...
73
+ def read_joint_upper_limit_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
74
+ ...
75
+ @typing.overload
76
+ def write_joint_control_mode(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
77
+ ...
78
+ @typing.overload
79
+ def write_joint_control_mode(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> None:
80
+ ...
81
+ @typing.overload
82
+ def write_joint_control_mode_async(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
83
+ ...
84
+ @typing.overload
85
+ def write_joint_control_mode_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
86
+ ...
87
+ @typing.overload
88
+ def write_joint_control_mode_unchecked(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
89
+ ...
90
+ @typing.overload
91
+ def write_joint_control_mode_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> None:
92
+ ...
93
+ @typing.overload
94
+ def write_joint_current_limit(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
95
+ ...
96
+ @typing.overload
97
+ def write_joint_current_limit(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> None:
98
+ ...
99
+ @typing.overload
100
+ def write_joint_current_limit_async(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
101
+ ...
102
+ @typing.overload
103
+ def write_joint_current_limit_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
104
+ ...
105
+ @typing.overload
106
+ def write_joint_current_limit_unchecked(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
107
+ ...
108
+ @typing.overload
109
+ def write_joint_current_limit_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> None:
110
+ ...
111
+ @typing.overload
112
+ def write_joint_enabled(self, value: bool, timeout: typing.SupportsFloat = 0.5) -> None:
113
+ ...
114
+ @typing.overload
115
+ def write_joint_enabled(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.bool_], timeout: typing.SupportsFloat = 0.5) -> None:
116
+ ...
117
+ @typing.overload
118
+ def write_joint_enabled_async(self, value: bool, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
119
+ ...
120
+ @typing.overload
121
+ def write_joint_enabled_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.bool_], timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
122
+ ...
123
+ @typing.overload
124
+ def write_joint_enabled_unchecked(self, value: bool, timeout: typing.SupportsFloat = 0.5) -> None:
125
+ ...
126
+ @typing.overload
127
+ def write_joint_enabled_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.bool_], timeout: typing.SupportsFloat = 0.5) -> None:
128
+ ...
129
+ @typing.overload
130
+ def write_joint_reset_error(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
131
+ ...
132
+ @typing.overload
133
+ def write_joint_reset_error(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> None:
134
+ ...
135
+ @typing.overload
136
+ def write_joint_reset_error_async(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
137
+ ...
138
+ @typing.overload
139
+ def write_joint_reset_error_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
140
+ ...
141
+ @typing.overload
142
+ def write_joint_reset_error_unchecked(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
143
+ ...
144
+ @typing.overload
145
+ def write_joint_reset_error_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> None:
146
+ ...
147
+ @typing.overload
148
+ def write_joint_sin_level(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
149
+ ...
150
+ @typing.overload
151
+ def write_joint_sin_level(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> None:
152
+ ...
153
+ @typing.overload
154
+ def write_joint_sin_level_async(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
155
+ ...
156
+ @typing.overload
157
+ def write_joint_sin_level_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
158
+ ...
159
+ @typing.overload
160
+ def write_joint_sin_level_unchecked(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
161
+ ...
162
+ @typing.overload
163
+ def write_joint_sin_level_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> None:
164
+ ...
165
+ @typing.overload
166
+ def write_joint_target_position(self, value: typing.SupportsFloat, timeout: typing.SupportsFloat = 0.5) -> None:
167
+ ...
168
+ @typing.overload
169
+ def write_joint_target_position(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.float64], timeout: typing.SupportsFloat = 0.5) -> None:
170
+ ...
171
+ @typing.overload
172
+ def write_joint_target_position_async(self, value: typing.SupportsFloat, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
173
+ ...
174
+ @typing.overload
175
+ def write_joint_target_position_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.float64], timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
176
+ ...
177
+ @typing.overload
178
+ def write_joint_target_position_unchecked(self, value: typing.SupportsFloat, timeout: typing.SupportsFloat = 0.5) -> None:
179
+ ...
180
+ @typing.overload
181
+ def write_joint_target_position_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.float64], timeout: typing.SupportsFloat = 0.5) -> None:
182
+ ...
183
+ class Hand:
184
+ def __init__(self, serial_number: str | None = None, usb_pid: typing.SupportsInt = -1, usb_vid: typing.SupportsInt = 1155, mask: typing.Annotated[numpy.typing.ArrayLike, numpy.bool_] | None = None) -> None:
185
+ ...
186
+ def finger(self, index: typing.SupportsInt) -> Finger:
187
+ ...
188
+ def get_firmware_date(self) -> numpy.uint32:
189
+ ...
190
+ def get_firmware_version(self) -> numpy.uint32:
191
+ ...
192
+ def get_handedness(self) -> numpy.uint8:
193
+ ...
194
+ def get_input_voltage(self) -> numpy.float32:
195
+ ...
196
+ def get_joint_actual_position(self) -> numpy.typing.NDArray[numpy.float64]:
197
+ ...
198
+ def get_joint_bus_voltage(self) -> numpy.typing.NDArray[numpy.float32]:
199
+ ...
200
+ def get_joint_error_code(self) -> numpy.typing.NDArray[numpy.uint32]:
201
+ ...
202
+ def get_joint_hardware_date(self) -> numpy.typing.NDArray[numpy.uint32]:
203
+ ...
204
+ def get_joint_hardware_version(self) -> numpy.typing.NDArray[numpy.uint32]:
205
+ ...
206
+ def get_joint_lower_limit(self) -> numpy.typing.NDArray[numpy.float64]:
207
+ ...
208
+ def get_joint_temperature(self) -> numpy.typing.NDArray[numpy.float32]:
209
+ ...
210
+ def get_joint_upper_limit(self) -> numpy.typing.NDArray[numpy.float64]:
211
+ ...
212
+ def get_system_time(self) -> numpy.uint32:
213
+ ...
214
+ def get_temperature(self) -> numpy.float32:
215
+ ...
216
+ def read_firmware_date(self, timeout: typing.SupportsFloat = 0.5) -> numpy.uint32:
217
+ ...
218
+ def read_firmware_date_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.uint32]:
219
+ ...
220
+ def read_firmware_date_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
221
+ ...
222
+ def read_firmware_version(self, timeout: typing.SupportsFloat = 0.5) -> numpy.uint32:
223
+ ...
224
+ def read_firmware_version_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.uint32]:
225
+ ...
226
+ def read_firmware_version_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
227
+ ...
228
+ def read_handedness(self, timeout: typing.SupportsFloat = 0.5) -> numpy.uint8:
229
+ ...
230
+ def read_handedness_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.uint8]:
231
+ ...
232
+ def read_handedness_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
233
+ ...
234
+ def read_input_voltage(self, timeout: typing.SupportsFloat = 0.5) -> numpy.float32:
235
+ ...
236
+ def read_input_voltage_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.float32]:
237
+ ...
238
+ def read_input_voltage_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
239
+ ...
240
+ def read_joint_actual_position(self, timeout: typing.SupportsFloat = 0.5) -> numpy.typing.NDArray[numpy.float64]:
241
+ ...
242
+ def read_joint_actual_position_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.typing.NDArray[numpy.float64]]:
243
+ ...
244
+ def read_joint_actual_position_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
245
+ ...
246
+ def read_joint_bus_voltage(self, timeout: typing.SupportsFloat = 0.5) -> numpy.typing.NDArray[numpy.float32]:
247
+ ...
248
+ def read_joint_bus_voltage_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.typing.NDArray[numpy.float32]]:
249
+ ...
250
+ def read_joint_bus_voltage_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
251
+ ...
252
+ def read_joint_error_code(self, timeout: typing.SupportsFloat = 0.5) -> numpy.typing.NDArray[numpy.uint32]:
253
+ ...
254
+ def read_joint_error_code_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.typing.NDArray[numpy.uint32]]:
255
+ ...
256
+ def read_joint_error_code_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
257
+ ...
258
+ def read_joint_hardware_date(self, timeout: typing.SupportsFloat = 0.5) -> numpy.typing.NDArray[numpy.uint32]:
259
+ ...
260
+ def read_joint_hardware_date_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.typing.NDArray[numpy.uint32]]:
261
+ ...
262
+ def read_joint_hardware_date_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
263
+ ...
264
+ def read_joint_hardware_version(self, timeout: typing.SupportsFloat = 0.5) -> numpy.typing.NDArray[numpy.uint32]:
265
+ ...
266
+ def read_joint_hardware_version_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.typing.NDArray[numpy.uint32]]:
267
+ ...
268
+ def read_joint_hardware_version_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
269
+ ...
270
+ def read_joint_lower_limit(self, timeout: typing.SupportsFloat = 0.5) -> numpy.typing.NDArray[numpy.float64]:
271
+ ...
272
+ def read_joint_lower_limit_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.typing.NDArray[numpy.float64]]:
273
+ ...
274
+ def read_joint_lower_limit_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
275
+ ...
276
+ def read_joint_temperature(self, timeout: typing.SupportsFloat = 0.5) -> numpy.typing.NDArray[numpy.float32]:
277
+ ...
278
+ def read_joint_temperature_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.typing.NDArray[numpy.float32]]:
279
+ ...
280
+ def read_joint_temperature_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
281
+ ...
282
+ def read_joint_upper_limit(self, timeout: typing.SupportsFloat = 0.5) -> numpy.typing.NDArray[numpy.float64]:
283
+ ...
284
+ def read_joint_upper_limit_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.typing.NDArray[numpy.float64]]:
285
+ ...
286
+ def read_joint_upper_limit_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
287
+ ...
288
+ def read_system_time(self, timeout: typing.SupportsFloat = 0.5) -> numpy.uint32:
289
+ ...
290
+ def read_system_time_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.uint32]:
291
+ ...
292
+ def read_system_time_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
293
+ ...
294
+ def read_temperature(self, timeout: typing.SupportsFloat = 0.5) -> numpy.float32:
295
+ ...
296
+ def read_temperature_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.float32]:
297
+ ...
298
+ def read_temperature_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
299
+ ...
300
+ def realtime_controller(self, enable_upstream: bool, filter: filter.IFilter) -> IController:
301
+ ...
302
+ @typing.overload
303
+ def write_joint_control_mode(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
304
+ ...
305
+ @typing.overload
306
+ def write_joint_control_mode(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> None:
307
+ ...
308
+ @typing.overload
309
+ def write_joint_control_mode_async(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
310
+ ...
311
+ @typing.overload
312
+ def write_joint_control_mode_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
313
+ ...
314
+ @typing.overload
315
+ def write_joint_control_mode_unchecked(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
316
+ ...
317
+ @typing.overload
318
+ def write_joint_control_mode_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> None:
319
+ ...
320
+ @typing.overload
321
+ def write_joint_current_limit(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
322
+ ...
323
+ @typing.overload
324
+ def write_joint_current_limit(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> None:
325
+ ...
326
+ @typing.overload
327
+ def write_joint_current_limit_async(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
328
+ ...
329
+ @typing.overload
330
+ def write_joint_current_limit_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
331
+ ...
332
+ @typing.overload
333
+ def write_joint_current_limit_unchecked(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
334
+ ...
335
+ @typing.overload
336
+ def write_joint_current_limit_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> None:
337
+ ...
338
+ @typing.overload
339
+ def write_joint_enabled(self, value: bool, timeout: typing.SupportsFloat = 0.5) -> None:
340
+ ...
341
+ @typing.overload
342
+ def write_joint_enabled(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.bool_], timeout: typing.SupportsFloat = 0.5) -> None:
343
+ ...
344
+ @typing.overload
345
+ def write_joint_enabled_async(self, value: bool, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
346
+ ...
347
+ @typing.overload
348
+ def write_joint_enabled_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.bool_], timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
349
+ ...
350
+ @typing.overload
351
+ def write_joint_enabled_unchecked(self, value: bool, timeout: typing.SupportsFloat = 0.5) -> None:
352
+ ...
353
+ @typing.overload
354
+ def write_joint_enabled_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.bool_], timeout: typing.SupportsFloat = 0.5) -> None:
355
+ ...
356
+ @typing.overload
357
+ def write_joint_reset_error(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
358
+ ...
359
+ @typing.overload
360
+ def write_joint_reset_error(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> None:
361
+ ...
362
+ @typing.overload
363
+ def write_joint_reset_error_async(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
364
+ ...
365
+ @typing.overload
366
+ def write_joint_reset_error_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
367
+ ...
368
+ @typing.overload
369
+ def write_joint_reset_error_unchecked(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
370
+ ...
371
+ @typing.overload
372
+ def write_joint_reset_error_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> None:
373
+ ...
374
+ @typing.overload
375
+ def write_joint_sin_level(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
376
+ ...
377
+ @typing.overload
378
+ def write_joint_sin_level(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> None:
379
+ ...
380
+ @typing.overload
381
+ def write_joint_sin_level_async(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
382
+ ...
383
+ @typing.overload
384
+ def write_joint_sin_level_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
385
+ ...
386
+ @typing.overload
387
+ def write_joint_sin_level_unchecked(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
388
+ ...
389
+ @typing.overload
390
+ def write_joint_sin_level_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16], timeout: typing.SupportsFloat = 0.5) -> None:
391
+ ...
392
+ @typing.overload
393
+ def write_joint_target_position(self, value: typing.SupportsFloat, timeout: typing.SupportsFloat = 0.5) -> None:
394
+ ...
395
+ @typing.overload
396
+ def write_joint_target_position(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.float64], timeout: typing.SupportsFloat = 0.5) -> None:
397
+ ...
398
+ @typing.overload
399
+ def write_joint_target_position_async(self, value: typing.SupportsFloat, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
400
+ ...
401
+ @typing.overload
402
+ def write_joint_target_position_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.float64], timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
403
+ ...
404
+ @typing.overload
405
+ def write_joint_target_position_unchecked(self, value: typing.SupportsFloat, timeout: typing.SupportsFloat = 0.5) -> None:
406
+ ...
407
+ @typing.overload
408
+ def write_joint_target_position_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.float64], timeout: typing.SupportsFloat = 0.5) -> None:
409
+ ...
410
+ class IController:
411
+ def __enter__(self) -> IController:
412
+ ...
413
+ def __exit__(self, arg0: typing.Any, arg1: typing.Any, arg2: typing.Any) -> None:
414
+ ...
415
+ def close(self) -> None:
416
+ ...
417
+ def get_joint_actual_position(self) -> numpy.typing.NDArray[numpy.float64]:
418
+ ...
419
+ def set_joint_target_position(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.float64]) -> None:
420
+ ...
421
+ class Joint:
422
+ def get_joint_actual_position(self) -> numpy.float64:
423
+ ...
424
+ def get_joint_bus_voltage(self) -> numpy.float32:
425
+ ...
426
+ def get_joint_error_code(self) -> numpy.uint32:
427
+ ...
428
+ def get_joint_hardware_date(self) -> numpy.uint32:
429
+ ...
430
+ def get_joint_hardware_version(self) -> numpy.uint32:
431
+ ...
432
+ def get_joint_lower_limit(self) -> numpy.float64:
433
+ ...
434
+ def get_joint_temperature(self) -> numpy.float32:
435
+ ...
436
+ def get_joint_upper_limit(self) -> numpy.float64:
437
+ ...
438
+ def read_joint_actual_position(self, timeout: typing.SupportsFloat = 0.5) -> numpy.float64:
439
+ ...
440
+ def read_joint_actual_position_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.float64]:
441
+ ...
442
+ def read_joint_actual_position_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
443
+ ...
444
+ def read_joint_bus_voltage(self, timeout: typing.SupportsFloat = 0.5) -> numpy.float32:
445
+ ...
446
+ def read_joint_bus_voltage_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.float32]:
447
+ ...
448
+ def read_joint_bus_voltage_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
449
+ ...
450
+ def read_joint_error_code(self, timeout: typing.SupportsFloat = 0.5) -> numpy.uint32:
451
+ ...
452
+ def read_joint_error_code_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.uint32]:
453
+ ...
454
+ def read_joint_error_code_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
455
+ ...
456
+ def read_joint_hardware_date(self, timeout: typing.SupportsFloat = 0.5) -> numpy.uint32:
457
+ ...
458
+ def read_joint_hardware_date_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.uint32]:
459
+ ...
460
+ def read_joint_hardware_date_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
461
+ ...
462
+ def read_joint_hardware_version(self, timeout: typing.SupportsFloat = 0.5) -> numpy.uint32:
463
+ ...
464
+ def read_joint_hardware_version_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.uint32]:
465
+ ...
466
+ def read_joint_hardware_version_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
467
+ ...
468
+ def read_joint_lower_limit(self, timeout: typing.SupportsFloat = 0.5) -> numpy.float64:
469
+ ...
470
+ def read_joint_lower_limit_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.float64]:
471
+ ...
472
+ def read_joint_lower_limit_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
473
+ ...
474
+ def read_joint_temperature(self, timeout: typing.SupportsFloat = 0.5) -> numpy.float32:
475
+ ...
476
+ def read_joint_temperature_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.float32]:
477
+ ...
478
+ def read_joint_temperature_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
479
+ ...
480
+ def read_joint_upper_limit(self, timeout: typing.SupportsFloat = 0.5) -> numpy.float64:
481
+ ...
482
+ def read_joint_upper_limit_async(self, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[numpy.float64]:
483
+ ...
484
+ def read_joint_upper_limit_unchecked(self, timeout: typing.SupportsFloat = 0.5) -> None:
485
+ ...
486
+ def write_joint_control_mode(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
487
+ ...
488
+ def write_joint_control_mode_async(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
489
+ ...
490
+ def write_joint_control_mode_unchecked(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
491
+ ...
492
+ def write_joint_current_limit(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
493
+ ...
494
+ def write_joint_current_limit_async(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
495
+ ...
496
+ def write_joint_current_limit_unchecked(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
497
+ ...
498
+ def write_joint_enabled(self, value: bool, timeout: typing.SupportsFloat = 0.5) -> None:
499
+ ...
500
+ def write_joint_enabled_async(self, value: bool, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
501
+ ...
502
+ def write_joint_enabled_unchecked(self, value: bool, timeout: typing.SupportsFloat = 0.5) -> None:
503
+ ...
504
+ def write_joint_reset_error(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
505
+ ...
506
+ def write_joint_reset_error_async(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
507
+ ...
508
+ def write_joint_reset_error_unchecked(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
509
+ ...
510
+ def write_joint_sin_level(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
511
+ ...
512
+ def write_joint_sin_level_async(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
513
+ ...
514
+ def write_joint_sin_level_unchecked(self, value: typing.SupportsInt, timeout: typing.SupportsFloat = 0.5) -> None:
515
+ ...
516
+ def write_joint_target_position(self, value: typing.SupportsFloat, timeout: typing.SupportsFloat = 0.5) -> None:
517
+ ...
518
+ def write_joint_target_position_async(self, value: typing.SupportsFloat, timeout: typing.SupportsFloat = 0.5) -> typing.Awaitable[None]:
519
+ ...
520
+ def write_joint_target_position_unchecked(self, value: typing.SupportsFloat, timeout: typing.SupportsFloat = 0.5) -> None:
521
+ ...
@@ -0,0 +1,8 @@
1
+ from __future__ import annotations
2
+ import typing
3
+ __all__: list[str] = ['IFilter', 'LowPass']
4
+ class IFilter:
5
+ pass
6
+ class LowPass(IFilter):
7
+ def __init__(self, cutoff_freq: typing.SupportsFloat = 10.0) -> None:
8
+ ...
@@ -0,0 +1,65 @@
1
+ from __future__ import annotations
2
+ import typing
3
+ __all__: list[str] = ['Level', 'flush', 'set_log_level', 'set_log_path', 'set_log_to_console', 'set_log_to_file']
4
+ class Level:
5
+ """
6
+ Members:
7
+
8
+ Trace
9
+
10
+ Debug
11
+
12
+ Info
13
+
14
+ Warn
15
+
16
+ Error
17
+
18
+ Critical
19
+
20
+ Off
21
+ """
22
+ Critical: typing.ClassVar[Level] # value = <Level.Critical: 5>
23
+ Debug: typing.ClassVar[Level] # value = <Level.Debug: 1>
24
+ Error: typing.ClassVar[Level] # value = <Level.Error: 4>
25
+ Info: typing.ClassVar[Level] # value = <Level.Info: 2>
26
+ Off: typing.ClassVar[Level] # value = <Level.Off: 6>
27
+ Trace: typing.ClassVar[Level] # value = <Level.Trace: 0>
28
+ Warn: typing.ClassVar[Level] # value = <Level.Warn: 3>
29
+ __members__: typing.ClassVar[dict[str, Level]] # value = {'Trace': <Level.Trace: 0>, 'Debug': <Level.Debug: 1>, 'Info': <Level.Info: 2>, 'Warn': <Level.Warn: 3>, 'Error': <Level.Error: 4>, 'Critical': <Level.Critical: 5>, 'Off': <Level.Off: 6>}
30
+ def __eq__(self, other: typing.Any) -> bool:
31
+ ...
32
+ def __getstate__(self) -> int:
33
+ ...
34
+ def __hash__(self) -> int:
35
+ ...
36
+ def __index__(self) -> int:
37
+ ...
38
+ def __init__(self, value: typing.SupportsInt) -> None:
39
+ ...
40
+ def __int__(self) -> int:
41
+ ...
42
+ def __ne__(self, other: typing.Any) -> bool:
43
+ ...
44
+ def __repr__(self) -> str:
45
+ ...
46
+ def __setstate__(self, state: typing.SupportsInt) -> None:
47
+ ...
48
+ def __str__(self) -> str:
49
+ ...
50
+ @property
51
+ def name(self) -> str:
52
+ ...
53
+ @property
54
+ def value(self) -> int:
55
+ ...
56
+ def flush() -> None:
57
+ ...
58
+ def set_log_level(value: Level) -> None:
59
+ ...
60
+ def set_log_path(value: str) -> None:
61
+ ...
62
+ def set_log_to_console(value: bool) -> None:
63
+ ...
64
+ def set_log_to_file(value: bool) -> None:
65
+ ...
wujihandpy/_version.py CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.2.1'
32
- __version_tuple__ = version_tuple = (0, 2, 1)
31
+ __version__ = version = '1.2.0b0.dev0'
32
+ __version_tuple__ = version_tuple = (1, 2, 0, 'b0', 'dev0')
33
33
 
34
- __commit_id__ = commit_id = 'gfa3cf8a03'
34
+ __commit_id__ = commit_id = 'ge3f1c9f42'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: wujihandpy
3
- Version: 0.2.1
3
+ Version: 1.2.0b0.dev0
4
4
  Summary: Python bindings for WujiHandCpp
5
5
  Author-Email: Zihan Qin <zihanqin2048@gmail.com>
6
6
  Maintainer-Email: Wuji Technology <support@pan-motor.com>
@@ -50,12 +50,26 @@ pip install wujihandpy
50
50
  对于 Linux 用户,需要额外配置 udev 规则以允许非 root 用户访问 USB 设备,可在终端中输入:
51
51
 
52
52
  ```bash
53
- echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTRS{idProduct}=="5740", MODE="0666"' |
53
+ echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="0483", MODE="0666"' |
54
54
  sudo tee /etc/udev/rules.d/95-wujihand.rules &&
55
55
  sudo udevadm control --reload-rules &&
56
56
  sudo udevadm trigger
57
57
  ```
58
58
 
59
+ ### 常见错误
60
+
61
+ 若遇到报错 `Could not find a version that satisfies the requirement`,请尝试升级 pip:
62
+
63
+ ```bash
64
+ python3 -m pip install --upgrade pip
65
+ ```
66
+
67
+ 然后使用新的pip重新安装:
68
+
69
+ ```bash
70
+ python3 -m pip install wujihandpy
71
+ ```
72
+
59
73
  ## 支持的 CPU 架构
60
74
 
61
75
  - x86_64
@@ -103,8 +117,8 @@ hand = wujihandpy.Hand()
103
117
  ### 读数据
104
118
 
105
119
  ```python
106
- def read_<dataname>(self) -> np.<datatype>
107
- def read_<dataname>(self) -> np.array<datatype> # For bulk-read
120
+ def read_<dataname>(self) -> datatype
121
+ def read_<dataname>(self) -> np.ndarray[datatype] # For bulk-read
108
122
  ```
109
123
 
110
124
  所有可使用的数据均定义在 `wujihandpy/_core.pyi` 中。
@@ -120,62 +134,70 @@ time = hand.read_system_time()
120
134
  例如,读取第1个手指(食指),第0个关节的当前位置数据:
121
135
 
122
136
  ```python
123
- position = hand.finger(1).joint(0).read_joint_position()
137
+ position = hand.finger(1).joint(0).read_joint_actual_position()
124
138
  ```
125
139
 
140
+ 关节角度为 `np.float64` 类型,单位为弧度,零点和正方向与 [URDF文件](https://github.com/Wuji-Technology-Co-Ltd/wujihand-urdf) 中定义的相同。
141
+
126
142
  用一条指令读取多个数据也是可行的,这被称为**批量读 (Bulk-Read)**。
127
143
 
128
144
  例如,以下指令读取整手所有(20个)关节的当前位置数据:
129
145
 
130
146
  ```python
131
- positions = hand.read_joint_position()
147
+ positions = hand.read_joint_actual_position()
132
148
  ```
133
149
 
134
- 进行批量读时,函数返回包含所有数据的 `np.array`:
150
+ 进行批量读时,函数返回包含所有数据的 `np.ndarray[np.float64]`:
135
151
 
136
152
  ```python
137
- >>> np.set_printoptions(formatter={'int': lambda x: hex(x)})
138
153
  >>> print(positions)
139
- [[0x200828 0x2062D3 0x20186B 0x200535]
140
- [0xDFFE7A 0xBF2318 0x7FC3C2 0x802342]
141
- [0xE01213 0x900C79 0x3FB49B 0x60191E]
142
- [0xE04051 0x601EFB 0x4035B6 0x60026B]
143
- [0xDFD9AC 0x3FA315 0x4015C2 0x5FDF6A]]
154
+ [[ 0.975 0.523 0.271 -0.45 ]
155
+ [ 0.382 0.241 -0.003 -0.275]
156
+ [-0.299 0.329 0.067 -0.286]
157
+ [-0.122 0.228 0.315 -0.178]
158
+ [ 0.205 0.087 0.288 -0.149]]
144
159
  ```
145
160
 
146
161
  `read` 函数会阻塞,直到读取完成。保证当函数返回时,读取一定成功。
147
162
 
148
163
  ### 写数据
149
164
 
150
- 写数据拥有类似的API,但多了一个参数用于传递目标值:
165
+ 写数据拥有类似的 API,但多了一个参数用于传递目标值:
151
166
 
152
167
  ```python
153
- def write_<dataname>(self, np.<datatype>)
154
- def write_<dataname>(self, np.array<datatype>) # For bulk-write
168
+ def write_<dataname>(self, datatype)
169
+ def write_<dataname>(self, np.ndarray[datatype]) # For bulk-write
155
170
  ```
156
171
 
157
172
  例如,写入单个关节的目标位置数据:
158
173
 
159
174
  ```python
160
- hand.finger(1).joint(0).write_joint_control_position(np.int32(0x800000))
175
+ hand.finger(1).joint(0).write_joint_target_position(0.8)
161
176
  ```
162
177
 
163
- 关节位置的合法范围为 `[0x000000, 0xFFFFFF]`。
178
+ 各关节的合法角度范围可通过以下 API 获取:
164
179
 
165
- **批量写**数据也是可行的,例如,批量写入第1个手指的目标位置数据:
180
+ ```python
181
+ upper = < Hand / Finger / Joint >.read_joint_upper_limit()
182
+ lower = < Hand / Finger / Joint >.read_joint_lower_limit()
183
+ ```
184
+
185
+ 若写入的角度超出合法范围,会被自动限幅至最高/最低值。
186
+
187
+ **批量写**数据也是可行的,例如,批量为第一个手指写入目标位置数据:
166
188
 
167
189
  ```python
168
- hand.finger(1).write_joint_control_position(np.int32(0x800000))
190
+ hand.finger(1).write_joint_target_position(0.8)
169
191
  ```
170
192
 
171
193
  如果每个关节的目标值不同,可以传入一个包含所有目标值的 `np.array`:
172
194
 
173
195
  ```python
174
- hand.finger(1).write_joint_control_position(
196
+ hand.finger(1).write_joint_target_position(
175
197
  np.array(
176
- # J1 J2 J3 J4
177
- [0xDFFFFF, 0xBFFFFF, 0x400000, 0x600000],
178
- dtype=np.int32,
198
+ # J1 J2 J3 J4
199
+ [0.8, 0.0, 0.8, 0.8],
200
+ dtype=np.float64,
179
201
  )
180
202
  )
181
203
  ```
@@ -187,23 +209,23 @@ hand.finger(1).write_joint_control_position(
187
209
  读写函数均有对应的异步版本,函数名以 `_async` 作为后缀。
188
210
 
189
211
  ``` python
190
- async def read_<dataname>_async(self) -> np.<datatype>
191
- async def read_<dataname>_async(self) -> np.array<datatype> # For bulk-read
192
- async def write_<dataname>_async(self, np.<datatype>)
193
- async def write_<dataname>_async(self, np.array<datatype>) # For bulk-write
212
+ async def read_<dataname>_async(self) -> datatype
213
+ async def read_<dataname>_async(self) -> np.ndarray[datatype] # For bulk-read
214
+ async def write_<dataname>_async(self, datatype)
215
+ async def write_<dataname>_async(self, np.ndarray[datatype]) # For bulk-write
194
216
  ```
195
217
 
196
- 异步读/写函数同样会异步阻塞,直到读/写完成。保证当函数返回时,读/写一定成功。
218
+ 异步接口需 `await`;等待期间不阻塞线程/事件循环,返回时保证读/写已经成功。
197
219
 
198
220
  ### Unchecked 读/写
199
221
 
200
222
  如果不关心读/写是否成功,可以使用 Unchecked 版本的读/写函数,函数名以 `_unchecked` 作为后缀。
201
223
 
202
224
  ```python
203
- def read_<dataname>_unchecked(self) -> np.<datatype>
204
- def read_<dataname>_unchecked(self) -> np.array<datatype> # For bulk-read
205
- def write_<dataname>_unchecked(self, np.<datatype>)
206
- def write_<dataname>_unchecked(self, np.array<datatype>) # For bulk-write
225
+ def read_<dataname>_unchecked(self) -> None
226
+ def read_<dataname>_unchecked(self) -> None # For bulk-read
227
+ def write_<dataname>_unchecked(self, datatype)
228
+ def write_<dataname>_unchecked(self, np.ndarray[datatype]) # For bulk-write
207
229
  ```
208
230
 
209
231
  Unchecked 函数总是立即返回,不会阻塞,通常用于对实时性要求较高的场景。
@@ -213,20 +235,34 @@ Unchecked 函数总是立即返回,不会阻塞,通常用于对实时性要
213
235
  如果希望获取以往读/写的结果,可以使用 `get` 系列函数:
214
236
 
215
237
  ```python
216
- def get_<dataname>(self) -> np.<datatype>
217
- def get_<dataname>(self) -> np.array<datatype> # For bulk-read
238
+ def get_<dataname>(self) -> datatype
239
+ def get_<dataname>(self) -> np.ndarray[datatype] # For bulk-read
218
240
  ```
219
241
 
220
242
  `get` 系列函数同样不会阻塞,它总是立即返回最近一次读取到的数据,无论该数据来自 `read`、`async-read` 还是 `read-unchecked`。
221
243
 
222
244
  如果尚未请求过该数据,或请求尚未成功,`get` 函数的返回值是未定义的(通常为0)。
223
245
 
246
+ ### 实时控制
247
+
248
+ 默认的读/写方式均带有缓冲池,积攒一段时间数据后才进行传输,最高读/写频率无法超过 100Hz。
249
+
250
+ 对于需要流畅控制关节位置的场景,需使用 realtime_controller。
251
+
252
+ 具体的控制示例可见 [example](example) 目录:
253
+
254
+ 单向写:[realtime.py](example/4.realtime.py)
255
+
256
+ 双向读/写:[realtime_duplex.py](example/5.realtime_duplex.py)
257
+
224
258
  ## 性能与优化
225
259
 
226
260
  WujihandPy 在充分保证易用性的同时,尽可能优化了性能与效率。
227
261
 
228
262
  我们强烈建议优先使用批量读/写以最大限度地发挥性能。
229
263
 
264
+ 对于需要流畅控制关节位置的场景,请务必使用 realtime_controller。
265
+
230
266
  ## 许可证
231
267
 
232
- 本项目采用 MIT 许可证,详情见 [LICENSE](LICENSE) 文件。
268
+ 本项目采用 MIT 许可证,详情见 [LICENSE](LICENSE) 文件。
@@ -0,0 +1,17 @@
1
+ wujihandpy/__init__.py,sha256=O6rhSCIkTvciLQraUMgmZjEaW7i5n40qQ6Z5oacN_rE,170
2
+ wujihandpy/_core.cpython-311-x86_64-linux-gnu.so,sha256=b7NXzp0P2QMN0NEDnF4kIN93JSraGLugBd2FgMTGM4M,1726817
3
+ wujihandpy/_version.py,sha256=L8uwUIZXTXLqLC4f-PzlcF2ERRcyX1GXwYycOjUEtRM,733
4
+ wujihandpy/_core/__init__.pyi,sha256=clN3slFGQ2tgm0pUYejcfsWvk1XmWVFM5qKwssmwZd8,29287
5
+ wujihandpy/_core/filter.pyi,sha256=dAkrbcYtfcM10eOQumdIvIoHo5ay3oUVOqIqAhFMv24,227
6
+ wujihandpy/_core/logging.pyi,sha256=nM87F9rV0BcpyiqD50WNJfAWICSmc45obMj5T1ZZQW0,1868
7
+ wujihandpy.libs/libblkid-a9167753.so.1.1.0,sha256=XVspUZDmtSMamCgSYDrDYNC-g6agPQCkqrDE0yb8sdY,356897
8
+ wujihandpy.libs/libmount-ec61bd71.so.1.1.0,sha256=8EmOB9QqeXTyAh0aE20fn-QVuG3vsF66wBcgZ6aX2V4,393873
9
+ wujihandpy.libs/libpcre2-8-516f4c9d.so.0.7.1,sha256=IcbljW_oKuAVlrAwKz8qtRZxfi1sQH_iKxPSoNpzsmU,547745
10
+ wujihandpy.libs/libselinux-d0805dcb.so.1,sha256=iYGaLO-LIy5-WEihMiXHpeJUXyq56DDqGU49JbpfTu4,195097
11
+ wujihandpy.libs/libudev-9765ffbd.so.1.6.11,sha256=32i9UQ4dXVdXAdwJfzJd7T9GMKvkkr42mIWW9mOGrI4,677489
12
+ wujihandpy.libs/libusb-1-1b307d35.0.so.0.2.0,sha256=5crhlK2KrW6d1ZRAWqh3dYy93CPE4KekXTbLeGGFIjw,126777
13
+ wujihandpy.libs/libuuid-95b83d40.so.1.3.0,sha256=Bj-_E8XyWfgC65o6pTuT9qLNcuA97EYDyCUUOfDR2q0,38041
14
+ wujihandpy-1.2.0b0.dev0.dist-info/METADATA,sha256=wD7UAAYV_YwyIceNAqqXe2cFWogLHzQLHjHJEl53FV8,8036
15
+ wujihandpy-1.2.0b0.dev0.dist-info/WHEEL,sha256=0nVYFYtHP36mg9PDPBgwu1BNnaNOMi9iSL0fSWdrzR4,118
16
+ wujihandpy-1.2.0b0.dev0.dist-info/RECORD,,
17
+ wujihandpy-1.2.0b0.dev0.dist-info/licenses/LICENSE,sha256=OLJ-MVXgwcjW8-kJ56ADWaMCCF39muljtSqRy74lr6M,1072
wujihandpy/_core.pyi DELETED
@@ -1,266 +0,0 @@
1
- from __future__ import annotations
2
- import numpy
3
- import numpy.typing
4
- import typing
5
- __all__: list[str] = ['Finger', 'Hand', 'Joint']
6
- class Finger:
7
- def get_joint_position(self) -> numpy.typing.NDArray[numpy.int32]:
8
- ...
9
- def joint(self, index: typing.SupportsInt) -> Joint:
10
- ...
11
- def read_joint_position(self) -> numpy.typing.NDArray[numpy.int32]:
12
- ...
13
- async def read_joint_position_async(self) -> numpy.typing.NDArray[numpy.int32]:
14
- ...
15
- def read_joint_position_unchecked(self) -> None:
16
- ...
17
- @typing.overload
18
- def write_joint_control_mode(self, value: numpy.uint16) -> None:
19
- ...
20
- @typing.overload
21
- def write_joint_control_mode(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
22
- ...
23
- @typing.overload
24
- async def write_joint_control_mode_async(self, value: numpy.uint16) -> None:
25
- ...
26
- @typing.overload
27
- async def write_joint_control_mode_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
28
- ...
29
- @typing.overload
30
- def write_joint_control_mode_unchecked(self, value: numpy.uint16) -> None:
31
- ...
32
- @typing.overload
33
- def write_joint_control_mode_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
34
- ...
35
- @typing.overload
36
- def write_joint_control_position(self, value: numpy.int32) -> None:
37
- ...
38
- @typing.overload
39
- def write_joint_control_position(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.int32]) -> None:
40
- ...
41
- @typing.overload
42
- async def write_joint_control_position_async(self, value: numpy.int32) -> None:
43
- ...
44
- @typing.overload
45
- async def write_joint_control_position_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.int32]) -> None:
46
- ...
47
- @typing.overload
48
- def write_joint_control_position_unchecked(self, value: numpy.int32) -> None:
49
- ...
50
- @typing.overload
51
- def write_joint_control_position_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.int32]) -> None:
52
- ...
53
- @typing.overload
54
- def write_joint_control_word(self, value: numpy.uint16) -> None:
55
- ...
56
- @typing.overload
57
- def write_joint_control_word(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
58
- ...
59
- @typing.overload
60
- async def write_joint_control_word_async(self, value: numpy.uint16) -> None:
61
- ...
62
- @typing.overload
63
- async def write_joint_control_word_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
64
- ...
65
- @typing.overload
66
- def write_joint_control_word_unchecked(self, value: numpy.uint16) -> None:
67
- ...
68
- @typing.overload
69
- def write_joint_control_word_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
70
- ...
71
- @typing.overload
72
- def write_joint_sin_level(self, value: numpy.uint16) -> None:
73
- ...
74
- @typing.overload
75
- def write_joint_sin_level(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
76
- ...
77
- @typing.overload
78
- async def write_joint_sin_level_async(self, value: numpy.uint16) -> None:
79
- ...
80
- @typing.overload
81
- async def write_joint_sin_level_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
82
- ...
83
- @typing.overload
84
- def write_joint_sin_level_unchecked(self, value: numpy.uint16) -> None:
85
- ...
86
- @typing.overload
87
- def write_joint_sin_level_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
88
- ...
89
- class Hand:
90
- def __init__(self, usb_vid: typing.SupportsInt = 1155, usb_pid: typing.SupportsInt = 22336) -> None:
91
- ...
92
- def finger(self, index: typing.SupportsInt) -> Finger:
93
- ...
94
- def get_firmware_date(self) -> numpy.uint32:
95
- ...
96
- def get_firmware_version(self) -> numpy.uint32:
97
- ...
98
- def get_input_voltage(self) -> numpy.float32:
99
- ...
100
- def get_joint_position(self) -> numpy.typing.NDArray[numpy.int32]:
101
- ...
102
- def get_mcu_temperature(self) -> numpy.float32:
103
- ...
104
- def get_system_time(self) -> numpy.uint32:
105
- ...
106
- def pdo_write_unchecked(self, arg0: typing.Annotated[numpy.typing.ArrayLike, numpy.int32]) -> None:
107
- ...
108
- def read_firmware_date(self) -> numpy.uint32:
109
- ...
110
- async def read_firmware_date_async(self) -> numpy.uint32:
111
- ...
112
- def read_firmware_date_unchecked(self) -> None:
113
- ...
114
- def read_firmware_version(self) -> numpy.uint32:
115
- ...
116
- async def read_firmware_version_async(self) -> numpy.uint32:
117
- ...
118
- def read_firmware_version_unchecked(self) -> None:
119
- ...
120
- def read_input_voltage(self) -> numpy.float32:
121
- ...
122
- async def read_input_voltage_async(self) -> numpy.float32:
123
- ...
124
- def read_input_voltage_unchecked(self) -> None:
125
- ...
126
- def read_joint_position(self) -> numpy.typing.NDArray[numpy.int32]:
127
- ...
128
- async def read_joint_position_async(self) -> numpy.typing.NDArray[numpy.int32]:
129
- ...
130
- def read_joint_position_unchecked(self) -> None:
131
- ...
132
- def read_mcu_temperature(self) -> numpy.float32:
133
- ...
134
- async def read_mcu_temperature_async(self) -> numpy.float32:
135
- ...
136
- def read_mcu_temperature_unchecked(self) -> None:
137
- ...
138
- def read_system_time(self) -> numpy.uint32:
139
- ...
140
- async def read_system_time_async(self) -> numpy.uint32:
141
- ...
142
- def read_system_time_unchecked(self) -> None:
143
- ...
144
- def write_global_tpdo_id(self, value: numpy.uint16) -> None:
145
- ...
146
- async def write_global_tpdo_id_async(self, value: numpy.uint16) -> None:
147
- ...
148
- def write_global_tpdo_id_unchecked(self, value: numpy.uint16) -> None:
149
- ...
150
- @typing.overload
151
- def write_joint_control_mode(self, value: numpy.uint16) -> None:
152
- ...
153
- @typing.overload
154
- def write_joint_control_mode(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
155
- ...
156
- @typing.overload
157
- async def write_joint_control_mode_async(self, value: numpy.uint16) -> None:
158
- ...
159
- @typing.overload
160
- async def write_joint_control_mode_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
161
- ...
162
- @typing.overload
163
- def write_joint_control_mode_unchecked(self, value: numpy.uint16) -> None:
164
- ...
165
- @typing.overload
166
- def write_joint_control_mode_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
167
- ...
168
- @typing.overload
169
- def write_joint_control_position(self, value: numpy.int32) -> None:
170
- ...
171
- @typing.overload
172
- def write_joint_control_position(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.int32]) -> None:
173
- ...
174
- @typing.overload
175
- async def write_joint_control_position_async(self, value: numpy.int32) -> None:
176
- ...
177
- @typing.overload
178
- async def write_joint_control_position_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.int32]) -> None:
179
- ...
180
- @typing.overload
181
- def write_joint_control_position_unchecked(self, value: numpy.int32) -> None:
182
- ...
183
- @typing.overload
184
- def write_joint_control_position_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.int32]) -> None:
185
- ...
186
- @typing.overload
187
- def write_joint_control_word(self, value: numpy.uint16) -> None:
188
- ...
189
- @typing.overload
190
- def write_joint_control_word(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
191
- ...
192
- @typing.overload
193
- async def write_joint_control_word_async(self, value: numpy.uint16) -> None:
194
- ...
195
- @typing.overload
196
- async def write_joint_control_word_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
197
- ...
198
- @typing.overload
199
- def write_joint_control_word_unchecked(self, value: numpy.uint16) -> None:
200
- ...
201
- @typing.overload
202
- def write_joint_control_word_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
203
- ...
204
- @typing.overload
205
- def write_joint_sin_level(self, value: numpy.uint16) -> None:
206
- ...
207
- @typing.overload
208
- def write_joint_sin_level(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
209
- ...
210
- @typing.overload
211
- async def write_joint_sin_level_async(self, value: numpy.uint16) -> None:
212
- ...
213
- @typing.overload
214
- async def write_joint_sin_level_async(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
215
- ...
216
- @typing.overload
217
- def write_joint_sin_level_unchecked(self, value: numpy.uint16) -> None:
218
- ...
219
- @typing.overload
220
- def write_joint_sin_level_unchecked(self, value_array: typing.Annotated[numpy.typing.ArrayLike, numpy.uint16]) -> None:
221
- ...
222
- def write_pdo_enabled(self, value: numpy.uint8) -> None:
223
- ...
224
- async def write_pdo_enabled_async(self, value: numpy.uint8) -> None:
225
- ...
226
- def write_pdo_enabled_unchecked(self, value: numpy.uint8) -> None:
227
- ...
228
- def write_pdo_interval(self, value: numpy.uint32) -> None:
229
- ...
230
- async def write_pdo_interval_async(self, value: numpy.uint32) -> None:
231
- ...
232
- def write_pdo_interval_unchecked(self, value: numpy.uint32) -> None:
233
- ...
234
- class Joint:
235
- def get_joint_position(self) -> numpy.int32:
236
- ...
237
- def read_joint_position(self) -> numpy.int32:
238
- ...
239
- async def read_joint_position_async(self) -> numpy.int32:
240
- ...
241
- def read_joint_position_unchecked(self) -> None:
242
- ...
243
- def write_joint_control_mode(self, value: numpy.uint16) -> None:
244
- ...
245
- async def write_joint_control_mode_async(self, value: numpy.uint16) -> None:
246
- ...
247
- def write_joint_control_mode_unchecked(self, value: numpy.uint16) -> None:
248
- ...
249
- def write_joint_control_position(self, value: numpy.int32) -> None:
250
- ...
251
- async def write_joint_control_position_async(self, value: numpy.int32) -> None:
252
- ...
253
- def write_joint_control_position_unchecked(self, value: numpy.int32) -> None:
254
- ...
255
- def write_joint_control_word(self, value: numpy.uint16) -> None:
256
- ...
257
- async def write_joint_control_word_async(self, value: numpy.uint16) -> None:
258
- ...
259
- def write_joint_control_word_unchecked(self, value: numpy.uint16) -> None:
260
- ...
261
- def write_joint_sin_level(self, value: numpy.uint16) -> None:
262
- ...
263
- async def write_joint_sin_level_async(self, value: numpy.uint16) -> None:
264
- ...
265
- def write_joint_sin_level_unchecked(self, value: numpy.uint16) -> None:
266
- ...
@@ -1,16 +0,0 @@
1
- wujihandpy/__init__.py,sha256=DO3xWg1FjXJAaT-Mp6uIXExK9_t-VVGX_o6J7FqRKic,149
2
- wujihandpy/_core.cpython-311-x86_64-linux-gnu.so,sha256=iZXr8Wde8v8-8fB0SUk9bIk44uX0HUkQfK33OayHaKA,369841
3
- wujihandpy/_core.pyi,sha256=HRg3hYg3Jqq66OnPwYnm7bmeCTa8xdu48Qc2aelgSOs,10985
4
- wujihandpy/_version.py,sha256=L7FNNupNt3DNk5BEVAhGB1zDwhUSqafOGAfWjsowcNw,712
5
- wujihandpy.libs/libblkid-a9167753.so.1.1.0,sha256=XVspUZDmtSMamCgSYDrDYNC-g6agPQCkqrDE0yb8sdY,356897
6
- wujihandpy.libs/libmount-ec61bd71.so.1.1.0,sha256=8EmOB9QqeXTyAh0aE20fn-QVuG3vsF66wBcgZ6aX2V4,393873
7
- wujihandpy.libs/libpcre2-8-516f4c9d.so.0.7.1,sha256=IcbljW_oKuAVlrAwKz8qtRZxfi1sQH_iKxPSoNpzsmU,547745
8
- wujihandpy.libs/libselinux-d0805dcb.so.1,sha256=iYGaLO-LIy5-WEihMiXHpeJUXyq56DDqGU49JbpfTu4,195097
9
- wujihandpy.libs/libudev-9765ffbd.so.1.6.11,sha256=32i9UQ4dXVdXAdwJfzJd7T9GMKvkkr42mIWW9mOGrI4,677489
10
- wujihandpy.libs/libusb-1-1b307d35.0.so.0.2.0,sha256=5crhlK2KrW6d1ZRAWqh3dYy93CPE4KekXTbLeGGFIjw,126777
11
- wujihandpy.libs/libuuid-95b83d40.so.1.3.0,sha256=Bj-_E8XyWfgC65o6pTuT9qLNcuA97EYDyCUUOfDR2q0,38041
12
- wujihandpy.libs/libwujihandcpp-443a855b.so,sha256=kKiTjxycyISQ-CcfzGkZ2hcVYMqApjU7jmd7PocynOU,68809
13
- wujihandpy-0.2.1.dist-info/METADATA,sha256=n4G89h62p-vq-HiSIF7hNpuSDIiaa6axAUwmtdIYWj0,7084
14
- wujihandpy-0.2.1.dist-info/WHEEL,sha256=0nVYFYtHP36mg9PDPBgwu1BNnaNOMi9iSL0fSWdrzR4,118
15
- wujihandpy-0.2.1.dist-info/RECORD,,
16
- wujihandpy-0.2.1.dist-info/licenses/LICENSE,sha256=OLJ-MVXgwcjW8-kJ56ADWaMCCF39muljtSqRy74lr6M,1072
Binary file