Job description for C++ programmer 1. Know the concept of motion cancellation (aka motion compensation) and why it is essential for using a VR HMD in conjunction with a motion platform (2-6 DoF). 2. Study OpenVR Input Emulator (OVRIE) and have in mind that motion cancellation is only one functionality of the software among many others. I cite from the author's description (https://github.com/matzman666/OpenVR-InputEmulator): "The OpenVR driver hooks into the HTC Vive lighthouse driver and allows to modify any pose updates or button/axis events coming from the Vive controllers before they reach the OpenVR runtime." CAVEAT: I think the author forgot here to mention that OVRIE interceptes and may update not only any controller found and listed by SteamVR, but also the attached headset. Current implementation of motion cancellation functionality: In the drop down menu named "Device" the user chooses a device which is tracked by SteamVR. Usually that is a "controller" or a "tracker". As "Device Mode" user chooses "Motion Compensation". OVRIE then corrects/compensates the incoming pose data of the HMD (can only be one, therefore no need to choose) with the pose data of the chosen "Device". After calculation it passes the "compensated" pose data to the OpenVR runtime. New implementation would be: The OVRIE interface accepts input data from TWO devices: device "A" (controller/tracker on RIG) and device "B" (controller/tracker on HMD). Interface needs an additional input field with dropdown ─ a copy of the current "Device" field. On "Apply" OVRIE a) takes the current pose data of both devices "A" and "B" and saves the calculated difference in a "base offset sheet". (This base offset sheet reflects the offset of the HMD mounted tracker against the rig mounted tracker WHEN THE HEAD IS IN THE DEFAULT POSITION ─ the same position you take when you "reset" your position in a sim.) b) saves the headset's pose data in a "base HMD pose sheet". From now on and with every input cycle OVRIE a) calculates the current offset between device "A" and "B" and b) compares that against the "base offset sheet" ─ resulting in a "current offset" (that precisely reflects any head movement relative to the rig). c) this "current offset" is calculated into the "base HMD pose sheet" resulting in a final pose data which then d) is forwarded to the OpenVR runtime. OVRIE should have the function to be "reset" at any time ─ ideally with a key/button we can assign individually. The "reset" would purge both "base data sheets" and refill them with the current data.