whats difference beetween angvel and rotvec?

10 ビュー (過去 30 日間)
Blazej Dobija
Blazej Dobija 2020 年 7 月 13 日
回答済み: Brian Fanous 2020 年 7 月 24 日
As in title. They both seems to do similar job but angvel return odd values that I can not understand where it comes from.
q = quaternion(1,0,0,0);
q0 = quaternion(eul2quat(([0 1 0]),'XYZ'));
angvel(q0,1,'frame',q) % 0 0.9589 0 - undexpected
rotvec(q0) % 0 1.0000 0 - expected

回答 (2 件)

James Tursa
James Tursa 2020 年 7 月 15 日
編集済み: James Tursa 2020 年 7 月 16 日
I don't have a version of MATLAB installed that has the angvel( ) and rotvec( ) functions, so I can only make an educated guess. Can you open up the code for angvel.m or rotvec.m and see what is actually going on? It could be a variation of the following:
For the 'frame' convention, the quaternion is a right-chain Hamilton quaternion. So the derivative of an arbitrary quaternion q in this convention would be:
qdot = (1/2) * q * w
Solving for the angular velocity w gives
w = 2 * q^-1 * qdot
Then suppose you had two different quaternions q1 and q2 and wanted to know the angular velocity that would result in q1 being rotated into q2 in some delta time dt.
A crude numerical approximation to qdot could be:
qdot = deltaq / dt = (q2 - q1) / dt
So you would get the following approximate expression for the angular velocity w:
w = 2 * q1^-1 * (q2 - q1) / dt
Now just plug in your initial quaternion q for q1 and your final quaternion q0 for q2 and you get for your particular case:
w = 2 * q^-1 * (q0 - q) / dt
Then pick off the vector part of the result for the angular velocity vector. E.g.,
>> q = quaternion(1,0,0,0);
>> q0 = quaternion(eul2quat(([0 1 0]),'XYZ'));
>> Q = double(q)';
>> Q0 = double(q0)';
>> dt = 1;
>> 2*quatmultiply(quatinv(Q),(Q0-Q)/dt)
ans =
-0.2448 0 0.9589 0
>> ans(2:4)
ans =
0 0.9589 0
Again, this is all just an educated guess.
Bottom line is this is just a 1st order crude numerical approximation, not an angular rate vector derived from pure rotation principles. For a "large" rotation angle this would give poor results.
For more information on quaternion conventions, see the following links:

Brian Fanous
Brian Fanous 2020 年 7 月 24 日
angvel gives you the angular velocity – essentially, change in orientation over time.
rotvec is simply an alternate expression of orientation (along the lines of Euler angles or a rotation matrix). It is the axis of orientation, scaled by the angle of rotation.

カテゴリ

Help Center および File ExchangeQuaternion Math についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by