embodik 0.1.1__tar.gz → 0.4.1__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.
- {embodik-0.1.1 → embodik-0.4.1}/.gitignore +4 -0
- embodik-0.4.1/CHANGELOG.md +177 -0
- {embodik-0.1.1 → embodik-0.4.1}/CMakeLists.txt +1 -1
- embodik-0.4.1/PKG-INFO +646 -0
- embodik-0.4.1/README.md +594 -0
- {embodik-0.1.1 → embodik-0.4.1}/cpp_core/include/embodik/kinematics_solver.hpp +76 -19
- {embodik-0.1.1 → embodik-0.4.1}/cpp_core/include/embodik/robot_model.hpp +20 -0
- {embodik-0.1.1 → embodik-0.4.1}/cpp_core/include/embodik/types.hpp +11 -0
- {embodik-0.1.1 → embodik-0.4.1}/cpp_core/src/kinematics_solver.cpp +481 -56
- {embodik-0.1.1 → embodik-0.4.1}/cpp_core/src/robot_model.cpp +71 -0
- {embodik-0.1.1 → embodik-0.4.1}/docs/api/index.md +7 -0
- {embodik-0.1.1 → embodik-0.4.1}/docs/api/kinematics_solver.md +10 -0
- {embodik-0.1.1 → embodik-0.4.1}/docs/examples/index.md +19 -2
- embodik-0.4.1/docs/gpu_solvers.md +83 -0
- {embodik-0.1.1 → embodik-0.4.1}/docs/index.md +1 -0
- embodik-0.4.1/docs/installation.md +491 -0
- {embodik-0.1.1 → embodik-0.4.1}/examples/01_basic_ik_simple.py +5 -7
- {embodik-0.1.1 → embodik-0.4.1}/examples/02_collision_aware_IK.py +286 -3
- embodik-0.4.1/examples/03_teleop_ik.py +851 -0
- embodik-0.4.1/examples/04_gpu_batch_ik.py +241 -0
- embodik-0.4.1/examples/05_gpu_collision_batch.py +218 -0
- embodik-0.4.1/examples/06_gpu_solver_demo.py +457 -0
- embodik-0.4.1/examples/07_parallel_trajectory_tracking.py +850 -0
- embodik-0.4.1/fn_velocity_solve.casadi +1 -0
- {embodik-0.1.1 → embodik-0.4.1}/mkdocs.yml +1 -0
- {embodik-0.1.1 → embodik-0.4.1}/pixi.lock +2632 -1059
- {embodik-0.1.1 → embodik-0.4.1}/pixi.toml +49 -2
- {embodik-0.1.1 → embodik-0.4.1}/pyproject.toml +21 -2
- {embodik-0.1.1 → embodik-0.4.1}/python/embodik/__init__.py +26 -5
- embodik-0.4.1/python/embodik/gpu/__init__.py +112 -0
- embodik-0.4.1/python/embodik/gpu/casadi_fi_pesns.py +382 -0
- embodik-0.4.1/python/embodik/gpu/casadi_pph_sns.py +432 -0
- embodik-0.4.1/python/embodik/gpu/export_casadi_velocity_solve.py +177 -0
- embodik-0.4.1/python/embodik/gpu/torch_kinematics.py +300 -0
- embodik-0.4.1/python/embodik/gpu/warp_collision.py +415 -0
- embodik-0.4.1/python/embodik/gpu_solver.py +419 -0
- {embodik-0.1.1 → embodik-0.4.1}/python/embodik/utils.py +13 -15
- {embodik-0.1.1 → embodik-0.4.1}/python/embodik/viser_helpers.py +2 -3
- {embodik-0.1.1 → embodik-0.4.1}/python/embodik/visualization.py +5 -27
- {embodik-0.1.1 → embodik-0.4.1}/python/embodik/visualization_pinocchio.py +2 -3
- {embodik-0.1.1 → embodik-0.4.1}/python_bindings/src/bindings.cpp +22 -4
- {embodik-0.1.1 → embodik-0.4.1}/python_bindings/src/kinematics_solver_bindings.cpp +39 -2
- {embodik-0.1.1 → embodik-0.4.1}/python_bindings/src/robot_model_bindings.cpp +175 -0
- embodik-0.4.1/scripts/benchmark_fi_pesns.py +488 -0
- embodik-0.4.1/scripts/benchmark_gpu_batched.py +322 -0
- embodik-0.4.1/scripts/benchmark_pph_sns_batched.py +155 -0
- embodik-0.4.1/scripts/benchmark_pph_sns_comparison.py +299 -0
- embodik-0.4.1/scripts/export_pph_sns.py +43 -0
- embodik-0.4.1/scripts/install_cusadi.sh +33 -0
- embodik-0.4.1/scripts/microbench_solve_velocity.py +149 -0
- embodik-0.4.1/scripts/test_gpu_accuracy.py +51 -0
- embodik-0.4.1/scripts/test_pph_sns_cusadi.py +149 -0
- {embodik-0.1.1 → embodik-0.4.1}/scripts/upload_pypi.sh +8 -4
- embodik-0.4.1/test/test_fi_pesns.py +413 -0
- embodik-0.4.1/test/test_gpu_collision.py +404 -0
- embodik-0.4.1/test/test_gpu_solver.py +424 -0
- embodik-0.4.1/test/test_joint_limit_recovery.py +189 -0
- embodik-0.1.1/CHANGELOG.md +0 -49
- embodik-0.1.1/PKG-INFO +0 -309
- embodik-0.1.1/README.md +0 -265
- embodik-0.1.1/docs/installation.md +0 -264
- embodik-0.1.1/python/embodik/_runtime_deps.py +0 -47
- {embodik-0.1.1 → embodik-0.4.1}/.gitattributes +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/.github/workflows/ci.yml +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/.github/workflows/docs.yml +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/.github/workflows/release.yml +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/CONTRIBUTING.md +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/LICENSE +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/MANIFEST.in +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/cpp_core/include/embodik/constraints.hpp +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/cpp_core/include/embodik/ik_baseline.hpp +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/cpp_core/include/embodik/tasks.hpp +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/cpp_core/src/tasks.cpp +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/docs/api/robot_model.md +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/docs/api/tasks.md +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/docs/api/utils.md +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/docs/api/visualization.md +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/docs/development.md +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/docs/examples/basic_ik.md +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/docs/examples/multi_task_ik.md +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/docs/quickstart.md +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/docs/transforms.md +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/examples/example_helpers/__init__.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/examples/example_helpers/dual_arm_ik_helper.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/examples/example_helpers/limit_profiles/alpha_extended.yaml +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/examples/example_helpers/limit_profiles/alpha_extended_all.yaml +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/examples/example_helpers/limit_profiles/beta_uniform_plus21.yaml +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/examples/robot_model_example.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/examples/utils/__init__.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/examples/utils/robot_models.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/examples/visualization_example.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/python/embodik/cli.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/python/embodik/examples/__init__.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/python/embodik/examples/basic_ik.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/python/embodik/examples/robot_model.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/python/embodik/robot_visualizer.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/python_bindings/CMakeLists.txt +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/python_bindings/src/tasks_bindings.cpp +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/scripts/patch_qhull_cmake.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/scripts/setup_pypirc.sh +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/scripts/test_cpp_extension.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/scripts/test_extension_direct.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/scripts/test_import.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/scripts/test_python_utils.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/scripts/upload_testpypi.sh +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/scripts/version.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/test/CMakeLists.txt +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/test/test_embodik.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/test/test_robot_model.cpp +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/test/test_robot_model.py +0 -0
- {embodik-0.1.1 → embodik-0.4.1}/test/test_tasks.py +0 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.4.0] - 2026-02-05
|
|
9
|
+
|
|
10
|
+
### Breaking Changes
|
|
11
|
+
- **Removed Python `pin` package from runtime dependencies**: EmbodiK now uses native C++ bindings
|
|
12
|
+
exclusively for all Pinocchio functionality. The `pip pinocchio` (`pin`) package is no longer
|
|
13
|
+
required at runtime, only at build time.
|
|
14
|
+
- This resolves numpy dependency conflicts when using EmbodiK with packages like `hmnd_robot`
|
|
15
|
+
that have different numpy version requirements
|
|
16
|
+
- All rotation utilities (log3, exp3, quaternion conversions) now use native bindings
|
|
17
|
+
- Collision distance computation now uses native `RobotModel.compute_min_collision_distance()`
|
|
18
|
+
- Visualization defaults to direct Viser (no Pinocchio ViserVisualizer dependency)
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
- **Native math utilities via nanobind**: New C++ bindings for rotation/pose math
|
|
22
|
+
- `embodik.log3(R)`: Compute axis-angle from rotation matrix (replaces `pin.log3`)
|
|
23
|
+
- `embodik.exp3(omega)`: Compute rotation matrix from axis-angle (replaces `pin.exp3`)
|
|
24
|
+
- `embodik.matrix_to_quaternion_wxyz(R)`: Convert rotation matrix to (w,x,y,z) quaternion
|
|
25
|
+
- `embodik.quaternion_wxyz_to_matrix(w,x,y,z)`: Convert quaternion to rotation matrix
|
|
26
|
+
- **Native collision distance API**: RobotModel now exposes collision distance methods
|
|
27
|
+
- `RobotModel.compute_min_collision_distance()`: Get minimum distance across all collision pairs
|
|
28
|
+
- `RobotModel.compute_collision_distances()`: Get distances for all collision pairs
|
|
29
|
+
- **Optional Pinocchio visualization**: `pip install embodik[visualization-pinocchio]` for
|
|
30
|
+
Pinocchio's ViserVisualizer (requires `pin>=3.8.0`)
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
- Visualization now defaults to direct Viser implementation (no `pin` needed)
|
|
34
|
+
- `utils.py` functions (`get_pose_error_vector`, `compute_pose_error`, `Rt`) use native bindings
|
|
35
|
+
- `visualization.py` quaternion functions use native bindings
|
|
36
|
+
- GPU collision fallback uses native `RobotModel.compute_min_collision_distance()`
|
|
37
|
+
- Removed `_runtime_deps.py` (lazy Pinocchio import no longer needed)
|
|
38
|
+
|
|
39
|
+
### Migration Guide
|
|
40
|
+
If you were using Pinocchio Python bindings directly through EmbodiK:
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
# Old (v0.3.x) - required pip pinocchio
|
|
44
|
+
import pinocchio as pin
|
|
45
|
+
R_error = pose_goal.rotation @ pose_current.rotation.T
|
|
46
|
+
error = pin.log3(R_error)
|
|
47
|
+
q = pin.Quaternion(R)
|
|
48
|
+
|
|
49
|
+
# New (v0.4.0) - no pip pinocchio needed
|
|
50
|
+
import embodik as eik
|
|
51
|
+
R_error = pose_goal.rotation @ pose_current.rotation.T
|
|
52
|
+
error = eik.log3(R_error)
|
|
53
|
+
w, x, y, z = eik.matrix_to_quaternion_wxyz(R)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
For collision distance computation:
|
|
57
|
+
|
|
58
|
+
```python
|
|
59
|
+
# Old (v0.3.x) - required pip pinocchio
|
|
60
|
+
import pinocchio as pin
|
|
61
|
+
pin.updateGeometryPlacements(model, data, collision_model, collision_data)
|
|
62
|
+
for i in range(len(collision_model.collisionPairs)):
|
|
63
|
+
pin.computeDistance(collision_model, collision_data, i)
|
|
64
|
+
dist = collision_data.distanceResults[i].min_distance
|
|
65
|
+
|
|
66
|
+
# New (v0.4.0) - native API
|
|
67
|
+
robot_model.update_configuration(q)
|
|
68
|
+
dist = robot_model.compute_min_collision_distance()
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## [0.3.0] - 2026-02-03
|
|
72
|
+
|
|
73
|
+
### Added
|
|
74
|
+
- **PPH-SNS Solver**: Alternative GPU-optimized solver (Parallel Penalized Hierarchical SNS)
|
|
75
|
+
- Soft top-k violation selection using softmax weights
|
|
76
|
+
- Limited rank-1 projector updates (1–2 violators per iteration)
|
|
77
|
+
- Achieves ~632,000 IK solves/second at batch size 10,000
|
|
78
|
+
- Benchmark comparison scripts: `benchmark-solver-comparison`, `benchmark-solver-batched`
|
|
79
|
+
- **GPU Acceleration**: Batched velocity IK solving with massive parallelism (100-500x speedup)
|
|
80
|
+
- Achieves ~670,000 IK solves/second at batch size 10,000
|
|
81
|
+
- Ideal for RL training (4096+ parallel environments), motion planning, and dataset generation
|
|
82
|
+
- GPU batched solver via CusADi-compiled CUDA kernels
|
|
83
|
+
- **FI-PeSNS Solver**: Fixed-Iteration Penalized eSNS algorithm optimized for GPU
|
|
84
|
+
- Singularity-Robust Inverse (SRINV) for numerical stability
|
|
85
|
+
- Analytical scaling for feasible task scales without iterative saturation
|
|
86
|
+
- Penalty gradient approach for constraint enforcement
|
|
87
|
+
- Fixed iterations for predictable compute time (ideal for real-time RL)
|
|
88
|
+
- **GPU Collision Detection**: GPU-accelerated collision detection via NVIDIA Warp
|
|
89
|
+
- Batched collision queries for parallel processing
|
|
90
|
+
- Experimental support for GPU-accelerated self-collision avoidance
|
|
91
|
+
- **Parallel Trajectory Tracking Demo**: Visualize 100 robot instances simultaneously tracking different trajectories
|
|
92
|
+
- Interactive demo with Viser visualization
|
|
93
|
+
- Demonstrates GPU parallelization capabilities
|
|
94
|
+
- Achieves ~50,000+ IK solves/second with GPU acceleration
|
|
95
|
+
- **Teleoperation IK Example**: Interactive IK control using Seer wireless controller (Xvisio SDK)
|
|
96
|
+
- **GPU Benchmarks and Demos**: Comprehensive benchmarking tools for GPU performance
|
|
97
|
+
- Batch IK performance benchmarks
|
|
98
|
+
- FI-PeSNS vs CPU accuracy benchmarks
|
|
99
|
+
- Collision detection benchmarks
|
|
100
|
+
- GPU solver demonstration panels
|
|
101
|
+
- **CasADi Integration**: Export and compile velocity IK functions to CUDA kernels
|
|
102
|
+
- Symbolic function export for GPU compilation
|
|
103
|
+
- CusADi integration for CUDA kernel generation
|
|
104
|
+
- **GPU Environment Support**: CUDA feature in pixi.toml with GPU-specific tasks
|
|
105
|
+
- `check-cuda`, `check-gpu`, `install-cusadi` tasks
|
|
106
|
+
- GPU demos and benchmarks via pixi tasks
|
|
107
|
+
- CUDA environment configuration
|
|
108
|
+
|
|
109
|
+
### Changed
|
|
110
|
+
- Enhanced examples with GPU acceleration support
|
|
111
|
+
- Updated dependencies to include xvisio SDK support for teleoperation examples
|
|
112
|
+
- Improved GPU documentation and setup instructions
|
|
113
|
+
|
|
114
|
+
### Dependencies
|
|
115
|
+
- Added `casadi>=3.6.0` and `torch>=2.0.0` to `[gpu]` optional dependencies
|
|
116
|
+
- Added `warp-lang>=1.0.0` to `[gpu-collision]` optional dependencies
|
|
117
|
+
- Added `xvisio>=0.3.1` to pixi dependencies for teleoperation examples
|
|
118
|
+
|
|
119
|
+
## [0.2.0] - 2026-01-30
|
|
120
|
+
|
|
121
|
+
### Added
|
|
122
|
+
- Position IK now supports `excluded_joint_indices` to lock joints during solves
|
|
123
|
+
- Position IK can enforce collision constraints during iterative solves (when configured)
|
|
124
|
+
|
|
125
|
+
### Changed
|
|
126
|
+
- Velocity solver now groups same-priority tasks to make ordering within a priority level symmetric
|
|
127
|
+
- Collision constraint computation now uses cached allow-masks to skip excluded pairs efficiently
|
|
128
|
+
- Collision recovery near `min_distance` uses deadband + adaptive push to reduce jitter and stalling
|
|
129
|
+
- Collision constraint default `nearest_points_all_pairs` set to true
|
|
130
|
+
- Collision debug evaluation is side-effect free (no solver state mutation)
|
|
131
|
+
|
|
132
|
+
### Fixed
|
|
133
|
+
- Position IK now applies collision constraints and excluded joint indices consistently with velocity IK
|
|
134
|
+
- Collision constraint pair selection now uses hysteresis across frames for stability
|
|
135
|
+
|
|
136
|
+
## [0.1.1] - 2025-01-09
|
|
137
|
+
|
|
138
|
+
### Added
|
|
139
|
+
- **PyPI Publishing**: Full wheel building and publishing workflow for TestPyPI and PyPI
|
|
140
|
+
- **`embodik-sanitize-env` CLI**: Helper to sanitize `LD_LIBRARY_PATH` for clean pip installs
|
|
141
|
+
- **`embodik-examples` CLI**: Tool to list and copy examples for pip-installed users
|
|
142
|
+
- **Built-in robot presets**: `panda` and `iiwa` presets work without `robot_presets.yaml`
|
|
143
|
+
- **sdist build support**: Source distribution builds now auto-detect PyPI `pin` wheel's Pinocchio
|
|
144
|
+
|
|
145
|
+
### Changed
|
|
146
|
+
- Simplified `_runtime_deps.py` - removed complex preloading logic, now just provides `import_pinocchio()` helper
|
|
147
|
+
- Documentation updated to recommend `venv + pip + unset LD_LIBRARY_PATH` as primary user flow
|
|
148
|
+
- ViserVisualizer now uses empty GeometryModel instead of None when collisions disabled
|
|
149
|
+
|
|
150
|
+
### Fixed
|
|
151
|
+
- Fixed `KeyError: 'pinocchio/frames/universe'` in ViserVisualizer when `load_collisions=False`
|
|
152
|
+
- Fixed RPATH for `_embodik_impl.so` to correctly find `libembodik_core.so`
|
|
153
|
+
- Fixed sdist builds failing to find Pinocchio by auto-detecting `pin` wheel's CMake config
|
|
154
|
+
- Examples now work correctly for pip-installed users via `embodik-examples --copy`
|
|
155
|
+
|
|
156
|
+
### Dependencies
|
|
157
|
+
- Added `pin>=3.8.0` to build-system requirements for sdist builds
|
|
158
|
+
- Added `pyyaml`, `robot_descriptions`, `viser`, `yourdfpy` to `[examples]` optional dependencies
|
|
159
|
+
|
|
160
|
+
## [0.1.0] - 2025-12-12
|
|
161
|
+
|
|
162
|
+
### Added
|
|
163
|
+
- Initial release of embodiK
|
|
164
|
+
- High-performance inverse kinematics solver with hierarchical task resolution
|
|
165
|
+
- Python bindings using nanobind
|
|
166
|
+
- Support for multiple task types (FrameTask, PostureTask, COMTask, JointTask, MultiJointTask)
|
|
167
|
+
- Position and velocity IK solving
|
|
168
|
+
- Optional visualization tools using Viser
|
|
169
|
+
- Comprehensive test suite
|
|
170
|
+
- Example scripts demonstrating various use cases
|
|
171
|
+
|
|
172
|
+
### Technical Details
|
|
173
|
+
- C++17 core library built on Pinocchio and Eigen3
|
|
174
|
+
- Python 3.8+ support
|
|
175
|
+
- Linux x86_64 support
|
|
176
|
+
- CMake-based build system
|
|
177
|
+
- scikit-build-core for Python packaging
|