This repository has been archived by the owner on Jun 29, 2024. It is now read-only.
generated from entelecheia/course-template
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: Update motion planning documentation
- Loading branch information
1 parent
e48b118
commit 00ec283
Showing
2 changed files
with
61 additions
and
0 deletions.
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
# 모션 플래닝 (Motion Planning) | ||
|
||
## 모션 플래닝 플러그인 | ||
|
||
MoveIt은 **플러그인 인터페이스**를 통해 모션 플래너와 작동합니다. 이를 통해 MoveIt은 다양한 라이브러리의 모션 플래너와 통신하고 사용할 수 있어 확장성이 뛰어납니다. 모션 플래너와의 인터페이스는 `move_group` 노드에서 제공하는 ROS 액션 또는 서비스를 통해 이루어집니다. MoveIt Setup Assistant는 OMPL 및 OMPL 인터페이스를 사용하여 move_group의 기본 모션 플래너를 구성합니다. 기본적으로 사용 가능한 다른 플래너로는 Pilz 산업 모션 플래너와 CHOMP가 있습니다. | ||
|
||
## 모션 플랜 요청 | ||
|
||
모션 플랜 요청은 모션 플래너에게 원하는 작업을 지정합니다. 일반적으로, 팔을 다른 위치(조인트 공간)로 이동시키거나 엔드 이펙터를 새로운 자세로 이동시키도록 요청합니다. 충돌 검사는 기본적으로 수행됩니다(자기 충돌 및 부착된 객체 포함). 또한 `planning_pipeline` 및 `planner_id` 매개변수를 통해 플래너를 지정할 수 있으며, 모션 플래너가 확인할 제약 조건을 지정할 수 있습니다. MoveIt에서 제공하는 기본 제약 조건은 **운동학적 제약 조건**입니다: | ||
|
||
- **위치 제약 조건 (Position constraints)**: 링크의 위치가 공간의 특정 영역 내에 있어야 함을 제한합니다. | ||
- **방향 제약 조건 (Orientation constraints)**: 링크의 방향이 지정된 롤, 피치 또는 요 한계 내에 있어야 함을 제한합니다. | ||
- **가시성 제약 조건 (Visibility constraints)**: 링크의 특정 점이 특정 센서의 가시성 원뿔 내에 있어야 함을 제한합니다. | ||
- **조인트 제약 조건 (Joint constraints)**: 조인트가 두 값 사이에 있어야 함을 제한합니다. | ||
- **사용자 지정 제약 조건 (User-specified constraints)**: 사용자 정의 콜백으로 자신만의 제약 조건을 지정할 수도 있습니다. | ||
|
||
## 모션 플랜 결과 | ||
|
||
`move_group` 노드는 모션 플랜 요청에 대한 응답으로 원하는 궤적을 생성합니다. 이 궤적은 팔(또는 조인트 그룹)을 원하는 위치로 이동시킵니다. `move_group`에서 나오는 결과는 경로가 아닌 궤적이라는 점에 유의해야 합니다. `move_group`은 지정된 최대 속도와 가속도(지정된 경우)를 사용하여 조인트 수준에서 속도 및 가속도 제약을 준수하는 궤적을 생성합니다. | ||
|
||
## 모션 플래닝 어댑터 | ||
|
||
![](./figs/motion_planner.png) | ||
|
||
모션 플래닝 파이프라인은 **플래닝 요청 어댑터**라는 다른 구성 요소와 모션 플래너를 연결합니다. 플래닝 요청 어댑터는 모션 플랜 요청의 사전 처리 및 모션 플랜 응답의 사후 처리를 가능하게 합니다. 사전 처리는 로봇의 시작 상태가 로봇의 조인트 한계를 약간 벗어났을 때 유용합니다. 사후 처리는 로봇에 대한 경로를 시간 매개변수가 지정된 궤적으로 변환하는 등 여러 작업에 필요합니다. MoveIt은 각기 매우 특정한 기능을 수행하는 기본 모션 플래닝 어댑터 세트를 제공합니다. | ||
|
||
### FixStartStateBounds | ||
|
||
이 어댑터는 시작 상태를 URDF에 지정된 조인트 한계 내로 수정합니다. 실제 로봇의 조인트 한계가 제대로 구성되지 않은 상황에서 필요합니다. 로봇이 하나 이상의 조인트가 조인트 한계를 약간 벗어난 구성에 있을 수 있습니다. 이 경우 모션 플래너는 시작 상태가 조인트 한계를 벗어났다고 판단하여 계획을 세울 수 없습니다. "FixStartStateBounds" 플래닝 요청 어댑터는 시작 상태를 조인트 한계로 이동시켜 "수정"합니다. 그러나 조인트가 한계를 많이 벗어났을 때는 이 방법이 항상 적합하지는 않습니다. 어댑터의 매개변수는 조인트가 얼마나 한계를 벗어날 수 있는지를 지정합니다. | ||
|
||
### FixWorkspaceBounds | ||
|
||
이 어댑터는 계획을 위한 기본 작업 공간을 지정합니다: 크기 10 m x 10 m x 10 m의 큐브입니다. 이러한 작업 공간은 플래너에 대한 플래닝 요청에 이러한 필드가 채워지지 않은 경우에만 지정됩니다. | ||
|
||
### FixStartStateCollision | ||
|
||
이 어댑터는 작은 양으로 조인트 값을 변동시켜 지정된 구성 근처에서 새로운 충돌 없는 구성을 샘플링하려고 시도합니다. 변동 양은 조인트의 총 범위에 대한 백분율로 조절되는 **jiggle_fraction** 매개변수로 지정됩니다. 이 어댑터의 다른 매개변수는 어댑터가 포기하기 전에 샘플링할 무작위 변동 횟수를 지정합니다. | ||
|
||
### FixStartStatePathConstraints | ||
|
||
이 어댑터는 모션 플랜의 시작 상태가 지정된 경로 제약 조건을 준수하지 않을 때 적용됩니다. 로봇의 현재 구성에서 경로 제약 조건을 준수하는 새로운 위치로 경로를 계획하려고 시도합니다. 새로운 위치는 플래닝을 위한 시작 상태가 됩니다. | ||
|
||
### AddTimeParameterization | ||
|
||
모션 플래너는 일반적으로 "운동 경로"를 생성합니다. 즉, 속도 또는 가속도 제약을 준수하지 않으며 시간 매개변수가 지정되지 않은 경로입니다. 이 어댑터는 속도 및 가속도 제약을 적용하여 모션 플랜의 "시간 매개변수화"를 수행합니다. | ||
|
||
### ResolveConstraintFrames | ||
|
||
목표 제약 조건은 하위 프레임을 사용하여 설정할 수 있습니다(예: `cup/handle` 프레임에서의 포즈 목표, 여기서 `handle`은 `cup` 객체의 하위 프레임). 이 어댑터는 제약 조건의 프레임을 객체 또는 로봇 프레임으로 변경합니다(예: `cup`). | ||
|
||
## OMPL | ||
|
||
OMPL(오픈 모션 플래닝 라이브러리)은 주로 무작위 모션 플래너를 구현하는 오픈 소스 모션 플래닝 라이브러리입니다. MoveIt은 OMPL과 직접 통합되며 해당 라이브러리의 모션 플래너를 기본/기본 플래너 세트로 사용합니다. OMPL의 플래너는 추상적입니다. 즉, OMPL은 로봇의 개념이 없습니다. 대신, MoveIt은 OMPL을 구성하고 로봇 공학 문제를 해결하기 위해 OMPL의 백엔드를 제공합니다. | ||
|
||
**요약:** | ||
|
||
- **모션 플래닝 플러그인**: MoveIt은 플러그인 인터페이스를 통해 다양한 모션 플래너와 통신하며, 기본적으로 OMPL을 사용합니다. | ||
- **모션 플랜 요청**: 사용자는 팔이나 엔드 이펙터를 원하는 위치로 이동시키는 요청을 할 수 있으며, 다양한 제약 조건을 지정할 수 있습니다. | ||
- **모션 플랜 결과**: `move_group` 노드는 요청에 따라 속도 및 가속도 제약을 준수하는 궤적을 생성합니다. | ||
- **모션 플래닝 어댑터**: 요청의 사전 처리 및 응답의 사후 처리를 수행하여 계획의 정확성과 효율성을 높입니다. | ||
- **OMPL**: MoveIt과 통합된 오픈 소스 모션 플래닝 라이브러리로, 다양한 무작위 모션 플래너를 제공합니다. |