Skip to content
This repository has been archived by the owner on Jun 29, 2024. It is now read-only.

Commit

Permalink
feat: Update motion planning documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
entelecheia committed May 19, 2024
1 parent e48b118 commit 00ec283
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 0 deletions.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
61 changes: 61 additions & 0 deletions src/cobots2024/book/week12/motion_planning.md
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과 통합된 오픈 소스 모션 플래닝 라이브러리로, 다양한 무작위 모션 플래너를 제공합니다.

0 comments on commit 00ec283

Please sign in to comment.