제3부 동역학
3.11 구속 동역학과 폐연쇄: 병렬 기구 동역학·라그랑주 승수
3.11.1 이 장에서 배우는 것 / 선수 지식 / 특히 중요한 독자
이 장은 구속이 있는 기계의 동역학을 다룬다. 폐연쇄(4절 링크, 병렬 기구)에서는 관절 좌표가 서로 독립이 아니며, 구속력이 관절 안의 힘으로 나타난다. 이 장은 구속 운동방정식을 라그랑주 승수로 적어 하나의 선형계(KKT)로 풀고, 같은 해를 주는 투영·영공간 환원·가우스 최소 구속 원리를 비교한다. 이어서 가속도 수준의 풀이가 위치 구속을 보존하지 못해 생기는 표류와 안정화(바움가르트·투영)를 계산하고, 병렬 기구의 구동 토크가 구동 구속의 승수이며 가상일의 결과와 같다는 점, 구동기 특이점 근처에서 토크가 발산하는 것을 확인한다. 병렬 기구의 기구학과 특이점은 2.13·2.14, 링크 기구는 2.18, 강체 동역학 알고리즘은 3.1~3.5, 동역학 라이브러리는 3.6, 일방 구속(접촉)은 3.12에서 다룬다.
배우는 것:
- 구속 운동방정식과 KKT 계 — 위치·속도·가속도 수준의 구속, 승수와 구속력, 슈어 보수 $G=JM^{-1}J^{\top}$.
- 같은 해를 주는 여러 표현 — 전체 KKT, 슈어 보수, Modern Robotics 8.7절의 투영 $P$, 영공간 환원, 가우스 최소 구속 원리.
- 표류와 안정화 — 위치 구속을 두 번 미분한 풀이의 구속 위반 누적, 바움가르트, 위치·속도 투영.
- 병렬 기구 동역학 — 구동 구속의 승수가 구동 토크, 가상일, 특이점 근처의 토크 발산, 스튜어트-고프의 다리 힘.
- 폐연쇄의 표현 — 최대 좌표, 트리와 절단 관절, 독립 좌표의 차이.
선수 지식: 3.3(라그랑주 정식화), 3.4(매니퓰레이터 운동방정식), 2.13·2.14(병렬 기구 기구학·특이점), 2.18(링크 기구), 1.1(선형대수), 1.18(ODE 적분기).
특히 중요한 독자: 병렬 로봇의 구동 토크와 구동기 용량을 설계하는 엔지니어, 폐연쇄를 포함한 다물체 시뮬레이터를 구현하는 개발자, 제약 기반 제어(12.7)를 배우는 연구자.
출처 방침. 기준 시점은 2026-11-05이다. 직접 읽은 자료: ① Lynch·Park, Modern Robotics(사전 인쇄본 2017-05-03판) 8.7절 "구속 동역학"의 식 (8.92)~(8.101) 전문과 7장 병렬 기구 절(2.13·2.14에서 읽음). ② Pinocchio 4.1.0의
constraintDynamics·forwardDynamics·RigidConstraintModel도움말과 MuJoCo 문서의 구속(등식) 설명을 읽고 직접 실행했다. 이 장의 식(KKT, 슈어 보수, 가상일, 바움가르트, 투영)은 직접 유도했고 독립 구현과 같은 입력에서 대조했다. 서지만 확인한 것(본문은 읽지 못했다): Udwadia·Kalaba(1992), Baumgarte(1972), Gear·Leimkuhler·Gupta(1985), Ascher·Chin·Reich(1994), Brenan·Campbell·Petzold(1995), Featherstone(2008, 2010), Jain(2010), Carpentier·Budhiraja·Mansard(2021), Carpentier 외(2019), Dasgupta·Mruthyunjaya(1998), Tsai(1999), Gosselin(1996), Merlet(2000). 미분대수방정식(DAE)의 지표 이론은 읽지 못했으며 서술은 알려진 사실(확인 필요)로 표시했다.
3.11.2 개념 — 구속력은 가속도 수준에서 풀리는 선형계의 미지수이다
결론부터 적으면 다음과 같다. 일반화 좌표 $q$가 구속 $\Phi(q)=0$을 만족해야 하면, 운동방정식에 구속력 $J^{\top}\lambda$를 더하고 구속을 두 번 미분한 $J\ddot q=\gamma$를 함께 풀면 $\ddot q$와 $\lambda$가 하나의 선형계에서 정해진다. 이상 구속(마찰 없음)의 구속력은 일을 하지 않으므로 허용 속도 방향에 직교하고, 그 크기가 승수 $\lambda$이다. 병렬 기구에서는 구동 관절의 각을 시간의 함수로 지정하는 구속을 추가하면 계 전체가 구속되고 그 구속의 승수가 곧 구동 토크이다. 그림 1은 평면 5절 병렬 기구의 두 종류 구속을 보인다. 구동 구속의 승수는 구동 토크 $\tau_1,\tau_2$이고 말단 $P$의 닫힘이 루프 구속이다.
이 장의 계산 결과를 미리 적으면 다음과 같다. ① 펜-종이 3R(선 구속, 무작위 200개)에서 전체 KKT·슈어 보수·Modern Robotics의 투영 $P$·영공간 환원이 $\ddot q$를 $10^{-12}$ 안에서 같게 주고, $P^2=P$, $\operatorname{tr}P=n-m$, 구속력의 일 $\lvert\lambda J\dot q\rvert\le2\times10^{-15}$이며, 가우스 최소 구속 원리의 QP(SciPy)도 $6\times10^{-9}$ 안에서 같다. ② 4절 링크(RK4, $h=0.01$ s, 6 s)에서 가속도 수준만 푼 구속 위반이 $6.6\times10^{-4}$ m로 누적되고($h=0.005$ s에서 $4.3\times10^{-5}$, 걸음의 4승에 비례), 바움가르트는 $\alpha=\beta=20$에서 $1.8\times10^{-6}$ m이지만 $\alpha=\beta=100$에서 $7.7\times10^{-5}$ m로 나빠지며, 매 걸음의 위치·속도 투영은 구속 위반을 $10^{-16}$으로 유지한다. ③ 평면 5절 병렬 기구의 구동 토크가 구동 구속의 승수와 가상일에서 $7\times10^{-16}$ N·m 안에서 같고 Pinocchio와 $4\times10^{-9}$ N·m 안에서 같다. ④ 구동기 특이점에 다가가면 정적 토크가 1.19 N·m($y=0.40$ m)에서 181 N·m($y=0.1505$ m)로 커지며 $\sigma_{\min}<3\times10^{-3}$에서 $\tau\sigma_{\min}$이 5 % 안에서 일정하다. ⑤ 스튜어트-고프의 다리 힘을 MuJoCo 공간 텐던 구동기에 넣으면 플랫폼 가속도가 $2\times10^{-13}$ 안에서 재현된다.
3.11.3 원리
3.11.3.1 구속의 종류와 미분
$n$개의 일반화 좌표 $q$에 $m$개의 홀로노믹 구속 $\Phi(q)=0$이 있으면 $J=\partial\Phi/\partial q\in\mathbb R^{m\times n}$이고 위치·속도·가속도 수준의 구속은 다음이다.
$$\Phi(q)=0,\qquad J(q)\dot q=0,\qquad J\ddot q=\gamma:=-\dot J\dot q.$$
Modern Robotics는 구속을 속도의 팩 형식(Pfaffian) $A(\theta)\dot\theta=0$으로 적고 홀로노믹과 비홀로노믹을 함께 다룬다(식 8.92; 바퀴의 비홀로노믹 구속은 2.15). 이 장은 위치 구속이 있는 홀로노믹 경우를 다룬다. 예로 평면 핀 관절은 두 몸체의 점이 일치하는 $\Phi=p_a+R_ar_a-p_b-R_br_b=0$(2개)이고 $\gamma=R_ar_a\dot\varphi_a^2-R_br_b\dot\varphi_b^2$이다. 구동 관절의 각을 지정하는 구속 $\varphi_a-\theta_a(t)=0$은 $t$에 명시적으로 의존하는 구속이며 $\gamma=\ddot\theta_a$이다.
3.11.3.2 구속 운동방정식과 KKT 계
구속력을 승수로 적으면 운동방정식은 다음이다($h=C\dot q+g$는 편향력, $\tau$는 일반화 힘).
$$M(q)\ddot q+h(q,\dot q)=\tau+J^{\top}\lambda,\qquad J\ddot q=\gamma\quad\Longleftrightarrow\quad\begin{bmatrix}M&-J^{\top}\\ J&0\end{bmatrix}\begin{bmatrix}\ddot q\\ \lambda\end{bmatrix}=\begin{bmatrix}\tau-h\\ \gamma\end{bmatrix}.$$
Modern Robotics의 식 (8.93)은 구속력을 좌변에 $A^{\top}\lambda_{\text{MR}}$로 적으므로 $\lambda=-\lambda_{\text{MR}}$이다. $M$이 정부호이고 $J$의 행이 독립이면 이 계는 유일한 해를 가진다. $M^{-1}$을 소거하면 다음의 슈어 보수가 나온다.
$$G=JM^{-1}J^{\top},\qquad \lambda=G^{-1}\bigl(\gamma-JM^{-1}(\tau-h)\bigr),\qquad \ddot q=M^{-1}\bigl(\tau-h+J^{\top}\lambda\bigr).$$
$G$는 구속 공간의 역관성이며, $J$가 가역이면 $G^{-1}$이 작업공간 질량행렬 $\Lambda=J^{-\top}MJ^{-1}$(Modern Robotics 식 8.90, 12.6)과 같다. 접촉 동역학에서는 델라사 연산자로 불린다고 알려져 있다 (확인 필요). 구속력 $J^{\top}\lambda$는 허용 속도에서 일을 하지 않는다. $(J^{\top}\lambda)^{\top}\dot q=\lambda^{\top}J\dot q=0$이며, Modern Robotics는 마찰 없는 구속을 가정할 때 구속력이 $A^{\top}(\theta)$의 열공간에 있다고 적는다. 로봇은 $n-m$개의 속도 자유도와 $m$개의 힘 자유도를 가진다. $J$가 행 계수 부족이면(특이 자세, 중복 구속) $G$가 특이하여 승수가 유일하지 않거나 해가 없다.
3.11.3.3 투영·영공간·가우스 원리 — 같은 해의 세 표현
Modern Robotics는 $\lambda$를 소거하여 투영 형식을 얻는다(식 8.98~8.101).
$$P\tau=P(M\ddot q+h),\qquad P=I-J^{\top}G^{-1}JM^{-1},\qquad P_{\ddot q}=M^{-1}PM.$$
$P$는 계수 $n-m$의 투영이며 $\tau$ 중 구속에 작용하는 성분을 제거하고 일을 하는 성분을 남긴다. $P^2=P$이고 $\operatorname{tr}P=n-m$이다. 가속도는 $\ddot q=M^{-1}P(\tau-h)+M^{-1}J^{\top}G^{-1}\gamma$이다. 영공간 환원은 $J Z=0$인 $Z\in\mathbb R^{n\times(n-m)}$로 $\dot q=Z\dot z$를 두고 $Z^{\top}MZ\,\ddot z=Z^{\top}(\tau-h-M\ddot q_p)$를 푼다($\ddot q_p$는 $J\ddot q_p=\gamma$의 특수해, $\ddot q=Z\ddot z+\ddot q_p$). 가우스 최소 구속 원리는 이상 구속의 가속도가 다음의 해라는 것이다(Udwadia·Kalaba 1992는 서지만 확인).
$$\ddot q=\arg\min\ \tfrac12(\ddot q-a_u)^{\top}M(\ddot q-a_u)\quad\text{s.t.}\quad J\ddot q=\gamma,\qquad a_u=M^{-1}(\tau-h).$$
이 QP의 KKT 조건이 위의 계이다. 이 관점은 일방 구속(부등식)으로 확장되어 접촉 동역학(3.12)과 제약 기반 제어(12.7)의 출발점이 된다.
3.11.3.4 위치 구속의 지표와 표류 — 안정화
위치 구속의 운동방정식은 미분대수방정식(DAE)이며 위치 수준의 구속에서 $\ddot q$와 $\lambda$를 정하려면 구속을 두 번 미분해야 하므로 지표 3이라고 알려져 있다(Brenan·Campbell·Petzold 1995; 본문 미열람 (확인 필요)). 위의 KKT는 가속도 수준의 구속 $J\ddot q=\gamma$만 사용하므로 위치·속도 구속 $\Phi=0$, $J\dot q=0$을 직접 강제하지 않으며, 수치 적분 오차가 구속 위반으로 쌓인다. 두 가지 안정화를 비교한다. 바움가르트(Baumgarte 1972)는 $\ddot\Phi+2\alpha\dot\Phi+\beta^2\Phi=0$으로 구속의 가속도를 바꾸어 위반이 감쇠하도록 한다.
$$J\ddot q=\gamma-2\alpha J\dot q-\beta^2\Phi\qquad(\alpha=\beta:\ \text{임계 감쇠}).$$
$\alpha,\beta$는 문제에 따라 조정해야 하는 매개변수이며 크면 계가 강성이 된다. 투영은 매 걸음 뒤에 $q\leftarrow q+\delta$를 뉴턴 반복으로 구하되 질량 가중 최소 보정 $\delta=-M^{-1}J^{\top}G^{-1}\Phi$를 사용하고, 속도는 $\dot q\leftarrow\dot q-M^{-1}J^{\top}G^{-1}J\dot q$로 투영한다(투영 안정화는 Ascher·Chin·Reich(1994)의 불변 다양체 안정화와 같은 계열로 알려져 있다 (확인 필요)). 두 투영은 $J\delta=-\Phi$, $M\delta=J^{\top}\mu$인 KKT 계이므로 kkt_solve로 구한다. Gear·Leimkuhler·Gupta(1985)의 방법은 서지만 확인했다.
3.11.3.5 병렬 기구 — 구동 구속의 승수와 가상일
병렬 기구의 최대 좌표 모델에 구동 구속 $\varphi_a-\theta_a(t)=0$($a$는 구동 좌표)을 더하면 $J_{\text{full}}=[J_c;\,J_d]$가 정방이 되고 $\ddot q=J_{\text{full}}^{-1}[\gamma;\ddot\theta]$, $J_{\text{full}}^{\top}\lambda=M\ddot q-f_{\text{ext}}$이다. 구동 구속의 승수 $\lambda_d$가 구동 토크 $\tau$이다. 가상일의 원리는 같은 결과를 다른 경로로 준다. $J_c\mathcal J=0$이고 구동 행이 단위행렬인 영공간 기저 $\mathcal J$(루프 구속의 속도 사상)를 구하면 다음이다.
$$\tau=\mathcal J^{\top}\bigl(M\ddot q-f_{\text{ext}}\bigr).$$
$\mathcal J^{\top}J_c^{\top}=0$이므로 루프 구속의 승수가 소거되고 $\mathcal J^{\top}J_d^{\top}=I$이므로 $\tau=\lambda_d$이다. $J_{\text{full}}$이 특이하면(구동기 특이점, 2.14) $\sigma_{\min}(J_{\text{full}})\to0$이며 구동기가 말단에 힘을 만들 수 없는 방향이 생겨 같은 말단 운동에 필요한 토크가 발산한다. 스튜어트-고프 플랫폼은 질량 없는 다리를 가정하면 다리 힘 $f_i$(다리 방향 $n_i$, 미는 힘 양수)가 플랫폼에 주는 렌치가 $S f$이며 $S$의 열은 $[(r_i-p)\times n_i;\ n_i]$로 2.13의 역 자코비안의 행 $(r_i\times n_i,\ n_i)$와 같은 구조이며 모멘트의 기준점만 플랫폼 질량 중심 $p$이다. 플랫폼의 뉴턴-오일러 식 $S f=[I_w\alpha+\omega\times I_w\omega;\ m(a_c-g)]$(질량 중심 기준, $I_w=RI_bR^{\top}$)에서 다리 힘이 나온다. 다리의 질량과 관성을 포함한 뉴턴-오일러(Dasgupta·Mruthyunjaya 1998)와 가상일(Tsai 1999) 정식화는 서지만 확인했고 이 장은 구현하지 않았다.
3.11.3.6 폐연쇄의 표현 — 최대 좌표, 트리와 절단 관절, 독립 좌표
폐연쇄를 푸는 표현은 세 가지이다. 최대 좌표는 몸체마다 자세 좌표(평면 3, 공간 6)를 두고 관절을 구속으로 적는다. 구조가 단순하고 KKT 계가 크다. 트리와 절단 관절은 폐루프를 한 관절에서 끊어 트리로 만들고 절단한 곳에 루프 구속(Pinocchio의 RigidConstraintModel, 3D 점 또는 6D 구속)을 둔다. 관절 좌표가 적고 재귀 알고리즘(3.2, 3.5)을 사용할 수 있다. Featherstone(2008)과 Jain(2010)의 다물체 알고리즘 교재가 폐루프를 다루는 것으로 알려져 있다 (확인 필요: 본문 미열람). 독립 좌표는 위치 구속을 풀어 좌표를 줄인다(평면 4절의 $\theta_2$ 하나). 구속 위반이 없으나 위치 해석(2.18)이 필요하고 해가 갈라지는 자세에서 좌표가 끊어진다. MuJoCo 문서는 구속이 소프트("constraints are soft")라고 적고 등식 구속에 solref·solimp 매개변수가 있다(읽은 범위). 이 장은 최대 좌표와 독립 좌표를 구현했고 트리와 절단 관절은 Pinocchio와의 대조로만 확인했다.
3.11.4 알고리즘
KKT 풀이(M, J, f, γ): M⁻¹f, M⁻¹Jᵀ 계산; G ← J M⁻¹ Jᵀ; λ ← G⁻¹(γ − J M⁻¹ f); q̈ ← M⁻¹ f + M⁻¹ Jᵀ λ
최대 좌표 평면 핀 구속: Φ = (p_a + R_a r_a) − (p_b + R_b r_b); J: (I, R'r); γ = R_a r_a φ̇_a² − R_b r_b φ̇_b²
바움가르트: γ ← γ − 2α J q̇ − β² Φ
투영(매 걸음 후): q ← q + KKT(f=0, γ=−Φ) (3회); q̇ ← q̇ + KKT(f=0, γ=−J q̇)
구동 토크(승수): J_full = [J_c; J_d]; q̈ ← J_full⁻¹ [γ; θ̈_d]; λ ← J_fullᵀ⁻¹ (M q̈ − f); τ ← λ_d
구동 토크(가상일): J_p q̇_p = −J_a q̇_a 로 𝒥 구성; τ ← 𝒥ᵀ (M q̈ − f)
스튜어트 다리 힘: S f = [I_w α + ω×I_w ω ; m (a_c − g)], S_i = [(r_i − p)×n_i ; n_i]
3.11.5 풀이 예제 — KKT 동치, 표류, 병렬 기구 토크, 특이점
결론부터 적으면 다음과 같다. ① 네 가지 구속 풀이가 같은 가속도를 준다. ② 가속도 수준만 푼 풀이는 구속을 걸음의 4승 비례로 위반하고, 투영만이 위반을 $10^{-16}$으로 유지한다. ③ 병렬 기구의 구동 토크는 승수와 가상일이 같고 Pinocchio와 일치한다. ④ 토크는 $1/\sigma_{\min}$으로 발산한다. ⑤ 스튜어트-고프의 다리 힘이 MuJoCo에서 재현된다.
구현. kkt_solve·pin_terms·baumgarte·project·rk4·vw_torque와 모델(chain_terms, fourbar_model, fivebar_model, stewart_inv_dyn)이다. 선형 풀이는 1.1의 solve_lu·qr·svd를, 4절 링크 기하는 2.18, 5절 기하는 2.14, 스튜어트 기하는 2.13을 불러와 사용한다. 아래 코드는 핵심 알고리즘이며 모델, 시험, 그림은 스크립트에 있다.
| 항목 | 값 |
|---|---|
| 입력 1: 펜-종이 3R | 평면 3R 사슬(절대 각), 링크 $0.4,0.3,0.2$ m, 선밀도 1 kg/m(가정), 중력 $9.81$ m/s², 선 구속 $y_{\text{tip}}=0.35$ m. 무작위 200개(시드 73): 두 각과 속도 두 개를 무작위로 두고 구속에 맞춘 상태, 토크 $\pm3$ N·m |
| 입력 2: 4절 링크 | 2.18의 크랭크-로커 $(L_1,L_2,L_3,L_4)=(0.8,0.3,0.9,0.6)$ m, 선밀도 1 kg/m, 중력, 크랭크 $60^\circ$에서 정지 출발, 6 s, RK4 $h=0.01,\ 0.005$ s. 기준은 독립 좌표 RK4 $h=2\times10^{-4}$ s. 최대 좌표는 몸체 3개(9좌표)와 구속 8개 |
| 입력 3: 5절 병렬 기구 | 2.14의 $(d,l_1,l_2)=(0.15,0.25,0.35)$ m, 선밀도 1 kg/m, 중력. 구동 각 $\theta_1=\theta_{10}+0.25\sin(2\pi t)$, $\theta_2=\theta_{20}+0.20\sin(2\pi t+0.9)$ rad($\theta_{10},\theta_{20}$는 $P=(0,0.40)$의 역기구학), 100점. 최대 좌표 몸체 4개(12좌표)와 구속 10개 + 구동 구속 2개 |
| 입력 4: 특이점 접근 | $P=(0,y)$, $y=0.40\sim0.1505$ m, 정지 상태, 말단 가속도 $(0,0)$과 $(0,1)$ m/s². 구동기 특이점은 $y=0.15$ m(원위 링크 일직선) |
| 입력 5: 스튜어트-고프 | 2.13 기하(기저 $0.5$ m, 플랫폼 $0.3$ m, $\beta_b=10^\circ$, $\beta_p=30^\circ$), 질량 2 kg, 관성 $\operatorname{diag}(0.03,0.03,0.05)$ kg·m²(가정), 질량 없는 다리. 자세 회전 벡터 $(0.10,0.08,-0.05)$ rad, 위치 $(0.04,-0.03,0.60)$ m, 각속도 $(0.2,-0.1,0.3)$ rad/s, 각가속도 $(0.5,0.2,-0.3)$ rad/s², 선가속도 $(0.3,-0.2,0.4)$ m/s² |
| 입력 6: 대조 | NumPy solve, SciPy 1.18.1(null_space, minimize SLSQP, solve_ivp DOP853), Pinocchio 4.1.0, MuJoCo 3.17.0(공간 텐던 구동기) |
def kkt_solve(M, J, f, gam):
"""M qdd = f + J^T lam, J qdd = gam -> (qdd, lam, G)"""
n, m = len(M), len(J)
Mif = solve_lu(M, f)[0]
MiJt = [solve_lu(M, [J[k][i] for i in range(n)])[0]
for k in range(m)] # M^-1 J^T 의 열
G = [[sum(J[i][a] * MiJt[k][a] for a in range(n))
for k in range(m)] for i in range(m)]
r = [gam[i] - sum(J[i][a] * Mif[a] for a in range(n))
for i in range(m)]
lam = solve_lu(G, r)[0]
qdd = [Mif[a] + sum(MiJt[k][a] * lam[k] for k in range(m))
for a in range(n)]
return qdd, lam, G
def pin_terms(q, qd, joints):
"""평면 핀 관절 구속: Phi, J, gam (J qdd = gam)"""
n = len(q)
Phi, J, gam = [], [], []
for ia, ra, ib, rb, wp in joints:
ph, g = [0.0, 0.0], [0.0, 0.0]
row = [[0.0] * n for _ in range(2)]
for body, r, sg in ((ia, ra, 1.0), (ib, rb, -1.0)):
if body is None: # 세계 고정점
ph[0] += sg * wp[0]
ph[1] += sg * wp[1]
continue
x, y, p = q[3*body:3*body + 3]
c, s = cos(p), sin(p)
Rr = (c*r[0] - s*r[1], s*r[0] + c*r[1])
ph[0] += sg * (x + Rr[0])
ph[1] += sg * (y + Rr[1])
row[0][3*body] += sg
row[1][3*body + 1] += sg
row[0][3*body + 2] -= sg * Rr[1]
row[1][3*body + 2] += sg * Rr[0]
w2 = qd[3*body + 2] ** 2
g[0] += sg * Rr[0] * w2
g[1] += sg * Rr[1] * w2
Phi += ph
J += row
gam += g
return Phi, J, gam
def baumgarte(Phi, J, gam, qd, al, be):
"""Phi'' + 2 al Phi' + be^2 Phi = 0 으로 바꾼 우변"""
Jq = [sum(a * b for a, b in zip(r, qd)) for r in J]
return [g - 2 * al * u - be * be * p
for g, u, p in zip(gam, Jq, Phi)]
def project(q, qd, M, terms, it=3):
"""질량 가중 투영: 위치(뉴턴 it회)와 속도를
구속 다양체에 맞춘다"""
n = len(q)
for _ in range(it):
Phi, J, _ = terms(q, qd)
dq = kkt_solve(M, J, [0.0] * n, [-p for p in Phi])[0]
q = [a + b for a, b in zip(q, dq)]
Phi, J, _ = terms(q, qd)
Jq = [sum(a * b for a, b in zip(r, qd)) for r in J]
dv = kkt_solve(M, J, [0.0] * n, [-u for u in Jq])[0]
return q, [a + b for a, b in zip(qd, dv)]
def rk4(f, y, h):
k1 = f(y)
k2 = f([a + 0.5 * h * b for a, b in zip(y, k1)])
k3 = f([a + 0.5 * h * b for a, b in zip(y, k2)])
k4 = f([a + h * b for a, b in zip(y, k3)])
return [a + h / 6 * (b + 2 * c + 2 * d + e)
for a, b, c, d, e in zip(y, k1, k2, k3, k4)]
def vw_torque(M, f, J, ia, qdd):
"""가상일: tau = Jv^T (M qdd - f). J: 루프 구속 야코비,
ia: 구동 좌표 번호, Jv: J의 영공간 기저(구동 행 = I)"""
n = len(M)
ip = [k for k in range(n) if k not in ia]
Jp = [[J[i][k] for k in ip] for i in range(len(J))]
Jv = [[0.0] * len(ia) for _ in range(n)]
for c, a in enumerate(ia):
xp = solve_lu(Jp, [-r[a] for r in J])[0]
Jv[a][c] = 1.0
for k, v in zip(ip, xp):
Jv[k][c] = v
r = [sum(M[i][j] * qdd[j] for j in range(n)) - f[i]
for i in range(n)]
return [sum(Jv[k][c] * r[k] for k in range(n))
for c in range(len(ia))]
① 구속 풀이의 동치.
| 펜-종이 3R(선 구속 $y_{\text{tip}}=y_0$, 무작위 200개) | 값 |
|---|---|
| 가속도 $\max\lvert\ddot q\rvert$ · 승수 $\max\lvert\lambda\rvert$ · $G=JM^{-1}J^\top$ 최댓값 | 1176 rad/s² · 21.3 N · 16.7 kg⁻¹ |
| 전체 KKT(4×4) 대 슈어 보수: $\max\lvert\Delta\ddot q\rvert$, $\lvert\Delta\lambda\rvert$ | 5.7e-13 |
| 투영 $P$ 형식(식 8.98~8.101) 대 슈어 보수: $\max\lvert\Delta\ddot q\rvert$ | 9.1e-13 |
| 영공간 환원 $Z^\top MZ\,\ddot z=Z^\top(\cdot)$ 대 슈어 보수: $\max\lvert\Delta\ddot q\rvert$ | 9.1e-13 |
| $\max\lVert P^2-P\rVert$ · $\max\lvert\operatorname{tr}P-(n-m)\rvert$ | 1.1e-15 · 4.4e-16 |
| 구속력의 일 $\max\lvert\lambda\,J\dot q\rvert$ | 1.8e-15 |
전체 KKT, 슈어 보수, 투영 $P$, 영공간 환원의 가속도가 $10^{-12}$ rad/s²(최대 크기 1176 rad/s²) 안에서 같다. $P$는 멱등이고 대각합이 $n-m=2$이며 구속력은 허용 속도에서 일을 하지 않는다. 승수(구속 방향의 힘)는 $\lvert\lambda\rvert\le21.3$ N이다. 가우스 최소 구속 원리의 QP(SciPy SLSQP)와의 차이는 $5.6\times10^{-9}$로 SLSQP의 수렴 허용에 해당한다(⑥).
② 4절 링크의 구속 표류.
| 방법 (RK4) | $h$ (s) | $\max\lVert\Phi\rVert_\infty$ (m) | $\max\lVert J\dot q\rVert_\infty$ (m/s) | $\max\lvert\Delta E\rvert/E_0$ | $\theta_2(6\,\text{s})-\theta_2^{\text{기준}}$ (rad) |
|---|---|---|---|---|---|
| 가속도 수준만 (안정화 없음) | 0.01 | 6.6e-04 | 2.1e-04 | 2.9e-04 | -7.3e-03 |
| 바움가르트 $\alpha=\beta=5$ | 0.01 | 3.8e-06 | 3.0e-05 | 1.3e-04 | +4.7e-03 |
| 바움가르트 $\alpha=\beta=20$ | 0.01 | 1.8e-06 | 3.3e-05 | 1.6e-04 | -4.6e-03 |
| 바움가르트 $\alpha=\beta=100$ | 0.01 | 7.7e-05 | 1.2e-02 | 1.6e-03 | -4.0e-02 |
| 위치·속도 투영(매 걸음) | 0.01 | 2.2e-16 | 4.4e-16 | 4.5e-05 | -1.2e-03 |
| 독립 좌표 $\theta_2$ (구속 없음) | 0.01 | — | — | — | -2.7e-03 |
| 가속도 수준만 (안정화 없음) | 0.005 | 4.3e-05 | 1.4e-05 | 1.9e-05 | -4.0e-04 |
| 바움가르트 $\alpha=\beta=20$ | 0.005 | 1.1e-07 | 1.9e-06 | 6.7e-06 | -1.8e-04 |
| 위치·속도 투영(매 걸음) | 0.005 | 2.2e-16 | 3.2e-16 | 1.7e-06 | -3.6e-05 |
| 독립 좌표 $\theta_2$ (구속 없음) | 0.005 | — | — | — | -8.7e-05 |
가속도 수준만 푼 풀이의 구속 위반은 시간과 함께 단조롭게 커져 6 s에 $6.6\times10^{-4}$ m이고 걸음을 반으로 줄이면 $4.3\times10^{-5}$ m로 15배 줄어 RK4의 4차 오차와 같은 크기 변화이다. 바움가르트는 $\alpha=\beta=5$에서 $3.8\times10^{-6}$, 20에서 $1.8\times10^{-6}$ m로 크게 줄이지만 100에서는 속도 구속 위반 $1.2\times10^{-2}$ m/s, 에너지 오차 $1.6\times10^{-3}$, $\theta_2$ 오차 $-4.0\times10^{-2}$ rad로 나빠진다(그림 2). 매개변수를 문제에 맞추어 골라야 한다는 뜻이다. 투영은 위치·속도 위반을 $10^{-16}$으로 유지하고 $\theta_2(6\,\text{s})$ 오차($-1.2\times10^{-3}$ rad)와 에너지 오차($4.5\times10^{-5}$)도 다른 최대 좌표 방법보다 작다. 같은 걸음의 독립 좌표 RK4는 $\theta_2$ 오차가 $-2.7\times10^{-3}$ rad이며, 투영의 오차가 이보다 작은 것은 오차의 구성이 달라 생긴 결과일 수 있어 일반 결론으로 삼지 않는다. 투영은 에너지를 보존하지는 않으며 에너지 오차는 걸음의 감소에 따라 $4.5\times10^{-5}\to1.7\times10^{-6}$으로 줄었다.
③ 5절 병렬 기구의 역동역학.
| 5절 병렬 기구(가정: 선밀도 1 kg/m, $d=0.15$, $l_1=0.25$, $l_2=0.35$ m), 주기 1 s 구동 궤적 100점 | 값 |
|---|---|
| 말단 $P$의 범위 $x$ · $y$ | -0.060~+0.062 m · 0.351~0.442 m |
| 구동 토크 최댓값 $\lvert\tau_1\rvert$ · $\lvert\tau_2\rvert$ (동역학) | 1.760 · 1.600 N·m |
| 같은 자세의 정적 토크(중력만) 최댓값 | 1.451 · 1.396 N·m |
| 동적 성분 $\max\lvert\tau-\tau_{\text{정적}}\rvert$ | 0.338 N·m |
| 구동 구속의 승수 $\lambda_d$ 대 가상일 $\mathcal J^\top(M\ddot q-f)$: $\max\lvert\Delta\tau\rvert$ | 6.7e-16 N·m |
| 구속 가속도 잔차 $\max\lvert J\ddot q-\gamma\rvert$ | 3.3e-16 |
주기 1 s 궤적에서 구동 토크는 최대 $1.76$, $1.60$ N·m이고 중력만 지지하는 정적 토크는 $1.45$, $1.40$ N·m이다. 링크 관성에 의한 동적 성분이 최대 $0.34$ N·m로 최대 토크의 19 %이다. 구동 구속의 승수와 가상일의 토크가 $7\times10^{-16}$ N·m 안에서 같고 구속 가속도 잔차가 $3\times10^{-16}$이다. 두 방법은 같은 사실의 다른 표현이다.
④ 구동기 특이점 근처의 토크.
| $P=(0,y)$, $y$ (m) | $\sigma_{\min}(J_{\text{full}})$ | 조건수 | $\max\lvert\tau\rvert$ 정적 (N·m) | $\max\lvert\tau\rvert$, $\ddot y=1$ m/s² (N·m) | 정적 $\tau\,\sigma_{\min}$ |
|---|---|---|---|---|---|
| 0.4 | 1.196e-01 | 16 | 1.191 | 1.288 | 0.1425 |
| 0.3 | 7.663e-02 | 25 | 1.626 | 1.741 | 0.1246 |
| 0.25 | 5.360e-02 | 36 | 1.981 | 2.115 | 0.1062 |
| 0.2 | 2.854e-02 | 67 | 2.910 | 3.101 | 0.0831 |
| 0.17 | 1.196e-02 | 159 | 5.616 | 5.985 | 0.0672 |
| 0.16 | 6.088e-03 | 313 | 10.120 | 10.794 | 0.0616 |
| 0.155 | 3.072e-03 | 619 | 19.132 | 20.416 | 0.0588 |
| 0.152 | 1.236e-03 | 1540 | 46.169 | 49.291 | 0.0571 |
| 0.151 | 6.190e-04 | 3074 | 91.233 | 97.417 | 0.0565 |
| 0.1505 | 3.098e-04 | 6143 | 181.363 | 193.671 | 0.0562 |
$P$가 $(0,0.15)$에 다가가면(원위 링크가 일직선이 되는 구동기 특이점, 2.14) $\sigma_{\min}(J_{\text{full}})$가 $1.2\times10^{-1}$에서 $3.1\times10^{-4}$로, 조건수가 16에서 6143으로 커지고 정적 토크가 1.19 N·m에서 181 N·m로 커진다. $\sigma_{\min}<3.1\times10^{-3}$에서 $\tau\sigma_{\min}$이 $0.0588$에서 $0.0562$로 5 % 안에서 일정하여 $\tau\propto1/\sigma_{\min}$이다(그림 3). 말단 가속도 $1$ m/s²를 더하면 토크가 6.6~8.1 % 커진다(0.1505 m에서 193.7 대 181.4). 원위 링크가 수평으로 일직선이면 말단의 수직 방향 힘을 링크 축력으로 만들 수 없다는 기하학적 이유로 해석하며 이 방향 분해는 따로 계산하지 않았다.
⑤ 스튜어트-고프 플랫폼의 다리 힘.
| 6-6 스튜어트-고프 플랫폼(2.13 기하, 질량 2 kg, 질량 없는 다리) | 값 |
|---|---|
| 다리 힘 $f_1\sim f_6$ (동역학, 미는 힘 양수) | 20.69, -13.88, 18.81, -14.32, 21.70, -16.42 N |
| 같은 자세 정적 다리 힘 | 19.66, -12.25, 17.26, -13.82, 21.64, -16.59 N |
| 자코비안 전치 $S$의 $\sigma_{\max}$ · $\sigma_{\min}$ · 조건수 | 2.050 · 0.0897 · 22.9 |
| 구조적 특이 기하($\beta_b=\beta_p=10^\circ$)의 $\sigma_{\min}$ | 5.9e-17 |
질량 2 kg 플랫폼이 가속·회전할 때의 다리 힘은 $-16.4\sim21.7$ N이며 정적 다리 힘 $-16.6\sim21.6$ N과 최대 1.6 N 다르다. 이 기하의 $S$는 조건수 22.9로 정칙이고, 2.13의 구조적 특이 기하($\beta_b=\beta_p$)에서는 $\sigma_{\min}$이 $6\times10^{-17}$로 다리 힘이 유일하게 정해지지 않는다. 다리 질량은 포함하지 않았다.
⑥ 라이브러리 대조(실행 2026-11-05). NumPy·SciPy(null_space, SLSQP, DOP853), Pinocchio 4.1.0(constraintDynamics, rnea), MuJoCo 3.17.0(공간 텐던 구동기)을 같은 입력에서 비교했다. 스크립트는 robotics/fig-src/3.11-libcheck.py, 출력은 robotics/fig-src/data/3.11-libcheck-output.txt에 있다.
| 비교 | 결과 |
|---|---|
펜-종이 3R(무작위 50개): 가우스 최소 구속 원리의 QP(SciPy SLSQP, $\tfrac12\lVert\ddot q-a\rVert_M^2$ 최소, $J\ddot q=\gamma$)의 $\ddot q$ 대 KKT 해(상대) · 승수 대 numpy 슈어(상대) | 5.6e-09 · 1.0e-15 |
무작위 SPD $M$($n=12$), $J$($m=8$): numpy 전체 KKT · SciPy null_space 환원 대 이 장 슈어 해, $\max\lvert\Delta\ddot q\rvert$(상대) · $\lvert\Delta\lambda\rvert$ | 7.3e-16 · 8.8e-16 · 1.1e-15 |
4절 링크 독립 좌표 ODE, $t=6$ s의 $\theta_2$: solve_ivp DOP853 대 이 장 RK4 기준($h=2\times10^{-4}$) · RK4 $h=10^{-2}$ (차이, rad) | 4.1e-09 · 2.7e-03 |
| 같은 $t=6$ s: 최대 좌표 투영 · 바움가르트 $\alpha=\beta=20$ · 가속도 수준만($h=10^{-2}$) 대 DOP853의 $\theta_2$ 차이(rad) | 1.2e-03 · 4.6e-03 · 7.3e-03 |
4절 링크 순동역학(무작위 상태 60개, 중력): Pinocchio constraintDynamics(3관절 트리 + 폐루프 3D 점 구속) 대 이 장 KKT, 트리 가속도 $\max\lvert\Delta\ddot q\rvert$(상대) | 1.1e-14 |
5절 병렬 기구 역동역학(주기 1 s 궤적 50점): Pinocchio rnea + 폐루프 구속(루프 야코비는 Pinocchio 순기구학의 중심 차분)으로 구한 구동 토크 대 이 장(승수·가상일) $\max\lvert\Delta\tau\rvert$ (N·m) | 3.9e-09 |
같은 토크를 Pinocchio constraintDynamics에 넣어 얻은 가속도 대 지정한 가속도 $\max\lvert\Delta\ddot q\rvert$ (rad/s²) | 5.0e-14 |
구동기 특이점 근처($P=(0,0.1505)$): $J_{\text{full}}$의 $\sigma_{\min}$, 이 장 SVD 대 numpy.linalg.svd · 조건수 | 3.0981e-04 · 3.0981e-04 · 6143 |
| 스튜어트-고프(2.13 기하, 질량 2 kg): 이 장의 다리 힘 6개를 MuJoCo 공간 텐던 구동기에 넣어 얻은 플랫폼 가속도 대 지정값, 선가속도 · 각가속도 $\max\lvert\Delta\rvert$ | 3.2e-15 · 1.1e-13 |
| 같은 플랫폼 정지 자세(정적): 정적 다리 힘을 넣은 MuJoCo 가속도 $\max\lvert\ddot q\rvert$ | 1.8e-13 |
무작위 SPD 시험(12×12, 구속 8개)에서 numpy 전체 KKT, SciPy null_space 환원과 이 장 슈어 해는 $10^{-15}$ 안에서 같다. 펜-종이 3R의 가우스 QP(SLSQP)는 $5.6\times10^{-9}$로 SLSQP의 수렴 허용 안이며 승수는 $10^{-15}$ 안에서 같다. Pinocchio의 4절 링크 순동역학이 이 장의 KKT와 $1.1\times10^{-14}$, 5절 구동 토크가 $3.9\times10^{-9}$ N·m(루프 야코비를 Pinocchio 순기구학의 중심 차분으로 구한 오차 수준)로 같고, 이 토크를 constraintDynamics에 넣으면 지정 가속도가 $5\times10^{-14}$ rad/s² 안에서 재현된다. 4절 링크 독립 좌표 ODE는 DOP853과 이 장 기준(RK4 $h=2\times10^{-4}$)이 $4.1\times10^{-9}$ rad 안에서 같고, $h=10^{-2}$의 RK4는 $2.7\times10^{-3}$ rad 어긋나 표 ②의 방법별 $\theta_2$ 오차에 적분 오차가 섞여 있음을 보인다. 구동기 특이점 근처의 $\sigma_{\min}$은 NumPy SVD와 4자리 이상 일치한다.
이상 징후. MuJoCo 대조에서 처음에 다리 힘의 부호를 장력 양수(-f)로 가정하여 제어에 넣었더니 플랫폼 가속도가 정지 자세에서도 $20$ m/s²(약 $2g$)로 크게 어긋났다. 부호를 이 장의 미는 힘 그대로(+f) 넣으면 선가속도 $3.2\times10^{-15}$, 각가속도 $1.1\times10^{-13}$, 정지 자세 $1.8\times10^{-13}$으로 일치한다. 텐던 구동기의 부호 관례는 문서에서 확인하지 않고 실험으로 정했다 (확인 필요). 이 대조는 질량 없는 다리의 힘 사상과 플랫폼 뉴턴-오일러 식의 검증이며 다리 질량은 포함하지 않는다.
한계. 평면 최대 좌표 두 기구(4절·5절)와 질량 없는 다리의 스튜어트-고프 한 자세의 결과이다. 구동기 동역학(모터·감속기 관성, 마찰), 다리 질량, 공간 병렬 기구의 최대 좌표 KKT, 일방 구속(접촉), 구속 해의 특이 자세 처리(의사역행렬·감쇠), 트리와 절단 관절의 재귀 알고리즘, 비홀로노믹 구속의 시간 적분은 구현하지 않았다. 선밀도·관성은 가정이며 실제 로봇의 값이 아니다. 안정화 매개변수의 일반적인 선택 기준은 구하지 않았다.
견해: 폐연쇄 시뮬레이션은 가속도 수준의 KKT 풀이에 매 걸음 위치·속도 투영을 더하는 것을 기본으로 두고, 구동 토크의 설계 계산에는 구동 구속의 승수(또는 같은 값을 주는 가상일)를 사용하며, 특이점 근처에서는 $\sigma_{\min}(J_{\text{full}})$의 하한을 설계 제약으로 두는 것을 기본으로 둔다고 본다. 근거는 이 장의 계산에서 ① 안정화 없는 풀이의 구속 위반이 $6.6\times10^{-4}$ m까지 쌓이고, 바움가르트는 $\alpha=\beta$를 20에서 100으로 키우면 위반과 에너지 오차가 오히려 커졌으며, 투영은 매개변수 없이 $10^{-16}$을 유지했다는 점, ② 승수와 가상일이 같은 토크를 주고, ③ $\tau\sigma_{\min}$이 일정하여 $\sigma_{\min}$이 토크 용량의 척도라는 점이다. 투영의 계산 비용(걸음마다 KKT 4회)과 에너지 보존 문제는 평가하지 않았다.
3.11.6 설계 트레이드오프 — 폐연쇄의 표현
- ① 최대 좌표 + KKT. 구속이 많아 KKT가 커지나 구현이 단순하고 모든 구속력(관절 반력)이 승수로 나온다. 구속 위반 관리가 필요하다.
- ② 트리 + 절단 관절. 관절 좌표가 적고 재귀 알고리즘으로 효율적이며 루프 구속만 승수로 푼다(Pinocchio의 구속 모델). 루프마다 구속 관절을 정하는 설계가 필요하다.
- ③ 독립 좌표. 구속 위반이 없고 방정식이 가장 작다. 위치 해석이 필요하고 해가 갈라지는 자세에서 좌표가 끊어진다.
| 항목 | ① 최대 좌표 | ② 트리 + 절단 | ③ 독립 좌표 |
|---|---|---|---|
| 이 장의 4절 링크 | 9좌표, 구속 8개 | 3관절, 구속 2개(Pinocchio 대조) | 1좌표($\theta_2$) |
| 구속 위반 | 누적(걸음의 4승), 투영으로 $10^{-16}$ | 루프 구속에 누적 | 없음 |
| 구속력(관절 반력) | 승수로 직접 | 루프 승수만 | 따로 계산 |
| 특이 자세 | $G$ 특이(승수 비유일) | 같음 | 좌표 특이 |
| 구현 난이도 | 낮음 | 중간(재귀 + 구속) | 높음(위치 해석) |
세 표현의 선택은 구속 수, 자유도 대비 크기, 필요한 출력(구속력인가 운동인가)에 따라 갈린다. 이 장은 계산 비용을 측정하지 않았다.
3.11.7 응용 축 비교
| 응용 축 | 구속 동역학이 맡는 일 | 요구 | 관련 장 |
|---|---|---|---|
| 산업·제조 | 델타·SCARA 고속 픽앤플레이스의 구동 토크와 구동기 용량 | 가속 한계, 특이점 회피 | 28.3, 2.13 |
| 물류·이동 | 해당하는 고유 요구 없음 | — | — |
| 도로 주행 | 해당하는 고유 요구 없음 | — | — |
| 서비스 | 모션 시뮬레이터·병렬 플랫폼의 다리 힘(원리 수준) | 가속도 한계, 구동기 용량 | 2.13 |
| 의료·헬스케어 | 병렬 정밀 위치결정·원격 운동 중심 기구의 힘 해석(원리 수준) | 정밀도, 특이점 | 32.14, 7.7 |
| 휴머노이드·범용 | 폐연쇄 링크 관절의 반력과 제약 기반 전신 제어(원리 수준) | 구속 일관성 | 12.7, 2.18 |
| 필드 | 케이블 구동 병렬 로봇의 장력과 동역학(구동 구속) | 장력 가능성 | 2.14 |
| 국방·안보 | 원리 수준에서 해당하는 고유 요구 없음 | — | — |
이 표는 이 책의 정리이며 장별 요구는 다르다. 응용 사례의 성능 수치는 이 장이 확인하지 않았다.
3.11.8 관련 규격·프로토콜
| 문서 | 발행 | 무엇을 정하나 | 상세 장 |
|---|---|---|---|
| Modern Robotics 8.7절 | Cambridge Univ. Press, 2017 | 구속 동역학, 투영 $P$ | 3.11 |
Pinocchio 4.1.0 constraintDynamics·RigidConstraintModel | PyPI·GitHub | 접촉·구속의 순동역학(근위 정규화) | 3.6 |
MuJoCo 3.17.0 등식 구속(connect·weld 등) | 공식 문서 | 소프트 구속(solref·solimp) 기반 폐루프 | 3.6, 16.1 |
NumPy·SciPy(null_space·SLSQP·DOP853) | PyPI | 이 장의 대조 도구 | 1.18 |
| 수학 표기·기호표 | 이 책 | 구속·승수·투영 표기 | A.2 |
구속 동역학을 직접 규정하는 국제 표준은 확인하지 못했다 (확인 필요). URDF가 폐루프를 직접 표현하지 못하고 별도 구속이 필요하다는 것은 알려진 사실로 (확인 필요). 표준 색인은 A.3.
3.11.9 관련 규제·인증 요구와의 연결
구속 동역학 자체에 적용되는 규제는 없다. 병렬 로봇(모션 시뮬레이터, 정밀 위치결정, 수술 보조 기구)의 속도·힘 제한과 특이점 회피 설정에 이 장의 모델을 사용할 때에는 모델의 검증과 확인이 필요하며 방법은 41.14과 26.13에서 다룬다. 이 장의 독립 구현 대조는 모델 검증의 예이지 규제 적합성 입증이 아니다. 법적 판단은 이 책의 범위 밖이다.
3.11.10 한계·유의점·미해결
- 구속은 양방향 등식(이상 구속, 마찰 없음)이다. 일방 구속·마찰·충격은 3.12.
- 구속 자코비안이 계수 부족인 자세(구동기 특이점)에서 승수가 유일하지 않거나 발산한다. 의사역행렬·감쇠 해법과 특이점 통과 시뮬레이션은 시험하지 않았다.
- 4절·5절은 평면, 스튜어트-고프는 질량 없는 다리와 한 자세이다. 공간 최대 좌표 병렬 기구와 다리 질량은 계산하지 않았다.
- 안정화 매개변수의 선택 기준과 투영의 에너지 거동은 일반화하지 않았다.
- 지표 이론과 DAE 풀이기(암시적 방법, GGL)는 서지만 확인했다.
3.11.11 체크포인트·연구 질문·출처
체크포인트.
- 구속 운동방정식을 $M\ddot q+h=\tau+J^{\top}\lambda$, $J\ddot q=\gamma$로 적고 슈어 보수 $G$로 $\lambda$를 구하라. $\gamma$는 무엇인가?
- 구속력이 일을 하지 않는다는 것은 어떤 식으로 확인하는가?
- 가속도 수준만 푼 풀이의 구속 위반이 걸음의 4승에 비례하는 이유는 무엇인가?
- 바움가르트의 $\alpha=\beta$를 크게 하면 왜 오히려 나빠질 수 있는가?
- 병렬 기구의 구동 토크가 구동 구속의 승수와 같음을 가상일로 보여라.
연구 질문.
- 구동기 특이점을 통과하는 병렬 기구의 동역학 시뮬레이션에서 승수의 발산을 어떻게 처리하는가?
- 투영의 에너지 거동을 개선하는 적분기(예: 변분 적분기)는 폐연쇄에서 어떤 비용을 가지는가?
- 다리 질량을 포함한 스튜어트-고프의 구동 토크 오차는 다리 질량 비율에 따라 얼마인가?
- 트리와 절단 관절 표현에서 루프 구속의 위치 선택이 계산 비용과 조건수에 주는 영향은?
1차 출처(조회 2026-11-05).
- Lynch, K. M., Park, F. C., Modern Robotics: Mechanics, Planning, and Control, Cambridge University Press, 2017. DOI 10.1017/9781316661239. 사전 인쇄본(2017-05-03) 8.7절을 읽었다.
- Udwadia, F. E., Kalaba, R. E., "A new perspective on constrained motion," Proceedings of the Royal Society of London A 439(1906):407–410, 1992. DOI 10.1098/rspa.1992.0158 (서지만 확인).
- Baumgarte, J., "Stabilization of constraints and integrals of motion in dynamical systems," Computer Methods in Applied Mechanics and Engineering 1(1):1–16, 1972. DOI 10.1016/0045-7825(72)90018-7 (서지만 확인).
- Gear, C. W., Leimkuhler, B., Gupta, G. K., "Automatic integration of Euler-Lagrange equations with constraints," Journal of Computational and Applied Mathematics 12–13:77–90, 1985. DOI 10.1016/0377-0427(85)90008-1 (서지만 확인).
- Ascher, U. M., Chin, H., Reich, S., "Stabilization of DAEs and invariant manifolds," Numerische Mathematik 67(2):131–149, 1994. DOI 10.1007/s002110050020 (서지만 확인).
- Brenan, K. E., Campbell, S. L., Petzold, L. R., Numerical Solution of Initial-Value Problems in Differential-Algebraic Equations, SIAM, 1995. DOI 10.1137/1.9781611971224 (서지만 확인).
- Featherstone, R., Rigid Body Dynamics Algorithms, Springer, 2008. DOI 10.1007/978-1-4899-7560-7 (서지만 확인).
- Featherstone, R., "Exploiting sparsity in operational-space dynamics," International Journal of Robotics Research 29(10):1353–1368, 2010. DOI 10.1177/0278364909357644 (서지만 확인).
- Jain, A., Robot and Multibody Dynamics: Analysis and Algorithms, Springer, 2010. DOI 10.1007/978-1-4419-7267-5 (서지만 확인).
- Carpentier, J., Budhiraja, R., Mansard, N., "Proximal and sparse resolution of constrained dynamic equations," Robotics: Science and Systems XVII, 2021. DOI 10.15607/RSS.2021.XVII.017 (서지만 확인).
- Carpentier, J. 외, "The Pinocchio C++ library," IEEE/SICE International Symposium on System Integration, 2019:614–619. DOI 10.1109/SII.2019.8700380 (서지만 확인).
- Dasgupta, B., Mruthyunjaya, T. S., "A Newton–Euler formulation for the inverse dynamics of the Stewart platform manipulator," Mechanism and Machine Theory 33(8):1135–1152, 1998. DOI 10.1016/S0094-114X(97)00118-3 (서지만 확인).
- Tsai, L.-W., "Solving the inverse dynamics of a Stewart–Gough manipulator by the principle of virtual work," Journal of Mechanical Design 122(1):3–9. DOI 10.1115/1.533540 (서지만 확인).
- Gosselin, C. M., "Parallel computational algorithms for the kinematics and dynamics of planar and spatial parallel manipulators," Journal of Dynamic Systems, Measurement, and Control 118(1):22–28, 1996. DOI 10.1115/1.2801147 (서지만 확인).
- Merlet, J.-P., Parallel Robots, Kluwer(Springer), 2000. DOI 10.1007/978-94-010-9587-7 (서지만 확인).
- Pinocchio 4.1.0 도움말(
constraintDynamics·forwardDynamics), MuJoCo 문서 modeling 장(구속 서술), 조회 2026-11-05.
다음 장. 3.12는 접촉·충돌 동역학(상보성·마찰 원뿔·충격)을 다룬다. 이 장의 구속 공간 역관성 $G=JM^{-1}J^{\top}$와 가우스 최소 구속 원리의 QP가 일방 구속(부등식)과 마찰로 확장되는 곳이다.