Verification and Synthesis of Compatible Control Lyapunov and Control Barrier Functions
<|reference_start|>Verification and Synthesis of Compatible Control Lyapunov and Control Barrier Functions: Safety and stability are essential properties of control systems. Control Barrier Functions (CBFs) and Control Lyapunov Functions (CLFs) are powerful tools to ensure safety and stability respectively. However, previous approaches typically verify and synthesize the CBFs and CLFs separately, satisfying their respective constraints, without proving that the CBFs and CLFs are compatible with each other, namely at every state, there exists control actions within the input limits that satisfy both the CBF and CLF constraints simultaneously. Ignoring the compatibility criteria might cause the CLF-CBF-QP controller to fail at runtime. There exists some recent works that synthesized compatible CLF and CBF, but relying on nominal polynomial or rational controllers, which is just a sufficient but not necessary condition for compatibility. In this work, we investigate verification and synthesis of compatible CBF and CLF independent from any nominal controllers. We derive exact necessary and sufficient conditions for compatibility, and further formulate Sum-Of-Squares programs for the compatibility verification.   Based on our verification framework, we also design a nominal-controller-free synthesis method, which can effectively expands the compatible region, in which the system is guaranteed to be both safe and stable. We evaluate our method on a non-linear toy problem, and also a 3D quadrotor to demonstrate its scalability. The code is open-sourced at \url{https://github.com/hongkai-dai/compatible_clf_cbf}.<|reference_end|>
@article{dai2024verification,
    title={Verification and Synthesis of Compatible Control Lyapunov and Control
  Barrier Functions},
    author={Hongkai Dai, Chuanrui Jiang, Hongchao Zhang, Andrew Clark},
    journal={arXiv preprint arXiv:2406.18914},
    year={2024},
    archivePrefix={arXiv},
    eprint={2406.18914},
    primaryClass={eess.SY cs.RO cs.SY}
}