화성(Mars) 표면의 연약한 모래 지구(Sand Dunes) 및 미고결 레골리스(Regolith) 지형을 주파하는 자율 탐사 로버(Curiosity, Perseverance)의 주행 생존성은 바퀴와 모래 토양 간의 물리적 상호작용 역학인 '테라메카닉스(Terramechanics)'에 달려 있습니다. 바퀴가 구동할 때 모래의 지지력 부족으로 인한 과도한 수직 침하(Sinkage)와 높은 미끄러짐(Slip)이 발생하면 바퀴가 모래를 파고들며 공회전하여 영구 고립(Entrapment)되는 치명적 사고가 발생합니다. 베커-웡(Bekker-Wong) 토양 압력-침하 및 전단 응력 모델을 기반으로 6개 독립 구동 인휠 모터의 토크를 1,000Hz 주기로 분배하고 슬립율을 최적 견인 영역($10\% \sim 25\%$)으로 유지하는 0-Alloc C# 스택 서보 엔진을 공개합니다.

1. 2022 개정 교육과정 교과 연계 분석

  • 물리학 (마찰력과 뉴턴 운동 법칙): 정지 마찰력과 운동 마찰력, 회전 운동의 토크($\tau = I\alpha$), 굴림 마찰과 바퀴 선속도($v = r\omega$) vs 차체 이동 속도($V$)의 슬립율($s$).
  • 지구과학 (행성 지질학과 레골리스의 특성): 화성의 저중력 환경($g_{mars} \approx 3.72\text{ m/s}^2$), 미세 먼지와 모래의 입도 분포, 내부 마찰각($\phi$)과 점착력($c$).
  • 미적분 (접촉 호를 따른 응력 텐서 적분): 바퀴 진입각($\theta_1$)부터 탈출각($\theta_2$)까지 수직 압력 $p(\theta)$과 전단 응력 $\tau(\theta)$을 호의 미소 각도 $d\theta$에 대해 적분하여 순 견인력(Drawbar Pull) 도출.
  • 정보 및 제어 공학 (실시간 독립 휠 트랙션 제어): 지구와의 수십 분 통신 지연 상황에서 온디바이스로 바퀴 침하를 감지하고 1ms(1,000Hz) 주기로 공회전을 방지하는 0-Alloc C# 서보.

2. 핵심 수학적 모델링 및 물리 공식

1) Bekker-Wong 수직 압력-침하(Pressure-Sinkage) 관계식

바퀴 접촉 각도 $\theta$에서의 국소 침하 깊이 $z(\theta)$, 바퀴 폭 $b$, 흙의 파라미터 $k_c, k_\phi, n$:

$$p(\theta) = \left( \frac{k_c}{b} + k_\phi \right) z(\theta)^n = \left( \frac{k_c}{b} + k_\phi \right) \left[ r (\cos\theta - \cos\theta_1) \right]^n$$ $$z_0 = r (1 - \cos\theta_1) \text{ (최대 침하 깊이)}$$

2) Janosi-Hanamoto 전단 응력-변위(Shear Stress-Displacement) 모델

쿨롱-모어 마찰 기준과 전단 변위 $j(\theta)$에 따른 접선 방향 전단 응력 $\tau(\theta)$:

$$\tau(\theta) = [c + p(\theta) \tan\phi] \left( 1 - \exp\left( -\frac{j(\theta)}{K} \right) \right)$$ $$j(\theta) = r \left[ (\theta_1 - \theta) - (1 - s) (\sin\theta_1 - \sin\theta) \right], \quad s = 1 - \frac{V}{r\omega} \text{ (슬립율)}$$

3) 로버 순 견인력(Drawbar Pull) 및 휠 토크 평형식

바퀴 반경 $r$, 폭 $b$, 수직 하중 $W$에 따른 순 전진 견인력 $DP$ 및 요구 토크 $T$:

$$DP = r b \int_{\theta_2}^{\theta_1} [\tau(\theta) \cos\theta - p(\theta) \sin\theta] \, d\theta$$ $$W = r b \int_{\theta_2}^{\theta_1} [p(\theta) \cos\theta + \tau(\theta) \sin\theta] \, d\theta, \quad T = r^2 b \int_{\theta_2}^{\theta_1} \tau(\theta) \, d\theta$$

3. 1,000Hz 0-Alloc C# 화성 로버 휠 트랙션 슬립 서보 제어기

1,000Hz 주기로 6륜 인휠 모터 엔코더 및 시각 주행 거리계(Visual Odometry) 신호를 수집하여 각 바퀴의 슬립율을 스택 상에서 무할당 연산하고 모터 토크를 적응 분배하는 C# 엔진입니다.

using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

namespace ZeliDesk.Stem.MarsRoverTerramechanics
{
    /// <summary>
    /// 로버 휠 속도 및 차체 선속도 계측 데이터 (스택 할당 0-Alloc)
    /// </summary>
    [StructLayout(LayoutKind.Sequential, Pack = 8)]
    public readonly struct RoverWheelKinematics
    {
        public readonly double WheelAngularVelocityRadS; // 바퀴 각속도 (rad/s)
        public readonly double RoverChassisSpeedM_S;      // 비전 계측 차체 이동 속도 (m/s)
        public readonly double NormalLoadN;               // 바퀴 수직 하중 (N)
        public readonly double SlopePitchAngleRad;        // 경사면 피치각 (라디안)

        public RoverWheelKinematics(double omega, double v, double wLoad, double pitch)
        {
            WheelAngularVelocityRadS = omega;
            RoverChassisSpeedM_S = v;
            NormalLoadN = wLoad;
            SlopePitchAngleRad = pitch;
        }
    }

    /// <summary>
    /// 인휠 모터 토크 및 슬립 제어 출력 명령
    /// </summary>
    public ref struct WheelTorqueCommand
    {
        public double CommandedTorqueNm;
        public double CurrentSlipRatio;
        public bool SinkageRiskAlert;
        public double EstimatedTractionForceN;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public WheelTorqueCommand(double torque, double slip, bool alert, double traction)
        {
            CommandedTorqueNm = torque;
            CurrentSlipRatio = slip;
            SinkageRiskAlert = alert;
            EstimatedTractionForceN = traction;
        }
    }

    /// <summary>
    /// 1,000Hz 무할당 화성 로버 테라메카닉스 트랙션 서보 엔진
    /// </summary>
    public ref struct RoverTerramechanicsEngine
    {
        private const double WheelRadiusM = 0.25; // 25cm 바퀴 반경
        private const double TargetOptimalSlip = 0.18; // 18% 최적 견인 슬립율
        private const double CohesionPa = 1200.0; // 화성 레골리스 점착력 (Pa)
        private const double FrictionAngleRad = 0.61; // 내부 마찰각 35도 (0.61 rad)

        private double _slipErrorIntegral;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public void ExecuteControlCycle(
            in RoverWheelKinematics sensor,
            double desiredDriveTorqueNm,
            out WheelTorqueCommand command)
        {
            // 1. 슬립율(Slip Ratio) 계산 (s = (r*omega - v) / (r*omega))
            double wheelLinearSpeed = WheelRadiusM * sensor.WheelAngularVelocityRadS;
            double roverSpeed = Math.Max(0.001, sensor.RoverChassisSpeedM_S);

            double slipRatio = 0.0;
            if (wheelLinearSpeed > roverSpeed)
            {
                slipRatio = (wheelLinearSpeed - roverSpeed) / Math.Max(wheelLinearSpeed, 0.01);
            }
            else
            {
                slipRatio = (wheelLinearSpeed - roverSpeed) / roverSpeed; // 제동 슬립
            }
            slipRatio = Math.Clamp(slipRatio, -1.0, 1.0);

            // 2. 위험 슬립 감지 (슬립율 > 0.5 이면 모래 파고들기 위험 발생)
            bool alert = slipRatio > 0.50;

            // 3. PI 슬립 트랙션 제어 루프
            double slipError = TargetOptimalSlip - slipRatio;
            _slipErrorIntegral += slipError * 0.001;

            double kp = 45.0;
            double ki = 120.0;

            double torqueModifier = kp * slipError + ki * _slipErrorIntegral;
            double finalTorque = desiredDriveTorqueNm + torqueModifier;

            // 과도한 슬립 시 급격한 토크 컷오프로 고립 방지
            if (alert)
            {
                finalTorque = Math.Min(finalTorque, desiredDriveTorqueNm * 0.35);
            }
            finalTorque = Math.Clamp(finalTorque, 0.0, 120.0); // 최대 120 Nm

            // 4. 추정 순 견인력 (Drawbar Pull) 산출
            double maxTraction = (CohesionPa * 0.05 + sensor.NormalLoadN * Math.Tan(FrictionAngleRad));
            double estimatedTraction = maxTraction * (1.0 - Math.Exp(-Math.Max(0.0, slipRatio) / 0.1));

            command = new WheelTorqueCommand(finalTorque, slipRatio, alert, estimatedTraction);
        }
    }
}

4. 방통대 우호성 교수 랩실 연구 지도 및 직무연수 활용 가이드

  • 초·중·고 과학교사 직무연수: 모래사장에서 바퀴가 헛도는 현상을 마찰력, 수직항력, 접촉 면적 공식과 연계하여 화성 로버 바퀴의 특수 그루브(Grousers) 설계 원리를 물리-지구과학 융합 수업으로 지도할 수 있습니다.
  • 지구과학-물리 융합 탐구: 화성의 저중력($0.38g$)이 차량의 지반 수직 하중과 토양 지지력에 미치는 역학적 영향을 계산하고, 지구 대비 화성에서 바퀴 침하가 더 깊어지는 이유를 테라메카닉스 수식으로 탐구할 수 있습니다.
  • 국방 험지 무인자율주행차량(UGV) 야지 기동: 갯벌, 진흙탕, 사막 등 극한 지형에서 무인 전투 차량의 바퀴 헛돌림 및 차체 침하를 원천 방지하는 국방 AI 교과서 지상무인체계 제어 모듈로 도입 가능합니다.