본문으로 건너뛰기
시뮬레이터

마찰을 올렸는데 로봇이 더 못 도는 이유: 스키드스티어 스크럽의 기하학

3주에 걸친 마찰 계수 튜닝이 왜 전부 헛수고였는지 수식으로 유도합니다. 스키드스티어의 회전 능력비에서 마찰 계수와 중량은 소거되고 접지 기하만 남습니다. 실측 데이터, 그리고 시뮬레이션 계측에서 얻은 교훈 두 가지를 함께 공유합니다.

WRWIM Robotics Team
·
skid-steervehicle-dynamicstracked-vehiclesimulationphysx

마찰을 올렸는데 로봇이 더 못 도는 이유: 스키드스티어 스크럽의 기하학

궤도형 로봇의 시뮬레이션 회전 성능을 올리려고 3주 동안 마찰 계수 스윕을 여섯 번 돌렸습니다. 결과는 매번 같았습니다. 요레이트 캡처는 꿈쩍하지 않았고, μ\mu를 0.4/0.3에서 0.9/0.8로 올리자 회전은 좋아지기는커녕 나빠졌습니다.

수식을 유도해 보니 이유가 명확했습니다. 마찰 계수는 처음부터 답에 들어 있지 않았습니다.

이 글은 그 유도 과정과 실측 검증, 그리고 이 과정에서 얻은 계측 교훈을 공유합니다. 대상 차량(궤도형 스키드스티어, 접지장 600mm)의 시뮬레이션 모델 이야기는 앞선 글에 있습니다.

스키드스티어는 미끄러져야 돈다​

자동차는 바퀴를 진행 방향에 정렬시켜 돕니다. 바퀴는 구르고, 횡슬립은 거의 없습니다. 스키드스티어는 그럴 수 없습니다. 접점들이 섀시에 고정되어 있으므로, 회전은 접점들을 강제로 옆으로 미끄러뜨립니다. 스크럽은 결함이 아니라 이 조향 방식의 태생적 비용입니다.

기하로 보면 더 분명합니다. 차량이 요레이트 ω\omega로 돌 때, 순간회전중심(ICR)의 세로 좌표 xcx_c와 같은 위치에 있는 접점만 횡슬립이 0입니다. 즉 접지면 위에서 슬립이 없는 세로 스테이션은 최대 한 곳이고, 600mm 접지면의 나머지 모든 접점은 옆으로 갈려야 합니다. 마찰을 어떻게 튜닝해도 이 사실은 변하지 않습니다. 순수하게 기하학입니다.

두 개의 모멘트​

접점 ii가 하중 NiN_i를 받고 마찰 계수가 μ\mu일 때, 쿨롱 마찰력의 크기는 μNi\mu N_i입니다. 제자리 회전에서 이 힘들이 만드는 모멘트는 두 종류입니다.

저항 모멘트 — 횡슬립 마찰이 세로 방향 팔길이에 작용합니다.

Mresist=∑iμNi ∣xi−xc∣M_{\text{resist}} = \sum_i \mu N_i \, |x_i - x_c|

접지장 LL에 하중이 균일하면 Mresist=μWL/4M_{\text{resist}} = \mu W L / 4, 하중이 양 끝 두 스테이션에 몰리면 μWL/2\mu W L / 2 — 두 배 나빠집니다. 하중 분배가 중요한 이유이고, 저희가 이 값을 가정하지 않고 실측한 이유입니다(실측 결과: 이상치의 1.27배).

구동 모멘트 — 좌우 트랙의 세로 방향 추력 차가 트랙 반게이지 b=B/2b = B/2에 작용합니다.

Mdrive=∑iμNi b=μWbM_{\text{drive}} = \sum_i \mu N_i \, b = \mu W b

비율에서 μ\mu와 WW가 소거된다​

차량이 제자리에서 돌 수 있는지는 두 모멘트의 비가 결정합니다.

MdriveMresist=μWbμWL/4=4bL=2BL\frac{M_{\text{drive}}}{M_{\text{resist}}} = \frac{\mu W b}{\mu W L / 4} = \frac{4b}{L} = \frac{2B}{L}

μ\mu가 소거됩니다. WW도 소거됩니다. 스키드스티어의 회전 능력은 접점이 얼마나 세게 잡는가도, 차량이 얼마나 무거운가도 아니고, 오직 잡는 접점들이 어디에 있는가로 결정됩니다.

이것이 여섯 번의 마찰 스윕이 전부 같은 결과를 낸 이유입니다. μ\mu는 구동 추력과 스크럽 저항을 같이 키우므로 비율을 바꾸지 못합니다. 올렸을 때 오히려 나빠진 것의 정확한 메커니즘은 아직 특정하지 못했습니다 — 다만 위 식이 말해주는 것은, 어느 방향이든 μ\mu가 회전을 개선하는 레버가 아니라는 사실입니다.

대상 차량의 수치를 넣으면:

B=0.510 m,L=0.600 m⇒MdriveMresist=2BL=1.70B = 0.510\,\text{m}, \quad L = 0.600\,\text{m} \quad\Rightarrow\quad \frac{M_{\text{drive}}}{M_{\text{resist}}} = \frac{2B}{L} = 1.70

구동 모멘트가 스크럽 저항의 1.7배이므로 제자리 회전은 가능하고, 실제로 시뮬레이션에서 지령의 29~32% 요레이트로 돕니다(3회 독립 런, 양방향 대칭). L/B=1.18L/B = 1.18은 통상적인 궤도 차량(1.2~1.8)보다도 유리한 축에 듭니다.

진짜 레버는 '어느 접점이 잡느냐'​

μ\mu가 레버가 아니라면 무엇이 레버일까요? 위 식이 답합니다: 잡는 스테이션의 배치입니다. 접지 중심 근처로 그립을 모으면 평균 스크럽 팔길이가 짧아져 비율이 올라갑니다.

잡는 스테이션평균 스크럽 팔길이비율현재 대비
12개 전부 (현재)0.179 m1.42—
안쪽 8개 (끝단 미끄럽게)0.093 m2.741.9×
안쪽 4개만0.053 m4.863.4×
단일 스테이션0∞(과거 4접점 모델)

마지막 행이 핵심입니다. 그립이 한 스테이션뿐이면 스크럽 팔길이가 0이 되어 회전이 무손실이 됩니다. 과거 4접점 모델이 "완벽하게" 돌았던 이유가 바로 이것이고, 그래서 완벽함이 곧 오류였습니다.

전진하면서 돌 때: 두 개의 영역​

전진 속도 v≠0v \neq 0이면 ICR이 차량 중심선에서 R=v/ωR = v/\omega만큼 옆으로 이동합니다. 트랙 반게이지 bb와 비교하면 두 영역이 갈립니다.

조건기하결과
∣R∣<b\lvert R \rvert < b좌우 트랙이 ICR의 반대편에 위치트랙이 서로 반대로 돎
∣R∣>b\lvert R \rvert > b좌우 트랙이 ICR의 같은 편에 위치두 트랙 모두 같은 방향 구동

두 번째 영역에서는 양쪽 마찰력이 모두 μN\mu N에 포화되어 같은 방향을 가리키므로, 요를 만드는 좌우 차이가 붕괴합니다. b=0.255 mb = 0.255\,\text{m}인 저희 차량에서 v=0.5,ω=1.0v=0.5, \omega=1.0 (회전 반경 0.5m)은 이미 이 영역입니다.

실제 고무 트랙은 슬립에 비례해 횡력을 점진적으로 쌓기 때문에 이 경계를 부드럽게 넘습니다. 강체 쿨롱 접촉은 stick-slide 두 상태뿐이라 전환이 급격합니다. 저희 시뮬레이션에서 전진 중 회전이 ~0%로 붕괴하는 원인이 이것이라고 추정하고 있지만, 이는 가설이며 아직 측정으로 확인되지 않았습니다. 앞서 두 개의 다른 설명을 세웠다가 둘 다 측정으로 반박된 전적이 있어, 이번에는 가설을 가설이라 부릅니다.

파워로 하는 사니티 체크​

제자리 회전의 스크럽 소산 파워는

Pscrub=μ ω WL/4P_{\text{scrub}} = \mu \, \omega \, W L / 4

실측 중량 W=1052 NW = 1052\,\text{N}, L=0.600 mL = 0.600\,\text{m}, ω=1 rad/s\omega = 1\,\text{rad/s}에서:

μ\mu상황파워설치 출력 1000W 대비
0.3현재 시뮬레이션 값47 W5%
0.8고무-콘크리트126 W13%

궤도 차량이 조향에 전력을 많이 쓰는 것으로 알려진 사실과 부합합니다. 모델이 맞는 물리 영역에 있다는 값싼 교차 검증입니다.

이 과정에서 배운 계측 교훈 두 가지​

유도보다 값비쌌던 교훈입니다. 측정 버그 두 건이 상당한 작업을 무효화했습니다.

1. 벽시계와 시뮬레이션 시계. 진단 로거가 시뮬레이터 포즈(시뮬레이션 시간으로 진행)를 벽시계로 타임스탬프했습니다. 장면이 실시간의 약 0.24배로 돌았으므로 모든 파생 레이트가 3.8배 작게 나왔고, 그 위에서 약 3주간 "PhysX 스키드스티어 성능 한계"라는 결론이 자라났습니다. 물리적 손실이 있을 수 없는 직진 구간을 대조군으로 넣고서야 잡았습니다.

2. /joint_states 속도는 그대로 믿을 수 없었다. 로드휠 관절의 속도가 스핀 레이트가 아니라 세로 위치에 비례하는 값을 보고했습니다. 원인은 중첩된 카메라 에셋에 남아 있던 physics:rigidBodyEnabled 플래그였습니다.

여기서 채택한 표준 규칙: 시뮬레이션에서 나온 측정값은, 답을 독립적으로 아는 대조 조건을 통과하기 전에는 신뢰하지 않는다.

다음 단계: 시뮬레이션 튜닝보다 실차 측정​

가장 뼈아픈 사실은 이것입니다. 실차의 회전 성능은 아무도 측정한 적이 없습니다. 회전 반경 스펙도, 최대 요레이트도, 주행 중 각속도 제약 문서도 없습니다. 저희는 측정된 적 없는 목표를 향해 시뮬레이션을 튜닝해 온 셈이고, 실차도 비슷한 한계를 가질 가능성이 충분히 있습니다.

다행히 측정은 쌉니다. 인코더는 구동 모터에만 있어 슬립에 눈이 멀지만, 자이로는 바퀴와 무관하게 실제 차체 회전을 잽니다. 둘 다 기본 드라이버가 발행하는 토픽이므로:

slip factor=imu.angular_velocity.zodom.twist.twist.angular.z\text{slip factor} = \frac{\text{imu.angular\_velocity.z}}{\text{odom.twist.twist.angular.z}}

v×ωv \times \omega 격자를 20분쯤 주행하며 이 비를 기록하면, 마찰 보정값과 실제 회전 한계를 동시에 얻습니다. 추가 하드웨어 없이, 모션캡처 없이.

정리​

  • 스키드스티어의 회전 능력비는 2B/L2B/L — 접지 기하만 남고 마찰과 중량은 소거됩니다. 회전을 바꾸려면 어느 접점이 잡는지를 바꿔야 합니다.
  • 완벽하게 도는 스키드스티어 모델은 스크럽 팔길이가 0이라는 신호, 즉 모델이 잘못됐다는 신호입니다.
  • 시뮬레이션 측정값은 대조 조건 없이는 믿지 않습니다. 저희는 이 규칙을 3주 비용을 치르고 샀습니다.
  • 튜닝 목표 자체가 미측정이라면, 시뮬레이터를 더 만지기 전에 실물을 재는 것이 가장 싼 다음 수입니다.