Difference between revisions of "ICub Model naming conventions"

From Wiki for iCub and Friends
Jump to navigation Jump to search
(Created naming convention page)
 
(doc moved to the new documentation repo on GitHub)
 
(16 intermediate revisions by 3 users not shown)
Line 1: Line 1:
__TOC__
Please visit https://icub-tech-iit.github.io/documentation/icub_kinematics/icub-model-naming-conventions/icub-model-naming-conventions/
 
For sharing models of the iCub kinematics and dynamics structure (for example in URDF and SDF format) we try to agree on a a set of names for links, joints, degrees of freedom and frames. At the moment this convention does not handle the eyes and the hands, because this degrees of freedom are not currently modeled in the URDF/SDF models of the iCub.
 
== Joints ==
 
=== 1-DOF Joints ===
 
'''Note: it could be useful to distinguish between the two different concepts of ''degree of freedom'' and ''joint''. For simplicity we decide to ignore for the time being this difference, that is relevant for multi-DOF joints and closed kinematic structures.'''
 
The joints are mechanism that connect two different ''links'' (as defined in the following section) of the robot. 1-DOF joints allow motion only along one direction between the two connected ''links''.
 
For joints an existing convention is introduced in http://eris.liralab.it/wiki/ICub_joints . For the models we adopt this existing convention, disregarding eyes and hands.
 
{| border="1"
!Yarp ControlBoard name
!Joint name
|-
|left_leg
|l_hip_pitch
|-
|left_leg
|l_hip_roll
|-
|left_leg
|l_hip_yaw
|-
|left_leg
|l_knee
|-
|left_leg
|l_ankle_pitch
|-
|left_leg
|l_ankle_roll
|-
|right_leg
|r_hip_pitch
|-
|right_leg
|r_hip_roll
|-
|right_leg
|r_hip_yaw
|-
|right_leg
|r_knee
|-
|right_leg
|r_ankle_pitch
|-
|right_leg
|r_ankle_roll
|-
|torso
|torso_pitch
|-
|torso
|torso_roll
|-
|torso
|torso_yaw
|-
|head
|neck_pitch
|-
|head
|neck_roll
|-
|head
|neck_yaw
|-
|left_arm
|l_shoulder_pitch
|-
|left_arm
|l_shoulder_roll
|-
|left_arm
|l_shoulder_yaw
|-
|left_arm
|l_elbow
|-
|left_arm
|l_wrist_prosup
|-
|left_arm
|l_wrist_pitch
|-
|left_arm
|l_wrist_yaw
|-
|right_arm
|r_shoulder_pitch
|-
|right_arm
|r_shoulder_roll
|-
|right_arm
|r_shoulder_yaw
|-
|right_arm
|r_elbow
|-
|right_arm
|r_wrist_prosup
|-
|right_arm
|r_wrist_pitch
|-
|right_arm
|r_wrist_yaw
|}
 
=== Fixed (0-DOFs) Joints ===
 
When dealing with 6-axis FT sensors, it is convenient to model them as ''joints'' that do not allow any motion between the two connected ''links''.
 
In the iCub can be mounted up to 6 6-axis ft sensors.
 
{| border="1"
!Yarp AnalogSensor name
!Fixed joint name
|-
|left_arm
|l_arm_ft_sensor
|-
|right_arm
|r_arm_ft_sensor
|-
|left_leg
|l_leg_ft_sensor
|-
|left_foot
|l_foot_ft_sensor
|-
|right_leg
|r_leg_ft_sensor
|-
|right_foot
|r_foot_ft_sensor
|}
 
== Links ==
 
The ''links'' are the physical rigid bodies that constitute the robot. Each link is characterised by a mass (represented in models by the inertial parameters) and a physical shape (represented in models by meshes).
 
For defining the links we are representing the robot as a directed tree, where the <code>root_link</code> is the body that can be attached to the pole, and the meaning of the other links can be deduced by their parent joint, as defined in the previous section.
 
The main idea behind this naming scheme is that “big” links (roughly speaking, the one that can reasonably interact with the user) are named with intuitive names such as <code>upper_arm</code>, <code>forearm</code>, <code>upper_leg</code>, <code>lower_leg</code>, <code>chest</code>, <code>head</code>, <code>foot</code>, <code>hand</code>. All the little links that instead are part of more complex linkages, take their name from the articulation, such as <code>torso_1</code>, <code>torso_2</code>.
 
{| border="1"
!Link Name
!Parent Joint
!Parent Link
|-
|root_link
|
|
|-
|l_hip_1
|l_hip_pitch
|root_link
|-
|l_hip_2
|l_hip_roll
|l_hip_1
|-
|l_hip_3
|l_leg_ft_sensor
|l_hip_2
|-
|l_upper_leg
|l_hip_yaw
|l_hip_3
|-
|l_lower_leg
|l_knee
|l_upper_leg
|-
|l_ankle_1
|l_ankle_pitch
|l_lower_leg
|-
|l_ankle_2
|l_ankle_roll
|l_ankle_1
|-
|l_foot
|l_foot_ft_sensor
|l_ankle_2
|-
|r_hip_1
|r_hip_pitch
|root_link
|-
|r_hip_2
|r_hip_roll
|r_hip_1
|-
|r_hip_3
|r_leg_ft_sensor
|r_hip_2
|-
|r_upper_leg
|r_hip_yaw
|r_hip_3
|-
|r_lower_leg
|r_knee
|r_upper_leg
|-
|r_ankle_1
|r_ankle_pitch
|r_lower_leg
|-
|r_ankle_2
|r_ankle_roll
|r_ankle_1
|-
|r_foot
|r_foot_ft_sensor
|r_ankle_2
|-
|torso_1
|torso_pitch
|root_link
|-
|torso_2
|torso_roll
|torso_1
|-
|chest
|torso_yaw
|torso_2
|-
|l_shoulder_1
|l_shoulder_pitch
|chest
|-
|l_shoulder_2
|l_shoulder_roll
|l_shoulder_1
|-
|l_shoulder_3
|l_shoulder_yaw
|l_shoulder_2
|-
|l_upper_arm
|l_arm_ft_sensor
|l_shoulder_3
|-
|l_elbow_1
|l_elbow
|l_forearm
|-
|l_forearm
|l_wrist_prosup
|l_elbow_1
|-
|l_wrist_1
|l_wrist_pitch
|l_forearm
|-
|l_hand
|l_wrist_yaw
|l_wrist_1
|-
|r_shoulder_1
|r_shoulder_pitch
|chest
|-
|r_shoulder_2
|r_shoulder_roll
|r_shoulder_1
|-
|r_shoulder_3
|r_shoulder_yaw
|r_shoulder_2
|-
|r_upper_arm
|r_arm_ft_sensor
|r_shoulder_3
|-
|r_elbow_1
|r_elbow
|r_arm
|-
|r_forearm
|r_wrist_prosup
|r_elbow_1
|-
|r_wrist_1
|r_wrist_pitch
|r_forearm
|-
|r_hand
|r_wrist_yaw
|r_wrist_1
|}
 
== Frames ==
 
In literature and in robotics software, the ''links'' and ''frames'' concepts are often confused, because every ''link'' is usually associated with a ''frame'' rigidly attached to it. However this ''link frame'' definition is dependent on the formalism that one uses for describing the robot. For example, if the Denavit Hartenberg convention is used the ''link frame'' origin is required to be placed on the axis of the ''child joint'', while if the Modified Denavit Hartenberg convention or the URDF format the ''link frame'' origin is required to be place on the axis of the ''parent joint''. To avoid inconsistency, I think it is better to clearly separate ''frame'' and ''link'' concepts. For the iCub, it could be useful to explicitly state the frame used for defining the kinematic chains used in the iKin library. In particular a useful set of frames could be:
 
{| border="1"
!Frame Name
!Link
!Explanation
|-
|root_frame
|root_link
|Root reference frame, as defined in http://eris.liralab.it/wiki/ICubForwardKinematics
|-
|imu_frame
|head
|Inertial sensor (XSens MTx) reference frame, as defined in http://eris.liralab.it/wiki/ICubForwardKinematics
|-
|l_hand_dh_frame
|l_hand
|Left hand frame, as defined in http://eris.liralab.it/wiki/ICubForwardKinematics
|-
|r_hand_dh_frame
|r_hand
|Right hand frame, as defined in http://eris.liralab.it/wiki/ICubForwardKinematics
|-
|l_foot_dh_frame
|l_foot
|Left foot frame, as defined in http://eris.liralab.it/wiki/ICubForwardKinematics
|-
|r_foot_dh_frame
|r_foot
|Right foot frame, as defined in http://eris.liralab.it/wiki/ICubForwardKinematics
|-
|l_eye_frame
|— (missing at the moment)
|Left eye frame, as defined in http://eris.liralab.it/wiki/ICubForwardKinematics
|-
|r_eye_frame
|— (missing at the moment)
|Right eye frame, as defined in http://eris.liralab.it/wiki/ICubForwardKinematics
|-
|l_arm_ft_frame
|l_upper_arm,l_arm
|Left Arm FT sensor frame, as defined in http://wiki.icub.org/wiki/FT_sensor
|-
|r_arm_ft_frame
|r_upper_arm,r_arm
|Right Arm FT sensor frame, as defined in http://wiki.icub.org/wiki/FT_sensor
|-
|l_leg_ft_frame
|l_hip_2,l_hip_3
|Left Leg FT sensor frame, as defined in http://wiki.icub.org/wiki/FT_sensor
|-
|l_foot_ft_frame
|l_upper_foot,l_foot
|Left Foot FT sensor frame, as defined in http://wiki.icub.org/wiki/FT_sensor
|-
|r_leg_ft_frame
|r_hip_2,r_hip_3
|Right Leg FT sensor frame, as defined in http://wiki.icub.org/wiki/FT_sensor
|-
|r_foot_ft_frame
|r_upper_foot,r_foot
|Right Foot FT sensor frame, as defined in http://wiki.icub.org/wiki/FT_sensor
|}
 
=== Skin Frames ===
 
An interesting set of frame is the frame defined by the iKin convention ( http://eris.liralab.it/wiki/ICubForwardKinematics ). This reference frames are used by the skin system to express contact points, force and torques (in skinDynLib data structures) and taxel positions. The one currently used by the skin system are:
 
{| border="1"
!Frame Name
!Link
!Explanation
|-
|l_foot_dh_frame
|l_foot
|Frame of <code>LEFT_FOOT</code> SkinPart
|-
|r_foot_dh_frame
|r_foot
|Frame of <code>RIGHT_FOOT</code> SkinPart
|-
|l_upper_arm_dh_frame
|l_upper_arm
|Frame of <code>SKIN_LEFT_UPPER_ARM</code> SkinPart
|-
|l_forearm_dh_frame
|l_forearm
|Frame of <code>SKIN_LEFT_FOREARM</code> SkinPart
|-
|l_hand_dh_frame
|l_hand
|Frame of <code>SKIN_LEFT_HAND</code> SkinPart
|-
|r_upper_arm_dh_frame
|r_upper_arm
|Frame of <code>SKIN_RIGHT_UPPER_ARM</code> SkinPart
|-
|r_forearm_dh_frame
|r_forearm
|Frame of <code>SKIN_RIGHT_FOREARM</code> SkinPart
|-
|r_hand_dh_frame
|r_hand
|Frame of <code>SKIN_RIGHT_HAND</code> SkinPart
|}

Latest revision as of 11:06, 5 February 2021