본문 바로가기

전체 글

OpenCV Camera Calibration 프로그램 카메라 모델과 보정, 호모그래피 변환 등을 공부하기 위해 카메라 캘리브레이션 프로그램을 만들어 보았습니다. Learning OpenCV 책에 나온 카메라 캘리브레이션 예제를 조금 수정하여 만든 프로그램이다보니 사용자 편의를 고려하지 않고 만들었습니다. 그러기에 실제 범용으로 캘리브레이션에 사용하기는 부적합해 보입니다. 인터넷을 검색해 보면 쓰기 편리한 카메라 캘리브레이션 유틸리티들이 많기때문에, 실제 카메라 캘리브레이션에는 이러한 프로그램을 다운받아 사용하는것이 편할 것입니다. 본 프로그램의 소스코드에 대하여 간략히 설명해보겠습니다. 캘리브레이션 클래스 코드는 CamCalib.h/cpp 파일에 구현되어 있습니다. 캘리브레이션 클래스를 CalibrationDlg.cpp 파일에서 객체를 만들어 사용하는데, .. 더보기
GPS 수신 프로그램(NMEA 파서, WGS84-TM 좌표변환) 차량이나 로봇이 실외에서 주행할 때 위치를 파악하는 가장 기본적인 센서가 GPS 수신기가 됩니다. GPS의 위치 정밀도 만으로는 차량의 정밀한 위치 파악과 주행을 보장하기는 어렵지만, 그래도 10m정도 오차 범위의 대략적인 위치를 알 수 있기때문에 로봇의 위치인식 센서로 종종 사용되곤 합니다. 여기서는 GPS 수신기로부터 문자열을 읽어 NMEA 파서로 필요한 데이터를 추출하고, 위도, 경도, 고도 데이터로부터 TM(Transverse Mercator) 좌표로 변환하여 지도상의 위치로 표시하는 과정을 수행하는 예제 프로그램에 대하여 소개합니다. GPS 수신기로는 (주)아센코리아의 ASCEN GPS680 모델을 사용하였습니다. 이 모델은 PC와 USB로 연결되는데, 가상의 시리얼(COM) 포트로 통신이 가능.. 더보기
ODE를 사용한 로보틱스 시뮬레이터 예제 6: 카메라 ODE를 사용한 로보틱스 시뮬레이터 예제의 연속편입니다. 본 예제는 차동바퀴형 이동 로봇에 카메라 센서를 부착하여 이미지를 얻는 센서 프로그램 인데, 지금까지의 예제와 달리 ODE의 기능을 이용하여 만들어졌다기보다 OpenGL의 기능을 이용하여 만들어졌습니다. 하지만 시뮬레이터에서 카메라 입력을 시뮬레이션 하는 경우가 많기때문에 구현하여 보았습니다. 윈도우의 좌측 상단 [Control] 버튼을 누르면 바퀴의 속도를 설정하는 다이얼로그가 실행됩니다. 여기서 바퀴의 속도를 조절함으로서 로봇을 이동시킬 수 있습니다. 로봇이 이동하면서 들어오는 카메라 입력 영상을 확인하기 바랍니다. 다음 예제 프로젝트를 다운받아 컴파일 하고 실행해 보시기 바랍니다. 예제 프로젝트는 Visual C++ 2008로 작성되었고, W.. 더보기
ODE를 사용한 로보틱스 시뮬레이터 예제 5: FT, Gyro, Accel 센서 ODE를 사용한 로보틱스 시뮬레이터 예제의 연속편입니다. 본 예제는 2Link 로봇에 Force, Torque, Gyro, 가속도 센서를 부착하여 End Effector에 작용하는 force, torque와 각속도, 가속도를 측정할수 있는 센서 프로그램 입니다. 윈도우의 좌측 상단 [Control] 버튼을 누르면 매니퓰레이터의 조인트 회전각을 설정하는 다이얼로그가 실행됩니다. 여기서 조인트의 회전각을 조절함으로서 매니퓰레이터의 자세를 바꿀 수 있습니다. 그리고 매니퓰레이터 종단에 붙어있는 자이로 센서와 가속도 센서에서 측정되는 각속도와 가속도 값을 살펴보시기 바랍니다. * Force/Torque 센서는 다른 센서들과 달리 두 링크를 연결하는 사이에 붙어야 하며, 두 링크 사이에서 작용하는 힘과 토크를 측.. 더보기
ODE를 사용한 로보틱스 시뮬레이터 예제 4: 거리 및 충돌 센서 ODE를 사용한 로보틱스 시뮬레이터 예제의 연속편입니다. 본 예제는 이전 글(ODE를 사용한 로보틱스 시뮬레이터 예제 2: 모바일 로봇 에서 만든 차동바퀴형 이동로봇에 위치, 거리, 각도 센서를 부착하여 이동로봇의 현재 위치와 다른 물체와의 거리, 바퀴의 각도를 측정할수 있는 센서 프로그램 입니다. 윈도우의 좌측 상단 [Control] 버튼을 누르면 바퀴의 속도를 설정하는 다이얼로그가 실행됩니다. 여기서 바퀴의 속도를 조절함으로서 로봇을 이동시킬 수 있습니다. 로봇이 이동하면서 로봇의 위치, 센서에서 측정한 장애물간의 거리가 바뀌는 것을 볼 수 있습니다. 다음 예제 프로젝트를 다운받아 컴파일 하고 실행해 보시기 바랍니다. 예제 프로젝트는 Visual C++ 2008로 작성되었고, Windows XP, 7.. 더보기
ODE를 사용한 로보틱스 시뮬레이터 예제 3: 휴머노이드 로봇 ODE를 사용한 로보틱스 시뮬레이터 예제의 연속편입니다. 본 예제는 캡슐, 구 형태의 총 28개의 joint(상체 14개, 하체 14개)와 14개의 link를 가진 humanoid로봇을 생성하고 p제어기를 통해 각 조인트의 각도를 제어할 수 있는 프로그램입니다. 윈도우의 좌측 상단 [Control] 버튼을 누르면 각 조인트의 회전각을 설정하는 다이얼로그가 실행됩니다. 여기서 각 조인트의 회전각을 조절함으로서 로봇의 형상을 바꿀 수 있습니다. 다음 예제 프로젝트를 다운받아 컴파일 하고 실행해 보시기 바랍니다. 예제 프로젝트는 Visual C++ 2008로 작성되었고, Windows XP, 7에서 테스트 되었습니다. ODE 라이브러리는 예제 프로젝트에 포함되어 있기때문에 따로 받을 필요는 없습니다. 다음 문.. 더보기
ODE를 사용한 로보틱스 시뮬레이터 예제 2: 모바일 로봇 ODE를 사용한 로보틱스 시뮬레이터 예제의 연속편입니다. 본 예제는 박스, 구, 실린더 형태의 물체를 이용하여 3D 공간상에 2개의 wheel과 1개의 caster를 가진 이동형 로봇을 생성하고 wheel의 속도를 조절함으로써 로봇을 이동하는 시뮬레이션을 할 수있는 프로그램입니다. 윈도우의 좌측 상단 [Control] 버튼을 누르면 바퀴의 속도를 설정하는 다이얼로그가 실행됩니다. 여기서 바퀴의 속도를 조절함으로서 로봇을 이동시킬 수 있습니다. 다음 예제 프로젝트를 다운받아 컴파일 하고 실행해 보시기 바랍니다. 예제 프로젝트는 Visual C++ 2008로 작성되었고, Windows XP, 7에서 테스트 되었습니다. 다음 문서는 ODE wrapper class의 API 메뉴얼입니다. 더보기
ODE를 사용한 로보틱스 시뮬레이터 예제 1: 박스 떨어뜨리기 ODE(Open Dynamics Engine)는 관절로 연결된 강체 동역학을 시뮬레이션하는 공개 라이브러리입니다. 따라서 차량이나 가상 현실 환경에서 움직이는 물체들을 시뮬레이션 하는데 사용할 수 있습니다. ODE는 2006년까지 Russell Smith에 의해 개발되다가 이후 몇명의 공헌자들이 개발에 참여하였으나 2009년도에 마지막으로 0.11.1 버젼까지 나오고 더이상 업데이트가 되지않고 있습니다. ODE 홈페이지: http://www.ode.org/ ODE 다운로드(소스포지): http://sourceforge.net/projects/opende/files/ODE/ 여기서는 ODE를 로봇 시뮬레이션에 간단히 활용할 수 있도록 ODE wrapping class를 만들고, 이에 대한 예제를 만들어 보.. 더보기