@@ -1104,3 +1104,216 @@ message Polygon3d
11041104 //
11051105 repeated Vector3d vertex = 1 ;
11061106}
1107+
1108+ //
1109+ // \brief A skeleton representing the posture of a person.
1110+ //
1111+ // This is a generic skeleton model that can be used for any person
1112+ // representation, such as vehicle occupants or pedestrians.
1113+ //
1114+ // The skeleton is defined relative to a root point. The root point itself
1115+ // is positioned relative to the bounding box center of the containing
1116+ // entity using \c #bbcenter_to_root.
1117+ //
1118+ // \note The \c Bone message and \c Bone::Type enum are structurally
1119+ // equivalent to the ones defined in
1120+ // \c MovingObject::PedestrianAttributes::Bone. The duplication exists
1121+ // because Protocol Buffers does not support message type aliases,
1122+ // and \c PedestrianAttributes::Bone cannot be changed without a breaking
1123+ // change. In OSI 4, \c MovingObject::PedestrianAttributes is planned to
1124+ // adopt this common \c PersonSkeleton type, eliminating the duplication.
1125+ //
1126+ message PersonSkeleton
1127+ {
1128+ // Position offset from the bounding box center of the containing entity
1129+ // to the current position of the root point of the skeleton model.
1130+ //
1131+ // For an occupant this is the offset from the vehicle's bounding box
1132+ // center (\c MovingObject::base . \c BaseMoving::position) to the
1133+ // skeleton root, analogous to
1134+ // \c MovingObject::VehicleAttributes::bbcenter_to_rear.
1135+ //
1136+ // For a pedestrian this is the offset from the pedestrian's bounding
1137+ // box center to the skeleton root, analogous to
1138+ // \c MovingObject::PedestrianAttributes::bbcenter_to_root.
1139+ //
1140+ optional Vector3d bbcenter_to_root = 1 ;
1141+
1142+ // List of all bones of the person.
1143+ //
1144+ // The number of bones may vary, based on the detail level of
1145+ // the model used. For example, some simulators will not include
1146+ // detailed data about the hands.
1147+ //
1148+ // \note A bone of each type can be provided, or left out, depending
1149+ // on the desired level of detail, or available data. However, if a
1150+ // bone is defined, all bones in the chain from that bone back to
1151+ // the root point must be provided to create a complete chain.
1152+ //
1153+ repeated Bone skeleton_bone = 2 ;
1154+
1155+ //
1156+ // \brief A bone in the skeleton of a person.
1157+ //
1158+ // Each point represents a joint, or otherwise important point in the
1159+ // skeleton. For example pelvis, knee or shoulder. The naming convention
1160+ // should be followed for identifying bones.
1161+ //
1162+ // \note This message is structurally equivalent to
1163+ // \c MovingObject::PedestrianAttributes::Bone. See the note on
1164+ // \c PersonSkeleton for the rationale behind the duplication.
1165+ //
1166+ message Bone
1167+ {
1168+ // Bones are identified by their type, combined with which body side
1169+ // they are on.
1170+ //
1171+ // To properly identify the bones the pre-defined naming convention
1172+ // must be used.
1173+ //
1174+ // \image html OSI_SkeletonNamingConvention.svg
1175+ //
1176+ // A bone's name, position, and orientation is defined by the end-point
1177+ // closer to the root. For example: the "LOWER_ARM_L" will define the
1178+ // point in the left elbow of the model.
1179+ //
1180+ // If a bone which is more than one layer detached from the
1181+ // root point is used, all bones between that bone and the root also
1182+ // need to be defined in order to create a complete chain!
1183+ //
1184+ // If information about bones are missing, they may be left empty.
1185+ //
1186+ optional Type type = 1 ;
1187+
1188+ // Position of the bone.
1189+ //
1190+ // Reference system is the root, defined by
1191+ // \c PersonSkeleton::bbcenter_to_root.
1192+ //
1193+ optional Vector3d position = 2 ;
1194+
1195+ // Orientation of the bone.
1196+ //
1197+ // Reference system is the root, defined by
1198+ // \c PersonSkeleton::bbcenter_to_root.
1199+ //
1200+ optional Orientation3d orientation = 3 ;
1201+
1202+ // Length of the bone.
1203+ //
1204+ // Measured along its major axis.
1205+ //
1206+ // Unit: m
1207+ //
1208+ optional float length = 4 ;
1209+
1210+ // Determines whether a bone is explicitly missing from the model.
1211+ //
1212+ // In case a person has missing limbs this can be explicitly
1213+ // communicated by setting this boolean to TRUE.
1214+ //
1215+ optional bool missing = 5 ;
1216+
1217+ // The velocity of the bone.
1218+ //
1219+ // Reference system is the root, defined by
1220+ // \c PersonSkeleton::bbcenter_to_root.
1221+ //
1222+ optional Vector3d velocity = 6 ;
1223+
1224+ // The orientation rate of the bone.
1225+ //
1226+ // Reference system is the root, defined by
1227+ // \c PersonSkeleton::bbcenter_to_root.
1228+ //
1229+ optional Orientation3d orientation_rate = 7 ;
1230+
1231+ // The type of the bone.
1232+ //
1233+ // \image html OSI_PedestrianModelHierarchy.jpg
1234+ //
1235+ enum Type
1236+ {
1237+ // Root point of the person. Defined by
1238+ // \c PersonSkeleton::bbcenter_to_root.
1239+ //
1240+ TYPE_ROOT = 0 ;
1241+
1242+ // Bone defining the hip.
1243+ //
1244+ TYPE_HIP = 1 ;
1245+
1246+ // Bone defining the lower part of the spine.
1247+ //
1248+ TYPE_LOWER_SPINE = 2 ;
1249+
1250+ // Bone defining the upper part of the spine.
1251+ //
1252+ TYPE_UPPER_SPINE = 3 ;
1253+
1254+ // Bone defining the neck.
1255+ //
1256+ TYPE_NECK = 4 ;
1257+
1258+ // Bone defining the head.
1259+ //
1260+ TYPE_HEAD = 5 ;
1261+
1262+ // Bone defining the left shoulder.
1263+ //
1264+ TYPE_SHOULDER_L = 6 ;
1265+
1266+ // Bone defining the right shoulder.
1267+ //
1268+ TYPE_SHOULDER_R = 7 ;
1269+
1270+ // Bone defining the left upper arm.
1271+ //
1272+ TYPE_UPPER_ARM_L = 8 ;
1273+
1274+ // Bone defining the right upper arm.
1275+ //
1276+ TYPE_UPPER_ARM_R = 9 ;
1277+
1278+ // Bone defining the left forearm.
1279+ //
1280+ TYPE_LOWER_ARM_L = 10 ;
1281+
1282+ // Bone defining the right forearm.
1283+ //
1284+ TYPE_LOWER_ARM_R = 11 ;
1285+
1286+ // Bone defining the left hand.
1287+ //
1288+ TYPE_FULL_HAND_L = 12 ;
1289+
1290+ // Bone defining the right hand.
1291+ //
1292+ TYPE_FULL_HAND_R = 13 ;
1293+
1294+ // Bone defining the left thigh.
1295+ //
1296+ TYPE_UPPER_LEG_L = 14 ;
1297+
1298+ // Bone defining the right thigh.
1299+ //
1300+ TYPE_UPPER_LEG_R = 15 ;
1301+
1302+ // Bone defining the left shin.
1303+ //
1304+ TYPE_LOWER_LEG_L = 16 ;
1305+
1306+ // Bone defining the right shin.
1307+ //
1308+ TYPE_LOWER_LEG_R = 17 ;
1309+
1310+ // Bone defining the left foot.
1311+ //
1312+ TYPE_FULL_FOOT_L = 18 ;
1313+
1314+ // Bone defining the right foot.
1315+ //
1316+ TYPE_FULL_FOOT_R = 19 ;
1317+ }
1318+ }
1319+ }
0 commit comments