본문 바로가기

개인 프로젝트

2022-1 PID제어를 이용한 밸런싱 로봇 만들기 #6

반응형

[제작 및 수정 1]

 

지난번 prototype에서 수정, 고려할 사항은 아래와 같았고 이를 수정해서 v2를 모델링하고 제작했다.

 

 

-배터리가 너무 위쪽에 위치해서 무게중심이 너무 높다.

 

-usb대신 블루투스를 이용한 serial 통신을 해야 한다.

 

-바퀴 테두리에 바른 글루건으로는 충분한 미끄럼 방지를 하지 못한다.

 

 

 

body
Schematic diagram
v2 완성 1
v2 완성 2

 

앞뒤 무게중심(이동방향)을 최대한 맞추기 위해 부품들을 중앙에 배치했고, 모터의 경우 이전 prototype처럼 지면에 수직 하게 세우면 로봇의 높이가 커지는 문제가 생겨 앞뒤 대칭으로 배치했다.

 

 

IMU는 (유의미한 의미가 있는지는 모르겠지만) 흔들리는 것에 의해 발생하는 가속도의 영향을 최소화하기 위해 바퀴의 축에(회전축)에 최대한 가까이 위치시켰다.

 

 

바퀴는 갖고 부품 통을 뒤지다가 나와서 바로 사용했다..

 

 

V2가 완성된 대로 바로 코드를 다듬고 테스트를 진행했다.

 

 

 

 

아두이노 코드

ard_br.ino

 

 

 

파이썬 기반 PID제어 노드 코드

balancing_self_pid.py

 

 

완성한 로봇과 위 코드를 이용해서 테스트를 했다.

 

 

아래는 여러번의 테스트 중 몇 개를 찍은 것이다.

 

 

 

[P = 19, I = 0, D = 0] setting :

 

 

[P = 24, I = 30, D = 0.05] setting :

P로만 시도하다가 도저히 안돼서 I랑 D를 넣었다.

 

아직 밸런싱이 완전히 되는 것은 아니지만 P만 했을 때보다는 안정적이다.

 

 

 

[P = 21, I = 30, D = 0.05] setting :

 

위 3개 setting 외에도 엄청 많이 시도 했는데 전부 만족할만한 결과를 보여주지는 못했다...

 

 

 

 

 

문제점

 

1. 공부했던대로 P값 튜닝만으로 균형을 잡아보려고 했으나 (안정적이진 않더라도) 장기간의 균형유지는 실패 / 며칠 동안 많이 시도했는데 실패

 

1-1. Setpoint값이 -5deg에서 -7.5deg까지 계속 변함 / 전원을 켜고 mpu6050이 calibration할 때 받침대를 두어 조건을 같게 했음에도 계속 변했음

 

1-2. 먼저 P 튜닝을 마치지 않은 상태에서 I와 D도 같이 튜닝을 해봤지만 역시 실패

└I와 D를 같이 조정하니 어느 정도는 균형을 잡음, 단 한 방향으로 조금 쏠리면 그냥 쭉 가버리는 문제 발생

 

 

2. dc모터 토크가 부족한게 아닌가 추측 중 / 균형이 무너지는 임계(?) 각도가 너무 좁은 거 같음

 

 

3. 드리프트 현상 때문인지 시간이 지날수록 /imu_ang가 +되고 있음 / 대략 분당 0.1deg 정도

 

 

 

 

 

 

해결 시도

 

1. 다른 로봇들과 비교하니 설계 자체는 큰 문제없어 보임 ---> 우선 현 설계에서 소프트웨어적인 해결 시도를 우선적으로 --->소프트웨어 시도 실패 시 모터 교체 예정

 

 

2. 포화상태( PID신호가 255를 넘어가는 경우)가 자주 발생해서 이를 막기 위해 코드에 PID output limit을 추가

 

 

3. 다른 로봇들의 코드를 보니 공통적으로 DMP를 이용해 각도를 가져오고 있었음 --->

mpu6050으로 각도 가져오는 것을 라이브러리가 아닌(상보 필터 사용), dmp를 사용해서 가져오기

 

 

 

 

 

 

========================================================================
정확한 정보 전달보단 공부 겸 기록에 초점을 둔 글입니다.
틀린 내용이 있을 수 있습니다.
틀린 내용이나 다른 문제가 있으면 댓글에 남겨주시면 감사하겠습니다. : )
========================================================================

반응형