NatNet Message definition

To publish a complete natnet dataframe, we use a customized ros message named NatNetFrame . The structure of message followed the protocol of NatNet. You can check it via run:

$ rosmsg show natnet_bridge/NatNetFrame

The documentation of ROS Style are here

Customized definition of natnet_pkg

NatNetFrame

MarkerSet

LabeledMarker

RigidBody

Skeleton

Warning

Motive changes the interfaces time by time. So not all members in the NatNetFrame is supported for all natnet versions. Also not all information in protocol are parsed in NatNetFrame. E.g. the force plate is not used so it is ignored. Also the software latency is not used, since Motive doesn’t have documentations about time definitions, so the time latency information is also given up.

So if you want to know more detail about the protocol, you have to check function unpack() both in natnet_bridge/src/unpack.cpp and in NatNet SDK(Windows)’s example, Packet Client, which is not supported in Linux but there is only example on Windows Platform.

A concise description of message definition is

std_msgs/Header header #  standard for ros
    uint32 seq
    time stamp
    string frame_id
string reference_frame  # default: 'optitrack', this is the 'world' frame of motive
int32 natnet_frame_number # defined by natnet
natnet_bridge/MarkerSet[] marker_sets
    string name
    int32 n_markers
    natnet_bridge/PointFloat32[] markers
        float32 x, y, z
natnet_bridge/PointFloat32[] unidentified_markers
    float32 x, y, z
natnet_bridge/RigidBody[] rigid_bodies
    int32 id
    natnet_bridge/PoseFloat32 pose
        natnet_bridge/PointFloat32 position
            float32 x, y, z
        natnet_bridge/QuaternionFloat32 orientation
            float32 x, y, z, w
    float32 error
    bool track_valid
natnet_bridge/Skeleton[] skeletons
    int32 id
    int32 n_rigid_bodies
    natnet_bridge/RigidBody[] rigid_bodies
        int32 id
        natnet_bridge/PoseFloat32 pose
            natnet_bridge/PointFloat32 position
                float32 x, y, z
            natnet_bridge/QuaternionFloat32 orientation
                float32 x, y, z, w
        float32 error
        bool track_valid
natnet_bridge/LabeledMarker[] labeled_markers
natnet_bridge/LabeledMarker[] unlabeled_markers
    int32 model_id
    int32 marker_id
    natnet_bridge/PointFloat32 position
        float32 x, y, z
    float32 size
    bool b_occluded
    bool b_pc_solved
    bool b_model_solved
    bool b_has_model
    bool b_unlabeled
    bool b_activeMarker
    float32 residual