나는 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 도의 범위 내에 표시됩니다.
파일 의 각도 (도) 45도 롤링 된 Yaw의 YAW 특성.
파일 의 각도 (도) 45 도의 피치를 가진 Yaw의 YAW 특성.
참고 : 마지막 2 장의 사진 : 먼저 홈 위치에 보관하십시오. 이는 모두 동일합니다 (txt 파일 참조). 그런 다음 45도 회전 한 후 평면 장치 (자력계 포함)를 사용하여 자력계의 Z 축을 따라 회전했습니다.
마지막 이미지와 마찬가지로 장치는 45도 각도로 자력계의 Z 축을 따라 피치로 조정되었습니다.
이것들이 내 문제를 해결하는 데 도움이되기를 바랍니다.
새로운 개발은 다음과 같습니다.
나는 제목에서 일했다. 나는 출력을 따랐다.
csv
답변
나는 당신의 그래프를 좋아합니다. 그들은 롤, 피치 및 요가 작동하고 있음을 분명히 보여줍니다. 축하합니다! 그것은 이미 대부분의 사람들이하는 것보다 더 많은 발전입니다.
제시 한 코드가 예상 한 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- 마그네토 미터 ; 기타
답변
LSM303 의 애플리케이션 노트 에는 문제에 적용 할 수있는 기울기 보정 나침반 교정에 유용한 안내서가 있습니다. 그것은 매우 상세합니다. 그렇지 않으면 계산을 다시 작성했을 것입니다. 자기장 라인의 축을 중심으로 회전해도 자력계 값이 변경되지 않으므로 가속도계 값은 전체 피치, 롤 및 요 계산에 필요합니다. 가속도계의 중력도 마찬가지입니다.