Python2008.04.28 08:28
python으로 FFT 하는 방법을 살펴보겠습니다.
numpy에서 FFT함수를 제공하고, pylab으로 그래프를 그리면 편리하죠.
 
사용자 삽입 이미지



신고
Posted by getcome
Python/Pygame2008.03.18 06:03
가속도 센서의 출력에 밴드 폭이 좁은 low-pass 필터를 적용하면 기울기를 측정할 수 있습니다. 이를 이용해서 다양한 게임의 인터페이스로 접목시켜 볼 생각입니다.
사용자 삽입 이미지
아래 소개하는 동영상은 Apple의 iPhone에 내장되어 있는 가속도 센서를 이용하여 게임의 인터페이스로 활용하는 예입니다. 2008년 봄학기 수업 시간에 이와 비슷한 류의 게임을 제작하게 될 것 같습니다.
신고
Posted by getcome
Python/Pygame2008.03.02 11:56
지난 학기에 이어 2008년에도 4학년 전공필수과목인 게임프로그래밍 강의 의뢰가 들어왔습니다. 지난 번에는 Panda3D를 이용하여 3D graphics쪽을 중점두어 강의를 했는데 나름대로 반응이 좋고, 일부 학생들은 졸업 작품은 수업 내용을 확장하여 만들어서 의미있는 시간이었습니다. 하지만 절대적으로 참고할만한 자료가 적고, 기껏해야 panda3d.org 홈페이지에 있는 tutorial이 전부인 상황에서 이번 학기도 panda3d로 강의하는 편이 좋을지 고민을 시작하였습니다. 추상화 레벨이 높다보니 그럴싸한 게임은 금방 만들어내지만 한 학기 수업을 받고나도 3D graphics에 대해 명확한 감을 가지지 못한다는 반대급부가 있더군요. 지난 번은 DirectX를 사용해야만 하는 제한 조건이 있지만 올해는 그것이 아니니 좀 더 선택의 폭은 넓어진 셈이죠.

3월 1일 토요일 하루 종일 이곳저곳 홈페이지를 뒤지고 다니며 고민하다가 2008년도 봄학기는 python + pygame 조합으로 진행해 보기로 결정하였습니다. Panda3D에 비하면 3D쪽은 아무래도 불편하겠지만 좀 더 low-level 이야기를 많이 할 수 있지 않을까 싶어 선택했습니다. 다시 새로운 강의 노트를 만들자니 귀찮고 그냥 작년에 했던 대로 다시 할까하는 고민도 들지만 힘내서 좋은 강의 자료 만들어야죠. ^^; 특히 이번 학기에는 가속도 센서를 이용한 모션 인식 기능을 활용한 게임을 중점적으로 밀어볼 생각입니다. 첫 시간에 학생들이 반대하면 어쩔 수 없겠지만 대부분 호응이 좋을 것으로 기대하고 있습니다.

사용자 삽입 이미지
교재는 Beginning Game Development with Python and Pygame으로 선정했습니다. 400페이지가 안되는 간략한 책이지만 한 한기간 핵심 내용을 전달하기에는 큰 무리는 없을 것 같습니다. 아무래도 3D쪽은 이 책으로 부족하기에 Real-time Rendering을 부교재로 선정하고 진행하기로 했죠.

여러가지 짤막한 코드들은 이곳 블로그에도 올려두겠습니다. 그리고 위드로봇의 가속도 센서와 자이로 센서를 이용한 게임들은 동영상으로 만나볼 수 있을 것 같네요.

한 학기간 다시 python과 동거해야 할 것 같은데, 노트북은 밀고 다시 설치할 것인지 그냥 쓸 것인지 고민 중입니다.
신고
Posted by getcome
Python2008.01.24 01:01
공개용 영상 처리 라이브러리 OpenCV는 발표 초기에는 그다지 관심을 끌지 못하더니 2000년대 중반에 들어서는 많은 곳에서 관심을 가지는 듯 하다. Withrobot Lab에서도 몇 번 myVision을 지원하는 방법을 고민했었고, 실제로 내부적으로는 OpenCV와 연동해서 사용하기도 했었다.

오늘은 OpenCV 라이브러리를 Visual C가 아닌 Python에서 사용하는 방법을 정리해 두고자한다. 다행히 OpenCV는 python에서 바로 사용할 수 있도록 준비가 완벽하게 되어있다. Visual C가 아닌 python으로 작업하면 알고리즘 본연에 좀 더 집중해서 빠르게 결과를 확인할 수 있다.

자, 우선 python 2.5는 설치되어있다고 가정한다. 만일 설치가 안되어 있다면 http://www.python.org/download/ 에서 해당 파일을 받아 설치한다.

OpenCV는 이곳에서 내려 받는다. 기본 설치 폴더는 Program Files\OpenCV 가 된다.

그다음 아래의 python OpenCV 모듈을 내려받아 압축을 풀면 OpenCV 폴더가 나온다. 이 폴더를 python의 Lib\site-packages 밑에 복사한다.

이것으로 설치는 완료되었다. 이제 OpenCV\Samples\Python 폴더에 있는 코드를 실행시켜본다. 얼굴 찾는 예제인 facedetect.py 를 실행해 보자. 영상처리 연구자들의 연인 lena에서 얼굴 위치를 찾아 붉은색으로 표시한다.


사용자 삽입 이미지

신고
Posted by getcome
Python2008.01.18 12:32
두 번째 예제는 간단한 텍스트를 인쇄하는 예이다.
실행하면 상단 중앙에 TEST 문자열을 출력한다.
작업 중에는 지정한 이름(Test doc)가 프린터 작업 목록에 출력된다.
프린터는 windows에서 디폴트로 지정한 프린터로 출력하도록 하였다.

#!/usr/bin/env python
# -*- coding: 949 -*-
"""win32print 모듈 테스트 예제: 텍스트 출력하기"""

import win32ui
import win32print
import win32con

INCH = 1440

hDC = win32ui.CreateDC ()
hDC.CreatePrinterDC (win32print.GetDefaultPrinter ())
hDC.StartDoc ("Test doc")   # 프린트 작업 문서 이름에 출력
hDC.StartPage ()
hDC.SetMapMode (win32con.MM_TWIPS)
hDC.DrawText ("TEST", (0, INCH * -1, INCH * 8, INCH * -2), win32con.DT_CENTER)
hDC.EndPage ()
hDC.EndDoc ()
신고
Posted by getcome
Python2008.01.18 11:44
파이썬으로 프린터를 다루는 방법을 하나씩 소개한다.
여러 가지 방법론이 있겠지만, 우선 win32print 모듈을 이용하는 방법으로 접근한다.

첫 번째 예제는 현재 컴퓨터에 연결되어 있는 프린터의 목록을 얻는 방법이다.

#!/usr/bin/env python
# -*- coding: 949 -*-
"""win32print 모듈 테스트 예제: 연결된 프린터 목록 얻기"""

import win32print

Printers=win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL, None, 2)
for Printer in Printers:
    print Printer['pPrinterName']


신고
Posted by getcome
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
Python2007.12.14 07:06
python으로 프로그램을 작성할 때 통합 개발 환경의 필요성은 그다지 높지 않은 듯 하다. python 설치시 기본으로 깔리는 IDE를 사용하거나 각자 사용하고 있는 에디터에 연동하여 작성하는 편인데...

예전에 한 번 홈페이지에서 발견한 SPE(Stain's Python Editor의 약자)를 사용해 보기로 결심했다. 점점 코딩 양이 늘어나고 GUI를 Tk에서 wxPython으로 바뀐 것도 결심하는데 큰 이유이기도 하다.


SPE 파일이 있는 곳: http://pythonide.blogspot.com/2007/02/how-to-download-latest-spe-from_26.html
조금은 귀찮지만 subversion으로 소스를 내려받아야 한다. 다행이 TortoiseSVN을 사용하고 있어 CheckOut을 한다. checkout이 익숙하지 않은 분들은 위 싸이트의 맨 끝에 간단히 소개되어 있으니 이를 보고 따라하면 된다.
사용자 삽입 이미지

SPE 체크 아웃 모습



주의할 점은 폴더 이름은 항상 _spe 이어야 한다는 점이다.
이 폴더에서 도스창을 열고  python SPE.py를 실행하면 SPE가 실행된다.
사용자 삽입 이미지

사용자 삽입 이미지

SPE Screenshot


디버거가 내장되어 있어 편리하게 디버깅이 가능하고, pyDoc, UML을 바로 볼 수 있어 편리하다.
사용자 삽입 이미지
사용자 삽입 이미지

winpdb 덕분에 GUI기반 디버깅이 가능하다.



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

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

저속으로 움직이면 직진성이 조금 떨어지지만, 그래도 쓸만합니다.
몇 일 더 작업하면 완벽하게 SLAM이 구현될 수 있을 것 같은데, 연말이라서 시간이 영 나질 않네요. 그래도 빨리 끝내야겠지요? ^^;
신고
Posted by getcome

티스토리 툴바