Skip to content

Why are HPIPM's native Box and General Inequality constraints not utilized in SQP #120

@HUA-YOU

Description

@HUA-YOU

Is your feature request related to a problem? Please describe.

While attempting to implement hard input inequality constraints (as opposed to soft constraints) and reviewing the implementation in ocs2_sqp/src/HpipmInterface.cpp, I noticed that the current interface seems to enforce equality constraints for all passed constraints.

Specifically, it appears that llg and uug are set to identical values, effectively bypassing HPIPM's native capability to handle general inequality constraints () and box constraints () efficiently.

Describe the solution you'd like

I would like to change the HpipmInterface extended to:

  1. Support General Inequalities: Allow passing distinct lower and upper bounds to utilize HPIPM's native inequality handling.
  2. Support Box Constraints: Expose the interface for box constraints directly.

My goal is to use these features for tasks such as collision avoidance and strict actuator limits.

Describe alternatives you've considered

The current alternative is to model these limits as Relaxed Barrier Functions (Soft Constraints) within the cost function. However, this does not guarantee strict constraint satisfaction, and the barrier function alters the cost landscape even when the state is far from the boundaries.

Additional context

I am curious about the design choice behind the current implementation.

Is the exclusion of native inequality/box constraints intentional due to the "Relaxed Barrier" philosophy of OCS2 (keeping the QP sub-problem equality-constrained)?

Are there known issues regarding performance (e.g., Riccati recursion overhead) or convergence stability when introducing hard inequalities into the SQP-HPIPM loop in OCS2?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions