전공이 로봇이기때문에 기본적으로 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/05/23 - [전자/Raspberry] - 라즈베리에서의 GPS 이용 위 글의 경우에는 ascii 코드 형태로 출력되는 것이라 parsing하는게 쉬웠다. 고가의 GPS들은 IMU와 fusion되어있고 10~100Hz로 데이터를 출력하기때문에 대부분 바이너리 형태의 출력을 지원한다. 한달전쯤에 VN-200이라는 vectornav사의 GPS를 이용한 코드 작성을 의뢰받았다. 이런 때 가장 기본적인 방법은 기존 라이브러리를 이용하는 것이다. 다만 이 클라이언트의 경우 Visual studio 2015를 써서 코딩해달라고 의뢰를 했기때문에 기존 라이브러리를 포팅하기가 불편했다.(vs에는 표준화된 시리얼 라이브러리가 없어서) 어차피 싼 단가에 받은일이고 해서 GPS 설정은 sensor explorer..
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에서 접근하면 잘된다.
- Total
- Today
- Yesterday
- vectornav
- opencv
- NMEA
- 무선
- pi
- Raspberry
- Raspberry Pi
- vn-200
- RaspberryPi
- 통신
- 파이
- WiFi
- GPS
- 알레한드로
- 개발
- 비전
- 라즈베리파이
- 카메라
- C++
- dsp
- 라즈베리 파이
- 영화
- 라즈베리
- G2
- 모듈
- 소나 센서
- ti
- 복구
- RTSP
- 벽돌복구
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |