서 있기와 보행에는 자세 외에 접촉/운동 상태가 있다
균형 과제는 기준 자세로부터의 기울기만 아니라 기울어지는 속도·현재 지지/접촉, 가능한 힘/토크와 시간 경로를 함께 다룬다. 같은 기울기라도 바깥으로 빠르게 넘어가는 중인지 안쪽으로 돌아오는 중인지에 따라 필요한 입력이 다르다. 상태는 이런 미래 변화에 필요한 변수 묶음이다. 관측은 센서가 읽은 값이며 필터/추정으로 상태를 계산할 수 있어 둘의 시각/불확실성도 구별한다.
휴머노이드의 몸통/베이스는 지면에 볼트로 고정된 팔과 다르다. 발의 접촉/미끄러짐·지지 교대와 관절/접촉 힘을 통해 전신을 제어한다. 정적인 수평 지지의 단순 판단에서 무게중심의 수직 투영과 지지 영역을 볼 수 있지만, 동적 보행의 성공을 투영점 하나만으로 결정하지 않는다. 관성/접촉/마찰·발 배치/속도와 가용 입력이 필요하다.
MIT 저자 humanoids 자료는 접촉의 생성/해제와 힘/위치 제약·단순 모형의 역할을 설명한다. 저자 cart-pole 자료는 불안정 평형 근처 제어와 전체 비선형 과제의 차이를 다룬다. 이번 기본 경로는 제목의 선택 과제 중 한 축 밸런싱의 입력/외란 진단이다. 모든 독자는 아래 주어진 식/초기값으로 과제를 완료할 수 있으며 휴머노이드 보행 알고리즘/실증을 수행한 것으로 쓰지 않는다.
작은각 모형의 기준과 단위를 정의한다
θ는 바로 선 기준으로부터의 작은 기울기(rad), ω는 각속도(rad/s)다. 양의 θ/ω는 같은 선택 축의 기울어짐/증가 방향이다. 여기서 θ=0이 바로 선 자세이며 다른 책의 아래로 매달린 0도 규약과 섞지 않는다. 아래 식은 장치 파라미터를 식별한 것이 아닌 교육용 국소 모형이다.
점은 시간 미분이다. aθ는 기울어짐을 더 키우는 항이고, u는 각가속도에 직접 더해지는 가상 제어 입력(rad/s²), d는 같은 단위의 외란이다. 실제 motor torque가 u라는 뜻은 아니다. 실제 장치에서는 바퀴/몸통/접촉·구동 관계와 다른 상태가 추가되며 이 한 축 모형은 그것을 생략했다. 작은각/국소·지지 조건을 벗어나면 같은 식의 예측을 믿을 수 없다.
u=0/d=0이면 양의 θ에서 각가속도도 양수라 평형에서 멀어지는 경향이 있다. θ뿐 아니라 ω에도 반응하는 상태 피드백을 u_raw=−k_pθ−k_dω로 정하자. 계수는 k_p=9 s⁻²/k_d=4 s⁻¹이다. 각 항은 rad/s²가 되어 같은 입력 단위로 합해진다. 방향/부호를 바꾸면 피드백 부호도 일관되게 확인해야 한다.
포화가 없는 국소 안정성과 실제 한계를 구분한다
d=0이고 u=u_raw로 제한 없이 정확히 적용된다면 θ의 식은 θddot+4θdot+5θ=0이다. 특성식 λ²+4λ+5=0의 근은 −2±i s⁻¹이라 이 연속 LTI 모형의 자유응답은 0으로 감쇠한다. LTI는 선형/시간 불변, 자유응답은 외란/외부 입력이 없는 초기 상태의 변화라는 뜻이다. M02의 실수부 음수 조건을 이 제한된 가정에서 확인한 것이다.
가용 입력을 −0.5≤u≤0.5 rad/s²로 제한하면 제안이 그 범위를 넘을 때 경계값으로 고정한다. 이 포화는 모형을 더는 같은 LTI 식으로 만들지 않는다. 지연/상태 추정 오차·접촉 변화나 큰 외란이 있어도 위 근 두 개만으로 회복이 보장되지 않는다. 제어기 식이 존재한다는 사실과 실제 로봇이 균형을 유지한다는 사실을 다른 증거로 보고한다.
같은 이전 상태로 Euler 한 단계를 계산한다
기본 수치 활동은 주기 T=0.1 s의 명시적 Euler 근사다. k는 업데이트 번호이고 θ/ω는 모두 같은 이전 시점의 값을 오른쪽에 쓴다. u_k와 d_k는 이 한 구간에서 일정하다고 가정한다. 이는 정확한 연속 해/실시간 시뮬레이터가 아니다.
θ_0=0.1 rad/ω_0=0에서 제안은 −0.9 rad/s²이고 포화 뒤 u_0=−0.5다. 외란 0이면 각가속도는 4×0.1−0.5=−0.1 rad/s²다. 다음 상태는 θ_1=0.1 rad/ω_1=−0.01 rad/s다. 각도는 첫 근사 단계에서 같고 속도는 되돌아오는 방향이다. 이 한 단계로 완전히 회복했다고 하지 않는다.
같은 첫 구간에 d_0=+1 rad/s²가 더해지면 각가속도는 +0.9이고 다음 θ는 0.1/ω는 +0.09다. 동일한 제어 입력이 포화되어 외란을 충분히 상쇄하지 못한 경우다. 이는 첫 구간 외란 비교이며 이후에도 d가 계속되는지/사라지는지와 표본/제약에 따라 미래가 달라진다. 첫 변화만 보고 넘어짐/회복 시간을 확정하지 않는다.
CPU 계산은 실제 균형 실험과 구분한다
아래 완전한 표준 Python 코드는 두 합성 한 단계만 계산한다. 장비/시뮬레이터 설치는 필요하지 않고 종이 계산으로도 완료할 수 있다.
for disturbance in (0.0, 1.0):
theta, rate, period = 0.1, 0.0, 0.1
raw = -9.0 * theta - 4.0 * rate
command = max(-0.5, min(0.5, raw))
accel = 4.0 * theta + command + disturbance
next_theta = theta + period * rate
next_rate = rate + period * accel
print(f"d={disturbance:.1f} raw={raw:.3f} u={command:.3f} "
f"theta={next_theta:.3f} rate={next_rate:.3f}")
기대 결과는 두 경우 모두 raw=−0.900/u=−0.500/theta=0.100이고 rate는 각각 −0.010/+0.090이다. 작성 환경 Darwin/macOS의 Python 3.13.4 CPU에서 이 계산을 실행해 확인했다. 실제 휴머노이드/밸런싱 robot이나 학습 정책을 실행한 결과는 아니다.
회복/실패의 기준과 추가 근거를 설계한다
프로젝트의 회복 기준은 예를 들어 |θ|≤0.02 rad와 |ω|≤0.02 rad/s를 연속 1 s 만족하는 것으로 정할 수 있다. 한 번 기준 안에 들어온 것과 유지된 것은 다르다. 이 숫자는 합성 과제의 요구이며 실제 장비 허용각/안전 임계값이 아니다. 외란 크기/시각·지속 시간, 초기 상태·T/포화/지연·관측 잡음/누락과 평가 구간을 명시한다.
비교 표에는 외란 없음/단일 구간 외란·다른 초기 속도/관측 만료·입력 포화/접촉 변화 가정을 넣는다. 범위를 벗어난 모형은 유효하지 않음/미상으로 남기고 실제 장치 보호/중단은 해당 감독/절차와 결과를 확인한다. 휴머노이드 확장에서는 발 접촉/미끄러짐·전신 자세/속도/힘·발 배치와 구동/추정까지 추가 근거가 필요하다. 이 기초 계산을 전체 보행 성공으로 확대하지 않는다.
기존 2.3 물리 시간/접촉, 6.2 정량 진단와 6.4 감독기를 연결해 단계/원본·예상/관측/미확인을 보고하자. 교재 캡스톤 계산의 완료와 실제 프로젝트 합격/장비 실증은 별도다.