티스토리 뷰

Moveit Task Constructor (이하 MTC)는 복잡한 모션 플래닝 문제는 간단한 하위 문제들로 구성하도록 해주는 프레임워크이다.

가장 상위 레벨의 문제는 Task라하고, 하위 문제들은 Stages라고 한다. Stage들을 구성하는 순서는 상관없고 각 Stage들의 타입에 제한될 뿐이다.결과 흐름에는 3가지 유형이 있다. Generator, Propagator, Connector 단계이다.

Generators는 독립적으로 계산되면서 양방향으로 전부 결과를 전달한다 (IK sampler는 도달하고 빠지는 모션 전부와 관련 있는 것 처럼)

Propagators는 이웃 stage에서 결과를 받고, 하위 문제를 풀고 반대편의 이웃에게 결과를 전달한다. 구현에 따라서 앞으로, 뒤로, 양방향으로도 결과를 전달할 수도 있다.

Connectors는 result를 전달하지는 않지만 이웃간의 결과를 연결해주는 역할을 한다.

MTC에서는 container라는 개념도 있다. 순서 유형 외에도 하위 stages를 캡슐화하는 다양한 계층 유형이 있다. 하위 단계가 없는 stage를 primitive states, 상위 단계를 container stage라고 한다.

Wrappers는 하나의 하위 단계를 캡슐화하고 결과를 바꾸거나, 필터링 한다. 예를 들어 필터 stage는 자식 stage가 특정 제약 조건을 만족한 결과만 받게 만들 수 있다. 쉽게 말해서 pose target과 planning scene를 기반으로 하는 IK 해를 만드는 stage가 wrapper가 된다. (제약 조건이라는 게 범용적인 제약조건도 가능한 듯.)

Serial Containers는 하위 단계 stage를 순서대로 가지고 있고, 오로지 end2end 해만 결과로 생각한다. 예를 들어 pick 모션과 같은 거다. 실제 pick motion을 하려면 여러 하위 단계가 필요하지만, Serial Container는 결론적으로 end2end만 생각한다.

Parallel Containers는 하위 단계의 stage로 구성되어 있는데, 여러 결과들 중 최고만 내보내는 형태로 사용될 수 있다. 이는 feedback solver나 독립적인 해 여러개를 합치는 방식으로 최고를 고룰 수 있게 한다. 예를 들면, 여러 자식 stage를 통해서 grasping motion에 대한 여러 해를 확인할 수 있는 형태.

cd ~/ws_moveit/src git clone git@github.com:ros-planning/moveit_task_constructor.git -b ros2

우선 moveit_task_contructor 패키지를 받아오면 된다.

그 다음 launch 파일들을 이용해 demo를 실행해준다.

ros2 launch moveit_task_constructor_demo demo.launch.py

그 다음 pickplace launch 파일을 돌려보자.

ros2 launch moveit_task_constructor_demo pickplace.launch.py

launch 파일을 돌리고, rviz를 확인해보며느 Motion planning task 패널을 확인할 수 있다. 순서대로 눌러보다 보면 stage에서 하는 특정 행동들이 있고, 그 행동들 또한 여러 해로 풀려 있는 걸 확인할 수 있다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31