Denavit‐Hartenberg parameters of NAO H25 V5 - Adorno-Lab/Nao-robot GitHub Wiki

📝 The reader is assumed to be familiar with the Denavit-Hartenberg parameters convention and its usual nomenclature. For more information, please refer to Spong et al. (2006) and Siciliano et al. (2009).

  • Spong, M. W.; Hutchinson, S.; and Vidyasagar, M. 2006. Robot Modeling and Control. New York, NY: Wiley.
  • Siciliano, B.; Sciavicco, L.; Villani, L.; and Oriolo, G. 2009. Robotics. London: Springer London.

The image below shows the robot NAO H25 V5 (our robot) in the zero posture (i.e., when all the joints have value zero). The diagram on the right shows the position of the joints, all revolute and named following the Aldebaran documentation, and the five kinematic chains in which we divided the robot: head, left arm, right arm, left leg, and right leg.

The joints names given by Aldebaran will be needed to monitor and control the robot. However, we found some of the names, which include the words roll, pitch, and yaw, somewhat confusing, even with the documentation explicitly saying that the convention is XYZ-RPY. So, our suggestion is that you do not get too attached to the name of the joint, and follow the diagrams from the documentation and the frames of the DH models shown here to understand the movement of each one. Check the diagrams in the documentation about the links and joints of the robot.

The torso frame is the reference of all five chains. After we obtain the Denavit-Hartenberg (DH) parameters of each chain, we obtain the transformations from torso to the first joint and from the last joint to the end-effector. A translation is represented by $T_\mathrm{axis}(\mathrm{distance}).$ For example, $T_x(1)$ represents a translation of $1$ meter along the $x$-axis. Similarly, a rotation is represented by $R_\mathrm{axis}(\mathrm{angle}),$ which means that $R_z(\pi)$ represents a rotation of $\pi$ radians around the $z$-axis. A sequence of movements, for example a rotation followed by a translation, is represented by $R_z(\pi)T_x(1),$ respecting the order of transformations.

If you are using DQ Robotics and Python, the robot is implemented here.

Head chain

This chain is composed of two joints, HeadYaw and HeadPitch, located at the same position in the robot. There are two end-effectors of interest: the two cameras, located on the top and bottom of the head. You can find more information about them here. Below is the chain diagram, followed by the table with the DH parameters.

$\theta$ $d$ $a$ $\alpha$
HeadYaw 1 $\theta_1$ $0$ $0$ $-\pi/2$
HeadPitch 2 $\theta_2$ $0$ $0$ $0$

Considering the torso as the reference frame, the transformation from torso to the beginning of the chain is a translation of $\mathrm{NeckOffsetZ}$ along the $z$-axis, i.e., $T_z(\mathrm{NeckOffsetZ}).$

You can use the same chain and DH parameters for both cameras, just choose the correct transformation from the last joint frame to the end-effector. If using the top camera as the end-effector, the transformation from the last joint frame to it is $R_x(\pi/2)T_z(\mathrm{TopCameraZ})T_x(\mathrm{TopCameraX})R_y(\mathrm{TopCameraWY}).$ And if the end-effector of interest is the bottom camera, the transformation is $R_x(\pi/2)T_z(\mathrm{BottomCameraZ})T_x(\mathrm{BottomCameraX})R_y(\mathrm{BottomCameraWY}).$

Left arm chain

This chain is composed of five joints, from shoulder to wrist. The diagram of the left arm chain and the table with its DH parameters are shown below.

$\theta$ $d$ $a$ $\alpha$
LShoulderPitch 1 $\theta_1$ $0$ $0$ $\pi/2$
LShoulderRoll 2 $\theta_2+\pi/2$ $0$ $\mathrm{ElbowOffsetY}$ $\pi/2$
LElbowYaw 3 $\theta_3$ $\mathrm{UpperArmLength}$ $0$ $-\pi/2$
LElbowRoll 4 $\theta_4$ $0$ $0$ $\pi/2$
LWristYaw 5 $\theta_5$ $\mathrm{LowerArmLength}$ $0$ $0$

The transformation from torso to the first joint frame is $T_z(\mathrm{ShoulderOffsetZ})T_y(\mathrm{ShoulderOffsetY})R_x(-\pi/2).$ The end-effector of the left arm chain is the left hand, and the transformation from the last joint frame to it is $R_x(-\pi/2)R_z(-\pi/2)T_x(\mathrm{HandOffsetX})T_z(-\mathrm{HandOffsetZ}).$

Right arm chain

Similar to the left arm, this chain has also five joints, and is symmetric to the left arm, resulting in a similar set of DH parameters.

$\theta$ $d$ $a$ $\alpha$
RShoulderPitch 1 $\theta_1$ $0$ $0$ $\pi/2$
RShoulderRoll 2 $\theta_2+\pi/2$ $0$ $-\mathrm{ElbowOffsetY}$ $\pi/2$
RElbowYaw 3 $\theta_3$ $\mathrm{UpperArmLength}$ $0$ $-\pi/2$
RElbowRoll 4 $\theta_4$ $0$ $0$ $\pi/2$
RWristYaw 5 $\theta_5$ $\mathrm{LowerArmLength}$ $0$ $0$

The transformation from torso to the start of the chain is $T_z(\mathrm{ShoulderOffsetZ})T_y(-\mathrm{ShoulderOffsetY})R_x(-\pi/2).$ The transformation from the last joint frame to the right hand is $R_x(-\pi/2)R_z(-\pi/2)T_x(\mathrm{HandOffsetX})T_z(-\mathrm{HandOffsetZ}).$

Left leg chain

The legs have the longest chains, with six joints each. However, as said in the robot documentation, "LHipYawPitch and RHipYawPitch are physically just one motor so they cannot be controlled independently. In case of conflicting orders, LHipYawPitch always takes the priority". So remember that when controlling these chains. The diagram and the DH parameters of the left leg are below.

$\theta$ $d$ $a$ $\alpha$
LHipYawPitch 1 $\theta_1+\pi/2$ $0$ $0$ $\pi/2$
LHipRoll 2 $\theta_2+3\pi/4$ $0$ $0$ $\pi/2$
LHipPitch 3 $\theta_3$ $0$ $-\mathrm{ThighLength}$ $0$
LKneePitch 4 $\theta_4$ $0$ $-\mathrm{TibiaLength}$ $0$
LAnklePitch 5 $\theta_5$ $0$ $0$ $-\pi/2$
LAnkleRoll 6 $\theta_6$ $0$ $0$ $0$

The transformation from torso to the pelvis joint frame, the first of the chain, is $T_y(\mathrm{HipOffsetY})T_z(-\mathrm{HipOffsetZ})R_x(-\pi/4).$ From the last joint frame to the end-effector, the left foot, the transformation is $R_y(\pi/2)R_z(\pi)T_z(-\mathrm{FootHeight}).$

Right leg chain

As expected, the right leg is also symmetric to the left leg, with the following DH parameters.

$\theta$ $d$ $a$ $\alpha$
RHipYawPitch 1 $\theta_1+\pi/2$ $0$ $0$ $\pi/2$
RHipRoll 2 $\theta_2+\pi/4$ $0$ $0$ $\pi/2$
RHipPitch 3 $\theta_3$ $0$ $-\mathrm{ThighLength}$ $0$
RKneePitch 4 $\theta_4$ $0$ $-\mathrm{TibiaLength}$ $0$
RAnklePitch 5 $\theta_5$ $0$ $0$ $-\pi/2$
RAnkleRoll 6 $\theta_6$ $0$ $0$ $0$

The transformation from torso to the first joint frame is $T_y(-\mathrm{HipOffsetY})T_z(-\mathrm{HipOffsetZ})R_x(\pi/4).$ And, finally, the transformation from the last joint frame to the right foot is $R_y(\pi/2)R_z(\pi)T_z(-\mathrm{FootHeight}).$

⚠️ **GitHub.com Fallback** ⚠️