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)

  1. Panda 로봇용 MoveIt 2 구성 설치:
    sudo apt install ros-$ROS_DISTRO-moveit-resources-panda-moveit-config ros-$ROS_DISTRO-controller-manager
    
  2. 로봇용 MoveIt 2 데모 실행:
    ros2 launch moveit_resources_panda_moveit_config demo.launch.py
    
  3. 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 기반 로봇 시스템에 통합하고자 하는 누구에게나 견고한 빌딩 블록입니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트