Я использую Ahrsfilter из MATLAB Sensor Fusion Toolbox для соединения акселерометра, магнитометра и гироскопа для оценки курса Android телефона. Я использую систему отсчета NED (по умолчанию) и задаю формат ориентации в качестве матрицы вращения, а затем преобразую его в углы Эйлера. Вот фрагмент кода.
Fs = 100;
decim = 1;
fuse = ahrsfilter('SampleRate',Fs,'DecimationFactor',decim,'OrientationFormat','Rotation matrix');
rm = fuse(accelerometerReadings,gyroscopeReadings,magnetometerReading); % Note : Yaw is calculated with respect to the magnetic north
eul = [];
for i=1:length(rm)
eul = [eul;rotm2eul(rm(:,:,i),'ZYX');];
end
euld = rad2deg(eul);
и вот вывод: введите описание изображения здесь
Фактический заголовок телефона (ось Y телефона, который это угол наклона) был на истинном севере. Чтобы оценить курс, я использую угол поворота, чтобы вывести направление телефона (потому что угол поворота эквивалентен углу компаса).
Проблема: кажется, что угол рыскания хорошо работает для оценки курса, однако есть еще 90 градусов к фактическому курсу. Как я понимаю, угол поворота должен быть около 0 в качестве угла компаса, однако он показывает 90 градусов. Примечание: я также использовал кватернион вместо матрицы вращения, и у меня была та же проблема.