litearm-python 1.2.2__tar.gz → 1.2.4__tar.gz
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.
- {litearm_python-1.2.2/src/litearm_python.egg-info → litearm_python-1.2.4}/PKG-INFO +32 -16
- {litearm_python-1.2.2 → litearm_python-1.2.4}/README.md +13 -14
- litearm_python-1.2.4/pyproject.toml +49 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/__init__.py +1 -1
- {litearm_python-1.2.2 → litearm_python-1.2.4/src/litearm_python.egg-info}/PKG-INFO +32 -16
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_package_metadata.py +1 -3
- litearm_python-1.2.2/pyproject.toml +0 -27
- {litearm_python-1.2.2 → litearm_python-1.2.4}/LICENSE +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/setup.cfg +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/__main__.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/_protocol.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/_rot.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/arm.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/cart.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/diagnostics.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/errors.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/log.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/model.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/params.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/payload.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/py.typed +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/state.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/testing.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/tool.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm/transport.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm_python.egg-info/SOURCES.txt +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm_python.egg-info/dependency_links.txt +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm_python.egg-info/entry_points.txt +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm_python.egg-info/requires.txt +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm_python.egg-info/top_level.txt +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_ack_echo.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_arm_offline.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_banner.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_capability.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_cart_errors.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_cart_protocol.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_cart_queue.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_cart_wait.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_cli.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_dfu.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_diagnostics.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_doc_examples.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_error_codes.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_error_hierarchy.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_ff_io.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_fork_guard.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_frame_ownership.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_full_coverage.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_home.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_ik_bench.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_license.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_lifecycle.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_live.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_log.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_model.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_msg.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_offline.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_params.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_payload.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_protocol_crc.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_protocol_sync.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_public_api.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_request_and_get.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_silent_noops.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_status_layout.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_teardown.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_tool_offset.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_transport.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_transport_injection.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_transport_threadsafe.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_zero_g.py +0 -0
- {litearm_python-1.2.2 → litearm_python-1.2.4}/tests/test_zero_g_cart_guard.py +0 -0
|
@@ -1,8 +1,25 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: litearm-python
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.4
|
|
4
4
|
Summary: Python SDK for the LiteArm robotic arm
|
|
5
|
-
|
|
5
|
+
Author: NEXFORM ROBOTICS
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
Project-URL: Repository, https://github.com/nexform-tech/litearm-python
|
|
8
|
+
Project-URL: Issues, https://github.com/nexform-tech/litearm-python/issues
|
|
9
|
+
Project-URL: Documentation, https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md
|
|
10
|
+
Keywords: litearm,robotic-arm,robot-arm,robotics,serial,stm32,sdk
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Scientific/Engineering
|
|
22
|
+
Classifier: Typing :: Typed
|
|
6
23
|
Requires-Python: >=3.9
|
|
7
24
|
Description-Content-Type: text/markdown
|
|
8
25
|
License-File: LICENSE
|
|
@@ -17,7 +34,7 @@ Python SDK for the LiteArm robotic arm: drive the arm from a PC over one USB ser
|
|
|
17
34
|
straight to its firmware — no server or middleware in between. Trajectory planning, kinematics
|
|
18
35
|
and dynamics are all carried by the firmware.
|
|
19
36
|
|
|
20
|
-
> Full interface reference: [docs/DEVELOPER_GUIDE.md](docs/DEVELOPER_GUIDE.md).
|
|
37
|
+
> Full interface reference: [docs/DEVELOPER_GUIDE.md](https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md).
|
|
21
38
|
|
|
22
39
|
## Features
|
|
23
40
|
|
|
@@ -41,13 +58,19 @@ and dynamics are all carried by the firmware.
|
|
|
41
58
|
| Firmware | `Litearm1.5.0` or later |
|
|
42
59
|
| Connection | USB CDC serial, VID:PID `1d50:606f` |
|
|
43
60
|
|
|
44
|
-
From
|
|
61
|
+
From PyPI:
|
|
45
62
|
|
|
46
63
|
```bash
|
|
47
|
-
pip install -
|
|
64
|
+
pip install litearm-python
|
|
48
65
|
python3 -c "import litearm; print(litearm.__version__)" # verify
|
|
49
66
|
```
|
|
50
67
|
|
|
68
|
+
Or install from a checkout:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
pip install -e .
|
|
72
|
+
```
|
|
73
|
+
|
|
51
74
|
Linux needs serial permissions — check what the device node itself says first:
|
|
52
75
|
|
|
53
76
|
```bash
|
|
@@ -225,7 +248,7 @@ payload is composited in as a point mass), so nothing on the PC side needs a dyn
|
|
|
225
248
|
nothing new is pulled in as a dependency. The **baseline is not optional**: subtracting it is what
|
|
226
249
|
cancels the arm's own model error — an absolute solve feeds that error straight into the answer.
|
|
227
250
|
The probe's side effects and the acceptance thresholds are in §5.16 of
|
|
228
|
-
[the developer guide](docs/DEVELOPER_GUIDE.md).
|
|
251
|
+
[the developer guide](https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md).
|
|
229
252
|
|
|
230
253
|
### Life / safety
|
|
231
254
|
|
|
@@ -297,13 +320,6 @@ for s in r.samples()[:3]:
|
|
|
297
320
|
print(arm.diag.kin_bench().value) # CAN link diagnostic counters
|
|
298
321
|
```
|
|
299
322
|
|
|
300
|
-
### License and activation
|
|
301
|
-
|
|
302
|
-
An arm that has never been activated rejects `enable()` with `ERR{0x10,0x08}` and answers every
|
|
303
|
-
other command normally, so it stays diagnosable. `arm.license()` reads the record — a bare
|
|
304
|
-
`LicenseInfo`, not a `Msg`; `arm.activate()` submits a vendor-issued credential and needs
|
|
305
|
-
`disable()` first. See [the developer guide §5.15](docs/DEVELOPER_GUIDE.md#515-license-and-activation).
|
|
306
|
-
|
|
307
323
|
### Persistence
|
|
308
324
|
|
|
309
325
|
```python
|
|
@@ -344,7 +360,7 @@ or add `~/.local/bin` to `PATH`.
|
|
|
344
360
|
|
|
345
361
|
## Things to watch out for
|
|
346
362
|
|
|
347
|
-
Start with the [troubleshooting guide](TROUBLESHOOTING.md): it has ready-made commands for
|
|
363
|
+
Start with the [troubleshooting guide](https://github.com/nexform-tech/litearm-python/blob/main/TROUBLESHOOTING.md): it has ready-made commands for
|
|
348
364
|
finding who holds the serial port, what to do about each `enable()` rejection code, and how to
|
|
349
365
|
tell Cartesian failures apart.
|
|
350
366
|
|
|
@@ -452,7 +468,7 @@ the motor bus.
|
|
|
452
468
|
|
|
453
469
|
## Examples
|
|
454
470
|
|
|
455
|
-
See [examples/README.md](examples/README.md):
|
|
471
|
+
See [examples/README.md](https://github.com/nexform-tech/litearm-python/blob/main/examples/README.md):
|
|
456
472
|
|
|
457
473
|
- `01_hello.py` — handshake + firmware version + reading state
|
|
458
474
|
- `02_movej.py` — joint motion
|
|
@@ -505,4 +521,4 @@ On Windows use `env.ps1` / `env.cmd` and `run_example.ps1` / `run_example.cmd`.
|
|
|
505
521
|
|
|
506
522
|
## License
|
|
507
523
|
|
|
508
|
-
Apache License 2.0 — see [LICENSE](LICENSE).
|
|
524
|
+
Apache License 2.0 — see [LICENSE](https://github.com/nexform-tech/litearm-python/blob/main/LICENSE).
|
|
@@ -4,7 +4,7 @@ Python SDK for the LiteArm robotic arm: drive the arm from a PC over one USB ser
|
|
|
4
4
|
straight to its firmware — no server or middleware in between. Trajectory planning, kinematics
|
|
5
5
|
and dynamics are all carried by the firmware.
|
|
6
6
|
|
|
7
|
-
> Full interface reference: [docs/DEVELOPER_GUIDE.md](docs/DEVELOPER_GUIDE.md).
|
|
7
|
+
> Full interface reference: [docs/DEVELOPER_GUIDE.md](https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md).
|
|
8
8
|
|
|
9
9
|
## Features
|
|
10
10
|
|
|
@@ -28,13 +28,19 @@ and dynamics are all carried by the firmware.
|
|
|
28
28
|
| Firmware | `Litearm1.5.0` or later |
|
|
29
29
|
| Connection | USB CDC serial, VID:PID `1d50:606f` |
|
|
30
30
|
|
|
31
|
-
From
|
|
31
|
+
From PyPI:
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
pip install -
|
|
34
|
+
pip install litearm-python
|
|
35
35
|
python3 -c "import litearm; print(litearm.__version__)" # verify
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
+
Or install from a checkout:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
pip install -e .
|
|
42
|
+
```
|
|
43
|
+
|
|
38
44
|
Linux needs serial permissions — check what the device node itself says first:
|
|
39
45
|
|
|
40
46
|
```bash
|
|
@@ -212,7 +218,7 @@ payload is composited in as a point mass), so nothing on the PC side needs a dyn
|
|
|
212
218
|
nothing new is pulled in as a dependency. The **baseline is not optional**: subtracting it is what
|
|
213
219
|
cancels the arm's own model error — an absolute solve feeds that error straight into the answer.
|
|
214
220
|
The probe's side effects and the acceptance thresholds are in §5.16 of
|
|
215
|
-
[the developer guide](docs/DEVELOPER_GUIDE.md).
|
|
221
|
+
[the developer guide](https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md).
|
|
216
222
|
|
|
217
223
|
### Life / safety
|
|
218
224
|
|
|
@@ -284,13 +290,6 @@ for s in r.samples()[:3]:
|
|
|
284
290
|
print(arm.diag.kin_bench().value) # CAN link diagnostic counters
|
|
285
291
|
```
|
|
286
292
|
|
|
287
|
-
### License and activation
|
|
288
|
-
|
|
289
|
-
An arm that has never been activated rejects `enable()` with `ERR{0x10,0x08}` and answers every
|
|
290
|
-
other command normally, so it stays diagnosable. `arm.license()` reads the record — a bare
|
|
291
|
-
`LicenseInfo`, not a `Msg`; `arm.activate()` submits a vendor-issued credential and needs
|
|
292
|
-
`disable()` first. See [the developer guide §5.15](docs/DEVELOPER_GUIDE.md#515-license-and-activation).
|
|
293
|
-
|
|
294
293
|
### Persistence
|
|
295
294
|
|
|
296
295
|
```python
|
|
@@ -331,7 +330,7 @@ or add `~/.local/bin` to `PATH`.
|
|
|
331
330
|
|
|
332
331
|
## Things to watch out for
|
|
333
332
|
|
|
334
|
-
Start with the [troubleshooting guide](TROUBLESHOOTING.md): it has ready-made commands for
|
|
333
|
+
Start with the [troubleshooting guide](https://github.com/nexform-tech/litearm-python/blob/main/TROUBLESHOOTING.md): it has ready-made commands for
|
|
335
334
|
finding who holds the serial port, what to do about each `enable()` rejection code, and how to
|
|
336
335
|
tell Cartesian failures apart.
|
|
337
336
|
|
|
@@ -439,7 +438,7 @@ the motor bus.
|
|
|
439
438
|
|
|
440
439
|
## Examples
|
|
441
440
|
|
|
442
|
-
See [examples/README.md](examples/README.md):
|
|
441
|
+
See [examples/README.md](https://github.com/nexform-tech/litearm-python/blob/main/examples/README.md):
|
|
443
442
|
|
|
444
443
|
- `01_hello.py` — handshake + firmware version + reading state
|
|
445
444
|
- `02_movej.py` — joint motion
|
|
@@ -492,4 +491,4 @@ On Windows use `env.ps1` / `env.cmd` and `run_example.ps1` / `run_example.cmd`.
|
|
|
492
491
|
|
|
493
492
|
## License
|
|
494
493
|
|
|
495
|
-
Apache License 2.0 — see [LICENSE](LICENSE).
|
|
494
|
+
Apache License 2.0 — see [LICENSE](https://github.com/nexform-tech/litearm-python/blob/main/LICENSE).
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=77"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "litearm-python"
|
|
7
|
+
version = "1.2.4"
|
|
8
|
+
description = "Python SDK for the LiteArm robotic arm"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
|
+
license = "Apache-2.0"
|
|
12
|
+
license-files = ["LICENSE"]
|
|
13
|
+
authors = [{ name = "NEXFORM ROBOTICS" }]
|
|
14
|
+
keywords = ["litearm", "robotic-arm", "robot-arm", "robotics", "serial", "stm32", "sdk"]
|
|
15
|
+
classifiers = [
|
|
16
|
+
"Development Status :: 4 - Beta",
|
|
17
|
+
"Intended Audience :: Developers",
|
|
18
|
+
"Operating System :: OS Independent",
|
|
19
|
+
"Programming Language :: Python :: 3",
|
|
20
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
21
|
+
"Programming Language :: Python :: 3.9",
|
|
22
|
+
"Programming Language :: Python :: 3.10",
|
|
23
|
+
"Programming Language :: Python :: 3.11",
|
|
24
|
+
"Programming Language :: Python :: 3.12",
|
|
25
|
+
"Programming Language :: Python :: 3.13",
|
|
26
|
+
"Topic :: Scientific/Engineering",
|
|
27
|
+
"Typing :: Typed",
|
|
28
|
+
]
|
|
29
|
+
dependencies = ["pyserial>=3.4"]
|
|
30
|
+
|
|
31
|
+
[project.optional-dependencies]
|
|
32
|
+
dev = ["pytest>=7"]
|
|
33
|
+
|
|
34
|
+
[project.urls]
|
|
35
|
+
Repository = "https://github.com/nexform-tech/litearm-python"
|
|
36
|
+
Issues = "https://github.com/nexform-tech/litearm-python/issues"
|
|
37
|
+
Documentation = "https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md"
|
|
38
|
+
|
|
39
|
+
[project.scripts]
|
|
40
|
+
litearm-python = "litearm.arm:main"
|
|
41
|
+
|
|
42
|
+
[tool.pytest.ini_options]
|
|
43
|
+
testpaths = ["tests"]
|
|
44
|
+
|
|
45
|
+
[tool.setuptools.packages.find]
|
|
46
|
+
where = ["src"]
|
|
47
|
+
|
|
48
|
+
[tool.setuptools.package-data]
|
|
49
|
+
litearm = ["py.typed"]
|
|
@@ -92,7 +92,7 @@ from litearm.state import JointState, RobotState
|
|
|
92
92
|
from litearm.tool import TcpOffset
|
|
93
93
|
from litearm.transport import find_cdc_port
|
|
94
94
|
|
|
95
|
-
__version__ = "1.2.
|
|
95
|
+
__version__ = "1.2.4"
|
|
96
96
|
|
|
97
97
|
__all__ = [
|
|
98
98
|
"Arm", "Msg", "LicenseInfo", "RobotState", "JointState", "find_cdc_port", "main",
|
|
@@ -1,8 +1,25 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: litearm-python
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.4
|
|
4
4
|
Summary: Python SDK for the LiteArm robotic arm
|
|
5
|
-
|
|
5
|
+
Author: NEXFORM ROBOTICS
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
Project-URL: Repository, https://github.com/nexform-tech/litearm-python
|
|
8
|
+
Project-URL: Issues, https://github.com/nexform-tech/litearm-python/issues
|
|
9
|
+
Project-URL: Documentation, https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md
|
|
10
|
+
Keywords: litearm,robotic-arm,robot-arm,robotics,serial,stm32,sdk
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Scientific/Engineering
|
|
22
|
+
Classifier: Typing :: Typed
|
|
6
23
|
Requires-Python: >=3.9
|
|
7
24
|
Description-Content-Type: text/markdown
|
|
8
25
|
License-File: LICENSE
|
|
@@ -17,7 +34,7 @@ Python SDK for the LiteArm robotic arm: drive the arm from a PC over one USB ser
|
|
|
17
34
|
straight to its firmware — no server or middleware in between. Trajectory planning, kinematics
|
|
18
35
|
and dynamics are all carried by the firmware.
|
|
19
36
|
|
|
20
|
-
> Full interface reference: [docs/DEVELOPER_GUIDE.md](docs/DEVELOPER_GUIDE.md).
|
|
37
|
+
> Full interface reference: [docs/DEVELOPER_GUIDE.md](https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md).
|
|
21
38
|
|
|
22
39
|
## Features
|
|
23
40
|
|
|
@@ -41,13 +58,19 @@ and dynamics are all carried by the firmware.
|
|
|
41
58
|
| Firmware | `Litearm1.5.0` or later |
|
|
42
59
|
| Connection | USB CDC serial, VID:PID `1d50:606f` |
|
|
43
60
|
|
|
44
|
-
From
|
|
61
|
+
From PyPI:
|
|
45
62
|
|
|
46
63
|
```bash
|
|
47
|
-
pip install -
|
|
64
|
+
pip install litearm-python
|
|
48
65
|
python3 -c "import litearm; print(litearm.__version__)" # verify
|
|
49
66
|
```
|
|
50
67
|
|
|
68
|
+
Or install from a checkout:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
pip install -e .
|
|
72
|
+
```
|
|
73
|
+
|
|
51
74
|
Linux needs serial permissions — check what the device node itself says first:
|
|
52
75
|
|
|
53
76
|
```bash
|
|
@@ -225,7 +248,7 @@ payload is composited in as a point mass), so nothing on the PC side needs a dyn
|
|
|
225
248
|
nothing new is pulled in as a dependency. The **baseline is not optional**: subtracting it is what
|
|
226
249
|
cancels the arm's own model error — an absolute solve feeds that error straight into the answer.
|
|
227
250
|
The probe's side effects and the acceptance thresholds are in §5.16 of
|
|
228
|
-
[the developer guide](docs/DEVELOPER_GUIDE.md).
|
|
251
|
+
[the developer guide](https://github.com/nexform-tech/litearm-python/blob/main/docs/DEVELOPER_GUIDE.md).
|
|
229
252
|
|
|
230
253
|
### Life / safety
|
|
231
254
|
|
|
@@ -297,13 +320,6 @@ for s in r.samples()[:3]:
|
|
|
297
320
|
print(arm.diag.kin_bench().value) # CAN link diagnostic counters
|
|
298
321
|
```
|
|
299
322
|
|
|
300
|
-
### License and activation
|
|
301
|
-
|
|
302
|
-
An arm that has never been activated rejects `enable()` with `ERR{0x10,0x08}` and answers every
|
|
303
|
-
other command normally, so it stays diagnosable. `arm.license()` reads the record — a bare
|
|
304
|
-
`LicenseInfo`, not a `Msg`; `arm.activate()` submits a vendor-issued credential and needs
|
|
305
|
-
`disable()` first. See [the developer guide §5.15](docs/DEVELOPER_GUIDE.md#515-license-and-activation).
|
|
306
|
-
|
|
307
323
|
### Persistence
|
|
308
324
|
|
|
309
325
|
```python
|
|
@@ -344,7 +360,7 @@ or add `~/.local/bin` to `PATH`.
|
|
|
344
360
|
|
|
345
361
|
## Things to watch out for
|
|
346
362
|
|
|
347
|
-
Start with the [troubleshooting guide](TROUBLESHOOTING.md): it has ready-made commands for
|
|
363
|
+
Start with the [troubleshooting guide](https://github.com/nexform-tech/litearm-python/blob/main/TROUBLESHOOTING.md): it has ready-made commands for
|
|
348
364
|
finding who holds the serial port, what to do about each `enable()` rejection code, and how to
|
|
349
365
|
tell Cartesian failures apart.
|
|
350
366
|
|
|
@@ -452,7 +468,7 @@ the motor bus.
|
|
|
452
468
|
|
|
453
469
|
## Examples
|
|
454
470
|
|
|
455
|
-
See [examples/README.md](examples/README.md):
|
|
471
|
+
See [examples/README.md](https://github.com/nexform-tech/litearm-python/blob/main/examples/README.md):
|
|
456
472
|
|
|
457
473
|
- `01_hello.py` — handshake + firmware version + reading state
|
|
458
474
|
- `02_movej.py` — joint motion
|
|
@@ -505,4 +521,4 @@ On Windows use `env.ps1` / `env.cmd` and `run_example.ps1` / `run_example.cmd`.
|
|
|
505
521
|
|
|
506
522
|
## License
|
|
507
523
|
|
|
508
|
-
Apache License 2.0 — see [LICENSE](LICENSE).
|
|
524
|
+
Apache License 2.0 — see [LICENSE](https://github.com/nexform-tech/litearm-python/blob/main/LICENSE).
|
|
@@ -22,9 +22,7 @@ def _project_description() -> str:
|
|
|
22
22
|
|
|
23
23
|
def _project_license() -> str:
|
|
24
24
|
text = PYPROJECT.read_text(encoding="utf-8")
|
|
25
|
-
match = re.search(
|
|
26
|
-
r'^license\s*=\s*\{\s*text\s*=\s*"([^"]+)"\s*\}\s*$', text, re.MULTILINE
|
|
27
|
-
)
|
|
25
|
+
match = re.search(r'^license\s*=\s*"([^"]+)"\s*$', text, re.MULTILINE)
|
|
28
26
|
assert match is not None, "pyproject.toml has no [project].license"
|
|
29
27
|
return match.group(1)
|
|
30
28
|
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
[build-system]
|
|
2
|
-
requires = ["setuptools>=61"]
|
|
3
|
-
build-backend = "setuptools.build_meta"
|
|
4
|
-
|
|
5
|
-
[project]
|
|
6
|
-
name = "litearm-python"
|
|
7
|
-
version = "1.2.2"
|
|
8
|
-
description = "Python SDK for the LiteArm robotic arm"
|
|
9
|
-
readme = "README.md"
|
|
10
|
-
requires-python = ">=3.9"
|
|
11
|
-
license = { text = "Apache-2.0" }
|
|
12
|
-
dependencies = ["pyserial>=3.4"]
|
|
13
|
-
|
|
14
|
-
[project.optional-dependencies]
|
|
15
|
-
dev = ["pytest>=7"]
|
|
16
|
-
|
|
17
|
-
[project.scripts]
|
|
18
|
-
litearm-python = "litearm.arm:main"
|
|
19
|
-
|
|
20
|
-
[tool.pytest.ini_options]
|
|
21
|
-
testpaths = ["tests"]
|
|
22
|
-
|
|
23
|
-
[tool.setuptools.packages.find]
|
|
24
|
-
where = ["src"]
|
|
25
|
-
|
|
26
|
-
[tool.setuptools.package-data]
|
|
27
|
-
litearm = ["py.typed"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{litearm_python-1.2.2 → litearm_python-1.2.4}/src/litearm_python.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|