CMAKE 문법

소스파일=재료 make파일=레시피 실행파일=요리 컴파일=재료를 레시피에 따라 요리까지 디버깅=똑같이 하는데 레시피에 사용할 수 있다 없다를 갈라준다. SET()-변수 정의 CMake 빌드 스크립트를 작성할 때도 Makefile을 비롯한 여타 스크립트와 마찬가지로 상단에는 설정 변수를 정의하는 명령들을 몰아놓고, 하단에서는 이 설정에 따라 빌드 절차를 결정하도록 구성한다. SET( <변수명> <값> ) <값>에 공백이 포함되어 있는 경우, 큰따옴표"ㅇㅇㅇ"로 묶어준다. 목록(List)변수 정의 SET(<목록_변수명><항목><항목><항목>...) <항목>들은 공백문자로 구분합니다. <항목>값에 공백이 포함되어 있는 경우, 역시 큰따옴표로 묶어준다. 목록 변수의 항목들은 기본적으로 세미콜론(;)으로 구분 된다. 변수 참조 변수를 참조하고자 할 때는 다음과 같이 변수명 앞에$를 붙이거나, ${....}로 묶어주면 된다. 많이 쓰이는  커맨드 들 add_definitions( -DFOO -DBAR): 이 디렉토리부터 모든 하위디렉토리에 컴파일러에 플래그를 꽂아준다. 전처리기 플래그 추가에 사용하길 권장함. include_directories():  컴파일러가 인클루드 파일  찾을 경로(들) 추가   link_directories(): 링커가 라이브러리 찾을 경로(들) 추가. 그러나 드물게 쓰인다(왜?). find_package(), find_library() 는 절대경로를 리턴해준다. 이 절대경로들을 target_link_libraries()에 직접 넘기면 된다. find_package(): 외부 프로젝트로부터 세팅을 찾아서 가져온다. 기본적 문법은 find_package(이름)이고 이러면 CMAKE_MODUL...

용어정리

아키텍처[Architecture] 컴퓨터 아키텍처라고도 한다. 처리단위인 어장, 기억방법인 어드레스방식, 데이터의 형식 등 기본적 요소의 조합으로 컴퓨터의 용도, 처리속도 등이 크게 달라진다.  바이너리[Binary] <- 2진수 본래는 2진수로 표시되는 데이터의 의미지만, 일반적으로 바이너리라고 한다. 텍스트 동의 문자로서의 의미를 가진 데이터에 대하여 프로그램의 동작을 결정하는것, 또는 일정한 포맷에 따라 기록되는 데이터를 말한다. 라이브러리[Library] 이용자가 필요에 따라서 사용하는 표준화된 프로그램 및 서브루틴의 모임을 만한다. 제공형태응 유저 프로그램의 속에서 서브루틴으로서 사용되는 서브모듈형과 일련의 처리가 라이브러리의 속에서 완결하는 패킷형으로 크게 나누어지는데 이것을 달리 프로그램 라이브러리라고도 한다. 패킷[Packet] <-데이터를나눠서 넘겨주는것 패키지(Package)와 버킷(Bucket)의 합성어. 우체국에서 화물을 적당한 덩어리로 나눠 행선지를 표시하는 꼬리표를 붙이는것에 접목하여 표현. 즉, 데이터 전송에서 송신측과 수신측에 의하여 하나의 단위로 취급되어 전송되는 집합체를 의미한다.  전자우편이나 HTML, GIF 등 어떤 종류의 파일에도 적용할 수가 있다. 이때 분할된 각각의 패킷에는 별도의 번호가 붙여지고 목적지의 인터넷 주소가 기록되며, 에러 체크 데이터도 포함된다. 파일을 분할해서 전송하지만 수신하는 곳에서는 원래의 파일로 다시 재조립된다. 헤더와 데이터,테레일러로 이루어져 있는데, 헤더에는 데이터가 전달될 주소와 순서 등이 기록되고, 테레일러에는 에러 정보가 기록된다. 보통 2계층으로 내려가기 전까지 3~4계층의 데이터 단위는 패킷이라고 하고, 1~2계층의 데이터 단위는 프레임이라고 한다. 일반적으로 128바이트가 표준이지만 32,64,256바이트와 옥텟 등 편의에 따라 크기를 바꿀 수 있다. 내부에 상대방의 주소를 갖고 있기 때문에 신뢰도가 높으며, 에러를 체크하...

Gyro sensor

[드론] 자이로 센서는 가속도를 측정하는 가속도 센서와 달리 각속도를 측정한다 . 자이로스코프( Gyroscope )가 각속도를 측정하는 기구인데  MEMS  기술을 적용한 칩 형태의 자이로센서도 각속도를 측정한다. 각속도는 시간당 회전하는 각도 를 의미한다. 자이로 센서의 측정원리는 다음과 같다. 예를 들어, 수평한 상태(정지 상태)에서 각속도도 0도/ sec 이다. 물체가 10초 동안 움직이는 동안 50도만큼 기울어졌다면, 10초 동안의 평균 각속도는 5도/ sec 다. 정지 상태에서 기울어진 각도 50도를 유지하였다면 각속도가 0도/ sec 가 된다. 이러한 과정을 거치면서 각속도는 0 → 5 → 0으로 바뀌었고, 각도는 0도에서 증가해서 50도가 되었다. 각속도에서 각도를 구하려면 전체 시간에 대해 적분을 해야 한다. 자이로 센서는 이와 같이 각속도를 측정하므로 전체 시간동안 이 각속도를 적분하면 기울어진 각도를 계산할 수 있다. 그런데 자이로 센서는 온도의 영향으로 오차가 발생하며, 오차가 적분 과정에서 누적되어 최종 값이 드리프트( drift )되는 현상이 생긴다. 따라서 자이로는 온도센서도 함께 사용해서 오차를 보상해야 한다. 정지상태의 긴 시간의 관점에서 보면 가속도 센서에 의해 계산된 기울어진 각도는 올바른 값을 보여주지만 자이로 센서에서는 시간이 지날수록 틀린 값을 보인다. 반대로, 움직이는 짧은 시간의 관점에서 자이로 센서는 올바른 값을 보여지만 가속도 센서는 기울어진 각도와는 다른 계산 값이 나올 수 있다. 따라서 가속도센서와 자이로센서를 모두 사용해서 각각의 단점을 보상할 수 있는 알고리즘을 적용해서 롤 또는 피치 값을 계산한다. 많이 적용하는 보상 방법 및 필터링으로는 칼만 필터가 있다. [네이버 지식백과]   Gyro Sensor  - 자이로 센서 (지형 공간정보체계 용어사전, 2016. 1. 3., 구미서관)

EBIMU-9axis

ASCII 출력   ASCII ( American   Standard   Code   for   Information   Interchange ) 각 문자를 7비트로 표현하므로 총 128(=2^7)개의 문자를 표현할 수 있다. ASCII  문자 코드는 [표 2-6]과 같다. 표를 보는 방법은 해당 문자의 왼쪽에 있는 2진 코드가  ASCII  코드가 되는 것인데, 예로 문자 ‘A’의 왼쪽에 있는 1000001이 ‘A’의  ASCII  코드가 된다. 네이버 지식백과 http://terms.naver.com/entry.nhn?docId=2270339&cid=51173&categoryId=51173 UART 범용 비동기화 송수신기(Universal asynchronous receiver/transmitter) 병렬 데이터의 형태를 직렬 방식으로 전환하여 데이터를 전송하는 컴퓨터 하드웨의의 일종이다. UART는 일반적으로 EIA RS-232, RS-422, RS-485와 같은 통신 표준과 함께 사용한다. UART의 U는 범용을 가리키는데 이는 자료 형태나 전송 속도를 직접 구성할 수 있고 실제 전기 신호 수준과 방식이 일반적으로 UART 바깥의 특정한 드라이버 회로를 통해 관리를 받는다는 뜻이다. 통신 데이터는 메모리 또는 레지스터에 들어 있어 이것을 차례대로 읽어 직렬화 하여 통신한다. 최대 8비트가 기본 단위이다. UART는 일반적으로 컴퓨터나 주변 기기의 일종으로 병렬 데이터를 직렬화 하여 통신하는 개별 직접 회로이다. 비동기통신이므로 동기 신호가 전달되지 않는다. 따라서 수신 쪽에서 동기통신을 찾아내어 데이터의 시작과 끝을 시간적으로 알아서 처리할 수 있도록 약속되어 있다. 디지털 회로는 자체의 클럭 신호를 사용하여 정해진 속도로 수신 데이터로 부터 비트구간을 구분하고 그 비트의 논리 상태를 결정하여 데이터 통신을 한다...

인터럽트

인터럽트 -loop()문이 반복적으로 동작 되고 있는 도중, 일시 중단하고 다른일을 처리하는 기능 -아두이노에서 사용가능한 인터럽트 타이머 인터럽ㅌ, 욉 인터럽트, 시리얼통신 인터럽트 등 혹은 라이브러리 추가시 스케치->라이브러리 포함하기->라이브러리 관리 에서 다운로드 MsTimer2 library 인터럽트 설정 MsTimer2::set(unsigned long ms, void(*f)()) ms: 인터럽트 시간, 밀리초 void(*f)() : 인터럽트 분기 함수명 인터럽트 시작 MsTimer2::start() 인터럽트 정지 MsTimer2::stop() 예제 #include<MsTimer2.h>   /*외부 라이브러리를 불러온다*/ int swState = LOW; int ledState = LOW; int ledFlag = HIGH; void setup(){   pinMode(7,INPUT_PULLUP);   pinMode(12,OUTPUT);   MsTimer2::set(500,flash);   /*500msec 주기로 flash 함수로 갔다온다*/   MsTimer2::start(); } void flash(){   /*인터럽트 분기함수*/   if(ledState ==HIGH){     digitalWrite(12,ledFlag);     ledFlag = !ledFlag;   }else if(ledState ==LOW){     digitalWrite(12,LOW);   } } void loop(){   if(digitalRead(7) == LOW && swState == LOW){ ...

전자 카운터 만들기

int count = 0; void setup(){   pinMode(7, INPUT_PULLUP);   pinMode(12, OUTPUT);   Serial.begin(9600); } void loop(){   int swState = digitalRead(7);   if(swState == LOW){     digitalWrite(12, HIGH);     count++;   }else{     digitalWrite(12, LOW);   }   Serial.println(count); } count를 0으로 설정하고 위와 같이 7,12 를 설정한다 이때 serial 통신을 위하여 void setup에 선언을 해주고 loop문에서 swState 값을 7번 핀에서 읽어 온다. 만약 swState가 LOW라면 불이 들어오고 count에 +1씩 숫자를 더해라 그렇지 않으면 그냥 불을 꺼라 라고 명령을 주고 통신을 보게 되면 1ms 마다 숫자가 올라가는 것을 볼 수 있다. 이러한 현상을 Bouncing 현상이라고 한다. 해결방법은 디 바운싱을 걸어주면 되는데, int swState = LOW; int lastSwState = LOW; int ledState = LOW; int count = 0;/*기본 선언*/ void setup(){   pinMode(7,INPUT_PULLUP);   pinMode(12,OUTPUT);   digitalWrite(12,ledState);/*핀모드 설정과 12번을 ledState로 설정*/   Serial.begin(9600); } void loop(){   swState = digitalRead(7);/*스위치의 상태는...

led응용

int swState = LOW; int ledState = LOW; void setup(){   pinMode(7, INPUT_PULLUP);   pinMode(12,OUTPUT); } void loop(){   if(digitalRead(7) == LOW && swState == LOW){     swState = HIGH;   }else if(digitalRead(7) == HIGH && swState == HIGH){     swState = LOW;     ledState = !ledState;      }   if(ledState == HIGH){     digitalWrite(12,HIGH);   }else if(ledState == LOW){     digitalWrite(12,LOW);   } } 스위치와 led의 상태를 LOW로 정의한다. 이후 pinMode를 셋업한다. loop문에서 7번핀의 상태와 스위치의 상태를 본다면, 7번의 상태는 LOW이고 스위치의 상태도 LOW이다. 그래서 처음의 조건을 만족시키는데 이때는 swState를 HIGH로 만들어 주는 것이다. 그다음 if문을 보게 된다면 ledState를 확인할 수 있는데 만약 ledSteate가 HIGH라면 12번 핀 즉 led에 들어가는 전원을 HIGH값으로 보내는 것 이다.(그래야 불이 들어온다) 그렇게 되면 led의 불은 계속 들어와 있는 상태가 되는데, 이때 한번 더 누르게 되면, 첫번째 if문에서 첫번째 줄의 조건을 만족할 수 없다. 그래서 else if 문으로 들어가게 되는데 이때의 7번핀의 값과 swState는 불이 들어와 있는 상태이기 때문에 HIGH값이다. 그다음 i...