Here is what we know from virtual work: \begin{equation} \delta W=\sum_{i=1}^N{\vec F_i\cdot\delta\vec r_{i}} \end{equation} Where $N$ is the number of bodies in the system. I am considering a quadcopter, modeled as a rigid body so it is just one body and we have: $$ \delta W=\vec F\cdot\delta\vec r $$ My question concerns only rotational dynamics, so let's focus on just the torques. Let us rename $\vec F$ to $\vec M$ just to make it clear that we are talking about torques (moments): $$ \delta W=\vec M \cdot \delta\vec r $$ Expressed in the quadcopter frame (call it frame $B$), the moments exerted by the propellers on the quadcopter are, generally: $$ \vec M=\begin{bmatrix} \tau_x^B \\ \tau_y^B \\ \tau_z^B \end{bmatrix} $$ Because we are talking about moments, the "position" vector $\vec r$ actually holds the rotations expressed in the same frame as $\vec M$. Because I express $\vec M$ in the $B$ frame, I need to express the rotations in the $B$ frame. I am using the Tait-Bryan Euler angle convention. Starting from the inertial frame $I$ then:

  1. Yaw by $\psi$ around $z_I$, the result is the $\{x',y',z'\}$ frame
    • Corresponding rotation matrix is $R_\psi$
  2. Pitch by $\theta$ around $y'$, the result is the $\{x'',y'',z''\}$ frame
    • Corresponding rotation matrix is $R_\theta$
  3. Roll by $\phi$ around $x''$, the result is the $\{x_B,y_B,z_B\}$ frame
    • Corresponding rotation matrix is $R_\phi$

You see that each Euler angle is in a different frame: $\psi$ is in the $I$ frame, $\theta$ is in the $(')$ frame and $\phi$ is in the $('')$ frame. From what I know, we transform between angular rates in the $B$ frame and the Euler angle time derivatives using:

$$ \omega=R_\phi\begin{bmatrix}\dot\phi\\0\\0\end{bmatrix}+ R_\phi R_\theta\begin{bmatrix}0\\\dot\theta\\0\end{bmatrix}+ R_\phi R_\theta R_\psi\begin{bmatrix}0\\0\\\dot\psi\end{bmatrix} $$

However, $\omega$ is not integrable (see sub-section 3.17 of http://people.mech.kuleuven.be/~bruyninc/tmp/HermanBruyninckx-robotics.pdf). Therefore angles in the body frame as such do not exist and I cannot simply write:

$$ \vec r=R_\phi\begin{bmatrix}\phi\\0\\0\end{bmatrix}+ R_\phi R_\theta\begin{bmatrix}0\\\theta\\0\end{bmatrix}+ R_\phi R_\theta R_\psi\begin{bmatrix}0\\0\\\psi\end{bmatrix} $$

Where $\vec r$ is our "position" vector in the virtual work equation containing three angles in the $B$ frame identifying the quad-copter's attitude. The end motivation is to apply the generalized force relation: $$ Q_j=\sum_{i=1}^N{\vec F_i \cdot \frac{\partial \vec r_i}{\partial q_j}} $$ Where $q_j$ are the generalized coordinates, for me these are:

  • $q_1=\phi$
  • $q_2=\theta$
  • $q_3=\psi$

I really appreciate your help for my question: find the expression for the generalized forces $Q_j$ (well, generalized torque really in this case).

  • $\begingroup$ Did you mean $\dot{\omega}=$ or ${\omega}=$ ? Angular velocity is $\omega=f(\dot{\phi},\ldots)$ and angular acceleration is $\dot{\omega}=f(\dot{\phi},\ddot{\phi},\ldots)$ $\endgroup$ Commented Jul 29, 2015 at 18:09
  • $\begingroup$ You are correct, the dot is wrong $\endgroup$ Commented Jul 29, 2015 at 18:17

1 Answer 1


The velocity jacobian is $\vec{\omega}_B = J\, \dot{q}$ with $q=(\phi,\theta,\psi)$. This is used to transform between the generalized forces/torques $Q$ and the vector torques $\vec{M}_B=(\tau_x^B,\tau_y^B,\tau_z^B)$

$$ Q = J^\intercal \vec{M}_B $$

The power through the joint is

$$ Q \cdot \dot{q} = Q^\intercal \dot{q} = \left(J^\intercal \vec{M}_B\right)^\intercal \dot{q} = \vec{M}_B^\intercal J \dot{q} = \vec{M}_B^\intercal \vec{\omega} =\vec{M}_B \cdot \vec{\omega} \hphantom{MMM} \checkmark $$


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.