--- id: wiki-2026-0508-neuromuscular-control title: Neuromuscular Control category: 10_Wiki/Topics status: verified canonical_id: self aliases: [신경근 조절, Motor Control, NMS Control] duplicate_of: none source_trust_level: A confidence_score: 0.9 verification_status: applied tags: [neuroscience, biomechanics, motor-control, robotics, biomedical] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: python framework: opensim --- # Neuromuscular Control ## 매 한 줄 > **"매 brain plans, spine reflexes, muscle executes"**. Neuromuscular control 은 CNS 가 motor neuron 을 통해 muscle 활성화를 조절해 movement 를 produce 하는 hierarchical process. 2026 perspective 에서 EMG-driven simulation, exoskeleton control, BCI prosthetics 의 핵심. ## 매 핵심 ### 매 hierarchy - **Cortex (M1, PMC, SMA)**: motor planning. - **Cerebellum**: timing, coordination, error correction. - **Basal ganglia**: action selection, gain modulation. - **Spinal cord**: reflex circuits, central pattern generators (CPG). - **Motor unit**: α-MN + muscle fibers (final common pathway). ### 매 control principles - **Size principle (Henneman)**: small MN 먼저, large 나중. - **Co-contraction**: agonist + antagonist 동시 활성화 → stiffness 조절. - **Stretch reflex**: muscle spindle Ia → α-MN monosynaptic. - **Equilibrium point hypothesis**: descending command = desired length. ### 매 응용 1. Prosthetic / exoskeleton control. 2. Rehabilitation robotics. 3. Surgical motor mapping. 4. Sport biomechanics. ## 💻 패턴 ### Hill-type muscle model ```python import numpy as np def hill_muscle(activation, length, velocity, F_max=1000, l_opt=0.1, v_max=10): f_l = np.exp(-((length - l_opt) / (0.5 * l_opt))**2) if velocity <= 0: f_v = (v_max + velocity) / (v_max - 4 * velocity) else: f_v = (1.8 - 0.8 * (v_max + velocity) / (v_max - 7.56 * velocity)) return F_max * activation * f_l * f_v ``` ### Motor unit recruitment (size principle) ```python def recruit(excitation, n_units=100, threshold_max=1.0): thresholds = np.linspace(0.05, threshold_max, n_units) return np.where(excitation > thresholds, (excitation - thresholds) / (1 - thresholds), 0) ``` ### EMG → activation mapping ```python from scipy.signal import butter, filtfilt def emg_to_activation(emg_raw, fs=1000): b, a = butter(4, [20, 450], btype="band", fs=fs) emg = filtfilt(b, a, emg_raw) emg = np.abs(emg) b, a = butter(4, 6, btype="low", fs=fs) env = filtfilt(b, a, emg) return env / env.max() ``` ### Inverse dynamics (joint torque) ```python def inverse_dynamics(theta, theta_dot, theta_ddot, m=5, l=0.4, g=9.81): I = m * l**2 / 3 return I * theta_ddot + 0.5 * m * g * l * np.sin(theta) ``` ### CPG (Matsuoka oscillator) ```python def matsuoka_step(x1, x2, v1, v2, u=1.0, beta=2.5, tau=0.1, dt=0.001): y1, y2 = max(0, x1), max(0, x2) dx1 = (-x1 - beta*v1 - 2.0*y2 + u) / tau dx2 = (-x2 - beta*v2 - 2.0*y1 + u) / tau dv1 = (-v1 + y1) / (tau * 12) dv2 = (-v2 + y2) / (tau * 12) return x1 + dx1*dt, x2 + dx2*dt, v1 + dv1*dt, v2 + dv2*dt ``` ### EMG-driven prosthetic control ```python class MyoelectricController: def __init__(self, n_channels=8): self.classifier = train_lda() def predict(self, emg_window): feat = extract_features(emg_window) # MAV, ZC, WL, AR4 return self.classifier.predict(feat) ``` ## 매 결정 기준 | 상황 | Approach | |---|---| | Whole-body simulation | OpenSim / MyoSuite | | Single joint, real-time | Hill-type + LDA EMG | | Locomotion robot | CPG + reflexes | | Pathology study | Inverse dynamics + EMG | **기본값**: Hill-type muscle + size-principle recruitment + EMG envelope. ## 🔗 Graph - 변형: [[Perceptual-Motor-Skills]] - Adjacent: [[Reinforcement Learning]] · [[BCI]] ## 🤖 LLM 활용 **언제**: simulation parameter tuning, EMG feature engineering, paper synthesis. **언제 X**: clinical motor diagnosis — neurologist 필수. ## ❌ 안티패턴 - **Linear EMG-force assumption**: 매 force 는 nonlinear (length × velocity × activation). - **Ignoring co-contraction**: stiffness control 무시 → unstable model. - **Pure feedback control**: feed-forward (internal model) 누락 → laggy. ## 🧪 검증 / 중복 - Verified (Zajac 1989, Delp OpenSim 2018, Henneman 1965). - 신뢰도 A. ## 🕓 Changelog | 날짜 | 변경 | |---|---| | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup — Hill model + EMG + CPG 패턴 |