知之者 不如好之者, 好之者 不如樂之者

기계처럼 살지 말고, 즐기는 인간이 되자

Project/ROS2 + CV + Robot (2023.12~2024.02)

ROS2 humble에서 UR3e 작동 및 MoveIt2 Path Planning

코방코 2024. 1. 18. 19:18
728x90

 

연구원에서 정말 좋은 경험을 많이 하는 것 같습니다.

언제 이렇게 3000만원짜리 로봇 팔을 제 맘대로 가지고 놀아볼 수 있을까요.

그것도 운이 좋게 소프트웨어를 거의 처음부터 세팅을 할 수 있었습니다.

그래서 더더욱 고생했지만, 많이 배운 듯 합니다.

 

이번 글은 전 세계적으로 가장 유명한 UR3e 협동 로봇팔을 ROS2를 이용해서 연동하고,

Moveit2 를 이용해서 path planning 까지 시연한 글입니다.

제가 다른 사이즈의 로봇까지 테스트해보진 않았지만, 적어도 URe series 에 대해서는

전부 다 적용될 것이라고 생각합니다.

 

저는 ROS2 humble 이 설치된 Ubuntu 22.04 PC에서 이를 수행하였고,

ROS2 humble 환경 설정 과정은 아래 글을 통해 수행하실 수 있습니다.

아래 두 글을 따라 moveit2 까지 설치하시길 바랍니다.

 

ubuntu 22.04에 ROS 2 humble 설치 + colcon + Gazebo

ROS 2 humble 설치 이미 너무 좋은 레퍼런스가 있어 첨부하고 후처리 과정만 추가적으로 서술하겠습니다. ubuntu 22.04에 ROS 2 설치 1. 리눅스의 로케일을 UTF-8로 설정해 줍니다. 먼저 apt의 업데이트 및

cobang.tistory.com

 

ROS2 humble에서 MoveIt2 설치와 기본 튜토리얼

Getting Started — MoveIt Documentation: Humble documentation Install ROS 2 Humble. It is easy to miss steps when going through the ROS 2 installation tutorial. If you run into errors in the next few steps, a good place to start is to go back and make sur

cobang.tistory.com

 


드라이버 설치 및 작업 환경 구성

 

UR 사의 ROS2 Driver Github입니다. 잔에러가 발생하면 Issue를 참조해서 해결하시기 바랍니다.

 

GitHub - UniversalRobots/Universal_Robots_ROS2_Driver: Universal Robots ROS2 driver supporting CB3 and e-Series

Universal Robots ROS2 driver supporting CB3 and e-Series - GitHub - UniversalRobots/Universal_Robots_ROS2_Driver: Universal Robots ROS2 driver supporting CB3 and e-Series

github.com

 
먼저 ROS2 humble에서 ur을 작동시키기 위한 환경을 구성합니다.

정확히 아래 과정을 따라오셔야 나중에 작동할 때 에러가 발생하지 않습니다.

여기서 잘못해서 왜 rviz path planning이 작동하지 않는지 몰라 하루를 날렸습니다…

sudo apt install python3-colcon-common-extensions python3-vcstool

export COLCON_WS=~/workspace/ros_ur_driver

mkdir -p $COLCON_WS/src

 
workspace 라는 폴더가 생성됩니다.

cd $COLCON_WS

git clone -b humble https://github.com/UniversalRobots/Universal_Robots_ROS2_Driver.git src/Universal_Robots_ROS2_Driver

vcs import src --skip-existing --input src/Universal_Robots_ROS2_Driver/Universal_Robots_ROS2_Driver-not-released.${ROS_DISTRO}.repos

rosdep updat

rosdep install --ignore-src --from-paths src -y

colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release

 
만약 아래와 같은 에러가 발생하면

ImportError: cannot import name 'generate_py' from 'rosidl_generator_py' (/opt/ros/humble/local/lib/python3.10/dist-packages/rosidl_generator_py/init.py)

다음 라이브러리를 설치해줍니다.

pip install empy==3.3.4

pip install lark

 
빌드가 끝나면 다음 명령을 실행합니다.

source install/setup.bash

 


UR3e - PC Connection

 
이제 UR과 컴퓨터를 이더넷 케이블로 연결하겠습니다.

참조한 원본 글입니다.

 

Setting up a UR robot for ur_robot_driver — ur_robot_driver  documentation

© Copyright 2022, Universal Robots A/S.

docs.ros.org

 

Usage — ur_robot_driver  documentation

The driver’s package contains a urscript_interface node that allows sending URScript snippets directly to the robot. It gets started in the driver’s launchfiles by default. To use it, simply publish a message to its interface: Be aware, that running a

docs.ros.org

 
여기도 삽질을 정말 많이했습니다..

한 과정도 빠짐 없이 아래 과정을 잘 따라오시길 바랍니다.
 

먼저 컴퓨터에 랜 케이블을 연결하고 컨트롤 박스 하단으로 랜 케이블을 연결합니다.
 
그리고, UR 컨트롤 패널을 통해 UR 컨트롤 박스를 켜고,

우측 상단의 ≡ 버튼을 클릭하고 설정 - 시스템 - 네트워크를 선택합니다.
 

다음은 고정 IP 설정을 수행합니다.

컨트롤 패널에서 다음과 같이 입력해줍니다.

 
 
PC 에서도 Wired Setting을 선택하여 다음과 같이 고정 IP를 추가해줍니다.

로봇과 PC의 IP가 다른 점 인지하시길 바랍니다.

 
ROS2 등을 이더넷 케이블 연결을 통해 접속하려면

URCap 설치가 필요합니다.

먼저 USB가 필요합니다.

비어있는 USB 또는 USB를 백업해두시고 시작하시기 바랍니다.

 

USB를 컴퓨터에 연결해 아래 링크에서 URCap 1.0.5 버전 (최신 버전) .urcap 파일 하나를 다운로드 받습니다.

 

Releases · UniversalRobots/Universal_Robots_ExternalControl_URCap

Example implementation of how to use ROS driver on-demand in a URCap. - UniversalRobots/Universal_Robots_ExternalControl_URCap

github.com

 

그리고 아래 링크의 과정을 따라서 URCap 설치를 진행해줍니다.

그전에 UR 소프트웨어 기준을 충족해야하니 잘 확인하시기 바랍니다.

아래 링크에 해당 설명이 있습니다.

 

Installing a URCap on a e-Series robot — ur_robot_driver  documentation

© Copyright 2022, Universal Robots A/S.

docs.ros.org

 

재시작 후 설치가 성공적으로 완료되었다면,

설정의 URCaps 메뉴에 다음과 같이 화면이 나타납니다.

 
이제 우측 상단 설치 메뉴에서

URCaps를 선택하고

다음과 같이 IP를 설정합니다.

여기는 Control 하는 PC의 IP가 들어갑니다.

Port는 로봇 모델과 상관없이 50002 고정인 것 같습니다.

 
그럼 이제, 필드버스 메뉴에서 이더넷/IP 를 사용하지 않음으로 바꾸어 주어야합니다.

왜 사용하지 않음이 되어야 작동하는지 모르겠습니다.

이거 하나 때문에 한 3시간 헤맸습니다..

 
그리고 이제 상단 프로그램 메뉴에서

다음과 같이 External Control을 넣어줍니다.

 
이제 PC에서 ping test를 수행합니다.

ping 192.168.1.101

 

아래와 같이 나타나면 연결이 성공적으로 이루어 진 것입니다.


 터치 패드의 설정 - 네트워크 메뉴에서 네트워크에 연결되었습니다. 라는 문구가 떠있는지도 확인하시기 바랍니다.
 


ROS2 Moveit2 UR3e Operation

 
그럼 이제 ros2 로 실행해보겠습니다.

그전에 일단 로봇을 home 위치로 보냅시다.

이동 메뉴에서 홈을 선택하여 꾹 눌러 로봇이 home 에 위치할 때 까지 이동시킵니다.
 
 
이제 Calibration 부터 수행합니다.

실행 디렉토리는 ~/workspace/ros_ur_driver 에 위치하여야 합니다.

ros2 launch ur_calibration calibration_correction.launch.py robot_ip:=192.168.1.101 target_filename:="${HOME}/my_robot_calibration.yaml"

 

저는 별다른 동작없이 마무리 되었습니다.
 
그럼 이제 rviz2 와 함께 작동시켜보겠습니다.

ros2 launch ur_robot_driver ur_control.launch.py ur_type:=ur3e robot_ip:=192.168.1.101 launch_rviz:=true

 

로봇이 성공적으로 명령을 받을 수 있다고 합니다.

 
감동적인 화면이 나타납니다.

 

이는 로봇의 현재 상태가 rviz에 그대로 출력되는 것이며,

이제 ROS2 를 통해 로봇이 이동하는 것이 rviz 화면에도 반영됩니다.

이동 메뉴에서 간단하게 조작을 해보시길 바랍니다.


 
그리고 이제 위에서 작성했던 로봇의 프로그램을 터치 패드 하단의 재생 버튼을 눌러 작동시켜줍니다.

로봇이 rviz를 시작했던 시점의 상태 (잘 따라왔다면 HOME) 으로 돌아가니 주의하시기 바랍니다.

이제 로봇이 명령을 수신할 준비가 완료되었으니 새 터미널을 열고 다음 명령을 입력합니다.

export COLCON_WS=~/workspace/ros_ur_driver

cd $COLCON_WS

ros2 launch ur_moveit_config ur_moveit.launch.py ur_type:=ur3e launch_rviz:=true robot_ip:=192.168.1.101 reverse_ip:=192.168.1.102

 
그럼 추가적인 새 rviz 창이 나타나는데요,

path planning 이 익숙하지 않으시면

아래 글을 참조해서 Path Planning을 plan하시기 바랍니다.

plan 후 바로 execute 하지 마시고

path를 확인하고 하시기 바랍니다.

로봇이 가끔 이상한 경로를 path로 계산하기 때문입니다.

 

ROS2 humble에서 MoveIt2 설치와 기본 튜토리얼

Getting Started — MoveIt Documentation: Humble documentation Install ROS 2 Humble. It is easy to miss steps when going through the ROS 2 installation tutorial. If you run into errors in the next few steps, a good place to start is to go back and make sur

cobang.tistory.com

 
 
그리고 준비가 되셨다면, 로봇 주변에 물체나 사람을 멀리하고

execute 를 누르시면, 로봇이 path planning 결과대로 작동합니다.

 
작동 영상입니다.

 

정말 감격스러운 순간입니다.

이 간단한 것을 위해 몇 시간을 디버깅했는지 모르겠습니다.

정말로.. 이틀은 그냥 날아갔네요
 




그럼 다음 글에서는 UR3e를 사용하여

간단하게 Gripper 없이 두 지점을 왔다갔다 하도록

Pick and Place를 수행하는 글을 작성하겠습니다.
 
 

728x90
반응형