Ardupilot의 APMath 클래스의 함수

5715 단어 AP_MathardupilotC++
개시하다
  • 이 글은 Ardupilot에 포함된 산술 연산 라이브러리AP_Math에 포함된 함수의 작용에 대한 비망록이다.
  • 함수에 대한 설명을 수시로 업데이트하고 싶습니다.
  • 시작 함수
  • rotate 함수는 팽이 센서의 설치 방향을 기체의 Roll, Pitch, Yaw 방향과 일치시키기 위해 사용된 것으로 보인다.
  • Vector3형 구성원 변수 X, Y, Z의 3개 교체 처리를 진행한다.
  • enum Rotation 매개변수를 사용하여 대체 변수를 지정합니다.
  • 함수는 ↓와 같이 정의된다.
  • template <typename T>
    void Vector3<T>::rotate(enum Rotation rotation){
       //処理記述(省略)
    }
    
    회전이 없는 경우(ROTATION NONE 매개변수)
  • 기체롤러=팽이센서의X축
  • 기체간격축=팽이센서의Y축
  • 기체편항축=팽이센서의Z축
  • "X, Y, Z의 교체는 없습니다."
    image.png
    90°(매개변수가 ROTATION YAW 90)인 경우
    그림에서 보듯이 팽이 센서를 편항 방향을 따라 90도 회전시켜 설치한다.
    image.png
    X=롤러, Y=푸시업, Z=편항처럼 XYZ 처리를 넣는다.
    *회전 후 X(기체 롤러) = 팽이 Y의 반전(기호 반전)
    *회전 후 Y(본체 간격) = 팽이X
    *회전후Z(기체편항)=팽이Z
    .
    이 부분의 원본 코드는 ↓에서 말한 바와 같다.
        switch (rotation) {
        //--省略--
        case ROTATION_YAW_90: {
            tmp = x;
            x = -y;
            y = tmp;
            return;
        }
        //--省略--
    
    90도 회전 후 간격이 90° 회전(ROTATION ROLL 90 PITCH 90)인 경우
    먼저 원본 파일을 참조합니다.먼저 90도 회전한 다음 90도 회전한다
  • 회전후Z(기체편항)=팽이Y
  • 회전후Y(기체간격)=팽이Z의역회전
  • 그 다음
  • 회전후Z(기체편항)=회전전X의역회전
  • 회전후X(기체롤러)=회전전Z
  • 되다
        case ROTATION_ROLL_90_PITCH_90: {
            tmp = z;
            z = y;
            y = -tmp;
            tmp = z;
            z = -x;
            x = tmp;
            return;
        }
    
    그림으로 쓰면 이런 느낌이야.
    image.png
  • 다른 회전도 같은 방법으로 인코딩하기 때문에 설명을 생략합니다.
  • 좋은 웹페이지 즐겨찾기