전공이 로봇이기때문에 기본적으로 MCU를 많이 써왔다. 하지만 아직도 PC환경을 고집하거나 AVR/ARDUINO 수준에 머무르는 개발자/일반인들이 많아 간단한 소개글을 써보려한다. 사실 많은 사람들이 MCU가 뭔지도 모르기때문에 그에 대한 설명을 간단히 해보겠다. 기본적으로 MCU는 Micro Controller Uint의 약자로 간단히 말하자면 single chip으로 된 작은 컴퓨터중 하나다. 여러분도 잘 아는 라즈베리파이나 비글본보드가 Single Chip Micro Computer에 해당한다. 기본적으로 PC대신 Single Chip Micro Computer를 쓰는 이유는 크게 3~4가지이다. 소형 경량화 : 가장 작은 보드(PC) 사이즈인 ITX조차 MCU와 비교하자면 수배~수십배 정도 크다...
2017/06/01 - [전자/Vision] - openCV를 이용한 카메라 캘리브레이션 위글에서 undistort를 수행해보면 알겠지만 이 함수는 무진장 느리다. 코드 수행 시간을 측정해보니 0.2초정도이므로 5fps이상의 영상에서는 딜레이가 생길 수 있다. 이래서야 나처럼 realtime으로 처리해야 하는 사람은 써먹을 수 없다. undistort는 단순히 initUndistortRectifyMap() 와 remap() 을 사용자가 쓰기편하게 묶어놓은 함수이다. 첫번째 함수에서 camera matrix와 distort coeff들로 transformation matrix를 구한 뒤 두번째 함수에서 transformation matrix를 이용해 변환한다. 보정했을때와 카메라의 imagesize가 다르..
어찌된게 opencv 예제들은 반쪽짜리가 많다. 예를 들면 camera matrix와 distortion coeff을 저장하는 것은 튜토리얼이나 예제에 많은데 정작 그 matrix들을 어떻게 불러오는지에 대해서는 설명이 거의 없다. 그래서 정말 간단한 코드이지만 공유해보고자 한다. 우선 카메라를 캘리브레이션 하려면 체크보드 이미지를 출력하여야 한다. 이 이미지를 다운 받아서 출력하던지 적당한 이미지로 직접 만들어도 된다. 이 이미지는 가로 9 세로 6의 crosspoint를 가지는 체크보드이다. 아아주 친절한 튜토리얼이 http://docs.opencv.org/2.4/doc/tutorials/calib3d/camera_calibration/camera_calibration.html 위 사이트에 있으니 참..
인터넷에서 RTSP 프로토콜을 OpenCV로 받으면 에러가 난다거나 문제가 있다고 하는데 나의 경우에는 아무런 문제 없었다. 예상외로 제대로 코드를 실어놓은 블로그가 없어 직접 올린다. #include #include #include int main(int ac, char *av[]) { cv::VideoCapture capture("rtsp://admin:@192.168.11.152/user=admin&password=&channel=1&stream=1.sdp"); if (!capture.isOpened()) { //Error } cv::namedWindow("TEST", CV_WINDOW_AUTOSIZE); cv::Mat frame; while(1) { if (!capture.read(frame)) ..
IoT가 부각되면서 mqtt를 이용하는 센서/어플리케이션이 늘어나고 있다. mqtt는 TCP/IP를 기반으로 하고 있는 프로토콜로 설정 및 사용이 정말 간단하다. TCP/IP 통신을 짤 때마다 프로토콜 설계가 꽤나 귀찮았는데 mqtt를 사용하면 굉장히 편해진다. 사실 1:1 통신이라면 프로토콜 설계 없이 그냥 TCP/IP를 써서 메세지를 주고 받아도 잘 될 것이다. mqtt는 기본적으로 N:N 통신을 할 때 유용한 프로토콜이다. (예를 들면 다양한 센서로부터 값을 수신하여 업로드해야 할때) 더불어 Topic이라는게 존재하여 내가 원하지 않는 데이터는 필터링 할 수 있다. 위 그림에서 알 수 있듯이 mqtt는 기본적으로 서버(브로커)와 publisher, subscriber가 필요하다. 서버는 내가 만들어..
GPS를 이용해본 사람이라면 다들 알고 있겠지만 대다수의 GPS가 UART를 이용하고 NMEA라는 통신 프로토콜을 사용한다. 대부분의 GPS 수신기가 같은 통신 프로토콜을 사용하기때문에 GPS 프로그램은 한번 짜두면 두고두고 쓸 수 있다. 사실 가장 쉬운 방법은 gpgga로 시작하는 문자열을 따서 ','를 기준자로 자른다음에 위도,경도, 고도를 뽑아내면 된다. GPGGA Global Positioning System Fix Data라고 한다. 여기에서 주로 알 수 있는 것은 시간, 위도, 경도, 고도 등이다. 다음은 위키에서 발췌한 내용인데 이를 참고해서 parsing 하면 쉽게 구할 수 있다. $GPGGA,114455.532,3735.0079,N,12701.6446,E,1,03,7.9,48.8,M,19..
TCP통신하는 앱을 개발해서 로봇을 조작하는데 TCP 통신의 특성상 AsyncTask를 이용하게 되었다. Mainactivity가 아닌 클래스에서 textview를 이용하는 방법(ui에 접근하는방법)이 꽤 많은데 이 중 아무것도 되지않았다 . 이상해서 코드를 찬찬히 살펴보니 통신이 이루어지고 있는 Background에서 textview에 접근하고 있었다. 당연하게도 publishprogress 한 뒤 onprogressupdate에서 접근하면 잘된다.
로봇에 사용될 거리센서가 초음파 센서로 정해졌다. 초음파 센서는 적외선을 사용하는 타입에 비해 직진성은 떨어지지만 작동 범위가 넓고 실외에서도 잘 작동한다는 장점을 가진다. 1~2천원대의 초음파 센서도 있지만 다수의 센서를 사용할때 배선이 많아진다. 다수의 센서를 동시에 이용할때는 1:N 통신이 가능한 485나 i2c가 사용된다. 485나 232와같은 비동기 통신과 spi/i2c와 같은 동기 통신의 차이는 clock을 내보내는 선이 있느냐 없느냐이다. 비동기 통신의 경우 clk선이 없기때문에 배선은 하나 줄어들지만 통신속도(baud)를 변경할 때 master와 slave 둘다 설정을 변경해줘야한다. 반명 동기 통신의 경우 배선이 하나 늘어나지만 통신속도의 설정은 master쪽에서만 해주면된다. SRF-0..
당연한 이야기이지만 라즈베리에는 타이머 인터럽트가 존재하지 않는다. 물론 타이머 인터럽트를 복잡하게 짜는 건 여러가지 방법이 있으나 그 중 쉬운 예를 두가지 들어보겠다. 가장 쉬운건 다들 알겠지만 delay나 sleep함수를 쓰는것이다. while(1) { digitalWrite(LED1,1); digitalWrite(LED2,0); delay(1); digitalWrite(LED1,0); digitalWrite(LED2,1); delay(1); } 간단하게 1ms동안 led를 켰다가 1ms동안 led를 켜면서 500Hz로 동작하는 코드이다. 이런 코드는 구현하기는 정말 간단하지만 제어주기가 정확하지 않다는 단점이 있다. 실제로 위코드는 led 한개를 켜고 끄는 시간이 2ms에 더해지게 된다. 이를 방지..
최근에 의뢰가 들어와서 라즈베리파이 제로를 써서 작업중이다. 한국에는 의외로 제대로 된 소스가 없어서 혹시 도움이 될까 해서 몇가지 정리해서 올릴 예정이다. 우선 라즈베리파이 제로가 생소한 사람들을 위해 간단히 소개를 해보겠다. 라즈베리 파이 제로는 크기가 65mm x 30mm x 5mm로 라즈베리 시리즈 중 크기가 가장 작다. 물론 이를 위해 많은 것을 희생해야 했다. 1GHz, Single-core CPU512MB RAMMini-HDMI portMicro-USB OTG portMicro-USB powerHAT-compatible 40-pin headerComposite video and reset headersCSI camera connector (v1.3 only)제로는 2B보다 늦게 나왔음에도 싱..
- Total
- Today
- Yesterday
- 무선
- G2
- vn-200
- opencv
- 파이
- 소나 센서
- C++
- 개발
- GPS
- 모듈
- 통신
- 비전
- 영화
- dsp
- vectornav
- RaspberryPi
- Raspberry
- 라즈베리
- 복구
- 카메라
- WiFi
- pi
- 라즈베리 파이
- RTSP
- 라즈베리파이
- 벽돌복구
- 알레한드로
- NMEA
- Raspberry Pi
- ti
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |