표준 PID 제어함수 구현 목표Roll, Pitch, Yaw 각도에 대한 PID 출력 값을 구하기 가장 먼저 해야할 일 자이로 센서를 이용해서 구한 각속도를 바탕으로 회전각을 구하는 부분을 삭제한 후 표준 PID 제어함수에서 수현을 해야한다. 소스코드 //표준 PID 제어 함수 구현(이중루프 PID 제어기 X) //목표 : roll, pitch, yaw의 각도에 대한 pid 출력값 구하기 #include const int MPU_addr = 0x68; int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ; void setup() { initMPU6050(); //가속도 자이로 센서 값을 읽음 Serial.begin(115200); calibAccelGyro(); //센서 보정 루틴 ..
가속도,자이로 센서에 대한 상보필터 적용시키기 가속도 센서와 자이로 센서의 단점들을 보안하고자 상보필터를 이용해서 값을 추출하는 방법에 대해 한번 알아보도록 하겠습니다. 일단 상보필터를 구하는 근사공식에 대해 알아보겠습니다. 상보필터 근사공식 위 공식을 참고해서 상보필터 처리 루틴을 한번 구현해보도록 하겠습니다. 소스코드 //상보필터 적용시키기 #include const int MPU_addr = 0x68; int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ; void setup() { initMPU6050(); //가속도 자이로 센서 값을 읽음 Serial.begin(115200); calibAccelGyro(); //센서 보정 루틴 initDT();// 시간 간격에 대한 초기화..
자이로 센서 처리 루틴 구현 먼저 참고해야할 포스팅 [드론]자이로 센서 개념정리[드론]자이로 센서 값 해석하기 이번 포스팅 목적: 자이로 값을 이용해서 Roll, Pitch, Yaw의 각도를 구하는 루틴을 추가하기 소스코드 //자이로 센서 처리 루틴 구현 #include const int MPU_addr = 0x68; int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ; void setup() { initMPU6050(); //가속도 자이로 센서 값을 읽음 Serial.begin(115200); calibAccelGyro(); //센서 보정 루틴 initDT();// 시간 간격에 대한 초기화 } void loop() { readAccelGyro(); calcDT(); //시간 간격..
자이로 센서 값 해석하기 안녕하세요 바로 이전 포스팅에서 자이로 센서에 대한 개념정리를 추가적으로 해보았습니다.이번 포스팅에서는 자이로 센서 값에 대한 해석하는 방법에 대해 알아보도록 하겠습니다^^ 자이로 값 해석하기에 들어가기 앞서 여기서 사용된 소스코드는[드론]MPU-6050 가속도 자이로 센서 포스팅에 사용된 소스코드로 사용하도록 하겠습니다. 가속도 센서 값 해석하기 포스팅도 참고하시면 좋을거 같네요^^ 소스코드에 보시면 int16_t 타입으로 변수를 선언을 해주었습니다. 이는 16비트 타입의 범위로 정의를 해준 것 이며 16비트 타입은 -32769 ~ 32767 사이의 값을 가질 수 있습니다. 여기서 GyX, GyY, GyZ가 가질 수 있는 정수 값의 범위는 -32769 ~ 32767입니다. 그러..
자이로 센서 개념 정리 PID 제어에 대한 포스팅을 하다가 갑자기 자이로 센서로 넘어오게 되었는데요 제가 이번에 With-Camp 해커톤 3회를 참여하다가 MPU-6050을 이용한 프로젝트를 진행하게 되었습니다. 근데 자이로 센서에 대한 지식이 너무 부족해서 다시 복습 및 정리를 하는 겸 해서 자이로 센서에 대 한 포스팅을 다시 하게 되었습니다. 일단 맨 처음부터 자이로 센서가 무엇인지 한번 다시 알아보고 자이로 센서 값 해석에 대한 포스팅도 하겠습니다.(이전에도 정리를 해두었어요..ㅠ) 자이로 센서가 무엇일까?? 이전 포스팅에서 작성을 했지만 다시 한번 복습하고 내용을 좀 더 추가하는 겸 해서 포스팅을 할게요~MPU-6050 가속도 자이로 센서 개념 자이로 센서의 용도각속도를 측정하는 용도 (단위 : ..
가속도 센서를 이용한 각도 구하기 [기본 개념]MPU-6050 가속도 자이로 센서 [처리루틴]기본 루틴 구현하기센서 보정 루틴 구현하기시간 처리 루틴 구현하기 이번에는 가속도 센서를 처리해서 Roll, Pitch, Yaw의 각도를 구해보는 시간을 가지도록 하겠습니다. 일반적으로 기본 루틴 구현하기에서 구한 AcX, AcY, AcZ도 동일한 가속도 센서 값 입니다. 그러나 여기 소스코드에 보시면 아시겠지만 별도로 계산을 해서 accel_x, accel_y, accel_z의 값들을 구하는걸 볼 수 있을 것입니다.그 이유는 MPU-6050의 가속도 센서를 이용한 드론을 지면 수평한 상태에 놓으면 미세한 떨림에 의해서 부유한 값을 얻게 됩니다. 그러한 현상들을 해결 하기 위해서 가속도 센서의 현재 위치하고 있는..
시간 간격 처리 루틴(회전각) 드론이 회전을 할 경우에는 자이로 센서가 역할을 하게 됩니다. 이때 자이로 센서를 이용해서 회전각을 구하게 되는데 이 과정에서 시간 간격에 대한 정보가 필요하다고 합니다. 그래서!! 시간 처리를 해주는 루틴을 구현을 해야 합니다. 이때 주의해야할 실제로 센서가 센서값을 읽는데 걸리는 시간은 2ms 전후가 됩니다. 또한 센서를 이용하여 드론을 날릴 경우 드론의 중심을 안정적으로 잡기 위해서는 3ms 전후가 되어야합니다.(값이 큰 경우[10ms]인 경우가 되면 드론의 모터 회전 반응이 늦어져서 중심을 잡기 힘듭니다.) 즉, 시간 간격을 2ms 전후로 설정을 해주어서 드론이 비행할때 중심을 안정적으로 잡게 해주어야 합니다. 그래서 시간 간격 처리 루틴을 작성해야하는 이유입니다. ..
센서 보정 루틴 구현하기 목표 -Raw, Pitch, Yaw에 대한 각도를 구하기 위한 값들을 구하기 왜 센서 보정을 해야하는가? 기본적으로 센서들(여기서는 가속도 센서, 자이로 센서)은 지면가 수평인 상태여도 무시할 수 있는 정도의 미세하게 흔들리는 값들을 보내게 된다. 그렇게 된다면 기본적인 초기 값을 지정해 주기 어려운데 이러한 이유로 인해서 가속도 센서가 현재 상태에서 가지는 기본 값의 평균값을 얻어내야 합니다. 그래서! 센서 보정 루틴을 구현을 해주여야 합니다. 이번 소스코드를 이해하기 위해서는 이전 포스팅에서 설명을 드렸던 "기본 루틴 구현하기"에서 이해를 먼저 하셔야 합니다. 본격적으로 센서 보정하는 소스코드에 대해 설명을 드리도록 하겠습니다. 소스코드 //센서 보정 루틴 #include c..