• 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
setup.py 2.73 KB