Rigid Body "Tracked" Flag Streaming
Posted: Wed Apr 06, 2011 10:08 am
Hi guys,
First off I want to say how much I appreciate the great support that is provided here. Also, I wanted to update folks with my lab's current use of TrackingTools. We have 6 V100R2 cameras that we regularly move around the lab to get 6DOF position/attitude of rigid bodies. The quick (and very accurate) calibration makes the system extremely flexible. We stream the data into a real-time (Windows and QNX) closed-loop control system using MATLAB and Simulink to achieve a very tight position and attitude control system. So far everything works great.
What we're running into now is that occasionally trackables are lost (untracked) for one or two frames. This could probably be alleviated by changing our camera setup or changing the markers on the rigid body but realistically it's bound to happen once and a while, which is totally acceptable. However, the data that is streamed via NatNet does not show (as far as I know) when the rigid body is "Untracked". Instead, the client just receives all 0's for position and attitude. These instantaneous jumps to 0 are a menace for accurate closed-loop control. One could say that the easy fix would be to assume that all 0's indicate an untracked rigid body but that's not a good solution for every setup. Here's an exert from the PacketClient output for a tracked and untracked 3 marker rigid body without streaming the individual marker data:
Tracked:
Begin Packet
-------
Message ID : 7
Byte count : 128
Frame # : -1
Marker Set Count : 0
Unidentified Marker Count : 0
Rigid Body Count : 1
ID : 1
pos: [0.03,-0.80,-0.08]
ori: [0.02,0.01,0.00,1.00]
Marker Count: 3
Marker 0: id=1 size=0.0 pos=[-0.02,-0.79,-0.17]
Marker 1: id=2 size=0.0 pos=[0.08,-0.79,-0.02]
Marker 2: id=3 size=0.0 pos=[0.04,-0.82,-0.05]
Mean marker error: 0.00
Skeleton Count : 0
latency : 1160250113
End Packet
-------------
Untracked:
Begin Packet
-------
Message ID : 7
Byte count : 128
Frame # : -1
Marker Set Count : 0
Unidentified Marker Count : 0
Rigid Body Count : 1
ID : 1
pos: [0.00,0.00,0.00]
ori: [0.00,0.00,0.00,0.00]
Marker Count: 3
Marker 0: id=0 size=0.0 pos=[0.00,0.00,0.00]
Marker 1: id=0 size=0.0 pos=[0.00,0.00,0.00]
Marker 2: id=0 size=0.0 pos=[0.00,0.00,0.00]
Mean marker error: 0.00
Skeleton Count : 0
latency : 1160564086
End Packet
-------------
It would be really nice if a boolean flag for each rigid body was included in the packet so the client knows if the data it receives is valid or not. Maybe it's already there and I just haven't been able to find it.
Thanks for the support.
Andrew
First off I want to say how much I appreciate the great support that is provided here. Also, I wanted to update folks with my lab's current use of TrackingTools. We have 6 V100R2 cameras that we regularly move around the lab to get 6DOF position/attitude of rigid bodies. The quick (and very accurate) calibration makes the system extremely flexible. We stream the data into a real-time (Windows and QNX) closed-loop control system using MATLAB and Simulink to achieve a very tight position and attitude control system. So far everything works great.
What we're running into now is that occasionally trackables are lost (untracked) for one or two frames. This could probably be alleviated by changing our camera setup or changing the markers on the rigid body but realistically it's bound to happen once and a while, which is totally acceptable. However, the data that is streamed via NatNet does not show (as far as I know) when the rigid body is "Untracked". Instead, the client just receives all 0's for position and attitude. These instantaneous jumps to 0 are a menace for accurate closed-loop control. One could say that the easy fix would be to assume that all 0's indicate an untracked rigid body but that's not a good solution for every setup. Here's an exert from the PacketClient output for a tracked and untracked 3 marker rigid body without streaming the individual marker data:
Tracked:
Begin Packet
-------
Message ID : 7
Byte count : 128
Frame # : -1
Marker Set Count : 0
Unidentified Marker Count : 0
Rigid Body Count : 1
ID : 1
pos: [0.03,-0.80,-0.08]
ori: [0.02,0.01,0.00,1.00]
Marker Count: 3
Marker 0: id=1 size=0.0 pos=[-0.02,-0.79,-0.17]
Marker 1: id=2 size=0.0 pos=[0.08,-0.79,-0.02]
Marker 2: id=3 size=0.0 pos=[0.04,-0.82,-0.05]
Mean marker error: 0.00
Skeleton Count : 0
latency : 1160250113
End Packet
-------------
Untracked:
Begin Packet
-------
Message ID : 7
Byte count : 128
Frame # : -1
Marker Set Count : 0
Unidentified Marker Count : 0
Rigid Body Count : 1
ID : 1
pos: [0.00,0.00,0.00]
ori: [0.00,0.00,0.00,0.00]
Marker Count: 3
Marker 0: id=0 size=0.0 pos=[0.00,0.00,0.00]
Marker 1: id=0 size=0.0 pos=[0.00,0.00,0.00]
Marker 2: id=0 size=0.0 pos=[0.00,0.00,0.00]
Mean marker error: 0.00
Skeleton Count : 0
latency : 1160564086
End Packet
-------------
It would be really nice if a boolean flag for each rigid body was included in the packet so the client knows if the data it receives is valid or not. Maybe it's already there and I just haven't been able to find it.
Thanks for the support.
Andrew