자력계 동적 교정


19

나는 IMU의 일부인 자력계 AK8975를 연구하고 있습니다. 나에게는 매우 까다로운 것 같습니다. 이 칩은 지구의 어느 곳에서나 지구 근처의 지구 자기장을 설명하는 출력으로 3D 벡터를 제공합니다.

두 가지 유형의 제목 계산 알고리즘을 시도했습니다. 하나는 간단 arctan(-y/x)하고 다른 하나는 아래에 언급 된 것처럼 기울기 (피치) 및 뱅크 (롤) 취소 수학입니다. 성향과 은행 모두 잘못된 결과를냅니다.

두 알고 중 하나를 사용하여 수평 계획을 유지하면서 회전 할 때 올바른 간단한 제목의 지구를 사용할 수 있습니다 (간단한 사용 가능한 개방형 연구 리소스 사용).

연철 및 경철 오류에 대한 교정을 시도했습니다. 3D로 그릴 수 있고 완벽한 3D 구를 보여줍니다. 여전히 성향이나 편각에 효과가 없습니다.

모든 포인터가 도움이 될 것입니다.

코드와 그 구현은 다음과 같습니다.

void Compass_Heading()
{
  double MAG_X;
  double MAG_Y;
  double cos_roll;
  double sin_roll;
  double cos_pitch;
  double sin_pitch;

  cos_roll = cos(roll);
  sin_roll = sin(roll);
  cos_pitch = cos(pitch);
  sin_pitch = sin(pitch); 

  //// Tilt compensated Magnetic filed X:
  MAG_X = magnetom_x*cos_pitch + magnetom_y*sin_roll*sin_pitch + magnetom_z*cos_roll*sin_pitch;
  //// Tilt compensated Magnetic filed Y:
  MAG_Y = magnetom_y*cos_roll-magnetom_z*sin_roll;
  //// Magnetic Heading


  MAG_Heading = atan2(-MAG_Y, MAG_X) ;

}

어디에서 magnetom_x, #_y그리고 #_z실제로 자력계에서 RAW 값입니다 차원 벡터의 구성 요소입니다. 피치 는 온보드 가속도계 및 자이로 스코프의 신비한 칼만 필터 출력에서 ​​비롯됩니다. 이 세 센서는 ATAVRSBIN1에 있습니다. 롤과 피치는이 단계까지 괜찮습니다.

이제 journal_of_sensors_renaudin et al_2010c.pdf 에 따른 간단한 표제 계산 MAG_Heading = atan2(-magnetom_y, magnetom_x) ;은 위와 같이 보상 되어야합니다 .

전체 코드는 단순히 OPEN AHRS 에서 가져온 것 입니다.


Roll, Pitch 및 Yaw 형식의 데이터 손으로 만 장치를 회전 시켰습니다. 처음 3 개는 각각 Roll, Pitch 및 Yaw에만 집중되었습니다. 나머지 2 개는 먼저 장치를 X (회전)를 따라 45도 정도 회전 한 다음 자력계의 로컬 Z를 따라 회전합니다. 그런 다음 Y (피치)를 따라 약 45도 회전 한 다음 자력계의 로컬 Z를 따라 회전했습니다.

그래프는 -180에서 180 도의 범위 내에 표시됩니다.

롤 파일각도 (도) 롤의 YAW 특성.

피치 파일각도 (도) 피치의 YAW 특성.

편주 파일각도 (도) Yaw 자체의 YAW 특성.

Yaw wrt 45도 경사 (압연) 파일각도 (도) 45도 롤링 된 Yaw의 YAW 특성.

yaw wrt 45도 뱅킹 (피치) 파일각도 (도) 45 도의 피치를 가진 Yaw의 YAW 특성.

참고 : 마지막 2 장의 사진 : 먼저 홈 위치에 보관하십시오. 이는 모두 동일합니다 (txt 파일 참조). 그런 다음 45도 회전 한 후 평면 장치 (자력계 포함)를 사용하여 자력계의 Z 축을 따라 회전했습니다.

마지막 이미지와 마찬가지로 장치는 45도 각도로 자력계의 Z 축을 따라 피치로 조정되었습니다.

이것들이 내 문제를 해결하는 데 도움이되기를 바랍니다.


새로운 개발은 다음과 같습니다.

나는 제목에서 일했다. 나는 출력을 따랐다. 롤 csv

피치 csv

편주 csv



아직 대답이 없습니다!

4
구현하려는 수학과 구현에 사용한 코드를 보여 주면 더 많은 답변을 얻을 수 있다고 생각합니다. "작동하지 않고 도움이되지 않는 것"이외의 방법으로 진행할 수있는 것은 거의 없습니다. 죄송합니다!
Martin Thompson

자력계 사용은 비교적 소수의 사람들이 전문 지식을 갖을 매우 전문화 된 영역입니다. 몇 번이나 귀하의 질문을 읽었지만 여전히 무엇이 잘못되었는지 잘 모르겠습니다. "잘못된 출력"을 제공하지만 꽤 모호합니다. 아마도 몇 가지 예가 있습니까?
Jason R

1
이것은 센서 출력을 해석하는 방법 또는 센서가 제공하는 x, y, z 벡터에서 탐색 가능한 유용한 측정 값을 계산하는 방법에 대한 질문입니까? 동일한 센서의 다른 인스턴스로 측정을 반복 할 수 있습니까?
vicatcu

1
@Rahul-이것이 더 주목을받지 않는 것에 놀랐습니다!
Kevin Vermeer 1

답변:


8

나는 당신의 그래프를 좋아합니다. 그들은 롤, 피치 및 요가 작동하고 있음을 분명히 보여줍니다. 축하합니다! 그것은 이미 대부분의 사람들이하는 것보다 더 많은 발전입니다.

제시 한 코드가 예상 한 MAG_Heading 값과 다른 "잘못된"MAG_Heading 값을 계산하는 것 같습니다.

귀하가 당사에 제공 한 경우 귀하를 돕기가 훨씬 쉬울 것입니다 : (이것은 " 현명한 방법으로 질문하는 방법"" 증상 설명"섹션입니다 )

  • AK8975의 시간에 어떤 한 지점에서 출력값 m_x 자력계, m_y 및 m_z.
  • 같은 순간의 피치 및 롤 값
  • 그 값들로부터 계산 된 잘못된 MAG_Heading 출력값
  • 올바른 MAG_Heading이 예상되는 것

그래서 나는 아마도 당신이 내가 직접 만든 것과 같은 종류의 문제를 겪고 있다고 추측해야합니다. :-).

  • sin () 및 cos () 및 atan2 () 함수는 어떤 각도 형식을 기대합니까? 형식 피치와 롤 간의 변환을 해당 형식으로 저장해야합니까? 해당 형식을 MAG_heading으로 변환해야합니까? (브래드,도 또는 라디안? 부동 소수점 또는 고정 소수점?)
  • 빼야 할 원시 m_x, m_y, m_z 값에 오프셋이 있습니까?
  • 코드에서 가정 한 방식으로 모든 부분이 정렬되어 있습니까? 특히, 피치 및 롤 축이 자력계 축과 정렬되어 있습니까? (m_x는 롤 축을 따라 앞으로 향해야합니까? m_y는 피치 축을 따라 오른쪽을 향해야합니까?)
  • 이 코드에 들어가기 전에 센서 값 또는 m_z와 같은 센서 값을 무시해야할까요?
  • 이 코드가 하나의 인터럽트에 의해 인터럽트되어 내부 값을 손상시키는 것일 수 있습니까? 누군가가 인터럽트 루틴에 "나누기"한 후 프로그램의 다른 곳에서 모든 삼각 함수 계산이 종종 잘못된 결과를 줄 수있는 다른 프로젝트를 생각합니다.
  • 이 코드가 실제로 실행을 끝내지 않도록 종종 인터럽트가 발생합니까?

다른 곳에서 매우 유사한 코드를 논의하는 다른 사람들이있는 것 같습니다 : http://diydrones.com/forum/topics/heading-from-3d-magnetometer ; http://diydrones.ning.com/profiles/blogs/dcm-imu-theory-first-draft ; http://aeroquad.com/showthread.php?1138-REVOLUTION!!!-New-IMU !!! ; http://www.rcgroups.com/forums/showthread.php?t=1436742&page=6 ; http://aeroquad.com/showthread.php?691-Hold-your-heading-with-HMC5843- 마그네토 미터 ; 기타


나는 지금 그것을 보았다 .. 나는 다시 올 것이다.
Rick2047

\ 1 / [Roll, pitch, yaw 및 (Mx, My, Mz)]에 대한 CSV 파일을 만들고 있습니다. \ 2 / MAG_Heading은 롤과 피치의 변화에 ​​따라 두 번 연속 사분면까지 변경되지 않아야합니다. 이 호는 NE로 향하는 경우 경사를 위해 상하 회전 방향으로 수평선에서 90도를 가로 질러 NE를 향할 때까지 계속 NE를 가리키고 뱅킹 또는 조합의 경우 동일해야합니다.
Rick2047

\ 3 / 모든 내부 계산은 라디안으로 수행되었으며 모든 코사인 함수는 라디안 만 필요합니다. 표시를 위해 값만 복사되고도 단위로 변환됩니다. \ 4 / 부동 소수점. \ 5 / 모든 센서가 정렬되었으며 SENSOR_SIGN [9]을 사용하여 정렬을 위해 가능한 모든 관련 조합을 시도했습니다. \ 6 / 폴링에서 수행하고 있으므로 인터럽트 기반의 모든 문제는 여기에 없습니다.
Rick2047

내 포인트 \ 1 /의 경우 모든 그래프에 대해 해당 CSV 파일도 첨부했습니다. 또는 다른 것을 요청했습니다. 이 좋은 반응에 감사드립니다. :) 나는 노력과 시간이 허락하는 한 "똑똑한 방법으로 질문하는 방법"을 구현할 것이다. :)
Rick2047

\ 1 / 나는 [Roll, pitch, yaw and (Mx, My, Mz) (제목, 편각)]에서 일할 것입니다.
Rick2047

1

LSM303 의 애플리케이션 노트 에는 문제에 적용 할 수있는 기울기 보정 나침반 교정에 유용한 안내서가 있습니다. 그것은 매우 상세합니다. 그렇지 않으면 계산을 다시 작성했을 것입니다. 자기장 라인의 축을 중심으로 회전해도 자력계 값이 변경되지 않으므로 가속도계 값은 전체 피치, 롤 및 요 계산에 필요합니다. 가속도계의 중력도 마찬가지입니다.


링크는 같은 방정식에서 다른 부호를 보여줍니다. 다른 모든 조합을 시도하겠습니다.
Rick2047
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.