• michaellin6's avatar
    Changes Pink IK solver and null space computation to reduce runtime speed (#3904) · 64a97f20
    michaellin6 authored
    # Description
    This PR optimizes the Pink IK controller solver by changing the qpsolver
    to use **daqp**, and also optimizing the matrix pseudo inverse in Null
    Space Posture Task. This achieves a **2x performance improvement** by
    reducing runtime from 1.23 ms to 0.52 ms.
    
    Perf experiments documented in third page here:
    
    https://docs.google.com/document/d/1E9UiYUU-oCOIetUkqAIva8oK0NvdNkMeqP2gxmeqxNA/edit?tab=t.0#heading=h.snu74q2v857w
    
    ## Key Changes
    
    1. **Optimized Pseudoinverse Computation**: Replaced `np.linalg.pinv()`
    with a custom implementation using direct LAPACK/BLAS calls in the null
    space projector calculation. The new approach uses Cholesky
    factorization (`dpotrf`) and triangular solvers (`dpotrs`) for faster
    computation.
    
    2. **QP Solver Update**: Changed the Pink IK solver from `osqp` to
    `daqp` for improved performance.
    
    3. **New Dependency**: Added `daqp==0.7.2` to `setup.py` for Linux
    platforms.
    
    ## Type of change
    
    <!-- As you go through the list, delete the ones that are not
    applicable. -->
    
    - New feature (non-breaking change which adds functionality)
    
    ## Checklist
    
    - [x] I have read and understood the [contribution
    guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
    - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
    `./isaaclab.sh --format`
    - [x] I have made corresponding changes to the documentation
    - [x] My changes generate no new warnings
    - [ ] I have added tests that prove my fix is effective or that my
    feature works
    - [x] I have updated the changelog and the corresponding version in the
    extension's `config/extension.toml` file
    - [x] I have added my name to the `CONTRIBUTORS.md` or my name already
    exists there
    
    <!--
    As you go through the checklist above, you can mark something as done by
    putting an x character in it
    
    For example,
    - [x] I have done this task
    - [ ] I have not done this task
    -->
    
    ---------
    Co-authored-by: 's avatarKelly Guo <kellyg@nvidia.com>
    64a97f20
Name
Last commit
Last update
..
config Loading commit data...
docs Loading commit data...
isaaclab Loading commit data...
test Loading commit data...
pyproject.toml Loading commit data...
setup.py Loading commit data...