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

Commit

Permalink
feat: Add MoveIt Task Constructor documentation and update table of c…
Browse files Browse the repository at this point in the history
…ontents
  • Loading branch information
entelecheia committed May 27, 2024
1 parent 64d0b86 commit 25c4f4d
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/cobots2024/book/_toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,12 @@ parts:
- file: week12/kinematics
- file: week12/motion_planning
- file: week12/hybrid_planning
- file: week13/index
sections:
- file: week13/move_group
- file: week13/planning_scene_monitor
- file: week13/trajectory_processing
- file: week13/moveit_task_constructor
- caption: Projects
chapters:
- file: projects/index
Expand Down
Binary file added src/cobots2024/book/week13/figs/mtc_example.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
83 changes: 83 additions & 0 deletions src/cobots2024/book/week13/moveit_task_constructor.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# MoveIt 작업 구성기 (Task Constructor)

> **주의:** MoveIt 작업 구성기는 ROS 2에서 지원되지 않습니다.
![MoveIt Task Constructor 예시](./figs/mtc_example.png)

작업 구성기 프레임워크는 여러 상호 의존적인 하위 작업으로 구성된 작업을 유연하고 투명한 방식으로 정의하고 계획할 수 있는 방법을 제공합니다. 이는 MoveIt의 계획 기능을 활용하여 블랙박스 계획 단계에서 개별 하위 문제를 해결합니다. MoveIt의 PlanningScene을 기반으로 하는 공통 인터페이스가 단계 간에 솔루션 가설을 전달하는 데 사용됩니다. 이 프레임워크를 사용하면 컨테이너를 사용하여 기본 단계를 계층적으로 구성할 수 있으며, 순차적 및 병렬 구성이 모두 가능합니다. 자세한 내용은 관련 `ICRA 2019 논문`을 참조하세요.

## 시작하기

아직 수행하지 않았다면 [시작하기](../week10/getting_started) 단계를 완료했는지 확인하세요.

### MoveIt 작업 구성기 설치하기

**소스에서 설치**

catkin 작업 공간으로 이동하여 필요한 경우 wstool을 초기화합니다(작업 공간 경로를 **~/ws_moveit**로 가정):

```bash
cd ~/ws_moveit/src
wstool init
```

MoveIt 작업 구성기와 소스 의존성을 클론합니다:

```bash
wstool merge https://raw.githubusercontent.com/ros-planning/moveit_task_constructor/master/.rosinstall
wstool update
```

rosdep으로 누락된 패키지를 설치합니다:

```bash
rosdep install --from-paths . --ignore-src --rosdistro $ROS_DISTRO
```

작업 공간을 빌드합니다:

```bash
catkin build
```

### 데모 실행하기

MoveIt 작업 구성기 패키지에는 여러 기본 예제와 픽앤플레이스 데모가 포함되어 있습니다. 모든 데모의 경우 기본 환경을 실행해야 합니다:

```bash
roslaunch moveit_task_constructor_demo demo.launch
```

그런 다음 개별 데모를 실행할 수 있습니다:

```bash
rosrun moveit_task_constructor_demo cartesian
rosrun moveit_task_constructor_demo modular
roslaunch moveit_task_constructor_demo pickplace.launch
```

오른쪽에 작업의 계층적 단계 구조를 개략적으로 보여주는 **Motion Planning Tasks** 패널이 표시됩니다. 특정 단계를 선택하면 성공한 솔루션과 실패한 솔루션의 목록이 가장 오른쪽 창에 표시됩니다. 이 솔루션 중 하나를 선택하면 시각화가 시작됩니다.

![MTC 단계 표시](./figs/mtc_show_stages.gif)

## 기본 개념

MTC의 기본 아이디어는 복잡한 모션 계획 문제를 더 간단한 하위 문제 집합으로 구성할 수 있다는 것입니다. 최상위 계획 문제는 **작업(Task)**으로 지정되고 모든 하위 문제는 **단계(Stage)**로 지정됩니다. 단계는 개별 단계 유형에 의해서만 제한되는 임의의 순서와 계층으로 정렬할 수 있습니다. 단계를 정렬할 수 있는 순서는 결과가 전달되는 방향에 의해 제한됩니다. 결과 흐름과 관련하여 생성기, 전파기, 연결기의 세 가지 가능한 단계가 있습니다:

- **생성기(Generator)**: 이웃 단계와 독립적으로 결과를 계산하고 뒤로와 앞으로 양방향으로 결과를 전달합니다. 예를 들어, 접근 및 출발 동작(이웃 단계)이 솔루션에 의존하는 기하학적 포즈에 대한 IK 샘플러가 있습니다.

- **전파기(Propagator)**: 이웃 단계의 결과를 수신하고 하위 문제를 해결한 다음 반대쪽 이웃에 결과를 전파합니다. 구현에 따라 전파 단계는 솔루션을 앞으로, 뒤로 또는 양방향으로 별도로 전달할 수 있습니다. 예를 들어, 시작 상태 또는 목표 상태에 기반하여 카테시안 경로를 계산하는 단계가 있습니다.

- **연결기(Connector)**: 결과를 전파하지 않고 양쪽 이웃의 결과 상태 간 차이를 연결하려고 시도합니다. 예를 들어, 주어진 한 상태에서 다른 상태로의 자유 모션 계획을 계산하는 것이 있습니다.

순서 유형 외에도 하위 단계를 캡슐화할 수 있는 다양한 계층 유형이 있습니다. 하위 단계가 없는 단계를 **기본 단계(primitive stage)**라고 하고, 상위 단계를 **컨테이너 단계(container stage)**라고 합니다. 컨테이너에는 세 가지 유형이 있습니다:

- **래퍼(Wrapper)**: 단일 하위 단계를 캡슐화하고 결과를 수정하거나 필터링합니다. 예를 들어, 특정 제약 조건을 만족하는 하위 단계의 솔루션만 수락하는 필터 단계는 래퍼로 구현할 수 있습니다. 이 유형의 다른 표준 사용에는 포즈 대상 속성으로 주석이 달린 계획 장면을 기반으로 역기구학 솔루션을 생성하는 IK 래퍼 단계가 포함됩니다.

- **직렬 컨테이너(Serial Container)**: 하위 단계의 시퀀스를 포함하고 엔드 투 엔드 솔루션만 결과로 간주합니다. 예를 들어, 일련의 일관된 단계로 구성된 픽킹 동작이 있습니다.

- **병렬 컨테이너(Parallel Container)**: 하위 단계 집합을 결합하고 대체 결과 중 최상의 결과를 전달하거나, 폴백 솔버를 실행하거나, 여러 독립 솔루션을 병합하는 데 사용할 수 있습니다. 예를 들어, 자유 모션 계획을 위해 대체 플래너를 실행하거나, 오른손으로 또는 폴백으로 왼손으로 물체를 집거나, 팔을 움직이면서 동시에 그리퍼를 여는 것 등이 있습니다.

![MTC 단계 유형](./figs/mtc_stage_types.png)

단계는 모션 계획 문제를 해결하는 것뿐만 아니라 계획 장면을 수정하는 것과 같은 모든 종류의 상태 전환에도 사용할 수 있습니다. 클래스 상속 사용 가능성과 결합하면 잘 구조화된 기본 단계 집합에만 의존하면서 매우 복잡한 동작을 구성할 수 있습니다.

0 comments on commit 25c4f4d

Please sign in to comment.