CAFE

My Robot

터틀봇/ROS 제작 및 테스트 (1)

작성자매발톱|작성시간12.03.07|조회수3,001 목록 댓글 5

Turtlebot 은 Willow Garage 사에서 만든 저렴한 모바일 로봇입니다. 같은 회사에서 만든 수억원대의 PR2 로봇과는 달리 이 로봇은 iRobot 사의 iCreate 모바일 로봇 플랫폼과 MS 의 키넥트 센서를 사용하여 구성된 단순한 구조를 가지며 ROS 소프트웨어 플랫폼을 구동하는 로봇입니다. 이 로봇은 가격은 저렴한 반면에 실내의 맵을 만들어 자율주행하며 특정한 임무를 수행하거나 안드로이드 스마트폰으로 원격제어하고 음성을 인식할 수도 있습니다.

이 로봇을 제작하고 소프트웨어를 설치하여 실행하는 과정을 간단하게 정리해 봤습니다. 글재주가 없어 너무 거칠게 쓰여 있으니 양해하시기 바라고, 상세한 내용은 참고자료나 인터넷을 찾아보시기 바랍니다. 그리고, 제작 및 설치시 문제점이나 수정사항이 있으면 언제든지 알려주시면 내용에 반영하도록 하겠습니다.

1. 하드웨어 제작
먼저 하드웨어에 대한 상세한 정보는 http://www.turtlebot.com 에서 찾을 수 있습니다. 로봇 하드웨어는 크게 아래의 다섯 가지 부품으로 구성됩니다.


- 구동및전원부: Create/Roomba 등
- 센서부: 키넥트/Depth 카메라
- 처리부: 넷북/CPU보드
- 프레임부
- 인터페이스부

이 부품들은 모두 위 웹페이지에서 참고하는 싸이트들로부터 한꺼번에 또는 따로따로 구입할 수도 있고  국내에서 구입(프레임은 제작)하여 조립할 수도 있습니다. 각 부품에 대해 알아보겠습니다.

1) 구동및전원부
이 부품은 원래 Turtlebot 모델에서는 iRobot 사의 Create 라는 개발용 로봇을 사용하는 것이 공식적이지만 Roomba 500 씨리즈의 로봇청소기도 가능합니다. 이 로봇들 대신 유진로봇
(http://www.yujinrobot.com)에서 만든 Xbot 과 같은 개발용 로봇도 가능하겠지만 제공하는 RS232 직렬포트를 통해 전원을 공급하지는 않는데다가 전송프로토콜 명령어와 센서데이터가 Roomba 계열과 달라서 드라이버 소프트웨어를 많이 수정해야 사용할 수 있을 겁니다.
저희는 Create 로봇을 국내에서 구입하기 어려워 Roomba 539 로봇청소기를 리퍼비싱 제품으로 비교적 싸게 구입하여 사용했습니다.

2) 센서부
센서부분은 바로 Xbox360 용 Kinect 센서입니다. 최근에 나온 PC 용 Kinect 나 유사한 Depth 카메라 센서도 드라이버 소프트웨어를 수정하면 사용가능할 것 같습니다. Xbox360 용 Kinect 센서는 시중에서 별매로 구입가능한데, 다만 어댑터와 USB 연결단자가 포함된 Y 자 케이블이 포함되어 있어야 합니다.

3) 처리부
이 부분은 일반 12인치 이하의 노트북/넷북이나 리눅스가 구동가능한 CPU 보드를 쓰면 되겠습니다. 12인치 이하인 이유는 로봇 프레임에 들어가려면 그정도 크기가 되어야 하기 때문입니다. 공식적으로는 Asus 1215N 노트북인데, 지금은 단종되었고 AMD 자카테 E-450 CPU 를 사용하는 레노버 ThinkPad Edge E124 나 Asus 1215B 와 같은 넷북이 성능이 비슷할 것 같습니다.

4) 프레임부
로봇 프레임은 직접제작하거나 공식적인 버전과 같은 규격의 합판/아크릴 프레임을 store.iheartengineering.com(미국), www.turtlebot.eu(유럽) 으로부터 구입할 수 있습니다. 저희는 직접 제작해도 제작비가 꽤 나올 것 같아서 store.iheartengineering.com 으로부터 레이저컷 디스크(합판), 프레임 스탠드오프 및 볼트부품 킷을 구입하였습니다. (통관시 관세가 따로 붙어 장난감으로 하여 10% (3만원 정도) 더 물었습니다.T.T)

5) 인터페이스부
구동부, 센서부, 처리부를 연결하려면 인터페이스 보드가 필요합니다. 이것은 위 싸이트들로부터 구입해도 되고 직접 제작할 수도  있습니다. Create 와 Roomba 500 씨리즈의 인터페이스 하드웨어가 다르기 때문에 Create를 구동부로 사용한다면 store.iheartengineering.com 으로부터 파워/센서보드(자이로센서 포함)를 구입하면 됩니다. Roomba 를 구동부로 사용한다면 www.turtlebot.eu 로부터 파워/센서보드(자이로센서 미포함)를 구입하면 될 것입니다. (근데 이 경우에 문제가 있을 수 있습니다. 그 이유는 아래 키넥트연결부분에서 설명드리겠습니다.)

회로가 비교적 간단하여
저희는 직접 제작하였는데 제작 과정은 다음과 같습니다.
먼저 구동부와 처리부를 연결하려면 구동부의 인터페이스 포트(8핀 Mini DIN 타입) 로부터 오는 신호를 노트북의 USB 포트로 전달하기 위한 UART-to-USB 모듈과 5V 레귤레이터 IC 가 필요합니다.


UART-to-USB 모듈은 FT232(FTDI 사)/CP2102(Silicon LAB 사)/PL2303 칩을 사용하면 되는데, 저희는 칩을 사서 직접 납땜하지는 않고 인터보드사
(http://www.interboard.co.kr/goods/view.php?seq=39)에서 나온 USB232 보드(FTDI FT232BM 칩포함) 를 사용하여 만능기판에 납땜하여 사용했습니다. (이런 보드는 시중에 수많이 나와 있으니 아무거나 사서 쓰시면 됩니다)
이런 보드는 보통 VCC(3.3~5V), Rx, Tx, GND 의 4개 핀을 UART단으로 내어 주므로, 이것을 Create/Roomba 쪽으로 연결해야 하는데, RxD, TxD 는 Roomba 등에 직접 연결하면 되고 칩의 VCC 포트에 5V 전원을 공급할 수 있도록 Create/Roomba 로부터 전원을 끌어와야 합니다. 따라서 Create/Roomba 단의 전원(+14-16V) 신호를 조정하여 5V 전압을 안정적으로 내줄 수 있도록 레귤레이터(전압조정기)를 사용해야 합니다. 레귤레이터로는 흔히 값싸고 구하기 쉬운 3핀 78L05 IC 를 사용하면 됩니다.


그리고, 저희는 부가적으로 연결 상태를 조절하고 확인하기 위해 스위치와 LED 를 추가하였습니다. 최종적으로 만든 회로도는 다음과 같습니다.
저항과 LED 는 레귤레이터 출력단에 연결할 수도 있는데 그렇게 하면 저항값은 220~330 옴 정도로 낮추면 됩니다.


Roomba 쪽 커넥터를 연결해야 하는데 8핀 Mini DIN 커넥터는 구하기가 힘들지만 다행히 PS2 케이블로 필요한 핀들을 모두 연결할 수 있습니다. 저희는 고장난 PS2 마우스 케이블을 잘라서 사용했습니다. 자세한 연결방법은 아래 링크와 표/그림을 참고하시기 바랍니다.

참고: http://hobbymechatronics.com/projects/30-robotics/8-diy-roomba-usb-interface-cable

Roomba SCI PinoutSCI pinSCI signal PS2 SignalPS2 pinPS2 pinout
*1
2
3
4
5
6
7
+16V
+16V
RxD
TxD
Dev Detect
GND
GND
Data (white)
n/c
GND (black)
VCC (red)
CLK (brown)

n/c
1
2
3
4
5

6
*


여기서, 실제 PS2 마우스 케이블에 연결된 핀은 1, 3, 4, 5 번이지만 실제 Roomba 쪽의 SCI 신호에 대응하는 선은 1(+16V), 3(RxD), 4(TxD) 밖에 없습니다. 다행히, Device Detect 는 연결할 필요가 없고 GND 는 쉴드와 연결하면 됩니다.

다음은 센서부, 즉 Kinect와 전원 및 노트북을 연결하여야 합니다. 그런데, 데이터 전송 부분은 Kinect 패키지의 Y 케이블을 통해 USB 로 서로 연결이 가능하지만, 어댑터가 연결되는 전원연결선이 문제입니다.
먼저, Kinect 와 연결하는 Y 케이블에서 어댑터와 연결하는 선을 끊고 커넥터를 납땜하여야 합니다.
다음으로, Kinect 는 “USB+12V 전원”을 공급받도록 5핀으로 구성된 독특한 포트를 사용하는데, 12V 전원을 어댑터 대신 독립적으로 Kinect 에 공급하려면 Roomba 로부터 끌어오거나 따로 배터리를 사용해야 합니다.


Roomba 의 내부 배터리는 12개의 C 타입 니켈수소(Ni-MH) 건전지가 직렬로 연결되어 있어 1.2V*12=14.4V 정도 공급할 수 있으므로 12V 레귤레이터를 사용하여 연결하면 Kinect 의 전원으로 사용할 수 있습니다. 위에 언급한 판매 싸이트들에서 제공하는 파워/센서보드에서도 이미 12V 전원을 공급하는 회로와 전원포트가 포함되어 있습니다.( store.iheartengineering.com 에서 제공하는 Create 와 연결하는 파워/센서보드는 MIC29151(1,5A low dropout voltage regulator) , www.turtlebot.eu 에서 판매하는 Roomba 500 씨리즈와 연결하는 파워/센서보드는 LM1084 (5A, low dropout voltage regulator) 사용).
뿐만 아니라, Create/Roomba 와 Kinect 간에 12V 전원을 따로 연결하는 회로는 ROS 홈페이지에서도 제공하고 있습니다. (다음 링크 참고, NTE966(1A, 2V dropout voltage regulator) 사용)
http://www.ros.org/wiki/kinect/Tutorials/Adding%20a%20Kinect%20to%20an%20iRobot%20Create

하지만, 저희는 처음에 저렴하고 구하기 쉬운 78L12 (1A, 2V dropout voltage regulator) 를 사용하여 회로를 구성하여 연결시켰는데, 처음 몇 초간은 Kinect 영상이 잘 출력되다가 갑자기 장치를 인식하지 못하는 현상이 발생하더군요. 파워서플라이로 확인한 결과 Kinect 는 평균적으로 대략 0.3~0.5A 정도를 소모하고 9V 정도에서도 잘 동작하므로 강하전압이 2V 나 되는 78L12 를 사용하더라도 별 문제가 없어야 하는데, Roomba 와 연결하기만 하면 전압강하 및 전류가 불안정해지는 현상이 생기더군요. 결국 원인을 찾지 못하고 따로 AA 타입 니켈수소 배터리 팩(10개) 을 사용해서 Kinect 와 연결하였습니다.



2. 조립 및 연결 테스트

터틀봇 조립과정에 대한 정보는 다음 링크들을 참고하시기 바랍니다. 주로 프레임을 Create/Roomba 에 고정시키고, Kinect 센서를 프레임에 고정시킨 다음 인터페이스 보드와 각 전선들을 연결하면 됩니다.
다만, 구동부를 프레임을 고정시킬 때 너트 없이 좌우측 앞뒤로 총 4개의 볼트를 사용하는데, Roomba 500 시리즈를 사용할 경우 앞쪽 2개의 나사 위치가 맞지 않아 훨썬 위쪽의 나사구멍에 맞추어 드릴로 구멍을 뚫는 작업을 해야 합니다.

http://pr.willowgarage.com/downloads/turtlebot/TurtleBot%20Hardware-2011-06-22.zip
http://makeprojects.com/Project/Assemble-a-TurtleBot/1373/1

각 부품들이 잘 연결되었는지 확인하는 테스트 과정은 Roomba 와 Kinect 를 테스트하는 것으로 가능합니다.

먼저 Roomba 와 노트북과의 연결 테스트는 roombacomm 프로그램을 탑재하여 테스트하면 됩니다. roombacomm 프로그램은 “Hacking Roomba” 책의 저자가 작성한 프로그램으로 Roomba 를 통해 간단한 동작과 센서값을 모니터링하는 기능을 가지고 있습니다.

아래 링크로부터 테스트 프로그램이 포함된 압축파일을 다운로드받습니다. 테스트를 쉽게 하기 위해 미리 빌드된 버전을 다운받습니다.
http://hackingroomba.com/code/roombacomm/

다음과 같은 명령을 실행하여 테스트 프로그램을 실행시킵니다.
$ unzip roombacomm-0.96-built.zip
$ cd roombacomm
$ ./RoombaCommTest.sh

테스트 프로그램의 GUI 화면이 나타나면 해당 플랫폼의 프로토콜(Create 는 SCI, Roomba 는 OI) 을 선택한 후 “Connect” 하고, 전진, 정지, 후진, 좌회전, 우회전 등의 버튼을 눌러 Roomba 를 움직여봅니다.

다음으로, Kinect 센서의 테스트 과정은 아래 링크의 OpenNI 소프트웨어의 테스트 과정과 같습니다.
(네이버 까페 OpenKinect 내의 게시글: OpenNI/NITE & kinect 드라이버 설치 및 테스트
http://cafe.naver.com/ArticleRead.nhn?clubid=21869467&page=1&menuid=30&boardtype=L&articleid=1313&referrerAllArticles=false)

덧말: 로봇을 테스트해 보니 Roomba 뒤쪽 먼지함 부분이 약간 들려 있어 로봇이 이동할 때 끄덕이는 현상이 있어 캐스트라도 달아야 할 것 같습니다. 아니면 Xbot 같은 걸 쓰면 좋은데 ROS 용 드라이버를 작성해야 되겠더군요. 조만간 만들어지길 기대합니다.

다음검색
현재 게시글 추가 기능 열기
  • 북마크
  • 공유하기
  • 신고하기

댓글

댓글 리스트
  • 작성자조원재 작성시간 12.04.18 글 잘 읽었습니다.
    혹시라도 설치중에 궁금한 점이 있을경우 여쭤보겠습니다.
    감사합니다.
  • 작성자서영준 작성시간 12.07.03 좋은 내용 감사합니다. ^^ 요즘 하나씩 해보고 있는데. 많은 도움이 될거 같습니다.
  • 작성자서니 작성시간 12.08.29 키넥트 12v 케이블 만드려고 ros.org에서 열심히 보고 있는데.. 여기에도 있군요 뜨악... 담부턴 항상 여기 먼저 검색해봐야겠습니다. 좋은 정보 감사드립니다.
  • 작성자서니 작성시간 12.08.29 키넥트 12v 케이블 만드려고 ros.org에서 열심히 보고 있는데.. 여기에도 있군요 뜨악... 담부턴 항상 여기 먼저 검색해봐야겠습니다. 좋은 정보 감사드립니다.
  • 작성자41창 작성시간 13.03.25 위에 tutorial대로 실행할려고 하는데, build package을 받고 실행했는데 에러가나서그러는데 다른거 뭐 설치해야하는게 있는가요??

    저는 그냥 다운받아서 바로 설치했거든요..
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼