by Roberto Lot

> restart: libname := libname, "C:/libs/MBSymba.mla": with(MBSymba_r6):

In MBSymba, each Cartesian reference frames is described by means of a 4x4 transformation matrix T.

Such matrix embeds the frame orientation (3x3 rotation matrix R) and frame origin (3x1 vector A) with respect a unique master frame, which is by default an inertial reference frame called ground.

> show(ground);

Reference frames may easily be contructed by combining basic rotation and translation operators

# Translation operator

translational operator translate

> TA := translate(xA,yA,zA);

# Rotation operators

rotation operator rotate

rotation about X axis by phi

> Rx := rotate('X',phi);

> evalm(Rx &* P);

rotation around Y axis by mu and around Z axis by psi

> Ry := rotate('Y',mu);

Rz := rotate('Z',psi);

# Combination of Transformations

> alias (S=sin,C=cos);

transformations may be combined by multiplying basic transformation operators, starting from left to right

Example

> psi, phi, mu; yaw, roll and pitch angle

overall transformation matrix is

> TT := rotate('Z',psi) * rotate('X',phi) * rotate('Y',mu);

BE CAREFUL: transformation concatenation is not commutative, a change in the transformation order yields a different transformation matrix

example:

> rotate('X',phi) * rotate('Y',mu);

rotate('Y',mu) * rotate('X',phi);

# Angular velocity

If you define a time variant transformation matrix

> TT := rotate('X',phi(t)) * rotate('Y',mu(t));

you may easy compute the angular velocity as follows:

> Omega := angular_velocity(TT): show(Omega);