화성(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 교과서 지상무인체계 제어 모듈로 도입 가능합니다.