ROS2 및 MoveIt2 로봇 팔 통합: 실용적인 가이드
ROS2 및 MoveIt2 <unk> URDF 설정, ros2_control, 운동 계획 및 텔레오퍼레이션 세로 모드와 로봇 팔을 통합하는 방법
[← 가이드]
ROS2 Humble와 MoveIt2를 사용하여 팔 통합을 위한 단계별 가습기 URDF 저작을 통해 실시간 카르테시아 세로 제어.
전제 조건
이 가이드 는 Ubuntu 22.04 LTS 를 ROS2 Humble Hawksbill (EOL 2027 년 5 월), Python 3.10, 그리고 MoveIt2 바이너리 버전 를 **Humble 를 대상으로 한다. 다음 작업을 하기 전에 전체 데스크톱 스택을 설치 하십시오:
- **ROS2
T1 - MoveIt2:
T2 는 Moveit_core, Moveit_ros_planning, Moveit_ros_move_group, 그리고 모든 플러그인을 끌어내죠. - ros2_control:
T3 하드웨어 추상화에서 필수 - ** 파이썬 패키지:**
T4 교과서 단편에서 사용되는 운동적 유틸리티에 대한 - 콜콘:
T5
환경 확인:
URDF 설정
** 통일된 로봇 설명 형식 (URDF) **은 팔의 운동학, 역학 및 하드웨어 인터페이스에 대한 유일한 진실의 원천입니다. 잘 작성된 URDF는 대부분의 계획 실패를 예방합니다.
공동 한계는 먼저 올바른 것 이다. 부드러운 한계 (기획을 위해 MoveIt2에서 사용) 는 하드 한계 내에서 5° (비상 중지 위해 펌웨어에서 사용) 이어야 한다. 당신의 팔의 J2 하드웨어 한계 범위는 -120°에서 +120°까지라면, URDF
역사전제는 일반적으로 잘못된 것이며 불안정한 시뮬레이션 역학을 유발한다. 반경 _r_와 길이가 _L_의 실린더로 추정되는 질량 _m_의 연결은
** 시각적 대 충돌 기하학:** 시각적 태그에 고 폴리 매쉬 (DAE/OBJ) 를 사용하며 충돌 태그에 단순화된 구상 껍데기 매쉬를 사용한다. MoveIt2의 FCL 충돌 검사기는 충돌 기하학에 비해 계획 시점에 실행된다.
ros2_control 하드웨어 인터페이스 태그는 URDF의
- ** 하드웨어 플러그인:** 드라이버에 설정, 예를 들어 [OpenArm]
T60 ) 팔에 T16 . - ** 명령 인터페이스:** 위치 제어용으로
T17 을 선언하고, 운전자가 지원하는 경우 T18 과 T19 을 선언합니다. - ** 상태 인터페이스:** 항상
T20 와 T21 를 선언합니다. 하드웨어가 토크 피드백을 제공하면 T22 를 추가합니다. - param tag: 하드웨어 요소 내부의 파라마 태그를 통해 하드웨어 특정 매개 변수를 (예를 들어, 일련 포트, 보드 속도, 로봇 IP) 통과하십시오.
MoveIt2 핵심 개념
계획 코드를 한 줄을 작성하기 전에 이 네 가지 개념을 이해하면 몇 시간 동안 디버깅을 할 수 있습니다.
MoveGroup는 고급 계획 인터페이스입니다. 그것은 계획 파이프라인, 계획 장면, 실행 관리자를 포괄합니다. 당신은
** 계획 파이프라인**는 선택적 사전/ 후처리 어댑터로 플러그인을 연결합니다. MoveIt2는 작업에 따라 세 개의 플러너 백백을 선별합니다:
| Planner | Best For | Limitations |
|---|---|---|
| OMPL (default) | General-purpose, cluttered environments, no dynamics needed | Non-deterministic; replanning may give different paths |
| CHOMP | Smooth, gradient-optimized trajectories | Can get stuck in local minima; slow in tight spaces |
| PILZ Industrial Motion Planner | Deterministic LIN/PTP/CIRC industrial moves | No obstacle avoidance; requires clear workspace |
** 계획 장면**은 환경의 생중계 3D 표현입니다. 그것은 URDF에서 시작되며
** 제한 계획:** MoveIt2는 경로 제한 (예를 들어, 운동 내내 최종 효과자를 똑바로 유지), 관절 제한, 위치 제한 및 방향 제한을 지원합니다. 제한은
운동 계획 교과서
이 4단계 작업 흐름은 새로운 터미널에서 충돌 검증된 카르테시아 경로를 실행하는 데까지 데려갑니다.
** 단계 1
** 단계 2
** 3 단계
** 4 단계
텔레오퍼레이션 세보 모드
moveit_servo는 재계획 없이 실시간 카르테시아 속도 조절을 가능하게 한다. **100 Hz까지의
팔에 대한 서보 모드를 시작하려면 YAML 서버 구성으로 서보 노드를 시작 파일에 추가하십시오. 주요 매개 변수는:
- move_group_name: Servo
에 대한 계획 그룹은 SRDF 그룹 이름과 일치해야 합니다. - 카르테시아어 명령어: 기본
T36 . 여기 50 100Hz에서 T37 을 게시하십시오. - joint_command_out_topic: 출력
T38 로스2_컨트롤로 전송된다. - ** incoming_command_timeout:** 0.1s로 설정합니다. 이 창 내에서 명령이 수신되지 않으면, servo는 팔을 중지합니다.
- 하단_상수성_상수 / 하드_스톱_상수성_상수: 17 및 30 (상수상수) 로 설정한다. 팔은 단수성 가까이에 서서 멈추게 된다.
[텔레오퍼레이션 데이터 수집] (
흔히 발생하는 문제 와 해결 방법
- ** 컨트롤러 타이밍 / "궤도 포인트는 엄격히 증가하지 않는다":** 위치 제어 된 팔에 대한 하드웨어 인터페이스의
T39 (T40 이 아닌) 를 구현하는지 확인하십시오. 속도 인터페이스에는 USB 기반의 팔이 보장할 수 없는 정확한 타이밍이 필요합니다. - ** 계획 중 공동 한계 위반:**
T41 에 5° (0.0873 rad) 안전 지위를 T42 및 T43 를 하드 한계 내에서 설정하여 적용하십시오. 이것은 계획자가 하드웨어의 한계 스위치를 실행 중간에 유발하는 궤도를 생성하는 것을 방지합니다. - ** 시뮬레이션에서의 불안정한 역학:** 잘못된 URDF 관동값은 가장 흔한 원인입니다. 각 링크의 관동성을
T44 로 확인하고 rqt 로봇 설명 시청기에서 관동성을 검사하십시오. - MoveGroup 연결이 실패: 이동_그룹 노드가 실행되고 있는지 확인하고 RMW (전설 사이클론 DDS) 는 다른 노드와 동일한 도메인 ID를 가지고 있는지 확인합니다.
T46 을 일관되게 설정합니다. - **Servo는
T47 를 사용하는 ROS2 타이머를 사용해서 T48 를 사용하는 대신 T47 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T47 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서 T48 를 사용해서
주요 패키지 참조
| Package | Purpose | Install |
|---|---|---|
| moveit_servo | Real-time Cartesian servo / teleop | Included in ros-humble-moveit |
| moveit_planners_ompl | OMPL sampling-based planners | Included in ros-humble-moveit |
| moveit_visual_tools | rviz2 debugging markers and trajectory visualization | ros-humble-moveit-visual-tools |
| joint_state_broadcaster | Broadcasts /joint_states from ros2_control | ros-humble-ros2-controllers |
| robot_state_publisher | Publishes TF tree from URDF + joint states | ros-humble-robot-state-publisher |
| moveit_ros_perception | OctoMap integration for 3D obstacle avoidance | Included in ros-humble-moveit |
OpenArm 1 MoveIt2 구성
OpenArm 1 은 미리 구축된 MoveIt2 구성을 가지고 있지만 구조를 이해하는 것은 작업에 맞게 사용자 정의 할 때 도움이 됩니다.
- URDF/XACRO:
T49 는 6개의 리볼트 관절 + 1개의 프리즘 관절을 정의합니다. 관절 제한은 하드웨어 제한 내에서 5도로 설정됩니다. - SRDF:
T50 는 "팔" 계획 그룹 (관절 1-6) 과 "잡기" 그룹 (잡기 관절) 을 정의한다. 두 개의 이름의 자세는 "집" (모든 0) 과 "자동" (관절은 [0, -0.5, 0.7, 0, 0.8, 0] rad). - joint_limits.yaml: 텔레오퍼레이션 때 안전성 위해 1.0 rad/s로 설정된 속도 제한. 2.0 rad/s^2로 가속 제한. 테스트 후 보다 빠른 자율적인 움직임을 위해 조정한다.
- kinematics.yaml: KDL 풀기 기본: IK가 싱글리티 근처에 있는 작업에 대해서는
T51 : T52 로 전환하고 kinematics.yaml를 업데이트하십시오.
파이썬 이동그룹 인터페이스 예제
MoveIt2 파이썬 API를 사용하여 선택 및 장소 순서를 계획하고 실행하는 완전한 파이썬 예제:
#!/usr/bin/env python3
"""MoveIt2 pick-and-place example for OpenArm 1."""
import rclpy
from rclpy.node import Node
from moveit2 import MoveIt2
from geometry_msgs.msg import PoseStamped
import numpy as np
class PickPlace(Node):
def __init__(self):
super().__init__("pick_place")
self.moveit2 = MoveIt2(
node=self,
joint_names=[f"joint_{i}" for i in range(1, 7)],
base_link_name="base_link",
end_effector_name="gripper_link",
group_name="arm",
)
# Wait for MoveIt2 to be ready
self.moveit2.wait_for_execution(timeout=10.0)
def execute(self):
# 1. Move to ready pose
self.moveit2.move_to_configuration(
[0.0, -0.5, 0.7, 0.0, 0.8, 0.0]
)
self.moveit2.wait_for_execution()
# 2. Move to pick pose (Cartesian)
pick_pose = PoseStamped()
pick_pose.header.frame_id = "base_link"
pick_pose.pose.position.x = 0.3
pick_pose.pose.position.y = 0.0
pick_pose.pose.position.z = 0.05
pick_pose.pose.orientation.w = 1.0
self.moveit2.move_to_pose(pick_pose)
self.moveit2.wait_for_execution()
# 3. Close gripper
self.moveit2.move_to_configuration(
joint_positions=[0.0], # closed
joint_names=["gripper_joint"],
group_name="gripper",
)
self.moveit2.wait_for_execution()
# 4. Move to place pose
place_pose = PoseStamped()
place_pose.header.frame_id = "base_link"
place_pose.pose.position.x = 0.3
place_pose.pose.position.y = -0.2
place_pose.pose.position.z = 0.1
place_pose.pose.orientation.w = 1.0
self.moveit2.move_to_pose(place_pose)
self.moveit2.wait_for_execution()
# 5. Open gripper
self.moveit2.move_to_configuration(
joint_positions=[0.04], # open
joint_names=["gripper_joint"],
group_name="gripper",
)
self.moveit2.wait_for_execution()
def main():
rclpy.init()
node = PickPlace()
node.execute()
rclpy.shutdown()
if __name__ == "__main__":
main()
카르테시아 경로 계획: 상세한 작업 흐름
카르테시아 경로는 최종 효과자가 3D 공간 (물어 지는, 도는, 삽입) 에서 특정 궤도를 따라야 하는 작업에 필수적이다.
- 차로점 거리:
T53 (1cm 사이로) 를 설정하여 부드러운 움직임을 할 수 있습니다. 더 큰 단계 (5cm) 는 각에서 이 움직이는 움직임을 만들어냅니다. 더 작은 단계 (<5mm) 는 눈에 띄는 개선 없이 계획 시간을 증가시킵니다. - 뛰기 문턱:
T54 를 설정하여 점스 디테터를 비활성화 (대부분의 작업에 권장된다). 0이 아닌 문턱은 관절의 경로점 사이의 문턱을 넘어 이동하는 경우 계획에 방해를 줍니다. 이는 IK의 중단성을 감지하지만 관절 경계에 가까운 유효한 경로를 거부합니다. - ** 분자 확인:**
T55 은 요청된 경로의 얼마나 달성 가능한지 나타내는 분자 (0.0-1.0) 를 반환합니다. 분자 <0.95이면 경로는 합동 한계 또는 충돌 경계를 통과할 가능성이 있습니다. 접근 방향을 조정하거나 방향 제한을 완화하십시오. - ** 카르테스 운동 중 방향 제한:** 붓거나 삽입하는 등의 작업에 있어서, 지탱기 수준을 유지하기 위해 방향 제한을 추가하십시오. 지향 용납도를 지각 및 굴곡 축을 중심으로 +/-10도로 설정하여, 360도 자유로써
을 설정하십시오.
충돌 검증: 계획 현장에 객체를 추가
MoveIt2는 알고 있는 객체에 충돌하는 것을 피합니다. 계획하기 전에 항상 작업 공간 객체를 추가합니다.
- ** 테이블 표면:** 테이블과 맞먹는 크기가 있는 원시 상자를 추가하여 올바른 높이로 배치합니다. 이것은 가장 흔하게 실종되는 충돌 객체이며 팔 테이블 충돌을 유발합니다.
- ** 카메라 마운팅:** 상장 및 옆 카메라 마운팅에 단순화된 상자 모양을 추가합니다. 이 부분은 팔이 카메라에 닿을 때까지 잊혀집니다.
- ** 첨부된 물체:** 지갑이 물체를 잡을 때
T56 을 사용하여 최종 효과자 링크에 붙여 놓습니다. 이것은 계획자가 잡힌 물체를 환경과 충돌하는 경로를 생성하는 것을 방지합니다. 배치할 때 분리하십시오. - OctoMap (동적 장애물): 이동 장애물 있는 환경에서는 깊이 카메라의 포인트 클라우드를 MoveIt2의 OctoMap 통합에 공급하십시오. MoveIt2는 3D 점유율 지도를 만들고 그 주위에 계획을 세웁니다. 세부 사항과 계획 속도를 잘 균형 잡기 위해
T57 을 사용하여 T58 (2cm 록셀) 를 설정합니다.
관련 가이드
- 로봇 API 통합 안내 -- 기업 통합을 위한 ROS2를 REST/WebSocket API에 포장
- 포스/토크 센서 선택 -- F/T 데이터를 MoveIt2 임피던스 제어로 통합합니다
- [원격조작 Lab을 설치하는 방법] (T65
) -- ROS2 스택에 연결되는 하드웨어 설정을 - 비매뉴얼 텔레오퍼레이션 설정 - ROS2 주제는 비매뉴얼 동기화
- 예방 유지보수 - 유지보수 후 기량 검증 절차
RCSV와 작업
RCSV는 우리가 판매하고 서비스하는 모든 팔 플랫폼에 ROS2 및 MoveIt2 통합 지원을 제공합니다.
- OpenArm 리소스 -- 오픈소스 URDF, MoveIt2 구성 및 OpenArm 1 로스2_컨트롤 드라이버
- 하드웨어 스토어 -- 미리 구성된 ROS2 드라이버로 OpenArm 1 (4,500 달러) 를 구입합니다
- 정비 및 유지보수 -- ROS2 통합 서비스, 운전자 개발 및 캘리브레이션
- 데이터 플랫폼 -- MoveIt2 서버 모드에서 수집된 텔레오퍼레이션 데이터를 업로드
- [우리와 연락하세요]
T72 ) -- 당신의 팔 플랫폼에 대한 ROS2 통합 지원 요청
건축 을 시작 하기 위해 준비 되었습니까?
ROS2와 MoveIt2 통합을 위해 설계된 오픈소스 로봇 팔을 탐험하세요. 미리 구축된 URDF, MoveIt2 구성 및 ros2_control 드라이버를 사용합니다.
[OpenArm Resources]







