Questions concerning the streaming data from Optitrack

Post Reply
zsll
Posts: 28
Joined: Wed Aug 20, 2008 8:31 am

Questions concerning the streaming data from Optitrack

Post by zsll »

Hi

I am an ee master of ASU working on a program based on your Optitrack motion capture system. Could you please answer me some questions that I encountered when using the SampleClient3D within the NatNetSamples sln (Environment: VS 2005) to watch the streaming data of tracked rigid bodies?


1) What is the exact meaning of a "MarkerSet"?

2) What is the exact meaning of "OtherMarker"? Those not included by any rigidbody?

3) According to this line in the function DataHandler(): int mcount = min(MAX_MARKER_COUNT,data->MocapData->nMarkers), I think only the markers within the first member of the MocapData array will be counted. So why should there be a array please?

4) When I set a breakpoint at the end of the function DataHandler() to watch the status of the variable data, the variable "nMarkers" within the struct "Rigidboies" is always zero. What is the matter? Is that your software can not tell which rigidbody a marker belongs to?

5) The last but the most important question: when the system recognizes a marker, in the next frame will the system still know which marker within the n markers is the one it has seen in the last frame? In other words, can the markers be numbered? And if so, how? Can you please send me a sample to show how it works?

Looking forward to your reply! Thanks!
zsll
Posts: 28
Joined: Wed Aug 20, 2008 8:31 am

Re: Questions concerning the streaming data from Optitr

Post by zsll »

Hi

I have new questions concerning the streaming process:

In the defined struct "sFrameOfMocapData" in your "SampleClient3D "within the slu "NatNetSamples", as below:

typedef struct
{
int iFrame; // host defined frame number
int nMarkerSets; // # of marker sets in this frame of data
sMarkerSetData MocapData[MAX_MODELS]; // MarkerSet data
int nOtherMarkers; // # of undefined markers
MarkerData* OtherMarkers; // undefined marker data
int nRigidBodies; // # of rigid bodies
sRigidBodyData RigidBodies[MAX_RIGIDBODIES];// Rigid body data
float fLatency; // host defined time delta between capture and send

} sFrameOfMocapData;

there is a variable "iFrame", what does it mean exactly by "host defined"? When I watch this variable in the debug process of VS2005, it is always 0. I noticed that the frequency of the syc signal is 100HZ, while the point cloud fps is always less than 100. Does that mean some frames are lost due to the latency? If so, will these lost frames still be numbered please?

The other question is about the syc signal. Does it begin at the same time I begin to capture frames from the camera? Or it begins once I opened the Arena software?

Thanks for your time!
morgan
NaturalPoint Employee
NaturalPoint Employee
Posts: 199
Joined: Tue Jun 24, 2008 2:01 pm
Location: Corvallis, OR, USA
Contact:

Re: Questions concerning the streaming data from Optitr

Post by morgan »

Good questions. Here's a shot at them:

1) What is the exact meaning of a "MarkerSet"?

A MarkerSet is a group of markers that have some relationship as defined by the application ( e.g. an actor, a prop, a rigid body).

A MarkerSet has a name (e.g. "John") and a list of markers (e.g. {"HeadTop","HeadLeft", "HeadRight", "UpperArmLeft", ...})


2) What is the exact meaning of "OtherMarker"? Those not included by any rigidbody?

Yes that's right - OtherMarker would be "unidentified" markers (markers detected in a given frame that were not associated with any currently tracked MarkerSet).


3) According to this line in the function DataHandler(): int mcount = min(MAX_MARKER_COUNT,data->MocapData->nMarkers), I think only the markers within the first member of the MocapData array will be counted. So why should there be a array please?

Yes - the sample assumes only one markerset. To be more correct, the sample should iterate through each MarkerSet, using nMarkerSets.


4) When I set a breakpoint at the end of the function DataHandler() to watch the status of the variable data, the variable "nMarkers" within the struct "Rigidboies" is always zero. What is the matter? Is that your software can not tell which rigidbody a marker belongs to?

The markers associated with a RigidBody are defined by the application - It's possible the host app is simply not populating this list. If you can you let us known which version of which application you are streaming from, we can track this down.


5) The last but the most important question: when the system recognizes a marker, in the next frame will the system still know which marker within the n markers is the one it has seen in the last frame? In other words, can the markers be numbered? And if so, how? Can you please send me a sample to show how it works?


The short answer is Yes, as both the RigiBody tools and Arena do this.

To identify/recognize markers, the system needs information about the markers it's tracking/identifying. This information typically contains relationship information between markers within a group/set (MarkerSet).

For example, to track a human, the relationship information about the markers is defined in a model (skeleton), which is a hierarchical collection of constrained rigid bodies and their associated markers. The system can use this model to constrain possible marker identities and in this way identify a marker from frame to frame (in conjunction with implicit tracking information, such as trajectories, prediction, etc).

The same applies to a single rigid body.

The NatNet client samples illustrate receiving and displaying identified marker information. Each is uniquely identified by markerset and markername.



Regards the host defined "iFrame" - yes - this is up to the host application to define. If this value is 0, the host app is likely not using this variable.

Regards the synch signal, this signal is used to synchronize the cameras, and is not used by NatNet directly.

Hope this helps,

Morgan
zsll
Posts: 28
Joined: Wed Aug 20, 2008 8:31 am

Re: Questions concerning the streaming data from Optitr

Post by zsll »

Many thanks for your answers, while I will appreciate it more if you can explain furthermore for me:

1) Since the system can recognize markers, the distances between marker[m] and marker[n] within the array (m, n = 0, 1, 2 ...) are always the same. Is it?

2) With respect to the questions from my 2nd post, simply put, I just need the information of every frame from the cameras whose frequency is 100Hz, like frame[1]: ...., frame[2]: ..., ...., frame[100]: ....frame[1]: ...., frame[2]: ..., ...., frame[100]: ....frame[1]: ...., frame[2]: ..., ...., frame[100]: .... without a single lost frame. Is that possible? And how to get an output like that with every frame numbered plz?

And, I need to know the exact moment that the sync signal is produced. Is that the moment that I press the "Arena" icon on the desktop or that I press the "play" button to capture frames?

Looking forward to your reply!
zsll
Posts: 28
Joined: Wed Aug 20, 2008 8:31 am

Re: Questions concerning the streaming data from Optitr

Post by zsll »

After chatting with my professor, we come up with some new questions:

1. Is the information concerning the frame number included in the data streamed out of the arena software? By "host app", do you mean the "SampleClient3D" within the "NatNetSamples" or something else? My professor believes that the sFrameOfMocapData struct in this sample does not show all the information in the streaming data, just like the frame number, how can I read all these data out plz?

2. And about the version of arena, we are using the latest version:Official Release - Version 1.3.035 (.exe 5.0 MB)
Released: July 25, 2008
The application we are using is just the SampleClient3D within the NatNetSamples sln 1.4. With such info, can you plz help us associate the marker information with those of the rigid bodies?

3. What is the exact relationship between the sync signal and the frames from the cameras?

Thanks for your attention!
zsll
Posts: 28
Joined: Wed Aug 20, 2008 8:31 am

Re: Questions concerning the streaming data from Optitr

Post by zsll »

Just to report an interesting phenomenon when I am testing the 3D client of the NatNet sln: when I am using the arena to stream data out when capturing a real-time scene, the iFrame is always 0; while when I am playing a recorded scene, or "takes" format video clips on arena and at the same time stream data out, I can watch the iFrame increase(But I still wonder have the cameras sent all of the 100 frames in 1 second to the computer). Maybe you can explain why. Thanks
Post Reply