Difference between revisions of "NatNet: Sample Projects"

(NatNet Sample Projects)
 
(39 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Construction}}
+
  [[Main Page|Main page]] → [[NatNet SDK 3.0|NatNet SDK]] → [[NatNet: Sample Projects]]
----
+
  [[Main Page|Back to the Main page]] → [[NatNet SDK|Back to the NatNet SDK page]]
+
 
----
 
----
  
Line 11: Line 9:
 
::'''3.  Use the API reference in the next page for additional information.'''
 
::'''3.  Use the API reference in the next page for additional information.'''
  
The Visual Studio solution file <code>\Samples\NatNetSamples.sln</code> will open and build all of the NatNet sample projects. If you are creating an application from scratch, please refer to the following sections for application specific requirements.
+
The Visual Studio solution file <code>\Samples\NatNetSamples.sln</code> will open and build all of the NatNet sample projects. If you are creating an application from scratch, please refer to the following sections for application specific requirements.  
  
 
__TOC__
 
__TOC__
Line 17: Line 15:
 
=NatNet Sample Projects=
 
=NatNet Sample Projects=
 
----
 
----
 +
The following projects are located in the <code>NatNet SDK\Samples</code> folder.
  
:The following projects are located in the <code>NatNet SDK\Samples</code> folder.
+
====NatNet SDK Samples====
  
{| class="wikitable" style ="width:85%; margin-left:4em"
+
:The following sample projects utilizes NatNet SDK library for obtaining tracking data from a connected server application.
!style = "padding: 1em;"|Sample Name
+
 
!style = "width:15%; padding: 1em;"|Type
+
{| class="wikitable sortable" style ="width:85%; margin-left:4em"
 +
!style = "width:15%; padding: 1em;"|Sample Name
 +
!style = "width:15%; padding: 1em;"|NatNet Library Type
 
!style = "padding: 1em;"|Description
 
!style = "padding: 1em;"|Description
|-
 
|style = "padding: 1em;"|BroadcastSample
 
|style = "padding: 1em;"|XML broadcast
 
|style = "padding: 1em;"|Sample application illustrating how to use remote record trigger in Motive using XML formatted UDP broadcast packets.
 
 
|-
 
|-
 
|style = "padding: 1em;"|[[#Running_the_Matlab_Sample|Matlab]]
 
|style = "padding: 1em;"|[[#Running_the_Matlab_Sample|Matlab]]
 
|style = "padding: 1em;"|Managed: Matlab
 
|style = "padding: 1em;"|Managed: Matlab
|style = "padding: 1em;"|Sample MATLAB code file (.m) for using MATLAB with the NatNet managed assembly (NatNETML.dll).
+
|style = "padding: 1em;"|Sample MATLAB code file (.m) for using MATLAB with the NatNet managed assembly (NatNetML.dll) using the provided [[NatNet:_Matlab_Wrapper|natnet.p wrapper]] class.  
 
|-
 
|-
|style = "padding: 1em;"|[[NatNet: Matlab Wrapper|MatlabWrapper]]
+
|style = "padding: 1em;"|[[NatNet: RebroadcastMotiveData Sample|RebroadcastMotiveData]]
|style = "padding: 1em;"|Managed: Matlab
+
|style = "padding: 1em;"|Native: C++
|style = "padding: 1em;"|Wrapper class for the NatNetML assembly members, allowing command line access to the client object.
+
|style = "padding: 1em;"|Sample application that receives tracking data from the NatNet Server and redistributing it in other forms. Currently there are two protocols supported for pipelining tracking data into Unity via compatible XML packets and into Previzion software via serial port interface.
 
|-
 
|-
 
|style = "padding: 1em;"|MayaPlugIn
 
|style = "padding: 1em;"|MayaPlugIn
 
|style = "padding: 1em;"|Native: C++
 
|style = "padding: 1em;"|Native: C++
 
|style = "padding: 1em;"|GitHub open source project: [https://github.com/mocap-ca/mayaMocap/tree/master/mayaMotive mayaMotive]
 
|style = "padding: 1em;"|GitHub open source project: [https://github.com/mocap-ca/mayaMocap/tree/master/mayaMotive mayaMotive]
|-
 
|style = "padding: 1em;"|NatCap
 
|style = "padding: 1em;"|Managed: .NET (C#)
 
|style = "padding: 1em;"|Sample capture start/stop trigger broadcast app.
 
|-
 
|style = "padding: 1em;"|PacketClient
 
|style = "padding: 1em;"|Native: C++
 
|style = "padding: 1em;"|Simple example showing how to connect to a NatNet multicast stream and decode NatNet packets directly without using the NatNet SDK.
 
|-
 
|style = "padding: 1em;"|PythonClient
 
|style = "padding: 1em;"|Managed: Python
 
|style = "padding: 1em;"|Sample Python code file (.py) for using Python with NatNet streaming. This sample depacketizes data directly from the bit-stream without using the library.
 
 
|-
 
|-
 
|style = "padding: 1em;"|[[#Running_the_Console_Output_Sample_.28Sample_Client.29|SampleClient]]
 
|style = "padding: 1em;"|[[#Running_the_Console_Output_Sample_.28Sample_Client.29|SampleClient]]
 
|style = "padding: 1em;"|Native: C++
 
|style = "padding: 1em;"|Native: C++
|style = "padding: 1em;"|Sample NatNet console app that connects to a NatNet server, receives a data stream, and writes that data stream to an ASCII file.
+
|style = "padding: 1em;"|Sample NatNet console app that connects to a NatNet server, receives a data stream, and writes that data stream to an ASCII file. This sample
 +
 
 +
 
 
|-
 
|-
 
|style = "padding: 1em;"|[[#Running_the_Rigid_Body_Sample_.28SampleClient3D.29|SampleClient3D]]
 
|style = "padding: 1em;"|[[#Running_the_Rigid_Body_Sample_.28SampleClient3D.29|SampleClient3D]]
Line 61: Line 48:
 
|style = "padding: 1em;"|Sample NatNet application that connects to a NatNet server, receives a data stream, and displays that data in an OpenGL 3D window.
 
|style = "padding: 1em;"|Sample NatNet application that connects to a NatNet server, receives a data stream, and displays that data in an OpenGL 3D window.
 
|-
 
|-
|style = "padding: 1em;"|SimpleServer
+
|style = "padding: 1em;"|SampleClientML
|style = "padding: 1em;"|Native: C++
+
|style = "padding: 1em;"|Managed: .NET (C#)
|style = "padding: 1em;"|Sample simple server application for outputing NatNet data packets. Should be used for client testing purposes only.
+
|style = "padding: 1em;"|Sample NatNet C# console appication that connects to a NatNet server on the local IP address, receives data stream, and outputs the received data. '''Note: [[Data Streaming pane#Streaming SEttings|Skeleton As Rigid Bodies]] must be set to false.'''
 
|-
 
|-
 
|style = "padding: 1em;"|TimingClient
 
|style = "padding: 1em;"|TimingClient
 
|style = "padding: 1em;"|Native: C++
 
|style = "padding: 1em;"|Native: C++
 
|style = "padding: 1em;"|This program connects to a NatNet server and can be used as a quick check to determine packet timing information.
 
|style = "padding: 1em;"|This program connects to a NatNet server and can be used as a quick check to determine packet timing information.
|-
 
|style = "padding: 1em;"|[[#Running the Unity3D Sample|Unity3D]]
 
|style = "padding: 1em;"|Native: C++
 
|style = "padding: 1em;"|This program demonstrates streaming rigid body and skeleton tracking data from Motive into Unity via UDP. This application encodes skeleton data into the XML format for streaming into Unity.
 
|-
 
|style = "padding: 1em;"|VCRedist
 
|style = "padding: 1em;"|N/A
 
|style = "padding: 1em;"|Executable for 32bit Visual C++ Redistributable 2013.
 
 
|-
 
|-
 
|style = "padding: 1em;"|[[#Running_the_.NET_Sample|WinFormsSample]]
 
|style = "padding: 1em;"|[[#Running_the_.NET_Sample|WinFormsSample]]
 
|style = "padding: 1em;"|Managed: C# .NET
 
|style = "padding: 1em;"|Managed: C# .NET
|style = "padding: 1em;"|Simple C# .NET sample showing how to use the NatNet managed assembly (NatNETML.dll).  This sample also demonstrates how to send and receive the NatNet commands.
+
|style = "padding: 1em;"|Simple C# .NET sample showing how to use the NatNet managed assembly (NatNetML.dll).  This sample also demonstrates how to send and receive the NatNet commands.
 
|}
 
|}
  
 +
====Direct Depacketization Samples====
  
<div style="padding-left:2em>
+
:The following sample projects do not use the NatNet SDK library. Client/Server connection is established at a low-level by creating sockets and threads within the program, and the streamed data are depacketized directly from the bit-stream syntax. The following sample approaches should be used only when the use of NatNet SDK library is not applicable (e.g. streaming into UNIX clients).
=Running the Console Output Sample (Sample Client)=
+
  
<div style="padding-left:2em;">
+
{| class="wikitable sortable" style ="width:85%; margin-left:4em"
 +
!style = "width:15%; padding: 1em;"|Sample Name
 +
!style = "width:15%; padding: 1em;"|Type
 +
!style = "padding: 1em;"|Description
 +
|-
 +
|style = "padding: 1em;"|PacketClient
 +
|style = "padding: 1em;"|C++
 +
|style = "padding: 1em;"|Simple example showing how to connect to a NatNet multicast stream and decode NatNet packets directly without using the NatNet SDK.
 +
|-
 +
|style = "padding: 1em;"|PythonClient
 +
|style = "padding: 1em;"|Python
 +
|style = "padding: 1em;"|Sample Python code file (.py) for using Python with NatNet streaming. This sample depacketizes data directly from the bit-stream without using the library.
 +
|}
 +
 
 +
 
 +
====XML trigger broadcast====
 +
 
 +
:The following samples demonstrate how to use remote triggering in Motive using the [[Data Streaming#Remote Triggering|XML formatted UDP broadcase packets]].
 +
 
 +
{| class="wikitable sortable" style ="width:85%; margin-left:4em"
 +
!style = "width:15%; padding: 1em;"|Sample Name
 +
!style = "width:15%; padding: 1em;"|Type
 +
!style = "padding: 1em;"|Description
 +
|-
 +
|style = "padding: 1em;"|BroadcastSample
 +
|style = "padding: 1em;"|C++
 +
|style = "padding: 1em;"|XML broadcast. Sample application illustrating how to use remote record trigger in Motive using XML formatted UDP broadcast packets.
 +
|-
 +
|style = "padding: 1em;"|NatCap
 +
|style = "padding: 1em;"|C++
 +
|style = "padding: 1em;"|XML broadcast. Sample capture start/stop trigger broadcast app.
 +
|}
 +
 
 +
==Running the Console Output Sample (Sample Client)==
 +
 
 +
<div class="padded">
 +
===On Windows===
 +
<div class="padded">
 
'''1. [Motive]''' Start the Optitrack Server (e.g. Motive) and begin streaming data via the Streaming Panel.
 
'''1. [Motive]''' Start the Optitrack Server (e.g. Motive) and begin streaming data via the Streaming Panel.
  
  
'''2. [Command Prompt]''' Start the client from the windows command prompt:''' <code>SampleClient.exe [ClientIPAddress] [ServerIPAddress] [OutputFilename.txt]</code>
+
'''2. [SampleClient]''' Start the client application from the command prompt or directly from the <code>NatNet SDK/Samples/bin</code> folder.
  
[[Image:SampleClient.png|thumb|700 px|center|Running the SampleClient project from the windows command prompt.]]
 
  
 +
'''3. [SampleClient]''' Once the sample application starts up, it will search the local network and list out IP addresses of available tracking servers where tracking data is streamed from. Select a server address by pressing the corresponding number key.
  
'''3. [Command Prompt]''' You should begin to see data streaming in the client window or to text file.'''
+
[[Image:NatNet_SampleClient_30.png|thumb|700 px|center|Motive is streaming to the local loopback address, and it is detected by the SampleClient application.]]
  
[[Image:SampleClient2.png|thumb|700 px|center|Running the SampleClient project from the windows command prompt.]]
 
</div>
 
  
 +
'''4. [SampleClient]''' The client application is connected to the local loopback address (127.0.0.1) and receiving tracking data.
  
=Running the Rigid Body Sample (SampleClient3D)=
+
[[Image:NatNet_SampleClient2_30.png|thumb|700 px|center|Running the SampleClient project from the windows command prompt.]]
 +
</div>
  
The Rigid Body sample (SampleClient3D) illustrates how to decode NatNet 6DOF Rigid Body and Skeleton Segment data from OptiTrack quaternion format to euler angles and display them in a simple OpenGL 3D viewer.  This sample also illustrates how to associate RigidBody/Skeleton Segment names and IDs from the data descriptions with the IDs streamed in the FrameOfMocapData packet.
+
</div>
  
 +
==Running the Rigid Body Sample (SampleClient3D)==
  
 +
<div style="padding-left:2em;">
 +
The Rigid Body sample (SampleClient3D) illustrates how to decode NatNet 6DOF Rigid Body and Skeleton Segment data from OptiTrack quaternion format to euler angles and display them in a simple OpenGL 3D viewer.  This sample also illustrates how to associate RigidBody/Skeleton Segment names and IDs from the data descriptions with the IDs streamed in the FrameOfMocapData packet.
  
'''With Client/Server on same machine:'''
+
===With Client/Server on same machine:===
 
<div style="padding-left:2em;">
 
<div style="padding-left:2em;">
 
'''1. [Motive]''' Load a dataset with rigid body or skeleton definitions
 
'''1. [Motive]''' Load a dataset with rigid body or skeleton definitions
Line 118: Line 137:
 
</div>
 
</div>
  
 
+
===With Client/Server on separate machines:===
'''With Client/Server on separate machines:'''
+
  
 
<div style="padding-left:2em;">
 
<div style="padding-left:2em;">
Line 135: Line 153:
 
::* IP Address IP Address of client NIC card you wish to use.
 
::* IP Address IP Address of client NIC card you wish to use.
 
::* Server IP Address IP Address of server entered in step 2 above.
 
::* Server IP Address IP Address of server entered in step 2 above.
 +
</div>
 
</div>
 
</div>
  
Line 140: Line 159:
 
[[Image:NatNetSampleClient3D.png|thumb|center|800 px|SampleClient3D - Decoding and draqing labeled rigid body position and orientation (6DoF) data.]]
 
[[Image:NatNetSampleClient3D.png|thumb|center|800 px|SampleClient3D - Decoding and draqing labeled rigid body position and orientation (6DoF) data.]]
  
 
+
==Running the .NET Sample==
=Running the .NET Sample=
+
<div class="padded">
<div style="padding-left:2em;">
+
 
'''1. [Motive]''' Start a NatNet server application  (e.g. Motive).
 
'''1. [Motive]''' Start a NatNet server application  (e.g. Motive).
  
Line 153: Line 171:
 
'''5. [WinFormTestApp]''' Press  the “Connect” button to connect to the server.
 
'''5. [WinFormTestApp]''' Press  the “Connect” button to connect to the server.
  
'''6. [WinFormTestApp]''' Press the “GetDataDesc” button to request and display a detailed description of the Server’s currently streamed objects.
+
'''6. [WinFormTestApp]''' Press the “Get Data Descriptions” button to request and display a detailed description of the Server’s currently streamed objects.
  
 
'''7. [WinFormTestApp]''' Select a Row in the DataGrid to display that value in the graph.
 
'''7. [WinFormTestApp]''' Select a Row in the DataGrid to display that value in the graph.
Line 159: Line 177:
  
  
[[Image:NatNetWinFormSample.png|thumb|center|750 px|Receiving tracking data via NatNet in a .NET environment.]]
+
<center><ul>
[[Image:NatNetWinFormSampleRemote.png|thumb|center|400 px|Issuing remote control commands to Motive.]]
+
<li style="display:inline-block; vertical-align:text-top">[[Image:NatNetWinFormSample.png|thumb|center|600 px|Receiving tracking data via NatNet in a .NET environment.]]</li>
 
+
<li style="display:inline-block; vertical-align:text-top">[[Image:NatNetWinFormSampleRemote.png|thumb|center|400 px|Issuing remote control commands to Motive.]]</li>
 
+
</ul></center>
=Running the Matlab Sample=
+
  
 +
==Running the Matlab Sample==
 
<div style="padding-left:2em;">
 
<div style="padding-left:2em;">
 
'''1. [Motive]''' Start a NatNet server application  (e.g. Motive).
 
'''1. [Motive]''' Start a NatNet server application  (e.g. Motive).
Line 172: Line 190:
 
'''3. [Matlab]''' Start Matlab
 
'''3. [Matlab]''' Start Matlab
  
'''4. [Matlab]''' Open the NatNetMatlabSample.m file.
+
'''4. [Matlab]''' Open the NatNetPollingSample.m file.
  
 
'''5. [Matlab]'''  From the editor window, press Run
 
'''5. [Matlab]'''  From the editor window, press Run
Line 179: Line 197:
  
 
[[Image:NatNetMatlab.png|thumb|center|750 px|Rael-time streaming mocap data from Motive into Matlab.]]
 
[[Image:NatNetMatlab.png|thumb|center|750 px|Rael-time streaming mocap data from Motive into Matlab.]]
 
 
=Running the Unity3D Sample=
 
 
For streaming into Unity3D, use [[OptiTrack Unity Plugin]].
 
 
<div style="padding-left:2em;">
 
'''1. [Motive]''' Start Motive.
 
 
'''2. [Motive]''' Have skeleton tracking data available in Motive. You can either open a previously captured Take or stream directly from live tracking.
 
 
'''3. [Motive]''' Open the Data Streaming pane, and set the Local Rigid Body and Stream Skeletons setting to True.
 
 
'''4. [Motive]''' Specify the streaming network address under the Network Interace  Local Interface.
 
 
'''5. [Motive]''' Enable the network streaming from the server application (Motive: Data Streaming Pane  Check Broadcast Frame Data )
 
 
'''6. [UnitySample]''' Run UnitySample.exe from the \NatNet SDK\Samples\bin folder. This program connects to the NatNet server, receives tracking data from Motive, and outputs the data into Unity. If this application fails to find the host, go back to Motive and try streaming onto another network interface.
 
 
'''7. [Unity]''' Start Unity.
 
 
'''8. [Unity]''' Create a new project.
 
 
'''9. [Unity]''' Import the C# scripts, or assets, in the \NatNet SDK\Sample\Unity3D folder into Unity.
 
 
'''10. [Unity]''' Create an empty gameobject (GameObject  Create Empty) in the scene and name it SlipStream.
 
 
'''11. [Unity]''' Add the SlipStream.cs script component into the SlipStream object.
 
 
'''12. [Unity]''' Under the SlipStream.cs component, type in the streaming Unity3D IP address defined from the server application.
 
 
'''13. [Unity]''' Import a sample character in Unity. ( Asset  Import Package  Characters)
 
 
'''14. [Unity]''' From the imported assets folder in the Project panel, load the sample character, Ethan, into the scene. (Assets  Standard Assets  Characters ThirdPersonCharacters  Models  Ethan)
 
 
'''15. [Unity]''' Select the character, and under the inspector panel, disable the Animator class.
 
 
'''16. [Unity]''' Click Add Component, and add the LivePoseAnimator.cs script onto the character.
 
 
'''17. [Unity]''' Enter properties for the LivePoseAnimator component:
 
 
::a. Under the Desintation Avatar, select the avatar that you wish to animate (Ethan  EthanAvatar).
 
 
::b. Under the Slip Stream Object, select the empty object that you’ve attached the SlipStream.cs script to (SlipStream).
 
 
::c. Under the Actor, select name of the skeleton in Motive that you wish to import.
 
 
'''18. [Unity]''' Double check the settings under the objects (SlipStream and Ethan) and run the project. If all settings are properly configured, Ethan will be animated using tracking data from Motive.
 
</div>
 
 
 
[[Image:NatNetUnity.png|thumb|center|750 px|Rael-time streaming mocap data from Motive into Unity3D.]]
 
</div>
 
  
  
 
[[Category:NatNet SDK]]
 
[[Category:NatNet SDK]]

Latest revision as of 11:58, 28 June 2018

Main pageNatNet SDKNatNet: Sample Projects


This page lists out the NatNet sample applications provided with the SDK and provides instructions for some of the samples. The code samples are the quickest path towards getting NatNet data into your application. We typically recommend you:

1. Identify your application’s development/interface requirements (managed, native, etc).
2. Adapt the NatNet sample code from the corresponding NatNet sample application in the samples folder into your application.
3. Use the API reference in the next page for additional information.

The Visual Studio solution file \Samples\NatNetSamples.sln will open and build all of the NatNet sample projects. If you are creating an application from scratch, please refer to the following sections for application specific requirements.

NatNet Sample Projects[edit]


The following projects are located in the NatNet SDK\Samples folder.

NatNet SDK Samples[edit]

The following sample projects utilizes NatNet SDK library for obtaining tracking data from a connected server application.
Sample Name NatNet Library Type Description
Matlab Managed: Matlab Sample MATLAB code file (.m) for using MATLAB with the NatNet managed assembly (NatNetML.dll) using the provided natnet.p wrapper class.
RebroadcastMotiveData Native: C++ Sample application that receives tracking data from the NatNet Server and redistributing it in other forms. Currently there are two protocols supported for pipelining tracking data into Unity via compatible XML packets and into Previzion software via serial port interface.
MayaPlugIn Native: C++ GitHub open source project: mayaMotive
SampleClient Native: C++ Sample NatNet console app that connects to a NatNet server, receives a data stream, and writes that data stream to an ASCII file. This sample


SampleClient3D Native: C++ Sample NatNet application that connects to a NatNet server, receives a data stream, and displays that data in an OpenGL 3D window.
SampleClientML Managed: .NET (C#) Sample NatNet C# console appication that connects to a NatNet server on the local IP address, receives data stream, and outputs the received data. Note: Skeleton As Rigid Bodies must be set to false.
TimingClient Native: C++ This program connects to a NatNet server and can be used as a quick check to determine packet timing information.
WinFormsSample Managed: C# .NET Simple C# .NET sample showing how to use the NatNet managed assembly (NatNetML.dll). This sample also demonstrates how to send and receive the NatNet commands.

Direct Depacketization Samples[edit]

The following sample projects do not use the NatNet SDK library. Client/Server connection is established at a low-level by creating sockets and threads within the program, and the streamed data are depacketized directly from the bit-stream syntax. The following sample approaches should be used only when the use of NatNet SDK library is not applicable (e.g. streaming into UNIX clients).
Sample Name Type Description
PacketClient C++ Simple example showing how to connect to a NatNet multicast stream and decode NatNet packets directly without using the NatNet SDK.
PythonClient Python Sample Python code file (.py) for using Python with NatNet streaming. This sample depacketizes data directly from the bit-stream without using the library.


XML trigger broadcast[edit]

The following samples demonstrate how to use remote triggering in Motive using the XML formatted UDP broadcase packets.
Sample Name Type Description
BroadcastSample C++ XML broadcast. Sample application illustrating how to use remote record trigger in Motive using XML formatted UDP broadcast packets.
NatCap C++ XML broadcast. Sample capture start/stop trigger broadcast app.

Running the Console Output Sample (Sample Client)[edit]

On Windows[edit]

1. [Motive] Start the Optitrack Server (e.g. Motive) and begin streaming data via the Streaming Panel.


2. [SampleClient] Start the client application from the command prompt or directly from the NatNet SDK/Samples/bin folder.


3. [SampleClient] Once the sample application starts up, it will search the local network and list out IP addresses of available tracking servers where tracking data is streamed from. Select a server address by pressing the corresponding number key.

Motive is streaming to the local loopback address, and it is detected by the SampleClient application.


4. [SampleClient] The client application is connected to the local loopback address (127.0.0.1) and receiving tracking data.

Running the SampleClient project from the windows command prompt.

Running the Rigid Body Sample (SampleClient3D)[edit]

The Rigid Body sample (SampleClient3D) illustrates how to decode NatNet 6DOF Rigid Body and Skeleton Segment data from OptiTrack quaternion format to euler angles and display them in a simple OpenGL 3D viewer. This sample also illustrates how to associate RigidBody/Skeleton Segment names and IDs from the data descriptions with the IDs streamed in the FrameOfMocapData packet.

With Client/Server on same machine:[edit]

1. [Motive] Load a dataset with rigid body or skeleton definitions

2. [Motive] Enable network streaming ( Data Streaming Pane -> Check Broadcast Frame Data )

3. [Motive] Enable streaming rigid body data (check Stream Options -> Stream Rigid Bodies = True)

4. [Sample3D] File -> Connect

With Client/Server on separate machines:[edit]

1. [Motive] Load a dataset with rigid body or skeleton definitions

2. [Motive] Set IP address to stream from (Network Interface Selection -> Local Interface)

3. [Motive] Enable network streaming ( Data Streaming Pane -> Check Broadcast Frame Data )

4. [Motive] Enable streaming rigid body data (check Stream Options -> Stream Rigid Bodies = True)

5. [Sample3D] Set Client and Server IP addresses

6. [Sample3D] File -> Connect

  • IP Address IP Address of client NIC card you wish to use.
  • Server IP Address IP Address of server entered in step 2 above.


SampleClient3D - Decoding and draqing labeled rigid body position and orientation (6DoF) data.

Running the .NET Sample[edit]

1. [Motive] Start a NatNet server application (e.g. Motive).

2. [Motive] Enable NatNet streaming from the Server application.

3. [WinFormTestApp] Start the WinForms sample application from the NatNet Samples folder.

4. [WinFormTestApp] Update the “Local” and “Server” IP Addresses as necessary.

5. [WinFormTestApp] Press the “Connect” button to connect to the server.

6. [WinFormTestApp] Press the “Get Data Descriptions” button to request and display a detailed description of the Server’s currently streamed objects.

7. [WinFormTestApp] Select a Row in the DataGrid to display that value in the graph.


  • Receiving tracking data via NatNet in a .NET environment.
  • Issuing remote control commands to Motive.

Running the Matlab Sample[edit]

1. [Motive] Start a NatNet server application (e.g. Motive).

2. [Motive] Enable NatNet streaming from the Server application.

3. [Matlab] Start Matlab

4. [Matlab] Open the NatNetPollingSample.m file.

5. [Matlab] From the editor window, press Run


Rael-time streaming mocap data from Motive into Matlab.