Physical AI 관점에서 본 다관절 로봇 하드웨어 - FOC, 전류 제어, 그리고 actuator 비이상성
Physical AI 관점에서 본 다관절 로봇 하드웨어 시리즈
최근 로봇 제어에서는 강화학습이나 policy learning 같은 AI 기반 접근이 빠르게 확장되고 있습니다. 그런데 이런 논의는 종종 너무 높은 계층에서 시작합니다. contact-rich manipulation, sim-to-real, domain randomization 같은 키워드는 자주 등장하지만, 정작 그 policy가 실제 하드웨어에서 처음 마주치는 물리는 훨씬 아래에 있습니다. 바로 motor drive와 current control입니다.
학습된 policy는 보통 어떤 형태로든 명령 $u_t$를 출력합니다. 경우에 따라 joint torque command $\tau_{des}$일 수도 있고, target current $i_{q,ref}$, target velocity $\dot{q}_{ref}$, 혹은 더 추상적인 latent action일 수도 있죠. 하지만 실제 로봇에서 이 명령은 곧바로 물리적인 토크로 실현되지 않습니다. 그 사이에는 적어도 다음 계층이 존재합니다.
\[u_t \rightarrow i_{q,ref} \rightarrow \text{current controller} \rightarrow v_{abc} \rightarrow \text{inverter switching} \rightarrow i_{abc} \rightarrow \tau_e \rightarrow \tau_{joint}\]즉 policy가 보는 “action”과 실제 로봇이 만들어내는 “mechanical output” 사이에는, 이미 전기기계적 근사와 샘플링, 포화, 지연, 비선형성이 여러 겹으로 들어가 있습니다. 이 점을 무시한 채 sim-to-real을 contact uncertainty만의 문제로 설명하면, 본질의 절반만 본 셈이 됩니다. FOC는 이런 3상 PMSM을 d–q 축에서 다루기 쉽게 바꿔주는 대표적 방법이지만, 그것이 actuator를 이상화된 torque source로 바꿔주는 것은 아닙니다. FOC는 비선형성을 없애는 기술이라기보다, 그 비선형성을 제어 가능한 좌표계 안으로 눌러 담는 기술에 가깝습니다.
FOC의 핵심은 3상 전류를 회전자 자속 기준의 d–q 좌표로 변환해, 자속 성분과 토크 성분을 분리해서 제어하는 데 있습니다. 이상적인 surface PMSM을 생각하면 토크는 보통 다음처럼 씁니다.
\[\tau_e \approx \frac{3}{2} p \lambda_m i_q\]여기서 $p$는 pole-pair 수, $\lambda_m$은 자석 자속 연계, $i_q$는 q축 전류입니다. 이 식만 보면 “$i_q$만 잘 맞추면 토크도 선형적으로 잘 나오겠네”라고 생각하기 쉽습니다. 실제 드라이브 문서들도 q축 전류가 torque-producing current라는 설명을 씁니다. 하지만 이 식이 잘 맞으려면 몇 가지 전제가 필요합니다. rotor electrical angle이 정확해야 하고, current measurement가 충분히 정확해야 하며, inverter nonlinearity와 magnetic saturation이 작아야 하고, back-EMF와 air-gap flux가 이상적인 정현파에 가까워야 합니다. 이 중 하나만 흔들려도 $\tau_e$와 $i_q$의 관계는 쉽게 흐트러집니다.
여기서 중요한 건, 실제 로봇용 PMSM이 교과서 속 “완벽한 sinusoidal machine”이 아니라는 점입니다. PMSM은 보통 BLDC보다 더 sinusoidal한 back-EMF를 목표로 설계되지만, 실제 기계에서는 stator slotting, magnet shape, winding distribution, manufacturing tolerance 때문에 back-EMF와 torque production이 이상적인 정현파에서 벗어납니다. 그 결과 위치에 따라 토크가 출렁이는 성분이 남습니다. 이때 자주 섞여서 쓰이지만 구분해야 하는 것이 cogging torque와 torque ripple입니다. cogging torque는 전류가 없어도 rotor magnet과 stator slot의 자기적 선호 위치 때문에 생기는 위치 의존 토크이고, torque ripple은 전류를 흘리고 있는 상태에서도 전기각에 따라 발생하는 비균일 토크 성분입니다. 둘 다 “명령한 토크가 매끄럽게 나오지 않는다”는 점에서는 같지만, 원인은 다릅니다.
로봇에서 쓰는 모터는 대개 작은 부피 안에서 높은 torque density를 요구받습니다. 그래서 큰 반경의 rotor, 높은 copper fill, 높은 pole count, 촘촘한 패키징, 공격적인 열 설계를 택하는 경우가 많습니다. 고토크밀도 설계는 대체로 pole count가 높은 PMSM과 잘 결합되는 경향이 있고, 이 선택은 제어 측면에서 분명한 대가를 동반합니다. pole-pair 수 $p$가 커지면 mechanical angle $\theta_m$에 대한 electrical angle $\theta_e$는
\[\theta_e = p \, \theta_m + \theta_{offset}\]처럼 더 빠르게 변합니다. 즉 같은 encoder 오차 $\Delta\theta_m$가 있어도 electrical frame에서는
\[\Delta\theta_e = p \, \Delta\theta_m\]로 증폭됩니다. pole count가 높은 모터일수록 작은 기계각 오차, encoder offset, shaft runout, interpolation noise가 d–q decomposition 오차로 더 민감하게 번진다는 뜻입니다. 결국 “고토크밀도라서 compact하다”는 장점은, low-level control 관점에서는 commutation sensitivity가 더 높다는 문제와 거의 붙어다닙니다.
이 지점이 Physical AI와 직접 연결됩니다. policy는 보통 actuator 내부의 electrical coordinate가 얼마나 민감한지 모릅니다. 그냥 “이번 step에서 토크를 조금 더 주라”고 말할 뿐이죠. 그런데 실제 모터는 그 토크를 만들기 위해 rotor angle을 전기각으로 변환하고, 그 angle 기준으로 current vector를 정렬하고, 그 과정에서 생기는 오차를 그대로 torque ripple과 발열, 진동으로 돌려받습니다. policy의 action space는 추상적이고 연속적이지만, drive가 실현하는 torque space는 훨씬 더 민감하고 삐걱거리는 좌표계 위에 놓여 있습니다.
로봇 제어를 이야기할 때 current sensing은 종종 너무 단순하게 다뤄집니다. 마치 드라이브가 각 상 전류를 실시간으로 정확히 알고 있다고 생각하기 쉽죠. 하지만 실제로는 대부분의 시스템이 shunt resistor 기반 current sensing을 사용하고, 이 값은 PWM switching과 강하게 얽혀 있습니다. low-side shunt, dual-shunt, three-shunt, single DC-link shunt 등 구성에 따라 차이는 있지만 공통점은 분명합니다. 전류는 연속적으로 “보는” 것이 아니라, 특정 샘플링 윈도우에서 “재구성”하는 것이라는 점입니다. single-shunt나 DC-link shunt 방식은 특히 active vector duration이 충분히 길지 않으면 3상 전류를 정확히 재구성하기 어렵고, minimum measurable duty 구간이 생깁니다. three-shunt에서도 ADC trigger timing, dead-time, switching transient, blanking time, amplifier slew, low-pass filtering에 따라 usable sample window가 제한됩니다.
이 말은 곧, current PI controller가 사용하는 피드백 $i_q$ 자체가 이미 노이즈와 지연, offset, quantization을 포함한 추정치라는 뜻입니다. 예를 들어 current loop를 이렇게 쓴다고 해봅시다.
\[v_q = K_p (i_{q,ref} - i_q) + K_i \int (i_{q,ref} - i_q) \, dt\]겉으로 보면 단순한 PI 제어지만, 여기서 $i_q$가 sampled-and-reconstructed quantity라면 loop는 실제 전류가 아니라 타이밍 제약이 들어간 관측값을 쫓게 됩니다. low duty 구간이나 빠른 current transition 구간에서는 측정 타이밍이 아주 조금만 틀어져도 $i_d$, $i_q$ 추정이 흔들리고, 그 결과 q축 토크 성분뿐 아니라 불필요한 d축 전류가 생기거나 torque ripple이 커질 수 있습니다. 이건 단지 “노이즈가 있다” 수준의 문제가 아니라, policy가 기대하는 actuator bandwidth와 drive가 실제로 제공하는 torque bandwidth가 다르다는 뜻입니다.
로봇 제어나 actuator paper를 보면 토크와 전류의 관계를 흔히 이렇게 씁니다.
\[\tau_e = K_t i_q\]물론 첫 번째 근사로는 유용합니다. 하지만 실제 로봇에서는 이 식을 너무 곧이곧대로 믿으면 안 됩니다. 우선 $K_t$ 자체가 operating point 전 구간에서 완전히 일정하지 않습니다. magnetic saturation, temperature rise, saliency, flux harmonics, inverter nonlinearity, rotor angle misalignment, current bias 등이 개입하면, 동일한 $i_q$라도 생성되는 토크가 달라질 수 있습니다. 특히 IPM 계열에서는 $L_d$와 $L_q$의 차이와 saliency가 더 직접적으로 작용하고, inductance가 electrical angle과 operating point에 따라 달라지는 현상도 잘 알려져 있습니다. PMSM inductance identification이나 inverter nonlinearity 보정 연구가 계속 나오는 이유도, 실제 machine이 이론식만큼 정직하지 않기 때문입니다.
더 흥미로운 건 저토크 구간입니다. manipulation이나 balancing, fine contact control에서는 아주 작은 힘과 토크가 중요합니다. 그런데 이 구간에서는 평균 모델보다 미세 비선형성이 더 크게 보입니다. static friction, cogging, current quantization, sensor offset, dead-zone이 겹치면, policy가 “조금만 더 밀어라”고 낸 작은 증분 action이 실제로는 아무 토크도 못 만들다가 어느 순간 갑자기 튀는 형태로 나타날 수 있습니다. 시뮬레이터에서는 보통 이 구간이 과도하게 매끈하게 모델링됩니다. 그러니 sim에서는 섬세하게 보이던 policy가 실제 하드웨어에서는 edge contact에서 헛돌거나, 미세한 insertion에서 stick-slip로 무너지는 게 이상한 일이 아닙니다.
sim-to-real을 이야기할 때 많은 글이 “simulation이 reality를 완벽히 못 담는다”는 수준에서 멈춥니다. 그런데 실제로 더 골치 아픈 건, reality 자체가 시간에 따라 바뀐다는 점입니다. 모터를 몇 분만 구동해도 winding temperature가 올라가고, copper resistance가 바뀌고, current sensing offset이 drift하고, magnet flux도 약하게 변합니다. 어떤 시스템에서는 amplifier drift, board temperature, bus voltage sag까지 겹칩니다. 그러면 같은 $\tau_{des}$를 넣어도 오전의 응답과 10분 뒤의 응답이 달라집니다. 즉 sim-to-real은 “가상과 현실의 차이”만이 아니라, 현실 내부의 시간 변화까지 포함하는 문제입니다.
이건 학습 기반 제어에서 특히 중요합니다. policy는 보통 stationary한 dynamics를 암묵적으로 가정합니다. 물론 domain randomization이나 online adaptation이 이런 문제를 완화할 수는 있습니다. 하지만 drive-level dynamics가 온도와 duty cycle에 따라 계속 이동한다면, policy가 상대해야 하는 것은 단순한 contact uncertainty가 아니라 시간에 따라 drift하는 actuator truthfulness입니다. 다시 말해 학습이 어려운 이유는 환경이 복잡해서만이 아니라, actuator 자신이 매 step마다 조금씩 다른 식으로 거짓말을 하기 때문입니다.
이쯤 되면 관점을 바꿔야 합니다. Physical AI의 실패를 단지 데이터 부족, network architecture, reward design, sim fidelity 부족으로만 설명하면 너무 소프트웨어 중심의 해석이 됩니다. 더 아래에서는 이미 actuator가 이상적이지 않습니다. policy가 출력한 torque command는 drive의 current loop bandwidth, sampling time, ADC timing, dead-time compensation, rotor angle alignment, saturation, thermal drift를 모두 통과한 뒤에야 비로소 joint torque 비슷한 것이 됩니다. 그리고 거기에 reducer friction, backlash, transmission compliance, seal drag, reflected inertia까지 붙으면 joint-side behavior는 motor-side behavior보다 더 멀어집니다.
결국 policy가 기대하는 것은 보통 이런 형태입니다.
\[\tau_{joint} \approx f_{ideal}(u_t)\]하지만 실제 하드웨어는 더 가깝게는 이런 구조에 가깝습니다.
\[\tau_{joint} = f(u_t,\ \theta_e,\ i_{meas},\ T,\ V_{bus},\ \text{PWM timing},\ \text{inverter nonlinearity},\ \text{transmission state})\]여기서 $T$는 temperature, $V_{bus}$는 DC bus voltage이고, transmission state에는 마찰 이력이나 compliance까지 들어갑니다. 이 식이 주는 메시지는 단순합니다. 학습 기반 제어가 상대하는 대상은 “명령에 비례해 힘을 내는 모터”가 아니라, 상태 의존적이고 시간 의존적인 전기기계 시스템이라는 겁니다.
이 논의를 actuator 설계로 다시 연결하면, 왜 저감속 구동이나 QDD가 자주 언급되는지도 설명이 됩니다. 물론 QDD가 위에서 말한 motor-drive 비이상성을 없애주는 것은 아닙니다. current sensing 오차도 있고, rotor angle misalignment도 있고, torque ripple도 여전히 존재합니다. 다만 높은 감속비 transmission이 추가로 만들어내는 backlash, reflected inertia amplification, friction hysteresis, force transmission distortion이 줄어들기 때문에, motor-side의 imperfect torque가 joint-side에서 더 심하게 왜곡되는 경향은 완화될 수 있습니다. 즉 QDD의 장점은 단순히 “backdrivable해서 좋다”는 말보다, 학습된 정책이 가정한 torque–motion 관계가 실제 joint에서 덜 붕괴되도록 돕는 데 있습니다.
이 맥락에서 보면, 학습 기반 제어와 잘 맞는 하드웨어란 단지 센서가 많거나 계산이 빠른 하드웨어가 아닙니다. 더 본질적으로는 낮은 계층의 actuation truthfulness가 높은 하드웨어, 다시 말해 torque command가 실제 기계적 출력으로 비교적 일관되게 전달되는 하드웨어입니다. Physical AI의 성공을 가르는 것은 algorithmic intelligence만이 아니라, 그 intelligence가 의존하는 actuator physics의 정직함입니다.