본문 바로가기

Robot/Robot Program - ROS

유니버셜 로봇팔 UR3를 ROS로 움직여보기 - 최초 연결, 상태 확인

로봇 블로그라고 이야기하고는 로봇 관련 글을 너무 오랫동안 글을 오랫동안 올리지 않았더군요... 더구나 최근 집필 중인 Python을 활용한 데이터 분석이라는 책도 끝냈고, 다시 ROS 공부를 시작한 지금... 딱 글 한 편 블로그에 올리기 좋을 때라고 생각이 드네요... 정말 많은 삽질과 절망이 있었지만, 그 모든 역경을 이기고 오늘은 Universal Robot이라는 멋진 아이를 ROS에서 기동시켜보는 것을 (제가 언제나 그렇듯) 기초편을 이야기할려고 합니다.^^ 항상 그렇듯 요과정이 제일 재미있거든요^^

앗 귀여운 UR3입니다. 이런 스타일의 로봇팔들이 요즘은 꽤 많아진것 같습니다. 한때 동경해 마지 않았던 DLR 로봇팔[바로가기]도 한 번 만져볼 수 있으면 좋겠네요.^^

아... UR 로봇은 컨트롤박스를 가지고 있는데요. 사용자는 그 컨트롤박스에 있는 랜포트에 연결을 해서 UR로봇을 제어해야 합니다. 그래서 저는 공유기에 UR3를 붙이고 노트북에서 접근을 했습니다. 그렇게 하면 노트북 입장에서는 UR로봇과 인터넷에 모두 접속 가능하게 됩니다.

ㅎㅎ 요렇게 말이죠... 아 맥에서는 멀티부팅을 외장하드에 우분투 16.04를 설치해서 구현했습니다. 예전엔 꽤나 삽질했는데 주변 분들의 조언으로 저렇게 외장하드로 부팅을 합니다~

그리고, 일단 UR 로봇의 티칭 패드에서 Setup Robot 메뉴로 들어갑니다.

그리고 Setup Network를 눌러서 DHCP로 네트워크를 접속하도록 한 다음, UR을 재부팅한 후 저기 흐리게 보이는 IP address를 적어둡니다.^^

그리고 Move 메뉴로 와서 혹시 모를 사고에 대비해서 (사진에서는 잘 안보이지만.ㅠㅠ) 사진 제일 밑에 처럼 Speed를 15% 정도로 낮춰 둡니다.^^

이제... 대망의 ROS~~~ 일단 catkin_ws 폴더의 src로 이동해서 UR 로봇의 ROS 패키지[바로가기]를 받아 둡니다. 명령은 git clone https://github.com/ros-industrial/universal_robot입니다. 그리고 또하나... ROS가 kinetic 버전으로 올라가면서 ur_driver에서 ur_modern_driver로 갈아타야 합니다. [바로가기]에서 받으시거나, 혹은 catkin_ws/src 폴더에서 git clone https://github.com/ThomasTimm/ur_modern_driver 명령으로 받으셔도 됩니다.~~

이제 이 과정이 모두 끈타면 위 그림처럼 universal_robot이라는 폴더와 ur_modern_driver라는 폴더가 catkin_ws/src 폴더내에 위치해 있게 됩니다. 

그리고 universal_robot 폴더에는 저렇게 왠지 필요할 것 같은 이름의 폴더들이 다 있습니다~~^^

ur_modern_driver 폴더에는 저렇게 있구요. 나중에 저 test_move.py를 실행할 겁니다^^

여기까지 하시고 나면... 빌드~해야죠^^ catkin_ws 폴더에서 catkin_make 명령을 사용하면 됩니다. 그런데 아마.. 에러가 날겁니다. (헉.. 저만 에러가 난거면 슬프구요) 혹시 에러가 나는 이유를 명확히 알고 계신 분을 알려주세요~~ 밥 쏩니다^^

그리고... 저렇게 아까 UR 로봇의 티칭 패드에서 확인한 IP로 ping을 날려봅니다. 잘 연결되어 있네요^^

이제 이야기한데로... catkin_make를 합니다. 그러면 잘 되는듯~~~ 하다가...

에러가 수두룩...ㅠㅠ.

막막합니다. 난 그냥 패키지를 받아서 설치만 하고 있을 뿐인데 말이죠ㅠㅠ

Github의 issue에 보면 이야기가 있네요. 뭐라 샬라라라... 하고 있지만. 뭐 급한 마음에 핵심만 가져옵니다.~~

hardware_interface에 claimed_resources.at(0).hardware_interface로 변경합니다. 에러난 줄의 메세지를 보고 행번호에 맞춰 찾아다니면서 하면 됩니다.

그리고 나서 다시 catkin_make를 수행하면 이번에는 100%로 진행된 것이 보입니다.~~~^^

이제... roslaunch ur_modern_driver ur3_bringup.launch robot_ip:=ROBOT_IP라는 명령을 줍니다~~ 여기서 ROBOT_IP는 자신의 PC에서 UR 로봇이 연결된 IP를 지정하면 됩니다.

그러면~ 이렇게~~ 뭔가 되는듯 (혹은 뭐 잘 모르겠는) 메세지가 뜹니다.^^

이제 아까 이야기한 ur_modern_driver가 설치된 폴더에서 test_move.py라는 아이를 에디터에서 열어봅니다.

저기에 Q1, Q2, Q3가 있는데... 잘못하면 고정된 기구에 충돌될 수 있으니... 위에 있는 JOINT_NAMES에 맞춰 적절히 작은 값을 인가합니다. 각 조인트별 각도를 입력하고 그 지점을 순회하게 됩니다.^^

그리고 다른 터미널을 열어서 rosrun ur_modern_driver test_move.py라고 실행합니다. 그리고 y를 눌러줍니다^^ 그러면...

이렇게 동작을 하는 거지요^^

rqt_graph로 보면 위 그림처럼 ur_driver에서 joint_states로 명령을 인가하는 것이 보입니다. 그리고 action_topic을 사용하고 있네요~

rostopic list 명령으로 활성화된 토픽중 /joint_states를 보겠습니다.

응?? 왜 저리.. 엔터키를 ㅠㅠ. 뭐 아무튼 rostopic echo /joint_states 명령을 인가하면

저렇게... 데이터가 보이네요... 많은 상태가 넘어오고 또 화면이 스크롤되고 좀 정신이 없습니다.

이럴때.. rqt_graph를 호출합니다.

이렇게 plot 창이 하나 뜨는데요~

Topic 입력칸에 원하는 토픽을 적습니다.

position이 6개 상태를 가지고 있어서 0~5사이의 숫자를 넣어주면 됩니다.

그리고, 간혹 무너질 수 있지만 Y-Axis의 Min/Max를 잘 잡아 줍니다.

이제... 저렇게 간혹 튀는 값이 보여 좀 의아하지만... 일단 잘 모니터링 됩니다~

아까... 동영상에서 본 움직임을 각 관절별로 모니터링 하고 있는 모습입니다.^^ 오늘은 오랜만에 Robot 관련 (비록 기초지만) 글을 올리네요~~ 다음에는 이 UR 로봇을 좀 더 활용한 설명을 올리도록 하겠습니다.^^

반응형