MoveIt 연동
MoveIt을 사용하여 모션 계획과 실행을 수행하는 방법을 설명합니다.
사전 조건
plem_launch.py가 실행 중이어야 합니다.neuromeka_moveit_config패키지가 설치되어 있어야 합니다.- 로봇이 TRAJECTORY 모드여야 합니다 (모드 제어 참조).
1. MoveIt 실행
plem_launch.py가 실행 중인 상태에서, 별도 터미널에서 MoveIt을 시작합니다:
# move_group 노드 실행
ros2 launch neuromeka_moveit_config move_group.launch.py
# RViz 시각화 (별도 터미널)
ros2 launch neuromeka_moveit_config rviz_moveit.launch.py
2. RViz GUI로 모션 계획
RViz가 실행되면 MoveIt 모션 플래닝 패널이 표시됩니다.
Plan & Execute 흐름
- RViz에서 로봇 end-effector의 인터랙티브 마커를 드래그하여 목표 자세를 설정합니다.
- Plan 버튼을 클릭하여 궤적을 계획합니다. 궤적이 시각화됩니다.
- 궤적이 안전한지 확인한 후 Execute 버튼을 클릭합니다.
- 또는 Plan & Execute 버튼으로 계획과 실행을 한 번에 수행합니다.
주의
Plan 결과를 반드시 확인한 후 Execute하세요. 충돌 경로가 계획될 수 있습니다.
3. Python에서 MoveIt 사용 (moveit_py)
moveit_py를 사용하면 Python 스크립트에서 모션 계획을 수행할 수 있습니다.
#!/usr/bin/env python3
"""moveit_py를 이용한 간단 모션 계획 예제."""
import rclpy
from rclpy.node import Node
from moveit.planning import MoveItPy
from moveit.core.robot_state import RobotState
def main():
rclpy.init()
# MoveItPy 초기화 (move_group 노드가 실행 중이어야 함)
moveit = MoveItPy(node_name="moveit_py_example")
arm = moveit.get_planning_component("arm")
# 현재 상태를 시작점으로 설정
arm.set_start_state_to_current_state()
# 목표 관절값 설정
robot_state = RobotState(moveit.get_robot_model())
robot_state.set_joint_group_positions(
"arm",
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
)
arm.set_goal_state(robot_state=robot_state)
# 계획
plan_result = arm.plan()
if plan_result:
# 실행
arm.execute()
moveit.shutdown()
rclpy.shutdown()
if __name__ == "__main__":
main()
4. 커스텀 MoveIt Config 생성
기본 제공 neuromeka_moveit_config를 수정해야 하는 경우 (충돌 geometry 추가, planning pipeline 변경 등):
Step 1: 기존 config 복사
cp -r ~/ros2_ws/src/plem-neuromeka/neuromeka_moveit_config \
~/ros2_ws/src/my_moveit_config
Step 2: package.xml과 CMakeLists.txt 수정
패키지 이름을 변경합니다:
# package.xml
<name>my_moveit_config</name>
# CMakeLists.txt
project(my_moveit_config)
Step 3: 설정 파일 수정
config/ 디렉터리 내의 SRDF, kinematics, planning pipeline 등을 프로젝트 요구사항에 맞게 수정합니다.
Step 4: 빌드 및 실행
cd ~/ros2_ws
colcon build --packages-select my_moveit_config
source install/setup.bash
ros2 launch my_moveit_config move_group.launch.py
다음 단계
MoveIt 없이 직접 궤적을 전송하려면 직접 궤적 전송을 참조하세요.