728x90
조종기의 Mode가 0일 때는 수동 조작 모드, Mode가 1일 때는 자율주행 모드로 주행할 수 있도록 코드를 수정하려했지만 조종기 내에 reverse기능이 있어 Mode(Gear)을 담당하는 Ch5에만 reverse를 주었다.
오늘까지의 진전으로는 Ublox GPS모듈을 설치하여 신호를 잡아내는 것 까지 하였지만 ros통신으로 불러오는데까지는 문제가 보였던 것 같다.
-> 첫 번째 실행에서 보였던 문제점으로는 전륜에서 noise가 보이는 듯 하여 조향에 많은 흔들림이 나타났다.
-> 바닥 평면과 닿지 않았을 때는 p제어 상수를 0.2->0.1로 바꾸었을때 제어가 잘 된 듯 하였으나 막상 직접 바닥에 굴려보니 노이즈가 나타났다.
-> 기존의 제어의 문제점? PD제어인데 제어를 좀 조정해야겠다.
-> RosSerial과의 병합코드 점검하기.
float kp = 0.1;
float ki = 0.00000 ;
float kd = 2.00;
void SteerCon(float Q) { // 조향모터의 제어를 위한 함수, Q = 조향 목표값
val = Q;
if(val>St_M+300){ // 조향 최대값 제한
val=St_M+300;
}
else if(val<St_M-300){ // 조향 최소값 제한
val= St_M-300;
}
encoder_val =analogRead(encoder_pot); // Read V_out from Feedback Pot
t = millis();
dt = (t - t_prev); // Time step
Theta = val; // Theta= Actual Angular Position of the Motor
Theta_d = encoder_val; // Theta_d= Desired Angular Position of the Motor
e = Theta_d - Theta; // Error
inte = inte_prev + (dt * (e + e_prev) / 2); // Integration of Error
V = kp * e + ki * inte + (kd * (e - e_prev) / dt) ; // Controlling Function
if (V > Vmax) {
V = Vmax;
inte = inte_prev;
}
if (V < Vmin) {
V = Vmin;
inte = inte_prev;
val_prev= val;
}
int PWMval = int(255 * abs(V) / Vmax);
if (PWMval > 200) {
PWMval = 200;
}
if (V > 0.5) {
digitalWrite(DirPin1, HIGH);
analogWrite(PWMPin, PWMval);
}
else if (V < -0.5) {
digitalWrite(DirPin1, LOW);
analogWrite(PWMPin, PWMval);
}
else {
digitalWrite(DirPin1, LOW);
analogWrite(PWMPin, 0);
}
t_prev = t;
inte_prev = inte;
e_prev = e;
}
믿기지 않겠지만 내일이 중간고사인데 밤새서 대회 준비나 하고 있다ㅋㅋㅋ 셤공부 언제해??
728x90
'자율주행자동차 > [2023] 1-fifth AA EV' 카테고리의 다른 글
.... (0) | 2023.04.27 |
---|---|
[D-Week] 현재로부터 해야 할 일 (0) | 2023.04.22 |
깃에 옮기기 (0) | 2023.04.16 |