본문 바로가기

Robot/Robot Program - ROS

ROS Gazebo에서 UR 로봇 구동을 Jupyter에서 해보기

유니버셜 로봇의 UR 시리즈는 ROS용 패키지로 많은 연습을 해볼 수 있도록 하고 있습니다. 물론 UR은 자체적인 시뮬레이터도 무료로 배포하고 있어서 UR로봇만 사용한다면 큰 문제 없지만, 저는 UR로봇을 대상으로 로봇팔을 공부하는 사람들이라면 ROS 환경에서 시뮬레이션을 해보는 것도 좋다고 생각을 합니다. 물론~ 실물 로봇이 있다면 더 좋겠죠. 오늘은 UR로봇의 ROS 패키지를 melodic 환경에서 설치하고, Jupyter Notebook에서 로봇이 구동되는 것을 연습하는 과정을 이야기해보려고 합니다.

먼저 위 github에서 소스를 받아 오는 것부터 시작하죠.

ROS 워크스페이스의 src 폴더에 git으로 받아옵니다.

git clone -b calibration_devel https://github.com/fmauch/universal_robot.git

이 명령을 사용하세요.

그리고,

rosdep install --rosdistro melodic --ignore-src --from-paths src

이 명령으로 필요한 패키지도 설치하구요

그리고 빌드합니다.^^

그럼 뭐~ 그냥 실행해보죠.

음.. 네... 누워있는 로봇팔이 나타나서 좀 놀랍지만, UR로봇이 나타납니다.

이제 혹시 pip가 설치되어 있지 않으시다면 python-pip를 설치하구요.

ipython도 설치하고,

jupyter도 설치합니다.

이제 아까 실행했던 gazebo가 꺼져있다면 다시 실행하고, 다른 터미널에서 moveit_config의 moveit_planning_execution을 실행합니다. end-effector의 변화등으로 직접 moveit을 만들 필요가 없다면 ur 패키지를 설치하면 moveit_config 패키지가 설치되어 있어서, 일단 팔을 한 번 움직여 보기 좋습니다.

그리고, 이 상태에서 moveit을 실행한 터미널에서 위 그림의 빨간 화살표에 표시된 메세지가 잘 나타난다면 가제보에 있는 로봇팔을 움직여볼 준비는 끝난거죠. 이제 다른 터미널에서 jupyter notebook을 실행합니다.

그럼 이렇게 웹브라우저에서 jupyter notebook이 실행됩니다. New를 누르면 음... Python2가 보일겁니다. ROS1은 Python2를 사용해서 그런데, 여러 방법으로 Python3를 사용할 수 있지만, 곧 ROS2로 넘어가면 자연스럽게 Python3를 쓸 수 있으니 지금은 그냥 Jupyter를 사용하는 것에 촛점만 맞추면 될듯 합니다.

화면 배치는 이렇게 해두죠~^^ 이렇게 두면 Jupyter Notebook의 장점을 살려서 코드 실행마다의 움직임 혹은 현상을 관찰할 수 있습니다.

혹시 moveit_commander를 import할 때 없다는 에러가 나면

간단히 ros-melodic  붙여서 설치해줍니다.

그리고 위 코드를 한 번 실행해보죠. 위 그림처럼 결과가 나오면 이제 준비가 다 끝난 것이죠^^

현재 로봇팔의 상태를 모두 읽을 수있습니다. 각 관절의 각도, 이름, frame_id 등~

moveit으로 처음 작업을 할 때, home과 up은 자세가 지정되어 있습니다. 그래서 up으로 가라는 지령을 내릴 수 있습니다.

그러면 이렇게 움직이는 것을 실행하고 그 결과를 직접 보면서 명령을 익혀 볼 수 있습니다.

이번에는 함수를 두 개 만들어 둡니다. 각 조인트별 각도를 지정해서 움직이는 함수와 현재 조인트의 상태를 읽어오는 함수입니다.

그리고 간단히 degree 단위로 각도를 주고, 그걸 radian으로 변경해서 조인트별로 움직이라고 명령을 줍니다.

그러면 이렇게 움직이는 거죠^^

이번에는 end-effector의 위치와 자세를 얻어오는 get_current_pose를 이용해서 현재 끝단의 자세와 위치를 얻어보겠습니다.

이렇게 사용할 수 있습니다.

그런데 각도가 쿼터니언이네요ㅠㅠ. 쿼터니언은 우리가 바로 알긴 좀 어려우니 tf 패키지가 제공하는 변환 함수를 이용해서 오일러각으로 바꿀 수 있고, 그러면 아까 위에서 바꾼 자세가 끝단 입장에서 x, y, z중 중심으로 0도, 70도, 90도 정도 회전한 자세라는 것을 알 수 있습니다.

그럼 끝단을 x, y, z축 중심으로 각각 0도 30도 90도, 네, 바로 y축 중심으로 30도만 더 회전하라는 명령을 줄 수 있는거겠죠~

이렇게 움직이네요. ㅎㅎ^^ 이번에는 실제 로봇을 움직일때 Jupyter notebook을 이용하면 약간 interactive한 학습을 할 수 있다고 생각해서 만들어본 글입니다. 더불어 moveit을 이용해서 끝단의 좌표, 자세에 관한 명령을 인가하는 방법도 살짝 소개를 했네요^^

반응형