고주파 로봇 제어를 위한 항상 실행 가능한 탄성 QP 솔버

고주파 로봇 제어를 위한 항상 실행 가능한 탄성 QP 솔버

Daniel Morton, Jon Arrizabalaga, Zachary Manchester, Marco Pavone

4 분 읽기•2026년 9월 17일

등식 제약 조건: 하드 등식과 탄성 등식

등식 항이 서로 충돌할 경우 완화할 수 있는 낮은 우선순위의 작업을 나타낸다면, ElastiQP는 서로 반대 방향의 탄성 부등식 제약 조건 쌍과 이에 대응하는 페널티 항을 사용해 탄성 등식을 지원합니다.

탄성 등식은 페널티를 부담하는 대신 위반할 수 있는, 서로 반대 방향의 두 부등식으로 표현됩니다.

일반적으로 등식 하나마다 부등식 두 개를 추가해야 하므로 계산 비용이 증가합니다. 따라서 등식을 소프트하게 취급할 수 있는 경우에만 이 구조를 사용하는 것이 좋습니다.

평가

ElastiQP는 소규모·고밀도 문제 환경에서 대표적인 세 솔버인 DAQP, PIQP, ProxQP와 비교 평가되었습니다. 또한 ElastiQP와 유사한 효율적인 압축 탄성 모드를 구현한 qpax도 비교 대상에 포함했습니다.

아울러 탄성 로봇 제어 문제에 어떤 솔버 계열이 가장 적합한지 올바르게 평가하기 위해, ElastiQP의 활성 집합 방법을 탄성 PDAL 및 IPM 변형과 비교했습니다. 이들 변형에 대한 자세한 내용은 부록에 설명되어 있습니다.

모든 결과는 Intel Core Ultra 7 258V CPU를 탑재한 노트북에서 측정했습니다. C++ 솔버는 GCC 13.3과 -O3 최적화 옵션으로 컴파일했습니다. 대규모 문제에서는 -march=native를 사용하면 성능이 추가로 향상되는 경우가 많으므로, 여기서 보고한 수치는 보수적인 편입니다.

-march=native로 인한 성능 향상 폭은 제공된 본문에 명시되어 있지 않습니다.

qpax는 순수한 JAX/Python 라이브러리입니다. 제시된 수치는 최신 JAX 버전인 0.11.0에서 배정밀도로 JIT 컴파일한 CPU 성능을 반영합니다.

실행 가능한 제어 루프

ElastiQP는 실행 가능한 영역과 실행 불가능한 영역 모두에서 마이크로초 단위의 매우 빠른 성능을 보입니다. 가장 어려운 실행 불가능 문제인 hum-wbc에서도 콜드 스타트만으로 1 kHz 제어에 필요한 1 ms 목표 시간 안에 여유 있게 해를 구합니다.

웜 스타트를 사용하면 대규모 문제에서 성능이 안정적으로 2~4배 추가 향상됩니다. 따라서 ElastiQP는 까다로운 제어 문제에서 고주파 해 계산을 제공하는 가장 신뢰할 수 있는 항상 실행 가능한 방법입니다.

엄격하게 실행 가능한 환경에서는 DAQP가 이 문제들을 가장 빠르게 풀며, ElastiQP가 근소한 차이로 그 뒤를 잇습니다. DAQP와 ElastiQP 같은 활성 집합 방법은 콜드 스타트와 웜 스타트 모두에서 이 환경에 매우 강합니다. 최적해에서 활성화되는 제약 조건이 비교적 적어 콜드 스타트가 빠르고, 시간 간 활성 집합도 비교적 안정적이어서 웜 스타트 역시 빠르기 때문입니다.

이 문제 규모에서는 탄성을 처리하는 데 필요한 추가 비용이 고작 몇 마이크로초에 불과합니다. 항상 실행 가능한 방법이 제공하는 신뢰성을 고려하면 충분히 감수할 만한 대가입니다. PDAL 변형, ProxQP, ElastiQP-PDAL도 웜 스타트에서 좋은 성능을 보이지만, 특히 소규모 문제에서는 활성 집합 변형보다 느립니다.

DAQP의 확장 슬랙 형식과 비교하면 ElastiQP의 압축 방식은 40배가 넘는 성능 향상을 제공합니다. ElastiQP의 PDAL 및 IPM 변형에서는 압축을 통해 각각 10배와 20배의 성능 향상을 얻습니다. 콜드 스타트 PDAL에서는 이 격차가 250배를 넘습니다.

ElastiQP는 주요 탄성 압축 기준선인 qpax보다도 30~80배 빠릅니다.

실행 불가능한 제어 루프

실행 불가능한 환경에서 ElastiQP는 완화된 문제를 구성하고 푸는 모든 대안적 솔버와 전략을 크게 앞섭니다.

예상할 수 있듯이 표준 하드 제약 솔버인 DAQP, PIQP, ProxQP와 qpax의 하드 형식은 실행 불가능한 문제를 풀지 못합니다. 실행 불가능성을 보고하는 데 위험할 정도로 긴 시간이 걸리는 경우도 있습니다.

ProxQP를 사용하는 웜 스타트 제어기를 생각해 봅시다. 단 한 번의 시간 스텝이라도 일시적으로 실행 불가능해지면, 실행 불가능성을 보고하고 상황을 처리하는 데 최대 93 ms가 걸릴 수 있습니다. 이는 통상적인 1 ms 예산을 크게 초과하는 시간입니다.

이 환경에서 ElastiQP 다음으로 성능이 좋은 솔버는 확장 슬랙 형식을 푸는 ProxQP의 희소 백엔드이지만, 웜 스타트를 사용했을 때에만 그렇습니다. 그 경우에도 이 방법은 휴머노이드 규모의 문제에서 안정적인 1 kHz 제어를 수행하기에 충분히 빠르지 않으며, ElastiQP보다 약 20~40배 느립니다.

다른 대안인 ProxQP-slack과 PIQP-slack은 속도 면에서 더욱 뒤처집니다.

자주 묻는 질문

ElastiQP란 무엇인가요? ElastiQP는 제약이 있는 로봇 제어를 위한 항상 실행 가능한 2차 계획법 솔버입니다.

ElastiQP는 소프트 등식 제약 조건을 어떻게 처리하나요? 서로 반대 방향의 탄성 부등식 제약 조건 쌍과 이에 대응하는 페널티 항으로 탄성 등식을 표현합니다.

웜 스타트는 ElastiQP의 성능에 어떤 영향을 주나요? 대규모 문제에서 성능을 2~4배 추가로 향상합니다.

실행 불가능한 제어 문제에서 ElastiQP가 유용한 이유는 무엇인가요? 하드 제약을 사용하는 대안 솔버가 실패하거나 실행 불가능성을 보고하는 데 지나치게 오래 걸리더라도, 빠르고 실행 가능한 제어 해를 계속 제공합니다.