2007년 과제/RAVI2007.12.31 04:47
관련글
Roomba 플랫폼을 이용한 데모가 매우 인상적이었나봅니다. 과제를 의뢰한 클라이언트 업체에서 데모를 보더니 1월 5일 라스베거스에서 열리는 CES2008에 제품을 출품하겠다고 협조해 달라는 요청이 들어왔고, 덕분에 그다지 행복한 연말을 보낼 순 없었습니다. 일주일만에 다른 로봇 플랫폼으로 갈아타야만 했으니까요.

일반적인 상황이라면 거절하는 것이 옳겠지만 클라이언트 입장에서는 CES2008에서 카펫업체와 협상에서 보다 유리한 포지션을 취하기 위해서는 데모가 필요한 상황이었습니다. 따라서 협조하는 것이 클라이언트에게 많은 도움이 될 것이라 판단하여 무리수를 두기로 하였습니다.
사용자 삽입 이미지

도착한 로봇 ROMI와 uBot


사용자 삽입 이미지

Interface사의 카펫


플랫폼은 uBot과 ROMI과 왔습니다만 ROMI은 여러 부분에서 준비가 안되어 있어 일단 uBot을 유선으로 움직이기로 하였고, 무선은 차후 적용하기로 하였으므로 데모 동영상에서 선이 치렁치렁 있는 것이 눈에 거슬릴 것입니다. 하지만 일단 localization 데모가 핵심으로 일단 패스~.

첫 번째 동영상은 map building을 수행한 후 'ㄷ'자 모양으로 반복 주행하는 모습입니다. 자신의 위치를 RFID 를 이용해서 파악하기 때문에 엔코더 값에 의한 누적 오차가 제거되는 모습을 확인할 수 있습니다. 엔코더 값만으로 주행할 경우 오차가 누적되어 4회 이상이면 카펫을 벗어나지만 RFID를 이용한 navigtion에서는 particle filter를 적용해 에러가 제거되므로 localization이 잘 수행됩니다.데모 끝 부분(1분 15초 이후)에는 현재 로봇을 모니터링 하는 GUI를 볼 수 있습니다. python과 wxPython으로 작성하였고, particle filter의 동작 추이를 그래픽으로 볼 수 있습니다.



두 번째 동영상은 첫 번째 동영상에서 봤던 예제에서 사용자가 임의의 위치로 들어서 놀 경우에서 원래 위치를 찾아가는 예입니다. 들어서 냅다 다른 자리에 놔도 원래 경로를 찾아가 주행을 계속하는 모습을 볼 수 있습니다.





세 번째 동영상은 모니터링 쪽 콘솔 프로그램에서 임의의 위치를 지적하면 로봇이 그쪽으로 움직이는 예입니다. 혼자서 클릭하고 카메라 움직여가며 찍느라 화면이 많이 흔들거리니 이를 감안하시고 봐 주시기 바랍니다. 화면과 카펫의 좌표축은 일치하므로 화면상에 임의의 위치를 클릭하면 로봇이 그 방향을 향해 이동하는 것을 직관적으로 확인할 수 있습니다.
이는 RFID를 통해 현재 위치를 지속적으로 추정이 가능하기 때문에 볼 수 있는 기능입니다.



자, 이로서 RAVI 과제는 3개월만에 끝났습니다. RFID가 뭔지, particle filter가 뭔지도 모르는 상태에서 시작해서 3개월만에 클라이언트가 만족할 만한 데모를 만들어 냈다는 점에 스스로 자부심을 가집니다. python의 강력한 확장력, wxPython의 편리한 인터페이스, 그리고 그 동안 꾸준히 준비해 두었던 여러 가지 하드웨어 컴포넌트들이 맞물리면서 빠른 시간안에 해 낼 수 있었던 것 같습니다. 2007년 마지막 프로젝트는 이렇게 마무리하고, 이제 withrobot Lab.맴버들은 2008년에 다시 뜁니다. ^^;
신고
Posted by getcome
2007년 과제/RAVI2007.12.18 07:49
Roomba에 사진처럼 RFID  안테나를 부착했습니다. 청소 솔 중앙에 부착하여 청소 기능이 제한 되지만 당장 청소기능을 사용할 것은 아니기에 일단 계산하기 편하도록 바퀴 중앙에 배치하였습니다.
사용자 삽입 이미지

Roomba 바닥에 RFID 안테나 부착


로봇을 아무데나 위치시키고 움직이면 RFID 에 의해 자신의 위치를 파악하고, 사용자가 지정한 위치로 이동한다.




이 때 시뮬레이터에서는 particle filter의 동작이 그래픽으로 출력된다. python의 효율성 덕분에 촉박한 일정임에도 불구하도 어느 정도 결과를 낼 수 있었다.

신고
Posted by getcome
2007년 과제/RAVI2007.12.13 18:36
python으로 roomba를 제어하는 예입니다. 시뮬레이터를 python으로 작성했기 때문에 여러 가지 편의성을 생각해서 python으로 메인 제어기를 구현하고 있습니다.

바닥에 붙어있는 하얀색은 RFID이며, 시뮬레이션과는 조금 다르게 테스트의 용이성을 위해 조밀하게 붙여서 테스트를 시작하고 있습니다.

저속으로 움직이면 직진성이 조금 떨어지지만, 그래도 쓸만합니다.
몇 일 더 작업하면 완벽하게 SLAM이 구현될 수 있을 것 같은데, 연말이라서 시간이 영 나질 않네요. 그래도 빨리 끝내야겠지요? ^^;
신고
Posted by getcome
2007년 과제/RAVI2007.10.29 15:31
2D 바코드에 이어 RFID를 이용하여 localization을 해결해야 하는 과제가 시작되었습니다. 기존에 국내외 많은 업체와 연구소에서 수행했지만 실용화 단계 전에 멈춘 것으로 알고 있습니다. 특허문제도 있고, 기타 실제적인 비지니스 모델로 구축하기까지 해결해야 할 문제가 무척 많습니다.  withrobot Lab. 내부에서는 과제 수행에 대한 반대 의견이 많아, 시뮬레이션 레벨까지만 수행하는 것을 project 목표로 삼기로 했습니다. 물론 client에서는 하드웨어까지 만들어 달라고 하지만 일단 11월 중순까지 일단 시뮬레이션 결과를 보고 결정할 생각입니다. 실제로 이것이 제품화가 될 수 있을런지는 의문입니다. 기술적으로는 어떻게 해결할 수 있겠지만 수 많은 특허 장벽을 어떻게 해쳐나가려고 하는지...

프로젝트 이름은 RAVI로 지었습니다. RFID Navigation의 약자입니다. RFID tag는 50cm 간격으로 배치되며 로봇은 사전에 tag에 대한 정보를 알고 있지 않습니다. 따라서 이동 로봇은 움직이면서 tag를 스캔하여 맵을 생성함과 동시에 네비게이션을 수행해야 합니다. 전형적인 SLAM 문제이지요.

적용 알고리즘은 여러 가지가 있을 수 있습니다. 전통적인 방법은 Kalman filter를 사용하여 sensor fusion을 하는 방법이 있겠죠. 그다지 재미가 없어보입니다. framework이 잘 맞긴 하지만 수 많은 연구자들이 수행해고, 설사 결과가 잘 나온다쳐도 다른 용도로 써먹기가 그렇습니다. 두 번째로 고려해 볼만한 방법은 particle filter 입니다. 흠... 상대적으로 속도도 빠르고 non-linear dynamics를 가지는 시스템에도 잘 적용되기 때문에 이번 기회에 이걸 만들어 놓으면 꽤 써먹을 곳이 있을 듯 싶습니다.

따라서 particle filter를 사용하여 50cm 간격의 RFID로 부터 정보를 얻어 map building과 navigation을 수행하는 시뮬레이션을 만드는 것이 목표입니다. 일차적으로 particle filter 구현이 끝났으며, 현재 이 코드를 확장하여 SLAM을 수행하는 단계를 적용 중입니다. 구현은 python에서 하고 있으며, 최종 단계에서는 VC로 porting을 하게 될 수도 있고, 아니면 python용 OPenGL과 붙여서 3D graphic simulation을 수행할 수도 있습니다.

사용자 삽입 이미지

RAVI simulation 구성 중


파란색 실선은 실제 로봇의 움직임이며, 빨간색 점이 로봇에서 추정된 위치 정보 입니다. 녹색 점은 RFID tag 위치구요 검은색 점들은 particle로 위 예제는 6m x 8m 을 움직일 때 최악의 경우에 해당합니다. 주행 중에는 거의 대부분 RFID tag 스캔에 실표하고, turn을 할 때 정도 가끔 scan이 되는 정도인데 그럼에도 불구하고 현재 위치가 쓸만한 레벨에서 잘 추종되는 것을 확인할 수 있습니다.

동영상으로 감상하실 수도 있습니다. ^^; 시뮬레이터가 돌면서 캡쳐한 것이라 초기에는 조금 끊겼네요.



신고
Posted by getcome