학습 목표
- 힘·토크·질량·관성모멘트의 관계를 설명할 수 있다.
- 경사와 손실을 고려해 이동 로봇에 필요한 바퀴 토크를 대략 계산할 수 있다.
- 차동 구동 로봇의 정운동학과 역운동학을 계산할 수 있다.
- ROS 2의
Twist명령이 좌우 바퀴 속도로 변환되는 과정을 설명할 수 있다. - Encoder로 Pose를 추정하는 과정과 Odometry 오차의 원인을 설명할 수 있다.
- 명령 제한, Timeout과 위치 보정이 필요한 이유를 설명할 수 있다.
1. 움직임은 에너지에서 시작한다
로봇이 움직이려면 전원에 저장된 에너지가 Motor와 Driver를 거쳐 기계적인 운동으로 바뀌어야 합니다. Controller는 목표를 계산하지만 그 숫자만으로 로봇이 움직이지는 않습니다. Motor가 Torque를 만들고, Gearbox와 Wheel 또는 Link가 그 힘을 바닥과 물체에 전달해야 합니다.
이 흐름은 다음과 같습니다.
실제 운동은 명령뿐 아니라 Robot의 질량, 관성, 마찰, 경사, 하중과 접지 상태에 의해 결정됩니다. 그래서 Software의 목표 속도와 실제 속도는 항상 같다고 볼 수 없습니다.
2. 위치·속도·가속도
직선 위치를 x, 회전 각도를 θ라고 하겠습니다. 속도는 위치가 시간에 따라 변하는 정도이고, 가속도는 속도가 변하는 정도입니다.
v = dx/dt
a = dv/dt
ω = dθ/dt
α = dω/dt
v는 선속도, ω는 각속도입니다. ROS에서는 보통 선속도를 m/s, 각속도를 rad/s로 표현합니다. 1 rad ≈ 57.3°이며 한 바퀴는 2π rad입니다.
속도가 빠르다는 것은 많이 움직인다는 뜻이고, 가속도가 크다는 것은 속도가 빠르게 변한다는 뜻입니다. 정지 상태에서 급출발하거나 이동 방향을 급하게 바꾸면 큰 가속도가 필요합니다.
3. 직선 운동과 회전 운동의 대응
직선 운동과 회전 운동은 비슷한 수학적 구조를 가집니다.
| 개념 | 직선 운동 | 회전 운동 | 대표 단위 |
|---|---|---|---|
| 위치 | x |
θ |
m / rad |
| 속도 | v |
ω |
m/s / rad/s |
| 가속도 | a |
α |
m/s² / rad/s² |
| 운동 변화의 저항 | 질량 m |
관성모멘트 I |
kg / kg·m² |
| 운동을 바꾸는 원인 | F = ma |
τ = Iα |
N / N·m |
| 일률 | P = Fv |
P = τω |
W |
Force F는 직선 운동을, Torque τ는 회전 운동을 변화시킵니다. Torque는 힘과 회전축에서 힘이 작용하는 거리의 곱입니다.
τ = F × r
같은 힘이라도 회전축에서 멀리 작용할수록 더 큰 Torque를 만듭니다.
4. 관성모멘트는 질량의 위치까지 포함한다
질량은 직선 속도를 바꾸기 어려운 정도를 나타냅니다. 관성모멘트는 회전 속도를 바꾸기 어려운 정도이며, 전체 질량뿐 아니라 질량이 회전축에서 얼마나 떨어져 있는지에도 좌우됩니다.
점 질량의 단순한 경우에는 다음 관계를 생각할 수 있습니다.
I = m r²
같은 질량도 회전축에서 멀어지면 r²에 비례해 관성모멘트가 커집니다. Robot Arm을 몸체 가까이 접으면 빠르게 움직일 수 있지만, 팔을 길게 펴고 무거운 Tool을 들면 같은 가속도를 내기 위해 더 큰 Torque가 필요합니다.
실제 Link의 관성모멘트는 모양과 회전축에 따라 달라집니다.
I = mr²은 모든 물체에 그대로 적용하는 공식이 아니라 질량 배치의 영향을 이해하기 위한 가장 단순한 예입니다.
5. 이동 로봇의 Torque를 대략 계산하기
평지에서 질량 m = 30 kg인 Robot을 a = 0.5 m/s²로 가속한다고 하겠습니다. 가속에 필요한 힘만 계산하면 다음과 같습니다.
F_accel = ma = 30 × 0.5 = 15 N
Wheel 반지름이 r = 0.05 m라면 전체 Wheel 축에서 필요한 Torque는 다음과 같습니다.
τ_total = F_accel × r = 15 × 0.05 = 0.75 N·m
좌우 두 Wheel이 힘을 균등하게 담당한다면 Wheel 하나당 0.375 N·m입니다. 하지만 이 값만으로 Motor를 고르면 부족할 수 있습니다. 실제 요구 힘에는 다음 항목이 더해집니다.
F_required = F_accel + F_slope + F_rolling + F_other
F_slope = mg sin(경사각): 경사를 오르는 힘F_rolling: 바퀴와 바닥의 구름저항F_other: Cable, Seal, Brush와 기구 마찰 등의 저항- Wheel과 Gear의 회전 관성
- Gearbox와 전달계의 효율 손실
따라서 Motor 축 Torque는 감속비와 효율까지 포함해 확인해야 합니다.
τ_motor ≈ τ_wheel / (감속비 × 효율)
계산값에 무조건 일정한 배수를 곱하는 것보다 실제 경사, 가속 Profile, 연속 운전 시간과 온도를 기준으로 정격 Torque와 Peak Torque를 각각 검증하는 것이 안전합니다.
6. 정격 Torque와 Peak Torque
Motor의 Peak Torque는 출발이나 짧은 충격처럼 제한된 시간에만 사용할 수 있습니다. 연속 주행에 필요한 Torque가 정격 Torque를 넘으면 Motor와 Driver가 과열될 수 있습니다.
Motor를 선정할 때는 적어도 다음을 확인합니다.
- 최고 속도에서 필요한 Motor 회전수
- 평상시 연속 운전 Torque와 정격 Torque
- 출발·가속·경사에서 필요한 Peak Torque와 허용 시간
P = τω로 계산한 기계 출력- Driver 전류, 배터리 전압 강하와 방열 조건
- Wheel이 미끄러지기 전에 전달할 수 있는 접지력
Motor가 강해도 Wheel과 바닥 사이의 마찰력이 부족하면 Wheel만 헛돌고 Robot은 원하는 만큼 가속하지 못합니다.
7. 운동학과 동역학은 무엇이 다른가
Kinematics는 힘을 직접 다루지 않고 위치와 속도의 기하학적 관계를 계산합니다. Dynamics는 질량, 관성, 힘과 Torque가 운동을 어떻게 바꾸는지 계산합니다.
예를 들어 차동 구동에서 원하는 전진 속도와 회전 속도를 좌우 Wheel 속도로 바꾸는 것은 Kinematics입니다. 그 Wheel 속도에 얼마나 빨리 도달할 수 있는지, 필요한 Motor Torque와 전류가 얼마인지는 Dynamics의 문제입니다.
두 계산은 서로 보완합니다. Kinematics가 실행 가능한 Wheel 목표를 만들고, Motor 제어와 실제 기계 시스템이 그 목표를 따라갑니다.
8. 차동 구동 Robot의 변수
차동 구동은 좌우 구동 Wheel의 속도 차이로 이동과 회전을 만듭니다. 다음 기호를 사용하겠습니다.
| 기호 | 의미 | 단위 |
|---|---|---|
r |
Wheel 유효 반지름 | m |
L |
좌우 Wheel 접촉점 사이 거리, Track Width | m |
ω_L, ω_R |
좌우 Wheel 각속도 | rad/s |
v_L, v_R |
좌우 Wheel 선속도 | m/s |
v |
Robot 중심의 전진 속도 | m/s |
ω |
Robot의 Yaw 각속도 | rad/s |
Wheel이 미끄러지지 않는다는 이상적인 조건에서는 다음과 같습니다.
v_L = r ω_L
v_R = r ω_R
9. 정운동학 — Wheel 속도에서 Robot 속도로
Forward Kinematics는 측정된 좌우 Wheel 속도로 Robot 중심의 속도를 구합니다.
v = (v_R + v_L) / 2
ω = (v_R - v_L) / L
v_L = v_R: 직진 또는 후진v_L = -v_R: 중심을 기준으로 제자리 회전v_L < v_R: 왼쪽으로 회전- 한쪽 Wheel만 정지: 정지한 Wheel 부근을 중심으로 회전
회전 반경 R은 ω ≠ 0일 때 다음과 같습니다.
R = v / ω
ω가 0에 가까우면 회전 반경은 매우 커지고 직선 운동에 가까워집니다.
10. 역운동학 — Robot 속도에서 Wheel 속도로
Inverse Kinematics는 원하는 v와 ω를 좌우 Wheel 목표로 바꿉니다.
v_L = v - ωL/2
v_R = v + ωL/2
ω_L = v_L/r
ω_R = v_R/r
여기서 ωL/2는 Robot 각속도 ω와 Track Width L의 곱을 2로 나눈 것입니다. 왼쪽 Wheel 각속도 ω_L과 혼동하지 않도록 아래 첨자를 구분해야 합니다.
예를 들어 v = 0.4 m/s, ω = 0.5 rad/s, L = 0.36 m, r = 0.06 m이면 다음과 같습니다.
v_L = 0.4 - 0.5×0.36/2 = 0.31 m/s
v_R = 0.4 + 0.5×0.36/2 = 0.49 m/s
ω_L ≈ 5.17 rad/s
ω_R ≈ 8.17 rad/s
11. 실행 불가능한 명령은 제한해야 한다
계산된 Wheel 속도가 Motor의 허용 범위를 넘을 수 있습니다. 좌우 값을 각각 따로 잘라내면 v와 ω의 비율이 달라져 원래 의도한 곡률이 바뀝니다. 보통 가장 큰 절댓값을 기준으로 두 Wheel 명령을 같은 비율로 축소합니다.
def limit_wheel_speeds(w_left: float, w_right: float, limit: float) -> tuple[float, float]:
peak = max(abs(w_left), abs(w_right))
if peak <= limit:
return w_left, w_right
scale = limit / peak
return w_left * scale, w_right * scale
속도 제한만으로 충분하지 않습니다. 가속도와 Jerk를 제한하면 Wheel Slip, 전류 급증, 화물 흔들림과 승차감 저하를 줄일 수 있습니다.
12. ROS 2 Twist에서 Motor까지
ROS 2 이동 Robot은 일반적으로 geometry_msgs/msg/Twist의 다음 값을 사용합니다.
linear.x = v [m/s]
angular.z = ω [rad/s]
차동 구동 Robot은 측면으로 즉시 움직일 수 없으므로 일반적으로 linear.y를 실행하지 않습니다.
실제 System에서는 명령의 최대값, 가속도, 수신 시각과 Robot 상태를 검증한 뒤 Motor에 전달해야 합니다.
13. Encoder는 회전을 어떻게 측정하는가
Encoder는 Motor 또는 Wheel의 회전량을 Tick으로 측정합니다. 한 바퀴당 Tick 수를 N, 측정 Tick 증가량을 Δtick이라고 하면 회전각은 다음과 같습니다.
Δφ = 2π × Δtick/N
Δs = r × Δφ
Encoder가 Motor 축에 달려 있다면 Gear Ratio까지 반영해 Wheel 회전량으로 변환해야 합니다. 또한 Quadrature Encoder의 사양에는 Pulse 수, Edge 수와 Gear 출력축 기준 값이 혼용되므로 제조사의 정의를 확인해야 합니다.
짧은 측정 구간에서는 Tick이 하나도 증가하지 않아 저속 속도값이 계단처럼 보일 수 있습니다. 반대로 너무 긴 구간을 사용하면 응답이 느려집니다.
14. Odometry — 상대 이동을 누적해 Pose를 추정한다
Odometry는 좌우 Wheel의 이동량으로 Robot의 상대적인 Pose (x, y, θ)를 추정합니다. 작은 시간 간격 Δt에서 정운동학으로 구한 v, ω를 적분하는 간단한 방법은 다음과 같습니다.
θ_mid = θ + ωΔt/2
x ← x + v cos(θ_mid) Δt
y ← y + v sin(θ_mid) Δt
θ ← normalize(θ + ωΔt)
중간 각도 θ_mid를 사용하는 Midpoint 적분은 먼저 각도를 갱신한 뒤 이동하는 단순 Euler 방식보다 곡선 주행에서 오차가 작습니다. 큰 회전이나 긴 주기에서는 원호의 정확한 식 또는 더 정교한 적분법을 사용할 수 있습니다.
Pose의 각도는 보통 -π에서 π 같은 일정한 범위로 정규화합니다.
15. Odometry 오차가 누적되는 이유
Odometry는 이전 추정값에 매번 이동량을 더합니다. 한 번 생긴 오차를 스스로 알아낼 절대 기준이 없으므로 시간이 지나며 Drift가 누적됩니다.
주요 원인은 다음과 같습니다.
- 회전·급가속·턱 통과 때 발생하는 Wheel Slip
- Wheel 반지름과 Track Width의 Calibration 오차
- 좌우 Wheel의 실제 크기 차이와 마모
- 하중에 따른 타이어 변형과 공기압 변화
- Encoder 분해능, 누락 Tick과 시간 측정 오차
- 차동 구동의 이상적인 평면·무미끄럼 가정이 깨지는 상황
방향 오차는 이후 이동 거리에 따라 큰 위치 오차를 만듭니다. 방향이 1° 틀린 채 10 m를 이동하면 측면 오차는 대략 다음과 같습니다.
10 × sin(1°) ≈ 0.175 m
16. 계통 오차와 무작위 오차
계통 오차는 같은 방향으로 반복되는 오차입니다. Wheel 반지름이나 Track Width 설정이 잘못된 경우가 대표적이며 Calibration으로 줄일 수 있습니다.
무작위 오차는 바닥의 작은 변화, 순간 Slip과 측정 Noise처럼 매번 다르게 나타납니다. Calibration만으로 완전히 없애기 어렵고 IMU, LiDAR, Camera와 외부 기준을 함께 사용해 줄입니다.
Calibration은 한 번의 짧은 시험보다 다음처럼 반복 측정하는 것이 좋습니다.
- 실제 운용 하중과 타이어 상태를 맞춘다.
- 여러 번 직진해 거리 Scale과 좌우 비대칭을 확인한다.
- 양방향 회전 시험으로 Track Width와 Slip 영향을 확인한다.
- 한 Parameter를 조정한 뒤 같은 시험을 반복한다.
- 다른 바닥과 속도에서도 결과가 유지되는지 검증한다.
ROS 2 이동 Robot에서는 좌표계를 보통 다음과 같이 나눕니다.
odom → base_link: Wheel Odometry와 Sensor Fusion이 제공하는 연속적인 단기 이동map → odom: 지도 기반 위치 추정이 장기 Drift를 보정하는 변환map → base_link: 위 두 변환을 연결해 얻는 지도 위 Robot Pose
odom 좌표계는 부드럽고 연속적이어야 하지만 시간이 지나며 Drift할 수 있습니다. map 기준 Pose는 장기적으로 정확해야 하지만 위치 추정 갱신이나 재초기화 때 변할 수 있습니다. 이 역할을 분리하면 Local Controller에는 연속적인 움직임을 제공하면서 Global Planner에는 지도 기준 위치를 제공할 수 있습니다.
AMCL이 Odometry 자체의 누적값을 지우는 것은 아닙니다. 일반적으로
map → odom변환을 갱신하여 지도 기준 위치를 보정합니다.
18. 안전한 움직임에는 Timeout이 필요하다
통신이 끊겼는데 마지막 cmd_vel을 계속 실행하면 Robot이 멈추지 않을 수 있습니다. Driver 또는 MCU는 마지막 유효 명령의 수신 시각을 확인하고, 제한 시간을 넘기면 감속 또는 안전 정지 상태로 전환해야 합니다.
함께 확인할 항목은 다음과 같습니다.
- 명령 값이 유한한 수인지 확인
- 최대 속도·가속도·Jerk 제한
- 명령 Timestamp 또는 수신 시각의 최신성
- Motor Driver Fault와 Emergency Stop 상태
- Encoder가 명령과 다르게 움직일 때의 이상 감지
- 정지 명령과 독립적인 안전 기능의 구분
구체적인 정지 방법과 안전 수준은 Robot의 질량, 속도, 사용 환경과 위험 분석에 따라 결정해야 합니다.
19. 실전 코드 — Twist부터 Odometry까지
다음 코드는 역운동학으로 Wheel 목표를 만들고, 실제 Wheel 반지름 오차를 포함한 Encoder 측정으로 Odometry를 적분합니다. Python 3로 실행할 수 있으며 ROS 2 자체는 필요하지 않습니다.
from __future__ import annotations
import math
import random
WHEEL_RADIUS_MODEL = 0.050
WHEEL_RADIUS_REAL = 0.048
TRACK_WIDTH = 0.35
DT = 0.05
MAX_WHEEL_SPEED = 12.0
def inverse_kinematics(v: float, w: float) -> tuple[float, float]:
left = (v - w * TRACK_WIDTH / 2.0) / WHEEL_RADIUS_MODEL
right = (v + w * TRACK_WIDTH / 2.0) / WHEEL_RADIUS_MODEL
peak = max(abs(left), abs(right))
if peak > MAX_WHEEL_SPEED:
scale = MAX_WHEEL_SPEED / peak
left, right = left * scale, right * scale
return left, right
def forward_kinematics(w_left: float, w_right: float, radius: float) -> tuple[float, float]:
v_left = radius * w_left
v_right = radius * w_right
return (v_right + v_left) / 2.0, (v_right - v_left) / TRACK_WIDTH
class Pose:
def __init__(self) -> None:
self.x = 0.0
self.y = 0.0
self.theta = 0.0
def integrate(self, v: float, w: float, dt: float) -> None:
theta_mid = self.theta + w * dt / 2.0
self.x += v * math.cos(theta_mid) * dt
self.y += v * math.sin(theta_mid) * dt
self.theta = math.atan2(
math.sin(self.theta + w * dt),
math.cos(self.theta + w * dt),
)
def main() -> None:
truth = Pose()
odom = Pose()
random.seed(14)
for step in range(400):
v_cmd, w_cmd = (0.4, 0.0) if step < 200 else (0.4, 0.3)
w_left, w_right = inverse_kinematics(v_cmd, w_cmd)
# 실제 Wheel에는 작은 Slip과 반지름 차이가 있다.
w_left_real = w_left * (1.0 + random.gauss(0.0, 0.01))
w_right_real = w_right * (1.0 + random.gauss(0.0, 0.01))
v_real, w_real = forward_kinematics(
w_left_real, w_right_real, WHEEL_RADIUS_REAL
)
truth.integrate(v_real, w_real, DT)
# Odometry는 Encoder 회전과 설정된 반지름을 신뢰한다.
v_odom, w_odom = forward_kinematics(
w_left_real, w_right_real, WHEEL_RADIUS_MODEL
)
odom.integrate(v_odom, w_odom, DT)
position_error = math.hypot(truth.x - odom.x, truth.y - odom.y)
print(f"truth: x={truth.x:.3f}, y={truth.y:.3f}, theta={truth.theta:.3f}")
print(f"odom : x={odom.x:.3f}, y={odom.y:.3f}, theta={odom.theta:.3f}")
print(f"position error: {position_error:.3f} m")
if __name__ == "__main__":
main()
WHEEL_RADIUS_REAL을 0.050으로 바꾸면 반지름의 계통 오차가 사라져 위치 오차가 줄어듭니다. 그 뒤 Slip 표준편차를 바꾸며 무작위 오차의 영향을 비교해 보세요.
20. 이 장의 핵심 정리
- Force와 Torque가 Robot의 직선·회전 운동을 변화시킨다.
- 실제 Motor 선정에는 가속뿐 아니라 경사, 마찰, 효율, 접지와 운전 시간을 포함해야 한다.
- 정운동학은 Wheel 측정에서 Robot 속도를, 역운동학은 Robot 명령에서 Wheel 목표를 구한다.
Twist.linear.x와Twist.angular.z는 차동 구동 Inverse Kinematics를 거쳐 Motor 명령이 된다.- Encoder 이동량을 누적하면 Odometry를 얻지만, Slip과 Parameter 오차 때문에 Drift가 생긴다.
- 계통 오차는 Calibration으로 줄이고 장기 위치는 IMU·LiDAR·Camera와 지도 기준으로 보정한다.
- 안전한 Driver에는 속도·가속도 제한, 명령 Timeout과 Fault 처리가 필요하다.
- Force힘
- 물체의 직선 운동 상태를 바꾸는 원인이며 질량과 가속도의 곱으로 나타낼 수 있습니다.
- Torque토크·회전력
- 회전 운동을 변화시키는 효과로, 힘과 회전축에서 힘이 작용하는 거리의 곱으로 나타냅니다.
- Moment of Inertia관성모멘트
- 물체의 질량과 회전축에 대한 질량 분포가 회전 속도 변화에 저항하는 정도입니다.
- Kinematics운동학
- 힘을 직접 다루지 않고 Robot의 위치, 자세와 속도 사이의 기하학적 관계를 계산하는 분야입니다.
- Dynamics동역학
- 질량, 관성, 힘과 Torque가 Robot의 운동을 어떻게 변화시키는지 다루는 분야입니다.
- Forward Kinematics정운동학
- 이동 Robot에서는 측정한 Wheel 속도로 Robot 중심의 선속도와 각속도를 구하는 계산입니다.
- Inverse Kinematics역운동학
- 이동 Robot에서는 원하는 Robot 선속도와 각속도를 각 Wheel의 목표 속도로 바꾸는 계산입니다.
- Twist선속도·각속도 메시지
- ROS 2에서 물체의 3축 선속도와 3축 각속도를 함께 표현하는 Message 형식입니다.
- Encoder엔코더
- Motor나 Wheel의 회전량, 각도 또는 속도를 Tick이나 신호로 측정하는 Sensor입니다.
- Odometry주행 거리 측정·오도메트리
- Wheel이나 관성 Sensor의 상대 이동량을 누적해 Robot의 위치와 자세 변화를 추정하는 방법입니다.
- Pose위치와 자세
- 기준 좌표계에서 물체가 어디에 있고 어느 방향을 향하는지를 함께 나타낸 상태입니다.
- Track Width윤거·바퀴 간격
- 차동 구동 Robot에서 좌우 Wheel 접촉점 중심 사이의 거리입니다.
- Drift누적 표류 오차
- 상대 측정 오차가 적분되면서 시간이 지날수록 위치나 자세 추정이 실제 값에서 벗어나는 현상입니다.
- Calibration보정
- 실측 결과와 기준값을 비교해 Wheel 반지름 같은 Model Parameter의 계통 오차를 줄이는 과정입니다.
- Command Timeout명령 시간 초과
- 일정 시간 새 명령이 도착하지 않으면 이전 명령을 폐기하고 감속하거나 정지하는 안전 기능입니다.
연습 문제
- 직선 운동의
F = ma에 대응하는 회전 운동 식을 쓰고 각 기호를 설명해 보세요. - 같은 질량이라도 회전축에서 멀어질수록 움직이기 어려워지는 이유를 설명해 보세요.
- 질량 40 kg인 Robot을 평지에서
0.4 m/s²로 가속할 때 가속에만 필요한 힘을 계산하세요. - 3번의 Robot이 반지름
0.08 m인 두 Wheel로 구동될 때 Wheel 하나당 이상적인 Torque를 계산하세요. - Motor 선정에서 정격 Torque와 Peak Torque를 모두 확인해야 하는 이유는 무엇인가요?
- Kinematics와 Dynamics의 차이를 차동 구동 Robot의 예로 설명해 보세요.
r=0.05 m,ω_L=6 rad/s,ω_R=10 rad/s,L=0.4 m일 때v와ω를 계산하세요.v=0.5 m/s,ω=0.4 rad/s,L=0.4 m,r=0.05 m일 때 좌우 Wheel 각속도를 계산하세요.- 좌우 Wheel 속도를 각각 따로 제한하지 않고 같은 비율로 축소하는 이유는 무엇인가요?
- Encoder Tick에서 Wheel 이동 거리를 계산하려면 어떤 정보가 필요한가요?
- Midpoint 적분이 단순 Euler 적분보다 곡선 주행에서 유리한 이유를 설명해 보세요.
- Odometry의 계통 오차와 무작위 오차를 각각 두 가지씩 들어 보세요.
- 방향 오차가 이동할수록 큰 위치 오차가 되는 이유를 설명해 보세요.
map → odom → base_link에서map → odom과odom → base_link의 역할을 비교하세요./cmd_vel통신이 끊겼을 때 Driver가 갖추어야 할 안전 동작을 설명해 보세요.
참고 자료
- ROS 2 Documentation,
geometry_msgs/msg/Twist - ROS 2 Documentation,
nav_msgs/msg/Odometry - ROS Enhancement Proposal REP 105, Coordinate Frames for Mobile Platforms
- Gregory Dudek and Michael Jenkin, Computational Principles of Mobile Robotics
- Roland Siegwart, Illah Nourbakhsh and Davide Scaramuzza, Introduction to Autonomous Mobile Robots
COMMUNITY
강의 댓글
질문과 학습 경험을 함께 나눠보세요.댓글을 불러오는 중입니다.