이미지 해석 PID 알고리즘 및 원 코드 해석

3594 단어
샤 오 밍 은 이런 임 무 를 받 았 다.
물독 에 물이 새 는 곳 이 있 습 니 다.
수면 높이 를 어느 위치 에 유지 하도록 요구 하 다.
수면 높이 가 요구 보다 낮은 것 을 발견 하면 물독 에 물 을 넣 어야 한다.
샤 오 밍 은 임 무 를 받 고 물독 옆 을 지 켰 다.
시간 이 지나 자 심심 해서 방 으로 달 려 가 소설 을 읽 었 다.
30 분 마다 수면 높이 를 검사 합 니 다.물이 너무 빨리 샌다.
샤 오 밍 이 검사 하 러 올 때마다 물이 거의 다 새 서 요구 하 는 높이 와 는 거리 가 멀다.
샤 오 밍 은 3 분 에 한 번 씩 검사 하 는 것 으로 바 뀌 었 는데 매번 물이 새 지 않 았 다.
물 을 넣 을 필요 가 없다. 너무 자주 오 는 것 은 헛수고 다.몇 번 의 실험 후,
10 분 마다 한 번 씩 검사 하 는 것 을 확정 하 다.이 검사 시간 을 샘플링 주기 라 고 한다.
샤 오 밍 은 바가지 로 물 을 넣 기 시 작 했 고 수도 꼭 지 는 물독 에서 10 여 미터 떨 어 진 거리 에 있 었 다.
항상 여러 번 뛰 어야 물 을 충분히 넣 을 수 있 기 때문에 샤 오 밍 은 또 통 으로 넣 는 것 으로 바 뀌 었 다.
한 통 이면 한 통 이 고, 달 리 는 횟수 가 적 으 며, 물 을 넣 는 속도 도 빠르다.
그러나 여러 번 항 아 리 를 넘 쳐 신발 을 몇 번 적 셨 고 샤 오 밍 은 또 머리 를 썼 다.
나 는 바가지 도 쓰 지 않 고 통 도 쓰 지 않 는 다. 아버 지 는 대야 로 몇 번 내 려 와 보 니 딱 좋아 서 너무 많이 뛰 지 않 아 도 된다.
물이 넘 치지 않 게.이 물 을 넣 는 공구 의 크기 를 비례 계수 라 고 한다.
샤 오 밍 은 물이 과 다 하 게 넘 치지 않 지만 때로는 요구 보다 높 은 위치 가 비교적 많다 는 것 을 발견 했다.
젖은 신발 을 신 을 위험 이 있 습 니 다.그 는 또 방법 을 생각해 서 물독 에 깔때기 를 달 았 다.
매번 물 을 넣 을 때마다 물독 에 직접 붓 지 않 고 깔때기 에 부 어 천천히 넣 으 라 고 한다.이렇게 넘 치 는 문제 가 해결 되 었 다.
그러나 물 을 넣 는 속도 가 또 느 려 져 때때로 물이 새 는 속 도 를 따라 잡지 못 한다.
그래서 그 는 서로 다른 크기 의 깔때기 를 바 꾸 어 물 을 넣 는 속 도 를 조절 하려 고 했다.
마침내 만 족 스 러 운 깔때기 를 찾 았 다.깔때기 의 시간 을 적분 시간 이 라 고 한다.
샤 오 밍 은 마침내 숨 을 헐 떡 였 지만 임무 의 요구 가 갑자기 엄격 해 졌 다.
수위 통제 의 신속 성 요구 가 크게 높 아 지면 수위 가 너무 낮 아 지면
즉시 물 을 요구 위치 에 올 려 야 하 며, 너무 높 아 서 는 안 되 며, 그렇지 않 으 면 임금 을 주지 않 는 다.
샤 오 밍 이 또 곤란해 졌어!그래서 그 는 또 머리 를 써 서 마침내 방법 을 생각 하 게 했다. 항상 물 한 대 야 를 옆 에 놓 고
수위 가 낮 아 지면 깔때기 를 거치 지 않 으 면 한 대야 의 물이 내 려 가 는 것 을 발견 하면 신속 성 은 보장 되 지만 수 위 는 때때로 훨씬 높 아 질 수 있다.
그 는 또 수면 위치 위 에 물 을 조금씩 파 서 파 이 프 를 하나 더 연결 해서 아래 의 예비 통 에 이렇게 많은 물이 위의 구멍 에서 새 어 나 올 것 이 라 고 요구 했다.
이 물이 새 는 속 도 를 미분 시간 이 라 고 한다.
해석http://www.amobbs.com/thread-5043342-1-1.html】
typedef struct
{
  float desired;     //< set point      
  float error;        //< error   
  float prevError;    //< previous error      
  float integ;        //< integral    
  float deriv;        //< derivative    
  float kp;           //< proportional gain      
  float ki;           //< integral gain      
  float kd;           //< derivative gain      
  float outP;         //< proportional output (debugging)       
  float outI;         //< integral output (debugging)
  float outD;         //< derivative output (debugging)
  float iLimit;      //< integral limit      
} PidObject;

//    pid,         ,       

float pidUpdate(PidObject* pid, const float measured, const bool updateError)
{
  float output;

  if (updateError)
  {
    pid->error = pid->desired - measured;  //                
  }

  pid->integ += pid->error * IMU_UPDATE_DT;     //    ,IMU_UPDATE_DT             
  if (pid->integ > pid->iLimit)                                    //       
  {
    pid->integ = pid->iLimit;
  }
  else if (pid->integ < -pid->iLimit)                          //       
  {
    pid->integ = -pid->iLimit;
  }                                                                                  //  if            。          ,             。

  pid->deriv = (pid->error - pid->prevError) / IMU_UPDATE_DT;     //    ,                

//            【http://blog.csdn.net/ouyang_linux007/article/details/7419892】

  output = (pid->kp * pid->error) +     //              
           (pid->ki * pid->integ) +
           (pid->kd * pid->deriv);

  pid->prevError = pid->error;      

  return output;
}

좋은 웹페이지 즐겨찾기