iCub Joints
Naming Convention
The iCub joints are organized into six sub-systems: the head
, left arm
, right arm
, torso
, left leg
, and right leg
.
The joints are numbered to give a natural open kinematic chain, with the base reference frame on the torso. 0 is the most proximal joint, N_max the most distal joint. The key reference point on the body is the base of the neck.
The joint numbers are used when calling methods of the motor control device interfaces. A mechanism will be available for mapping from joint identifiers to numbers. Joint identifiers are unique across the body, except for bilateral symmetry - left or right is specified separately.
Head 1.0
Joint number | Can Address | Identifier | Description | Notes |
---|---|---|---|---|
0 | 3 | neck_pitch | Neck pitch | Assuming the standard definition of roll, pitch and yaw with respect to a gravity oriented reference frame aligned with the torso main dimensions |
1 | 3 | neck_roll | Neck roll | -- |
2 | 3 | neck_yaw | Neck yaw | -- |
3 | 1 | eyes_tilt | Eyes tilt | Common tilt of the eyes |
4 | 1 | eyes_version | Eyes version | Common version, the eyes move together, synchronized in the DSP controller (see also Vergence Version) |
5 | 1 | eyes_vergence | Eyes vergence | Vergence control, the eyes move together, synchronized in the DSP controller (see also Vergence Version) |
Head 2.0
The head has 6 joints in the standard configuration (without the facial features).
Joint number | Can Address | Motors | Identifier | Description | Notes |
---|---|---|---|---|---|
0 | 1 | 0M0-0M1 | neck_pitch | Neck pitch | Assuming the standard definition of roll, pitch and yaw with respect to a gravity oriented reference frame aligned with the torso main dimensions |
1 | 1 | 0M0-0M1 | neck_roll | Neck roll | -- |
2 | 3 | 1M0 | neck_yaw | Neck yaw | -- |
3 | 3 | 1M1 | eyes_tilt | Eyes tilt | Common tilt of the eyes |
4 | 4 | 1M2-1M3 | eyes_version | Eyes version | Common version, the eyes move together, synchronized in the DSP controller (see also Vergence Version) |
5 | 4 | 1M2-1M3 | eyes_vergence | Eyes vergence | Vergence control, the eyes move together, synchronized in the DSP controller (see also Vergence Version) |
Left Arm
The arm includes the hand for a total of 16 controlled degrees of freedom.
Joint Number | Can Address | Motor | Identifier | Description | Notes |
---|---|---|---|---|---|
0 | x | 1B0M0 | l_shoulder_pitch | Shoulder pitch | Front-back movement when the arm is aligned with gravity (post decoupling in firmware) |
1 | x | 1B0M1 | l_shoulder_roll | Shoulder roll | Adduction-abduction movement of the arm (post decoupling in firmware) |
2 | x | 1B1M0 | l_shoulder_yaw | Shoulder yaw | Yaw movement when the arm principal axis is aligned with gravity (post decoupling in firmware) |
3 | x | 1B1M1 | l_elbow | Elbow | -- |
4 | x | 1B2M0 | l_wrist_prosup | Wrist pronosupination | Forearm rotation along the arm principal axis |
5 | x | 1B2M1-1B2M2 | l_wrist_pitch | Wrist pitch | when hand-wrist aligned with the arm principal axis: i.e. this is relative to the forearm (not necessarily to gravity). Decoupling made in firmware |
6 | x | 1B2M1-1B2M2 | l_wrist_yaw | Wrist yaw | Decoupling made in firmware |
7 | x | 1B2M3 | l_hand_finger | Hand finger adduction/abduction | -- |
8 | x | 1B3M0 | l_thumb_oppose | Thumb opposition | -- |
9 | x | 1B3M1 | l_thumb_proximal | Thumb proximal flexion/extension | Single tendon looped |
10 | x | 1B3M2 | l_thumb_distal | Thumb distal flexion | Single tendon + return spring for extension spanning two physical joints |
11 | x | 1B3M3 | l_index_proximal | Index proximal flexion/extension | Single tendon looped |
12 | x | 1B4M0 | l_index_distal | Index distal flexion | Single tendon + return spring for extension spanning two physical joints |
13 | x | 1B4M1 | l_middle_proximal | Middle proximal flexion/extension | Single tendon looped |
14 | x | 1B4M2 | l_middle_distal | Middle distal flexion | Single tendon + return spring for extension spanning two physical joints |
15 | x | 1B4M3 | l_pinky | Ring and little finger flexion | Single tendon + return spring spanning six joints on two fingers |
Right arm
The arm includes the hand for a total of 16 controlled degrees of freedom.
to Markdown (GitHub-flavored)
Joint Number | Can Address | Motor | Identifier | Description | Notes |
---|---|---|---|---|---|
0 | x | 2B0M0 | r_shoulder_pitch | Shoulder pitch | Front-back movement when the arm is aligned with gravity (post decoupling in firmware) |
1 | x | 2B0M1 | r_shoulder_roll | Shoulder roll | Adduction-abduction movement of the arm (post decoupling in firmware) |
2 | x | 2B1M0 | r_shoulder_yaw | Shoulder yaw | Yaw movement when the arm principal axis is aligned with gravity (post decoupling in firmware) |
3 | x | 2B1M1 | r_elbow | Elbow | -- |
4 | x | 2B2M0 | r_wrist_prosup | Wrist pronosupination | Forearm rotation along the arm principal axis |
5 | x | 2B2M1-2B2M2 | r_wrist_pitch | Wrist pitch | when hand-wrist aligned with the arm principal axis: i.e. this is relative to the forearm (not necessarily to gravity). Decoupling made in firmware |
6 | x | 2B2M1-2B2M2 | r_wrist_yaw | Wrist yaw | Decoupling made in firmware |
7 | x | 2B2M3 | r_hand_finger | Hand finger adduction/abduction | -- |
8 | x | 2B3M0 | r_thumb_oppose | Thumb opposition | -- |
9 | x | 2B3M1 | r_thumb_proximal | Thumb proximal flexion/extension | Single tendon looped |
10 | x | 2B3M2 | r_thumb_distal | Thumb distal flexion | Single tendon + return spring for extension spanning two physical joints |
11 | x | 2B3M3 | r_index_proximal | Index proximal flexion/extension | Single tendon looped |
12 | x | 2B4M0 | r_index_distal | Index distal flexion | Single tendon + return spring for extension spanning two physical joints |
13 | x | 2B4M1 | r_middle_proximal | Middle proximal flexion/extension | Single tendon looped |
14 | x | 2B4M2 | r_middle_distal | Middle distal flexion | Single tendon + return spring for extension spanning two physical joints |
15 | x | 2B4M3 | r_pinky | Ring and little finger flexion | Single tendon + return spring spanning six joints on two fingers |
Torso
Joint number | Motors | Identifier | Description | Notes |
---|---|---|---|---|
0 | 0B4M0 | torso_yaw | Torso yaw | With respect to gravity |
1 | 0B3M0-0B3M1 | torso_roll | Torso roll | Lateral movement (after decoupling in firmware - differential joint) |
2 | 0B3M0-0B3M1 | torso_pitch | Torso pitch | Front-back movement (after decoupling in firmware - differential joint) |
Left leg
Joint number | Motors | Identifier | Description | Notes |
---|---|---|---|---|
0 | 3B6M0 | l_hip_pitch | Hip pitch | When the leg principal axis is aligned with gravity (front-back movement) |
1 | 3B6M1 | l_hip_roll | Hip roll | Lateral movement (when leg aligned with gravity) |
2 | 3B5M0 | l_hip_yaw | Hip yaw | Rotation along the leg/tight principal axis |
3 | 3B5M1 | l_knee | Knee | -- |
4 | 3B7M0 | l_ankle_pitch | Ankle pitch | When the calf is aligned with gravity |
5 | 3B7M1 | l_ankle_roll | Ankle roll | When the calf is aligned with gravity |
Right leg
Joint number | Motors | Identifier | Description | Notes |
---|---|---|---|---|
0 | 3B9M0 | r_hip_pitch | Hip pitch | When the leg principal axis is aligned with gravity (front-back movement) |
1 | 3B9M1 | r_hip_roll | Hip roll | Lateral movement (when leg aligned with gravity) |
2 | 3B8M0 | r_hip_yaw | Hip yaw | Rotation along the leg/tight principal axis |
3 | 3B8M1 | r_knee | Knee | -- |
4 | 3B10M0 | r_ankle_pitch | Ankle pitch | When the calf is aligned with gravity |
5 | 3B10M1 | r_ankle_roll | Ankle roll | When the calf is aligned with gravity |
Device and Port view
The iCub user will be able to control all joints as they wish, if they wish. For each sub-system, the programmer will be able to retrieve the control interfaces they need.
We expect that these control interfaces will normally be accessed remotely, for all but the tightest control loops. There will be three ports per control group. For example, the head group will have three ports named as follows:
port name | purpose |
---|---|
/icub/head/rpc:i | commands that require replies |
/icub/head/command:i | streaming commands |
/icub/head/state:o | motor state information |
A user can see the commands that the rpc:i
port supports by using yarp rpc
to send it the message help
, or browsing to it via the address reported by yarp where
and clicking help
. For example, typing:
yarp rpc /icub/head/rpc:i
[set] [pos] 0 45
enable
the axis:
[set] [aen] 0
aen
means axis enable
. The braces are optional. Of course, there are APIs for all such operations.
Here are the identifiers used in port names for the different control groups:
Part | Side | Identifier |
---|---|---|
head | -- | head |
arm | left | left_arm |
arm | right | right_arm |
torso | -- | torso |
leg | left | left_leg |
leg | right | right_leg |
Units
All angles are given in DEGREES.