Filter löschen
Filter löschen

can someone explain how i would compute this code

3 Ansichten (letzte 30 Tage)
lateef
lateef am 25 Jul. 2023
Kommentiert: James Tursa am 31 Jul. 2023
% SO FAR THIS IS THE CODE IVE COMPUTED IM NOT SURE WHERE TO CONTINUE OR IF
% CODE CORRECT SO FAR
u1 = [1; 2; 3];
a1 = 45;
u2 = [0; 1; 0];
a2 = 30;
function qmul(u1, a1, u2, a2)
% Convert angles from degrees to radians
a1_rad = deg2rad(a1);
a2_rad = deg2rad(a2);
% Normalize the Euler axes
u1 = u1 / norm(u1);
u2 = u2 / norm(u2);
% Compute quaternions q1 and q2
epsilon1 = u1 * sin(a1_rad / 2);
eta1 = cos(a1_rad / 2);
q1 = [epsilon1; eta1];
epsilon2 = u2 * sin(a2_rad / 2);
eta2 = cos(a2_rad / 2);
q2 = [epsilon2; eta2];
% Compute q3 = q1 * q2 using quaternion multiplication
epsilon3 = cross(epsilon1, epsilon2) + eta1 * epsilon2 + eta2 * epsilon1;
eta3 = eta1 * eta2 - dot(epsilon1, epsilon2);
q3 = [epsilon3; eta3];
% Compute Q(q1) matrix
I = eye(3);
S_epsilon1 = [0, -epsilon1(3), epsilon1(2);
epsilon1(3), 0, -epsilon1(1);
-epsilon1(2), epsilon1(1), 0];
Q_q1 = eta1 * I + S_epsilon1 * epsilon1;
% Compute q3 = Q(q1) * q2 using matrix-vector multiplication
q3_matrix = Q_q1 * q2;
% Compute the rotation matrix R(q3)
R_q3 = (eta3 - norm(epsilon3)^2) * I + 2 * epsilon3 * epsilon3' - 2 * eta3 * S(epsilon3);
% Display results
fprintf('Quaternion q1: [%f, %f, %f, %f]\n', q1);
fprintf('Quaternion q2: [%f, %f, %f, %f]\n', q2);
fprintf('Quaternion q3 (quaternion multiplication): [%f, %f, %f, %f]\n', q3);
fprintf('Quaternion q3 (matrix-vector multiplication): [%f, %f, %f, %f]\n', q3_matrix);
fprintf('Matrix Q(q1):\n');
disp(Q_q1);
fprintf('Rotation matrix R(q3):\n');
disp(R_q3);
end
  1 Kommentar
James Tursa
James Tursa am 31 Jul. 2023
What exactly are you asking us to help you with? If you want to verify your quaternion multiplication and conversion to rotation matrix code, why not simply compare to results obtained from calling MATLAB functions for this? Keep in mind that MATLAB quaternion functions are in scalar-vector order, whereas your code is in vector-scalar order.

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Image Analyst
Image Analyst am 25 Jul. 2023
Your function qmul does not compute q1q2, or the rotation matrix Rq3, or print anything out to the command window. Fix those things and then enter in the same sample values they gave you and see if you get the same results as they do.
To learn other fundamental concepts, invest 2 hours of your time here:
  1 Kommentar
Image Analyst
Image Analyst am 25 Jul. 2023
By the way, what is the status of our other outstanding question here:
You never commented on it or accepted it. We don't like just tossing answers out into a black hole never to hear anything ever again.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Quaternion Math finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by