Ориентация от показаний акселерометра и гироскопа
The imufilter Система object™ предохраняет данные акселерометра и гироскопа для оценки ориентации устройства.
Для оценки ориентации устройства:
Создайте imufilter Объекту и установите его свойства.
Вызывайте объект с аргументами, как будто это функция.
Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».
возвращает косвенный фильтр Калмана Системного объекта, FUSE = imufilterFUSEдля слияния данных акселерометра и гироскопа для оценки ориентации устройства. Фильтр использует вектор состояния с девятью элементами, чтобы отследить ошибку в оценке ориентации, оценке смещения гироскопа и оценке линейного ускорения.
возвращает FUSE = imufilter('ReferenceFrame',RF)imufilter фильтра Системного объекта, который запирает данные акселерометра и гироскопа, чтобы оценить ориентацию устройства относительно систему координат RF. Задайте RF как 'NED' (Северо-Восток-Даун) или 'ENU' (Восток-Север-Вверх). Значение по умолчанию 'NED'.
устанавливает каждое свойство FUSE = imufilter(___,Name,Value)Name к заданной Value. Неопределенные свойства имеют значения по умолчанию.
FUSE = imufilter('SampleRate',200,'GyroscopeNoise',1e-6) создает Системный объект, FUSEс частотой дискретизации 200 Гц и шумом гироскопа, установленным на 1e-6 радиан в секунду в квадрате.Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release функция разблокирует их.
Если свойство настраивается, можно изменить его значение в любой момент.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.
SampleRate - Частота дискретизации данных входного датчика (Гц)100 (по умолчанию) | положительный конечный скалярСкорость дискретизации данных входного датчика в Гц, заданная как положительный конечный скаляр.
Настраиваемый: Нет
Типы данных: single | double | uint8 | uint16 | uint32 | uint64 | int8 | int16 | int32 | int64
DecimationFactor - Коэффициент десятикратного уменьшения1 (по умолчанию) | положительный целочисленный скалярДесятикратное уменьшение коэффициент, которым можно уменьшить скорость дискретизации данных датчика входов, заданный как положительный целый скаляр.
Количество строк входов, accelReadings и gyroReadings, должен быть кратным коэффициенту десятикратного уменьшения.
Настраиваемый: Нет
Типы данных: single | double | uint8 | uint16 | uint32 | uint64 | int8 | int16 | int32 | int64
AccelerometerNoise - Отклонение шума сигнала акселерометра ((м/с2)2)0.00019247 (по умолчанию) | положительный действительный скалярОтклонение шума сигнала акселерометра в (м/с2)2, заданный как положительный действительный скаляр.
Настраиваемый: Да
Типы данных: single | double | uint8 | uint16 | uint32 | uint64 | int8 | int16 | int32 | int64
GyroscopeNoise - Отклонение шума сигнала гироскопа ((рад/с)2)9.1385e-5 (по умолчанию) | положительный действительный скалярОтклонение шума сигнала гироскопа в (рад/с)2, заданный как положительный действительный скаляр.
Настраиваемый: Да
Типы данных: single | double | uint8 | uint16 | uint32 | uint64 | int8 | int16 | int32 | int64
GyroscopeDriftNoise - Отклонение смещения гироскопа ((рад/с)2)3.0462e-13 (по умолчанию) | положительный действительный скалярОтклонение дрейфа смещения гироскопа в (рад/с)2, заданный как положительный действительный скаляр.
Настраиваемый: Да
Типы данных: single | double | uint8 | uint16 | uint32 | uint64 | int8 | int16 | int32 | int64
LinearAccelerationNoise - Отклонение линейного шума ускорения ((м/с2)2)0.0096236 (по умолчанию) | положительный действительный скалярОтклонение линейного шума ускорения в (м/с2)2, заданный как положительный действительный скаляр. Линейное ускорение моделируется как процесс lowpass отфильтрованного белого шума.
Настраиваемый: Да
Типы данных: single | double | uint8 | uint16 | uint32 | uint64 | int8 | int16 | int32 | int64
LinearAcclerationDecayFactor - Коэффициент затухания для дрейфа линейного ускорения0.5 (по умолчанию) | скаляром в области значений [0,1]Коэффициент распада для дрейфа линейного ускорения, заданный как скаляр в области значений [0,1]. Если линейное ускорение изменяется быстро, задайте LinearAccelerationDecayFactor к более низкому значению. Если линейное ускорение изменяется медленно, установите LinearAccelerationDecayFactor к более высокому значению. Дрейф линейного ускорения моделируется как процесс белого шума с фильтрацией методом lowpass.
Настраиваемый: Да
Типы данных: single | double | uint8 | uint16 | uint32 | uint64 | int8 | int16 | int32 | int64
InitialProcessNoise - Ковариационная матрица для технологического шумаКовариационная матрица для технологического шума, заданная как матрица 9 на 9. Значение по умолчанию является:
Columns 1 through 6
0.000006092348396 0 0 0 0 0
0 0.000006092348396 0 0 0 0
0 0 0.000006092348396 0 0 0
0 0 0 0.000076154354947 0 0
0 0 0 0 0.000076154354947 0
0 0 0 0 0 0.000076154354947
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
Columns 7 through 9
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0.009623610000000 0 0
0 0.009623610000000 0
0 0 0.009623610000000Начальная ковариационная матрица процесса учитывает ошибку в модели процесса.
Типы данных: single | double | uint8 | uint16 | uint32 | uint64 | int8 | int16 | int32 | int64
OrientationFormat - Формат выходной ориентации'quaternion' (по умолчанию) | 'Rotation matrix'Выход выходной ориентации, заданный как 'quaternion' или 'Rotation matrix'. Размер выхода зависит от размера входа, N и выхода формата ориентации:
'quaternion' -- Выход представляет собой N -by-1 quaternion.
'Rotation matrix' -- Выход является матрицей вращения N 3 на 3 байта.
Типы данных: char | string
[ fuses accelerometer и показания гироскопа для вычисления ориентации и скорости вращения измерений. Алгоритм принимает, что устройство стационарно перед первым вызовом.orientation,angularVelocity] = FUSE(accelReadings,gyroReadings)
accelReadings - Показания акселерометра в системе координат тела датчика (м/с2)Показания акселерометра в системе координат тела датчика в м/с2, заданный как матрица N -by-3. N - количество выборок и три столбца accelReadings представление измерений [x
y z
]. Показания акселерометра приняты соответствующими скорости дискретизации, заданной свойством SampleRate.
Типы данных: single | double
gyroReadings - Показания гироскопа в системе координат тела датчика (рад/с)Показания гироскопа в системе координат тела датчика в рад/с, заданные как матрица N-на-3. N - количество выборок и три столбца gyroReadings представление измерений [x
y z
]. Показания гироскопа приняты соответствующими скорости дискретизации, заданной свойством SampleRate.
Типы данных: single | double
orientation - Ориентация, которая вращает величины от глобальной системы координат к системе координат тела датчикаОриентация, которая может поворачивать величины из глобальной системы координат в систему координат тела, возвращаемую как кватернионы или массив. Размер и тип orientation зависит от того, задано ли для свойства OrientationFormat значение 'quaternion' или 'Rotation matrix':
'quaternion' - выходы являются вектором кватернионов M-на-1 с таким же базовым типом данных, как и входы.
'Rotation matrix' - выходы представляют собой массив M 3 на 3 байта с матрицами поворота того же типа, что и входы.
Количество входа отсчетов, N и свойство DecimationFactor определяют M.
Можно использовать orientation в rotateframe функция для поворота величин из глобальной системы координат в систему координат тела датчика.
Типы данных: quaternion | single | double
angularVelocity - Скорость вращения в системе координат тела датчика (рад/с) Скорость вращения с смещением гироскопа, удаленным в системе координат тела датчика в рада/с, возвращается как массив M на 3. Количество входа отсчетов, N и свойство DecimationFactor определяют M.
Типы данных: single | double
Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:
release(obj)
imufiltertune | Настройка imufilter параметры для уменьшения ошибки расчета |
Загрузите rpy_9axis файл, содержащий зарегистрированные данные акселерометра, гироскопа и датчика магнитометра от устройства, колеблющегося с тангажом (вокруг оси Y), затем рыскание (вокруг оси Z), а затем крен (вокруг оси X). Файл также содержит частоту дискретизации записи.
load 'rpy_9axis.mat' sensorData Fs accelerometerReadings = sensorData.Acceleration; gyroscopeReadings = sensorData.AngularVelocity;
Создайте imufilter Система object™ со скоростью дискретизации, установленной на скорость дискретизации данных о датчике. Задайте коэффициент десятикратного уменьшения два, чтобы уменьшить вычислительные затраты алгоритма.
decim = 2; fuse = imufilter('SampleRate',Fs,'DecimationFactor',decim);
Передайте показания акселерометра и показания гироскопа в imufilter объект, fuseдля вывода оценки ориентации тела датчика с течением времени. По умолчанию ориентация выводится как вектор кватернионов.
q = fuse(accelerometerReadings,gyroscopeReadings);
Ориентация определяется угловым перемещением, необходимым для поворота родительской системы координат к дочерней системе координат. Постройте график ориентации углов Эйлера в степенях с течением времени.
imufilter слияние правильно оценивает изменение ориентации от предполагаемой северо-обращенной начальной ориентации. Однако ось X устройства указывала на юг при регистрации. Чтобы правильно оценить ориентацию относительно истинной начальной ориентации или относительно NED, используйте ahrsfilter.
time = (0:decim:size(accelerometerReadings,1)-1)/Fs; plot(time,eulerd(q,'ZYX','frame')) title('Orientation Estimate') legend('Z-axis', 'Y-axis', 'X-axis') xlabel('Time (s)') ylabel('Rotation (degrees)')

Моделируйте наклоняющийся БИНС, который содержит акселерометр и гироскоп, используя imuSensor Системные object™. Используйте идеальные и реалистичные модели, чтобы сравнить результаты отслеживания ориентации с помощью imufilter Системный объект.
Загрузите struct, описывающую основную истину движение и частоту дискретизации. Структура движения t описывает последовательные повороты:
рыскание: 120 степени за две секунды
тангаж: 60 степени более одной секунды
крен: 30 степени за полсекунды
крен: -30 степени за полсекунды
тангаж: -60 степени в течение одной секунды
рыскание: -120 степени за две секунды
На последнем этапе struct движения объединяет 1-е, 2-е и 3-е повороты в вращение с одной осью. Ускорение, скорость вращения и ориентация заданы в локальной системе координат NED.
load y120p60r30.mat motion fs accNED = motion.Acceleration; angVelNED = motion.AngularVelocity; orientationNED = motion.Orientation; numSamples = size(motion.Orientation,1); t = (0:(numSamples-1)).'/fs;
Создайте идеальный объект датчика IMU и объект фильтра IMU по умолчанию.
IMU = imuSensor('accel-gyro','SampleRate',fs); aFilter = imufilter('SampleRate',fs);
В цикле:
Симулируйте выход БИНС путем подачи движения основная истина к объекту датчика БИНС.
Фильтрация выхода БИНС с помощью объекта фильтра БИНС по умолчанию.
orientation = zeros(numSamples,1,'quaternion'); for i = 1:numSamples [accelBody,gyroBody] = IMU(accNED(i,:),angVelNED(i,:),orientationNED(i,:)); orientation(i) = aFilter(accelBody,gyroBody); end release(aFilter)
Постройте график ориентации с течением времени.
figure(1) plot(t,eulerd(orientation,'ZYX','frame')) xlabel('Time (s)') ylabel('Rotation (degrees)') title('Orientation Estimation -- Ideal IMU Data, Default IMU Filter') legend('Z-axis','Y-axis','X-axis')

Измените свойства своего imuSensor для моделирования реальных датчиков. Еще раз запустите цикл и постройте график оценки ориентации с течением времени.
IMU.Accelerometer = accelparams( ... 'MeasurementRange',19.62, ... 'Resolution',0.00059875, ... 'ConstantBias',0.4905, ... 'AxesMisalignment',2, ... 'NoiseDensity',0.003924, ... 'BiasInstability',0, ... 'TemperatureBias', [0.34335 0.34335 0.5886], ... 'TemperatureScaleFactor',0.02); IMU.Gyroscope = gyroparams( ... 'MeasurementRange',4.3633, ... 'Resolution',0.00013323, ... 'AxesMisalignment',2, ... 'NoiseDensity',8.7266e-05, ... 'TemperatureBias',0.34907, ... 'TemperatureScaleFactor',0.02, ... 'AccelerationBias',0.00017809, ... 'ConstantBias',[0.3491,0.5,0]); orientationDefault = zeros(numSamples,1,'quaternion'); for i = 1:numSamples [accelBody,gyroBody] = IMU(accNED(i,:),angVelNED(i,:),orientationNED(i,:)); orientationDefault(i) = aFilter(accelBody,gyroBody); end release(aFilter) figure(2) plot(t,eulerd(orientationDefault,'ZYX','frame')) xlabel('Time (s)') ylabel('Rotation (degrees)') title('Orientation Estimation -- Realistic IMU Data, Default IMU Filter') legend('Z-axis','Y-axis','X-axis')

Способность imufilter отслеживать достоверные данные значительно уменьшается при моделировании реалистичного БИНС. Чтобы улучшить эффективность, измените свойства своего imufilter объект. Эти значения определяли эмпирически. Еще раз запустите цикл и постройте график оценки ориентации с течением времени.
aFilter.GyroscopeNoise = 7.6154e-7; aFilter.AccelerometerNoise = 0.0015398; aFilter.GyroscopeDriftNoise = 3.0462e-12; aFilter.LinearAccelerationNoise = 0.00096236; aFilter.InitialProcessNoise = aFilter.InitialProcessNoise*10; orientationNondefault = zeros(numSamples,1,'quaternion'); for i = 1:numSamples [accelBody,gyroBody] = IMU(accNED(i,:),angVelNED(i,:),orientationNED(i,:)); orientationNondefault(i) = aFilter(accelBody,gyroBody); end release(aFilter) figure(3) plot(t,eulerd(orientationNondefault,'ZYX','frame')) xlabel('Time (s)') ylabel('Rotation (degrees)') title('Orientation Estimation -- Realistic IMU Data, Nondefault IMU Filter') legend('Z-axis','Y-axis','X-axis')

Количественная оценка улучшенных производительностей измененных imufilter, постройте график кватернионного расстояния между движением основная истина и ориентацией как возвращено imufilter со свойствами по умолчанию и nondefault.
qDistDefault = rad2deg(dist(orientationNED,orientationDefault)); qDistNondefault = rad2deg(dist(orientationNED,orientationNondefault)); figure(4) plot(t,[qDistDefault,qDistNondefault]) title('Quaternion Distance from True Orientation') legend('Realistic IMU Data, Default IMU Filter', ... 'Realistic IMU Data, Nondefault IMU Filter') xlabel('Time (s)') ylabel('Quaternion Distance (degrees)')

В этом примере показано, как удалить смещение гироскопа из БИНС с помощью imufilter.
Использование kinematicTrajectory для создания траектории с двумя частями. Первая часть имеет постоянную скорость вращения вокруг осей Y и Z. Вторая часть имеет изменяющуюся скорость вращения во всех трех осях.
duration = 60*8; fs = 20; numSamples = duration * fs; rng('default') % Seed the RNG to reproduce noisy sensor measurements. initialAngVel = [0,0.5,0.25]; finalAngVel = [-0.2,0.6,0.5]; constantAngVel = repmat(initialAngVel,floor(numSamples/2),1); varyingAngVel = [linspace(initialAngVel(1), finalAngVel(1), ceil(numSamples/2)).', ... linspace(initialAngVel(2), finalAngVel(2), ceil(numSamples/2)).', ... linspace(initialAngVel(3), finalAngVel(3), ceil(numSamples/2)).']; angVelBody = [constantAngVel; varyingAngVel]; accBody = zeros(numSamples,3); traj = kinematicTrajectory('SampleRate',fs); [~,qNED,~,accNED,angVelNED] = traj(accBody,angVelBody);
Создайте imuSensor Системные object™, IMUс неидеальным гироскопом. Функции IMU с ускорением «земля-правда», скоростью вращения и ориентацией.
IMU = imuSensor('accel-gyro', ... 'Gyroscope',gyroparams('RandomWalk',0.003,'ConstantBias',0.3), ... 'SampleRate',fs); [accelReadings, gyroReadingsBody] = IMU(accNED,angVelNED,qNED);
Создайте imufilter Системный объект, fuse. Функции fuse с смоделированными показаниями акселерометра и показаниями гироскопа.
fuse = imufilter('SampleRate',fs, 'GyroscopeDriftNoise', 1e-6); [~,angVelBodyRecovered] = fuse(accelReadings,gyroReadingsBody);
Постройте график скорости вращения «земля-правда», показаний гироскопа и восстановленной скорости вращения для каждой оси.
Скорость вращения, возвращенная из imufilter компенсирует эффект смещения гироскопа с течением времени и сходится к истинной скорости вращения.
time = (0:numSamples-1)'/fs; figure(1) plot(time,angVelBody(:,1), ... time,gyroReadingsBody(:,1), ... time,angVelBodyRecovered(:,1)) title('X-axis') legend('True Angular Velocity', ... 'Gyroscope Readings', ... 'Recovered Angular Velocity') ylabel('Angular Velocity (rad/s)')

figure(2) plot(time,angVelBody(:,2), ... time,gyroReadingsBody(:,2), ... time,angVelBodyRecovered(:,2)) title('Y-axis') ylabel('Angular Velocity (rad/s)')

figure(3) plot(time,angVelBody(:,3), ... time,gyroReadingsBody(:,3), ... time,angVelBodyRecovered(:,3)) title('Z-axis') ylabel('Angular Velocity (rad/s)') xlabel('Time (s)')

Примечание: Следующий алгоритм применяется только к опорной системе координат NED.
The imufilter использует шестиосевую структуру фильтра Калмана, описанную в [1]. Алгоритм пытается отследить ошибки в ориентации, смещении гироскопа и линейном ускорении, чтобы вывести конечную ориентацию и скорость вращения. Вместо непосредственного отслеживания ориентации косвенный фильтр Калмана моделирует процесс ошибки, x, с рекурсивным обновлением:
где xk является вектором 9 на 1, состоящим из:
θk -- вектор ошибки ориентации 3 на 1, в степенях, в момент времени k
bk -- гироскоп 3 на 1 нуле вектор смещения угловой скорости, в град/с, в момент времени k
ak -- вектор ошибки ускорения 3 на 1, измеренный в системе координат датчика, в g, в момент времени k
wk -- аддитивный вектор шума 9 на 1
Fk -- модель перехода состояния
Поскольку x k задан как процесс ошибки, априорная оценка всегда равна нулю, и, следовательно, модель перехода состояния, F k, равна нулю. Это понимание приводит к следующему уменьшению стандартных уравнений Калмана:
Стандартные уравнения Калмана:
Уравнения Калмана, используемые в этом алгоритме:
где
xk− - прогнозируемая (априори) оценка состояния; процесс ошибки
Pk− - предсказанная (априорная) оценка ковариации
yk -- инновации
Sk -- инновационная ковариация
Kk -- коэффициент усиления Калмана
xk+ - обновленная (апостериорная) оценка состояния
Pk+ - обновленная (a posteriori) оценка ковариации
k представляет итерацию, надстрочный индекс + представляет апостериорную оценку и надстрочный индекс − представляет априорную оценку.
Графические и последующие шаги описывают итерацию на основе одного кадра через алгоритм.

Перед первой итерацией accelReadings и gyroReadings входы chunked в системы координат 1 на 3 и DecimationFactor-by-3 системы координат, соответственно. Алгоритм использует самые актуальные показания акселерометра, соответствующие фрагменту показаний гироскопа.
Пройдите по алгоритму для объяснения каждого этапа подробного обзора.

Алгоритм моделирует ускорение и угловое изменение как линейные процессы.

Ориентация для текущей системы координат предсказывается путем первой оценки углового изменения по сравнению с предыдущей системой координат:
где N - коэффициент десятикратного уменьшения, заданный DecimationFactor свойство, и fs является частотой дискретизации, заданной SampleRate свойство.
Угловое изменение преобразуется в кватернионы с помощью rotvec
quaternion синтаксис конструкции:
Предыдущая оценка ориентации обновляется путем поворота ее на И Q:
Во время первой итерации оценка ориентации, q−, инициализируется ecompass при предположении, что x -ось указывает на север.
Вектор гравитации интерпретируется как третий столбец кватерниона, q−, в матричном виде вращения:
См. ecompass для объяснения того, почему третий столбец rPrior может быть интерпретирован как вектор гравитации.
Вторую оценку вектора гравитации производят путем вычитания из показаний акселерометра истекшей оценки линейного ускорения предыдущей итерации:
Модель ошибки является различием между оценкой гравитации из показаний акселерометра и оценкой гравитации из показаний гироскопа: .

Уравнения Калмана используют оценку тяжести, полученную из показаний гироскопа, g и наблюдения процесса ошибки, z, чтобы обновить усиление Калмана и промежуточные ковариационные матрицы. Коэффициент усиления Калмана применяется к сигналу ошибки, z, для вывода апостериорной оценки ошибки x+.

Модель наблюдения преобразует наблюдаемое состояние 1 на 3, g, в истинное состояние 3 на 9, H.
Модель наблюдения построена как:
где gx, gy и gz являются x -, y - и z - элементами вектора тяжести, оцененными из ориентации, соответственно. κ является константой, определяемой свойствами SampleRate и DecimationFactor: κ = DecimationFactor/ SampleRate.
Вывод модели наблюдения см. в разделах 7.3 и 7.4 документа [1].
Инновационная ковариация является матрицей 3 на 3, используемой для отслеживания изменчивости измерений. Инновационная ковариационная матрица вычисляется как:
где
H - матрица модели наблюдения
P− - предсказанная (априорная) оценка ковариации модели наблюдения, вычисленная в предыдущей итерации
R - ковариация шума модели наблюдения, рассчитанная как:
Следующие свойства определяют отклонение шума модели наблюдения:
κ -- (DecimationFactor/SampleRate)2
β -- GyroscopeDriftNoise
η -- GyroscopeNoise
λ -- AccelerometerNoise
Ковариация оценки ошибки является матрицей 9 на 9, используемой для отслеживания изменчивости состояния.
Ковариационная матрица оценки ошибки обновляется следующим образом:
где K - коэффициент усиления Калмана, H - матрица измерений и P− - ковариация оценки ошибки, вычисленная во время предыдущей итерации.
Ковариация оценки ошибки является матрицей 9 на 9, используемой для отслеживания изменчивости состояния. Априорная оценка ошибки, ковариация, P−, устанавливается в ковариацию шума процесса, Q, определенную во время предыдущей итерации. Q вычисляется как функция ковариации оценки апостериорной ошибки, P+. При вычислении Q условия перекрестной корреляции приняты незначительными по сравнению с терминами автокорреляции и равны нулю:
где
P+ - обновленная (a posteriori) оценка ошибки ковариация
β -- GyroscopeDriftNoise
η -- GyroscopeNoise
Для вывода терминов матрицы ошибок процесса смотрите раздел 10.1 документа [1].
Матрица усиления Калмана является матрицей 9 на 3, используемой для взвешивания нововведения. В этом алгоритме нововведение интерпретируется как процесс ошибки, z.
Матрица усиления Калмана построена как:
где
P- -- предсказанная ковариация ошибок
H -- модель наблюдения
S -- инновационная ковариация
Апостериорная оценка ошибки определяется путем объединения матрицы усиления Калмана с ошибкой в оценках вектора гравитации:

Оценка ориентации обновляется путем умножения предыдущей оценки на ошибку:
Линейная оценка ускорения обновляется путем распада линейной оценки ускорения из предыдущей итерации и вычитания ошибки:
где
Оценка смещения гироскопа обновлена, вычтя ошибку смещения гироскопа из смещения гироскопа от предыдущей итерации:
Чтобы оценить скорость вращения, система координат gyroReadings усредняются, и вычисленное в предыдущей итерации смещение гироскопа вычитается:
где N - коэффициент десятикратного уменьшения, заданный DecimationFactor свойство.
Оценка смещения гироскопа инициализируется в нули для первой итерации.
[1] Комплексирование датчиков с открытым исходным кодом. https://github.com/memsindustrygroup/Open-Source-Sensor-Fusion/tree/master/docs
[2] Roetenberg, D., H.J. Luinge, C.T.M. Бэтен и П.Х. Велтинк. Компенсация магнитных нарушений порядка улучшает инерционное и магнитное измерение ориентации сегмента тела человека. Транзакции IEEE по нейронным системам и реабилитационной инженерии. Том 13. Выпуск 3, 2005, с. 395-405.
Указания и ограничения по применению:
Смотрите Системные объекты в Генерации кода MATLAB (MATLAB Coder).
ahrsfilter | ecompass | gpsSensor | imuSensor
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.