AndrejOrsula/pymoveit2
Python interface for MoveIt 2
무엇인가요
pymoveit2는 MoveIt 2 (ROS 2용 인기 있는 운동 계획 프레임워크)를 실행하는 로봇을 Python 코드에서 직접 제어할 수 있는 얇은 Python 래퍼입니다. ROS 2 액션과 서비스를 통해 MoveIt 2와 통신하며, 다음과 같은 일반적인 작업을 위한 깔끔한 고수준 API를 제공합니다:
- 정운동학 / 역운동학
- 관절 공간 또는 카르테시안 운동의 계획 및 실행
- 실시간 서보 제어
- 그립퍼 동작
- 계획 장면 조작 (충돌 객체 추가/제거, 충돌 검사 토글)
이 라이브러리는 기본적으로 편의성 계층입니다. 여전히 ROS 2 설치와 로봇용 MoveIt 2 구성이 필요하지만, 이러한 설정이 완료되면 저수준 ROS 메시지를 다루는 대신 짧은 Python 스크립트를 작성할 수 있습니다.
설치 방법
| 방법 | 명령어 | 비고 |
|---|---|---|
| 이진 ROS 패키지 (표준 ROS 2 배포판용 사전 빌드) | sudo apt install ros-$ROS_DISTRO-pymoveit2 |
Humble, Jazzy, Lyrical, Rolling에서 작동합니다. |
| PyPI (순수 Python wheel) | pip install pymoveit2 |
apt보다 pip를 선호하는 경우 유용합니다. |
| Docker (실행 가능한 이미지) | docker pull andrejorsula/pymoveit2 후 README에 표시된 헬퍼 스크립트를 실행합니다. |
|
| 소스에서 | ROS 2 워크스페이스에 리포지토리를 클론하고 colcon으로 빌드합니다. |
빠른 시작 예제 (Franka Emika Panda)
- Panda 로봇용 MoveIt 2 구성 설치:
sudo apt install ros-$ROS_DISTRO-moveit-resources-panda-moveit-config ros-$ROS_DISTRO-controller-manager - 로봇용 MoveIt 2 데모 실행:
ros2 launch moveit_resources_panda_moveit_config demo.launch.py - pymoveit2 데모 스크립트 실행, 예: 사전 정의된 관절 구성으로 이동:
ros2 run pymoveit2 ex_joint_goal.py
움직임이 없으면 진단 스크립트가 제공됩니다:
ros2 run pymoveit2 ex_doctor.py
핵심 Python API
connect() / RobotSession
from pymoveit2 import connect
with connect() as robot:
robot.move_to_pose([0.4, 0.0, 0.4], [1.0, 0.0, 0.0, 0.0])
robot.gripper.close()
robot.move_to_configuration()
RobotSession은 다음을 포함합니다:
- ROS 2 노드 (
robot.node) - 실행자 (
robot.executor) - 로봇 설명 (
robot.description) - 계획용
MoveIt2인터페이스 (robot.arm) - 선택적 그립퍼 및 서보 인터페이스 (
robot.gripper,robot.servo)
저수준 생성
더 많은 제어가 필요하면 직접 구성 요소를 인스턴스화할 수 있습니다:
from pymoveit2 import RobotDescription, MoveIt2, GripperInterface, MoveIt2Servo
node = ... # 자신의 rclpy.Node
desc = RobotDescription.from_node(node)
moveit = MoveIt2(node=node, **desc.moveit2_kwargs())
gripper = GripperInterface(node=node, **desc.moveit2_gripper_kwargs()) if desc.gripper_group_name else None
servo = MoveIt2Servo(node=node, frame_id=str(desc.moveit2_kwargs()["base_link_name"]))
예제로 할 수 있는 일
| 카테고리 | 예제 스크립트 | 내용 |
|---|---|---|
| 운동학 | ex_fk.py, ex_ik.py |
정운동학 및 역운동학 호출 |
| 운동 계획 | ex_joint_goal.py, ex_pose_goal.py |
관절 목표 또는 카르테시안 포즈로 이동 (카르테시안 보간 사용 가능) |
| 제약 조건 | ex_orientation_path_constraint.py |
운동 중에 엔드 에펙터 방향 고정 |
| 실시간 제어 | ex_servo.py |
MoveIt 2 Servo를 사용해 낮은 지연의 원격 조작 |
| 그립퍼 | ex_gripper.py |
ROS 액션을 통해 로봇 그립퍼 열기/닫기/토글 |
| 계획 장면 | ex_collision_primitive.py, ex_collision_mesh.py, ex_allow_collisions.py, ex_clear_planning_scene.py |
기본 형태 또는 메시 추가/제거, 충돌 활성화/비활성화, 장면 정리 |
| 세션 워크플로우 | ex_session.py |
RobotSession 컨텍스트 매니저를 사용한 컴팩트한 엔드투엔드 데모 |
누가 이 도구를 유용하게 사용할 수 있을까?
- 로봇 연구자: ROS 2 보일러플레이트를 작성하지 않고 Python으로 알고리즘을 프로토타이핑하고 싶은 사람.
- 교육자 / 학생: 운동 계획을 가르치는 경우. API는 접근하기 쉬우며, 데모 스크립트는 즉시 실행 가능합니다.
- 고수준 AI/ML 파이프라인 개발자 (예: 데모 학습, 강화 학습): 실제 또는 시뮬레이션된 로봇에 간단한 운동 명령을 보내고 싶은 사람.
제한 사항 / 주의할 점
- 학습이나 인식 기능을 제공하지 않습니다. MoveIt 2용 순수 제어 인터페이스입니다.
- 여전히 로봇용 기능적인 ROS 2 + MoveIt 2 설정이 필요합니다 (URDF, SRDF, 컨트롤러 설정 등).
- 실시간 성능은 하위 MoveIt 2 Servo 노드와 하드웨어에 따라 달라지며, Python 레이어는 최소한의 오버헤드만 추가하지만 하드웨어 실시간 솔루션은 아닙니다.
결론
pymoveit2는 Python과 강력한 MoveIt 2 운동 계획 스택 사이의 격차를 메우며, 로봇을 움직이고, 운동학을 쿼리하며, 계획 장면을 조작할 수 있는 간결하고 읽기 쉬운 스크립트를 작성할 수 있게 해줍니다. Python 기반 AI 또는 고수준 논리를 ROS 기반 로봇 시스템에 통합하고자 하는 누구에게나 견고한 빌딩 블록입니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트