A tracker wich can be used for custom tracking solutions.
This tracking option supports custom trackers and sensors for a humanoid. We support two types of tracking
- using a BodySkeleton
- using SensorComponent
BodySkeleton
This option is most suited for full body tracking hardware. An example implementation is the PerceptionNeuron extension found in the Humanoid Control Pro edition.
For this, you need to implement a class derived from the Passer::Tracking::BodySkeleton class. For the Perception Neuron extension, this new class is Passer::Tracking::PerceptionNeuron. This class should be used for the to the CustomTracker::bodySkeleton parameter:
In the new class, you should override the Passer::Tracking::BodySkeleton::Start and Passer::Tracking::BodySkeleton::Update functions and implement the functionality to correctly start the tracking and retrieving the new body pose. This will ensure that the tracking is started and updated at the right moment. In the update function, you can asssign the tracking result to the correct tracking bones of Humanoid Control. You can retrieve the Humanoid Control TrackedBone using the BodySkeleton::GetBone function. Then you can update the position and/or the rotation of the bone.
Important: a confidence value between 0 and 1 should also be set for the bone's position and/or rotation. The default confidence is 0 and in that case, the tracking information will not be used. Next to that, the Passer::Tracking::BodySkeleton::status should reflect the current tracking status of the device.
Example of updating one bone:
protected void UpdateBone(Bone boneId) {
TrackedBone bone = GetBone(boneId);
if (bone == null)
return;
SensorBone neuronBone = device.GetBone(0, boneId);
bone.transform.position = neuronBone.position;
bone.positionConfidence = neuronBone.positionConfidence;
bone.transform.rotation = neuronBone.rotation;;
bone.rotationConfidence = neuronBone.rotationConfidence;
}
SensorComponents
This option is most suited for tracking devices which can be mounted on the body. An example implementation is the ViveTracker imnplementation found in the Humanoid Control Pro edition.
For this, you need to implement a class derived from the SensorComponent class. For the ViveTracker, this is the Passer::Tracking::ViveTrackerComponent. This class should be used on the Head, Hand, Hips and/or Foot Targets in the Sensor::sensorComponent parameter. Where applicable, selecting the bone in the dropdown determine to which bone the device is attached.
In the new class, you should override the SensorComponent::StartComponent and SensorComponent::UpdateComponent functions and implement the functionality to correctly start the tracking and retrieve the actual pose of the device. This will ensure that the tracking is started and updated at the right moment.
In the overridden SensorUpdate function, you should update the Transform of the SensorComponent.
Important: a confidence value between 0 and 1 should also be set for the device. The default confidence is 0 and in that case, the tracking information will not be used. Next to that, the SensorComponent::status should reflect the current tracking status of the device. Example of updating the device rotation and position:
public override void UpdateComponent() {
if (actionPose.poseIsValid) {
transform.localPosition = actionPose.localPosition;
transform.localRotation = actionPose.localRotation;
positionConfidence = 0.99F;
rotationConfidence = 0.99F;
}
else {
positionConfidence = 0F;
rotationConfidence = 0F;
}
}
A tracker.
Definition Tracker.cs:9
Status
The tracking status.
Definition Tracker.cs:13
|
override void | UpdateTracker () |
| Update the tracker state.
|
|
virtual void | CheckTracker (HumanoidControl humanoid) |
| Check the status of the tracker.
|
|
void | CheckTracker (HumanoidControl humanoid, TrackerGetter getTracker) |
| Function to check the status of a specific tracker.
|
|
void | CheckTracker (HumanoidControl humanoid, TrackerGetter getTracker, Vector3 localPosition, Quaternion localRotation) |
| Function to check the status of a specific tracker.
|
|
delegate TrackerComponent | TrackerGetter (Transform transform, Vector3 localPosition, Quaternion localRotation) |
| Function delegate for retrieving the tracker.
|
|
virtual Vector3 | GetBonePosition (uint actorId, FacialBone boneId) |
|
virtual Quaternion | GetBoneRotation (uint actorId, FacialBone boneId) |
|
virtual float | GetBoneConfidence (uint actorId, FacialBone boneId) |
|
virtual void | StartTracker (HumanoidControl _humanoid) |
| Start the tracker.
|
|
virtual void | StartTracker () |
| Optional list of SubTrackers.
|
|
virtual void | StopTracker () |
| Stop the tracker.
|
|
virtual void | ShowTracker (bool shown) |
| Show or hide the Tracker renderers.
|
|
virtual void | Calibrate () |
| Calibrate the tracker.
|
|
virtual void | AdjustTracking (Vector3 positionalDelta, Quaternion rotationalDelta) |
| Adjust the position of the tracker by the given delat.
|
|