syntax = "proto3";

package cmvr.api;


message Vec2 {
    double x = 1;
    double y = 2;
}

message Vec3 {
    double x = 1;
    double y = 2;
    double z = 3;
}

message SE2Pose {
    Vec2 position = 1;    // (m)
    double angle = 2;     // (rad)
}

message SE2Velocity {
    Vec2 linear = 1;    // (m/s)
    double angular = 2; // (rad/s)
}

message Quaternion {
    double x = 1;
    double y = 2;
    double z = 3;
    double w = 4;
}

message EulerAngleZYX {
    double z = 1;
    double y = 2;
    double x = 3;
}

message SE3Pose {
    Vec3 position = 1; // (m)
    oneof rotation {
        Quaternion quaternion = 2;
        EulerAngleZYX euler = 3;
    }
}

message Inertial {
    // Mass (kg)
    double mass = 1;

    // Center of mass (m)
    Vec3 center_of_mass = 2;

    // Inertia tensor
    Inertia inertia = 3;
}

// Inertia tensor components (kg*m^2)
message Inertia {
    double ixx = 1;
    double iyy = 2;
    double izz = 3;
    double ixy = 4;
    double ixz = 5;
    double iyz = 6;
}
