[Physical AI W2D2 · 5/7]
정운동학·역운동학을 직접 풀어도 실제 로봇 팔은 못 움직인다 — 충돌·관절제한·작업공간·궤적까지 함께 풀어야 하기 때문이다.
MoveIt은 이 모든 걸 하나의 구조로 처리하는 모션 플래닝 프레임워크다.
이 글에서 MoveIt이 무엇이고 왜 필요한지, 그리고 경로계획의 핵심 용어(Planning Group·Planning Scene·Collision·Path vs Trajectory·Joint Space)를 개념부터 잡는다.
이 글에서 잡는 개념
- FK/IK만으로는 왜 부족한가 — MoveIt이 왜 필요한가
- MoveIt이 하는 일: 경로 계획·충돌 검사·역운동학·궤적 생성·제어기 연동
- Planning Group·End Effector·Robot State·Planning Scene
- Collision Object와 Self-Collision(자기 충돌)
- Path와 Trajectory의 차이, Joint Space Planning
(
1·2편에서 정운동학(FK)·역운동학(IK)을 손으로 풀었습니다. 3·4편에서 Python으로 계산하고 RViz로 봤죠. 이제 그 FK/IK 위에 올라가 충돌까지 고려한 실제 경로를 만들어 주는 도구, MoveIt을 만납니다.)
들어가며 — FK·IK를 풀었는데 왜 로봇이 안 움직일까
1·2편에서 우리는 로봇 팔의 두 가지 운동학을 배웠습니다.
- 정운동학(FK) — 관절값이 주어지면 말단 장치(끝)의 위치·자세를 계산
- 역운동학(IK) — 목표 위치·자세가 주어지면 필요한 관절값을 계산
그러면 "목표 위치를 IK로 풀어서 관절값을 구하고, 그 관절값으로 모터를 돌리면 끝 아닌가?" 싶습니다. 하지만 실제 로봇 팔 제어는 그것만으로 완성되지 않습니다. 다음 문제가 추가로 발생하기 때문입니다.
목표 위치가 로봇의 작업 공간 안에 있어야 한다
목표 위치에 도달하는 관절 해가 여러 개일 수 있다
계산된 관절 해가 관절 제한을 넘지 않아야 한다
이동 중 로봇 팔이 자기 자신과 충돌하지 않아야 한다
이동 중 주변 장애물과 충돌하지 않아야 한다
계산된 경로가 실제 제어기가 실행 가능한 궤적이어야 한다
로봇 팔이 급격하게 움직이지 않도록 속도·가속도 제한을 고려해야 한다
즉 IK가 알려 주는 건 "목표 자세에 맞는 관절값" 한 점일 뿐입니다. 거기까지 어떤 경로로, 무엇을 피하면서, 언제 어느 위치에 도달할지는 전혀 알려 주지 않죠.
💡 MoveIt이란 — 로봇 팔의 경로 계획, 충돌 검사, 역운동학 계산, 궤적 생성, 제어기 연동, RViz 시각화를 통합적으로 지원하는 ROS 기반 모션 플래닝 프레임워크입니다.
ROS 1에서는 MoveIt, ROS 2에서는 MoveIt 2를 씁니다.
핵심은 이것입니다. MoveIt은 단순한 역운동학 계산 도구가 아니라, "목표로 이동하라"는 명령을 실제 로봇 팔이 수행 가능한 관절 궤적으로 바꿔 주는 통합 시스템입니다. 우리가 1·2편에서 손으로 푼 FK/IK는 MoveIt 안에서 부품 하나로 들어가고, MoveIt은 그 위에 충돌·경로·시간까지 얹어 줍니다.
1. MoveIt이 실제로 하는 일
MoveIt은 로봇 팔 제어 과정에서 다음 역할을 수행합니다.
로봇 모델을 읽고 해석한다
현재 로봇 상태를 확인한다
목표 위치 또는 목표 관절값을 설정한다
역운동학으로 목표 자세에 대응하는 관절값을 계산한다
로봇의 자기 충돌 여부를 검사한다
주변 장애물과의 충돌 여부를 검사한다
현재 상태에서 목표 상태까지 이동 가능한 경로를 계산한다
계산된 경로를 시간 정보가 포함된 궤적으로 변환한다
제어기와 연동하여 로봇 팔을 움직인다
RViz로 로봇 모델·목표 자세·계획된 경로를 시각적으로 확인한다
목록이 길지만 한 문장으로 요약됩니다 — MoveIt의 핵심은 "목표로 이동하라"는 명령을 실제 로봇 팔이 수행 가능한 형태의 관절 궤적으로 바꾸는 것입니다.
2. MoveIt 기반 제어 흐름
MoveIt이 목표를 받아 로봇을 움직이기까지의 흐름은 이렇게 이해할 수 있습니다.
목표 위치 또는 목표 관절값 설정
→ 현재 로봇 상태 확인
→ 역운동학 계산
→ Planning Scene 구성
→ 충돌 검사
→ Motion Planner 실행
→ 경로 생성
→ Trajectory 생성
→ Controller로 전달
→ 로봇 팔 이동

이 흐름에서 MoveIt은 경로 계획과 궤적 생성의 중심 역할을 합니다.
⚠️ 흔한 오해 — MoveIt이 모터를 돌리는 게 아니다 — 실제 모터를 직접 제어하는 것은 MoveIt이 아니라 controller와 하드웨어 드라이버입니다.
MoveIt은 "어떻게 갈지"를 계획하고, 실제 "가게 하는" 건 제어기가 맡습니다. (제어기 연동은 6편에서)
3. 경로 계획과 제어는 다르다
로봇 팔 시스템에서는 경로 계획(planning) 과 제어(control) 를 반드시 구분해야 합니다.
- 경로 계획 — 현재 상태에서 목표 상태까지 어떤 경로로 이동할지를 계산하는 과정
- 제어 — 계산된 경로를 실제 관절이 따라가도록 모터에 명령을 전달하는 과정
예를 들어 로봇 팔이 책상 위 물체를 잡는다고 합시다.
- 먼저 로봇은 물체 위치까지 어떻게 접근할지 결정해야 합니다. 이때 장애물을 피하고, 관절 제한을 넘지 않으며, 말단 장치의 방향을 작업에 맞게 유지해야 하죠. → 이것이 경로 계획입니다.
- 이후 계산된 경로를 따라 각 관절 모터가 실제로 움직입니다. → 이것이 제어입니다.
| 구분 | 담당 | 무엇을 하나 |
|---|---|---|
| 경로 계획 | MoveIt | 경로 계획·충돌 검사·역운동학·궤적 생성 |
| 제어 | ros2_control·joint trajectory controller·하드웨어 드라이버 | 계산된 궤적을 실제 모터 명령으로 |
4. 로봇 모델 — URDF와 SRDF
MoveIt이 로봇 팔을 제어하려면 먼저 로봇의 구조를 알아야 합니다. 로봇 구조는 주로 URDF와 SRDF로 정의됩니다.
- URDF — 로봇의 물리적 구조를 정의. 링크, 관절, 관절 축, 링크 간 위치 관계, 관절 제한, 시각화 모델, 충돌 모델이 포함됩니다.
- SRDF — MoveIt이 경로 계획에 사용할 의미 정보를 정의. planning group, end effector, named pose, self-collision matrix, virtual joint 정보가 포함됩니다.
💡 한 줄 정리 — URDF가 "로봇이 어떻게 생겼는가(물리적 형상)"를 설명한다면, SRDF는 "MoveIt이 그 로봇을 어떻게 해석하고 계획 대상으로 쓸 것인가"를 설명합니다.
URDF는 W2D1에서 본 그 URDF가 맞습니다 — MoveIt은 그 위에 SRDF를 더 얹습니다.
5. Planning Group — "어떤 관절을 움직일까"
Planning Group은 MoveIt에서 경로 계획의 대상이 되는 관절 또는 링크의 묶음입니다.
예를 들어 6축 로봇 팔에서는 6개의 회전 관절을 하나의 arm planning group으로 묶을 수 있습니다. 그리퍼가 별도로 있으면 gripper planning group을 따로 정의할 수 있죠.
- 로봇 팔만 움직이는 작업 → arm group 사용
- 물체를 잡고 놓는 작업 → arm group + gripper group 함께 사용
💡 왜 중요한가 — Planning Group은 MoveIt에게 "어떤 관절들을 움직여 경로를 계획해야 하는지" 알려 주는 기준입니다. 설정이 잘못되면 MoveIt은 목표 위치에 도달하기 위해 어떤 관절을 써야 하는지 올바르게 판단하지 못합니다.
6. End Effector — 목표 위치의 기준점
End Effector는 로봇 팔 끝에 장착된 작업 도구입니다. 그리퍼, 흡착 패드, 용접 토치, 카메라, 센서, 드릴, 노즐 등이 End Effector가 될 수 있습니다.
MoveIt에서 목표 위치를 지정할 때 기준이 되는 대상은 보통 End Effector입니다. 예를 들어 이런 목표를 설정할 수 있습니다.
그리퍼 끝을 x=0.4, y=0.2, z=0.5 위치로 이동한다.
그리퍼 방향을 물체 표면과 수직으로 맞춘다.
용접 토치를 지정된 경로를 따라 이동시킨다.
흡착 패드를 상자 윗면에 수직으로 접근시킨다.
MoveIt은 End Effector의 목표 위치·자세를 만족하는 관절값을 계산하고(여기서 역운동학이 쓰입니다), 그 목표까지 이동 가능한 경로를 계획합니다.
7. Robot State — 경로 계획의 출발점
Robot State는 특정 시점의 로봇 상태를 의미합니다. 각 관절의 현재 위치, 링크의 위치, 말단 장치의 pose, TF 관계가 포함됩니다.
예를 들어 현재 관절값이 다음과 같다고 합시다.
joint1 = 0.0 rad
joint2 = -0.5 rad
joint3 = 1.2 rad
joint4 = 0.0 rad
joint5 = 0.8 rad
joint6 = 0.0 rad
MoveIt은 이 관절값을 기반으로 정운동학을 계산해(1편에서 배운 그 FK입니다) 각 링크와 End Effector의 현재 위치를 파악합니다.
💡 Robot State는 경로 계획의 시작점입니다. "지금 여기에서" 목표까지 가는 경로를 짜야 하니, 출발점인 현재 상태를 먼저 알아야 하는 거죠.
8. Planning Scene — 로봇과 환경을 함께 담는 가상 공간
Planning Scene은 MoveIt에서 로봇과 주변 환경을 함께 표현하는 가상 공간입니다. 다음 정보가 포함됩니다.
로봇의 현재 상태
로봇의 링크와 관절 구조
로봇의 자기 충돌 정보
주변 장애물 정보
허용된 충돌 관계
작업 공간의 제약 조건
Planning Scene은 충돌 검사와 경로 계획의 기준 공간입니다.
예를 들어 로봇 앞에 상자가 있다고 합시다. 이 상자는 Planning Scene에 collision object로 추가됩니다. 이후 MoveIt은 경로를 계획할 때 로봇 팔이 이 상자를 통과하지 않도록 경로를 계산합니다.
💡 정리하면, Robot State(로봇 자신) + 장애물·제약(주변 환경)을 한데 모은 것이 Planning Scene입니다.
MoveIt은 이 무대 위에서 경로를 짭니다.
9. Collision Object — 피해야 할 장애물
Collision Object는 Planning Scene 안에 추가되는 장애물 객체입니다. 로봇이 이동 중 충돌하지 않아야 하는 대상이죠. 대표적인 collision object는 다음과 같습니다.
작업대
상자
벽
기둥
설비 구조물
보관함
검사 대상 물체
Collision Object는 단순 도형으로 표현할 수 있습니다.
box
sphere
cylinder
plane
복잡한 형상은 STL, DAE 같은 3D mesh로 표현할 수 있습니다. MoveIt은 collision object를 기준으로 로봇 팔의 이동 경로가 안전한지 검사합니다.
10. Self-Collision — 로봇이 자기 자신과 부딪히는 것
Self-Collision(자기 충돌)은 로봇이 자기 자신의 링크와 충돌하는 상태를 의미합니다.
예를 들어 로봇 팔을 과도하게 접으면 손목 링크가 팔 링크와 충돌할 수 있습니다. 또는 팔꿈치 링크가 몸통과 충돌할 수도 있죠. MoveIt은 로봇 모델을 기반으로 자기 충돌 검사를 수행합니다.
하지만 모든 링크 쌍에 대해 항상 충돌 검사를 하면 계산량이 커집니다. 그래서 SRDF에는 충돌 검사를 생략해도 되는 링크 쌍 정보가 포함될 수 있습니다.
💡 이 정보는 Allowed Collision Matrix(ACM) 로 관리됩니다.
예를 들어 항상 붙어 있어 절대 부딪힐 일이 없는 인접 링크 쌍은 검사를 건너뛰도록 등록해 계산을 줄이는 것이죠.
11. Motion Planning — 경로를 찾는 핵심 기능
Motion Planning은 현재 로봇 상태에서 목표 상태까지 이동 가능한 경로를 계산하는 과정입니다.
로봇 팔의 motion planning은 단순한 직선 이동 계산이 아닙니다. 다음을 모두 만족해야 하죠.
관절 제한을 고려해야 한다
주변 장애물을 피해야 한다
자기 충돌을 피해야 한다
목표 위치와 자세를 만족해야 한다
특이점 근처의 불안정한 자세를 피해야 한다 (← 2편의 특이점!)
실제 제어기가 실행 가능한 궤적이어야 한다
Motion Planning은 로봇 팔 작업의 성공 여부를 결정하는 핵심 기능입니다. 2편에서 다룬 특이점이 여기서 다시 등장한다는 점에 주목하세요 — MoveIt은 그런 불안정한 자세도 피해 가며 경로를 찾습니다.
12. Path와 Trajectory — 공간 vs 시간
Path와 Trajectory는 구분해서 이해해야 합니다.
- Path — 공간상의 경로. 로봇 팔이 지나가야 할 위치의 순서
- Trajectory — 시간 정보가 포함된 경로. 각 위치를 언제 지나가야 하는지까지 포함
예를 들어 로봇 팔이 A 지점에서 B 지점까지 이동한다고 합시다.
Path:
A → P1 → P2 → P3 → B
Path는 "어디를 지나가는가"만 말합니다. 여기에 시간을 붙이면 Trajectory가 됩니다.
Trajectory:
t=0.0초 A
t=0.5초 P1
t=1.0초 P2
t=1.5초 P3
t=2.0초 B
💡 실제 제어기에는 path가 아니라 trajectory가 필요합니다.
제어기는 각 시간마다 각 관절이 어느 위치에 있어야 하는지 알아야 하기 때문입니다.
그래서 MoveIt 흐름(2절)에서 경로 생성 다음에 반드시 Trajectory 생성 단계가 들어갑니다.
13. Joint Space Planning — 관절값으로 목표를 주는 방식
Joint Space Planning은 관절 공간(Joint Space)에서 경로를 계획하는 방식입니다. 목표가 말단 장치의 위치가 아니라 각 관절의 목표값으로 주어집니다.
예를 들어 이런 목표가 있을 수 있습니다.
joint1 = 0.5 rad
joint2 = -0.3 rad
joint3 = 1.0 rad
joint4 = 0.2 rad
joint5 = 0.8 rad
joint6 = 0.0 rad
MoveIt은 현재 관절값에서 목표 관절값까지 충돌 없는 경로를 찾습니다.
💡 왜 상대적으로 안정적인가 — 목표 관절값이 명확하기 때문입니다. 역운동학을 풀 필요가 없으므로, 목표 pose 기반 planning(End Effector의 위치·자세로 목표를 주는 방식)보다 실패 가능성이 낮을 수 있습니다.
다만 실제 작업 목표는 보통 말단 장치 기준으로 표현됩니다.
예를 들어 "그리퍼를 물체 위치로 이동한다"는 목표는 관절값보다 End Effector의 pose로 표현하는 것이 자연스럽죠.
그 pose 기반 방식(Pose Goal Planning)은 6편에서 계획 기법과 함께 이어 갑니다.
5편 정리
- 왜 MoveIt인가 — FK/IK만으로는 부족하다. 작업공간·관절제한·자기충돌·장애물·실행가능한 궤적·속도/가속도까지 한꺼번에 풀어야 하고, MoveIt이 이걸 하나의 구조로 처리한다.
- MoveIt은 우리가 1·2편에서 푼 FK/IK 위에 올라가 충돌까지 고려한 실제 경로를 만든다. 모터를 직접 돌리지는 않는다(그건 controller).
- 로봇 모델: URDF(물리 구조) + SRDF(MoveIt용 의미 정보).
- Planning Group(움직일 관절 묶음) · End Effector(목표 기준점) · Robot State(현재 상태=출발점) · Planning Scene(로봇+환경 무대).
- Collision Object(외부 장애물) vs Self-Collision(자기 충돌, ACM으로 검사 생략 관리).
- Path(공간 순서) vs Trajectory(시간 포함) — 제어기엔 trajectory가 필요.
- Joint Space Planning(관절값 목표, IK 불필요라 안정적) vs Pose Goal Planning(말단 pose 목표).
다음 편 예고
6편에서는 MoveIt이 경로를 어떤 기법으로 찾는지(계획 알고리즘), 실제 명령을 내리는 Move Group 인터페이스, 그리고 계산된 궤적을 모터로 실행하는 ROS 2 Control 연동을 이어서 정리합니다. 이 글에서 잡은 용어들이 그대로 쓰입니다.
📚 Week2 Day2 전체 목차 (총 7편)
- 1/7 운동학 개념 ① — 정운동학(링크·관절·자유도·2축 팔·동차변환행렬)
- 2/7 운동학 개념 ② — 역운동학·작업공간·자코비안·특이점
- 3/7 정운동학·역운동학 Python 실습(직접 계산·검증·관절제한·특이점)
- 4/7 계산 결과를 RViz2로 시각화(FK/IK → 화면)
- 5/7 MoveIt 개념 ① — 경로계획 핵심(Planning Group·Scene·Collision·Trajectory) — 이번 글
- 6/7 MoveIt 개념 ② — 계획 기법·Move Group·ROS 2 Control
- 7/7 MoveIt 경로계획 RViz2 시각화 실습(+ 오류 점검 7종)
'피지컬AI' 카테고리의 다른 글
| [Physical AI W2D2] 7/7 — MoveIt 경로계획 RViz2 시각화 실습(+ 오류 점검 7종) (1) | 2026.06.21 |
|---|---|
| [Physical AI W2D2] 6/7 — MoveIt 개념 ②: 계획 기법·Move Group·ROS 2 Control (0) | 2026.06.21 |
| [Physical AI W2D2] 4/7 — 계산 결과를 RViz2로 시각화(FK/IK → 화면) (0) | 2026.06.21 |
| [Physical AI W2D2] 3/7 — 정운동학·역운동학 Python 실습(직접 계산·검증·관절제한·특이점) (0) | 2026.06.21 |
| [Physical AI W2D2] 2/7 — 운동학 개념 ②: 역운동학·작업공간·자코비안·특이점 (0) | 2026.06.21 |