[아두이노 쿼드콥터] PID 제어 보완 + ESC 고장?!
지난번에 드론의 어설픈 균형 잡기 신공까지 보여드렸는데요?
아직 보완이 더 필요해 보입니다. 우선 무엇이 문제인지 분석해봅시다!
위의 각 바는 드론의 한 축이라고 보시면 됩니다. (참으로 허접한 그림이지만 이해해 주세요;;;) 드론이 중심을 잡는 과정을 네 경우로 나누고 시리얼 창을 통해 PID 값을 확인했는데요.
우선 첫번째 경우를 보시면 드론이 수평에 있을 때입니다. 저희의 목표가 수평을 잡는 것이기에 error값이 0이 될 것입니다.
하지만 곧 (한쪽으로 무게가 더 쏠려 있기에) 기울게 됩니다 (두번째 경우). 하지만 각도가 여전히 너무 작아 아직 추가 출력을 주지는 않습니다. 반응이 느린 것이죠. 코딩을 수정하여 적은 각도일 때도 반응을 할 수 있게 조정할 필요가 있겠네요.
세번째 경우처럼 꽤 많이 기운 경우 기울어진 방향의 모터에 더 큰 출력을 주긴 하지만 아직 출력이 약해 움직임이 없네요.
마지막 경우처럼 확 기운 후에야 모터의 출력이 강해져서 기울어진 쪽이 위로 올라오게 됩니다. 하지만 확 기운 후의 출력은 너무나 강해 수평을 맞추는 것이 아니라 수평을 넘어서 반대쪽까지 기울어져 버리네요.
결국 조그만 각도에서도 반응을 하고 출력이 조금 더 세지도록 코딩을 고쳐야겠네요.
PID_value = constrain(PID_scaler * abs(m_y), min_output, max_output);
if (error_pid_y >= 0) {
front.write(PID_value);
}
if (error_pid_y < 0) {
back.write(PID_value);
}
저희는 기존에 min_output 값으로 40을 줬었는데 이를 이제 20으로 주고 대신 출력 PID 값에다 20을 더해줬습니다.
if (error_pid_y >= 0) {
front.write(PID_value+20);
}
if (error_pid_y < 0) {
back.write(PID_value+20);
}
이렇게 위에 전기테이프로 이상한 놈을 표시하고 위치를 바꿔봤습니다. 지금은 하얀 축 위에 있는데 검은 축으로 옮겨집니다.
그리고 아까와 똑같은 신호를 줘봤습니다.
이번에도 하얀 축 위에 있는 모터가 회전하네요. 이로써 모터의 문제는 아닌걸로 밝혀졌네요. ESC의 문제인거 같네요.....
내일 마지막으로 ESC와 모터의 Calibration을 확인해보고 ESC를 재구매할지 결정하려고 합니다. 순간적으로 Calibration이 바뀐 것이길 기대하며....
아. ESC를 재구매하게 되더라도 나머지 모터 세개는 제대로 작동하기에 축을 바꿔서라도 PID를 통한 균형 잡는 목표는 마무리할 수 있을 듯 합니다. 이 목표를 마무리한 뒤에는 수중로봇으로 잠시 방향을 선회해야 할 수도 있겠네요.
오늘 포스팅은 여기까지입니다!
'아두이노 드론 프로젝트' 카테고리의 다른 글
[아두이노 쿼드콥터] 시리얼 통신으로 받는 속도가 느린 이유 (0) | 2015.11.11 |
---|---|
[아두이노 쿼드콥터] pid 제어 전후 비교 (3) | 2015.11.10 |
[아두이노 자작 쿼드콥터]PID 제어 수식 유도 (1) | 2015.11.01 |
아두이노 블루투스 통신 방법 및 코드 (0) | 2015.10.23 |
[아두이노 쿼드콥터] 서보모터 라이브러리를 활용한 PID 제어 (0) | 2015.10.22 |