Forum Discussion
Gruton
8 years agoHonored Guest
Avoid gyroscope reorientation when moving
Hi all, I am building a VR app that displays a 360° movie over reality in a place. The alignment with reality has to be very accurate.
The app is in free use in a public place, with about 300 uses a day. I have noticed that after a day, the video in the Rift gets desoriented and does not match the reality any more (3~50° variable).
After a bunch of tests, I have noticed in the Rift logs that a large head movement implies an alignment update, thus the desorientation.
Here is a sample of the log where we can see the alignment update :
24/04 12:04:53.022 {INFO} [HW:Health] Visibility: H +... R .... L ....
24/04 12:04:53.175 {INFO} [HW:Health] Visibility: H -... R .... L ....
24/04 12:04:53.252 {INFO} [Tracking:CamCal] Waiting for initial calibration
24/04 12:04:53.327 {INFO} [HW:Health] Visibility: H +... R .... L ....
24/04 12:04:53.348 {INFO} [HW:Health] Visibility: H -... R .... L ....
24/04 12:04:53.367 {INFO} [HW:Health] Visibility: H +... R .... L ....
24/04 12:04:53.579 {INFO} [Tracking:CamCal] EstimatedUpInCamera camera 0, object 0, count 10: tilt 13.66 0.39 (13.67)
24/04 12:04:53.676 {INFO} [Tracking:CamCal] Computed gravity alignment: camera 0:WMTD30335001AZ, tilt: calculated 14.49 1.16 (14.53), filtered 14.49 1.16 (14.53), delta -14.49 -1.16 (14.53), tilt err 0.0287 deg, elapsed 0.177, wasAligned 0
24/04 12:04:53.676 {INFO} [Tracking:CamCal] Unreliable samples: 5 out of 15
24/04 12:04:53.676 {INFO} [Tracking:CamCal] Resetting gravity filter: reliable 1/0, large 0, wasAligned 0, forced 1
24/04 12:04:53.676 {INFO} [Tracking:CamCal] Gravity alignment updated
24/04 12:04:53.676 {INFO} [Tracking:CamCal] DoGravityAlignment cam 0, aligned 0 0
24/04 12:04:53.676 {INFO} [Tracking:CamCal] First camera alignment 0, default 0, 0, 0 (0) / 0.00 (0.00, 0.00, 0.00)
24/04 12:04:53.676 {INFO} [Tracking:CamCal] Gravity Alignment Update, wasAligned 0, wasEstimated 0
24/04 12:04:53.676 {INFO} [Tracking:CamCal] *0: status c1,e0,a1, was c1,e0,a0, pose t 0.0 0.0 0.0 r 14.49 -0.00 1.16 dt 0.0 0.0 0.0 ( 0.0) dr 14.49 -0.00 1.16 (14.53)
24/04 12:04:53.676 {INFO} [Tracking:CamCal] Updating Calibration
24/04 12:04:53.676 {INFO} [Tracking:Stats] OnWorldFromCameraChange: orientation 0.00 0.00 0.00 (0.00), translation 0.0 0.0 0.0 (0.0)
24/04 12:04:53.676 {WARNING} [Tracking:Manager] Sensor moved :WMTD30335001AZ
24/04 12:04:53.676 {INFO} [Tracking:Manager] Sensor Pose : WMTD30335001AZ RelCur [t (0.0, 0.0, 0.0) r (0.00, 0.00, 0.00)] Cur [t (0.0, 0.0, -1000.0) r (-14.49, -0.00, -1.16)] Aligned : 1 Settled : 0
24/04 12:04:53.770 {DEBUG} [Tracking:Filter] HMD: Large change, resetting position filter: 0.015676, 0.10341, -0.16435 (0.19481) / 171.21 (-0.11, 0.99, 0.13), 873.7, 63.5, 0
24/04 12:04:53.770 {INFO} [Tracking:Filter] HMD: tilt -2.3, 0.0, -2.1 (3.1), confidence 0.508, count 1000
24/04 12:04:55.092 {INFO} [HW:Health] Visibility: H -... R .... L ....
24/04 12:05:01.969 {WARNING} [NetworkRequest] Download failed: 6: Could not resolve host: graph.oculus.com
24/04 12:05:01.969 {!ERROR!} [OAF ERROR] ..\..\..\Network\SimpleHttpRequest.cpp(119) : Request Heartbeat Tick FAILED: 6: Could not resolve host: graph.oculus.com (1971012)
24/04 12:05:01.969 {!ERROR!} [Heartbeater] Heartbeat tick network request failed with error: OVR53225466
24/04 12:05:02.541 {INFO} [Tracking:Stats] Average number of cameras used for poses: 1.0 0.0 0.0
Do you know how I can avoid this reorientation ? Using Unity, can we set the local rotation of the sensor to a given value ? Is there another way to proceed ?
Thanks !
4 Replies
Replies have been turned off for this discussion
- vrdavebOculus StaffThis looks like a bug in our tracking code. I'm following up with the team. In the meantime, you can set the pose of OVRCameraRig.trackingSpace to anything you like, which means you can subtract out any drift that you detect in the OVRCameraRig.trackerAnchor pose.
Example:public class TrackerToOrigin : MonoBehaviour
{
public OVRPose origin = OVRPose.identity;
public bool useWorldSpace = true;
void Awake()
{
var rig = GameObject.FindObjectOfType<OVRCameraRig>();
rig.UpdatedAnchors += OnUpdatedAnchors;
}
void OnUpdatedAnchors(OVRCameraRig rig)
{
var oldPose = rig.trackerAnchor.ToOVRPose(!useWorldSpace);
var offset = origin * oldPose.Inverse();
if (useWorldSpace)
offset = rig.transform.ToOVRPose() * offset;
rig.trackingSpace.FromOVRPose(offset, !useWorldSpace);
}
} - GrutonHonored GuestThat seems to be a wonderful solution. I will test it asap and keep you informed. Thank you.
- vrdavebOculus StaffIf you get a chance, it would help to have full logs from a run that encountered the drift. Can you run C:\Program Files\Oculus\Support\oculus-diagnostics\OculusLogGatherer.exe and PM me the resulting zip file for analysis?
- GrutonHonored GuestI just sent you a complete reporting in MP. Thanks for your help !
Quick Links
- Horizon Developer Support
- Quest User Forums
- Troubleshooting Forum for problems with a game or app
- Quest Support for problems with your device
Other Meta Support
Related Content
- 2 months ago
- 6 months ago