2015-03-28 3 views
1

Я использую функцию MATLAB angle2dcm, которая дает мне разные результаты от ожидаемого. Покопавшись в код (angle2dcm.m), я нашел определение формирования матрицы вращения отличным от стандартного.Matlab angle2dcm другое определение

Например, вращение Rx Ry Rz (т.е. 'XYZ' заказать) определяется как:

%  [   cy*cz, sz*cx+sy*sx*cz, sz*sx-sy*cx*cz] 
%  [   -cy*sz, cz*cx-sy*sx*sz, cz*sx+sy*cx*sz] 
%  [    sy,   -cy*sx,   cy*cx] 

в то время как правило, он должен быть (обратитесь к ссылке): http://inside.mines.edu/fs_home/gmurray/ArbitraryAxisRotation/

Разве это другое определение матрицы косинуса направления и матрицы вращения? Спасибо!

ответ

0

Это проблема с условными обозначениями, поскольку два случая (MATLAB по сравнению с указанной вами ссылкой) относятся к противоположным порядкам вращения. Если вы хотите использовать функцию MATLAB и продолжать использовать конвенцию по ссылке вы в курсе, в качестве возможного решения проблемы вы можете вызвать функцию с «ZYX» и инвертировать знаки всех углов, т.е.

dcm = angle2dcm(-r1, -r2, -r3,'xyz');  *EDITED* 

которая использует следующую матрицу вращения (см MatLab документации)

  [   cy*cz, sz*cx+sy*sx*cz, sz*sx-sy*cx*cz] 
     [   -cy*sz, cz*cx-sy*sx*sz, cz*sx+sy*cx*sz] 
     [    sy,   -cy*sx,   cy*cx] 

Если это заблуждение можно даже обернуть все в вспомогательную функцию, которая делает знак и порядок инверсии для вас, что-то вроде

function dcm = angle2dcm_mines(r1, r2, r3); 
dcm = angle2dcm(-r1, -r2, -r3,'xyz'); 

Есть другие способы обойти это, но это должно сработать.

+0

быстрый комментарий: по умолчанию для функции Matlab angle2dcm по умолчанию используется значение «zyx». Чтобы инвертировать порядок, можно использовать «xyz». –

+0

@ linzhang.robot спасибо за ваш комментарий, я сделал редактирование. Надеюсь, теперь все в порядке. –

0

Я уже некоторое время сражаюсь с этим, и благодаря сообщениям вроде этого мне (вокруг) удалось обогнуть его. вот моя ценность в два раза, которую я надеюсь, помогает и что-то возвращает.

Это боль, потому что существует 24 набора опций для применения углов эйлера (общий термин, но существуют различные варианты: tait-bryant, pitch-yaw-roll и т. Д.) В зависимости от порядка, в котором вращаются применяется ли последнее вращение примерно на той же оси, что и первая, и независимо от того, являются ли они внутренними (т. е. кадр вращается и последующие вращения применяются к новому кадру) или внешнему (все вращения применяются относительно исходного, фиксированного/мировой кадр). есть еще несколько общих наборов, таких как (extrinsic) XYZ и ZXZ.

Важно отметить, что матрица вращения (aka direction cosine) для XYZ эквивалентна (внутреннему) zyx, и это общее правило (т. Е. Переключает первое и последнее вращение). в терминах матрицы поворота это проявляется в том, что он берет его транспонирование и переключает знак функций sin. MATLAB использует подход внутреннего вращения. обратите внимание, что в терминах отдельных вращений они применяются путем предварительного умножения, причем первое вращение является самым дальним вправо.

 Смежные вопросы

  • Нет связанных вопросов^_^