1. For downloading SimTools plugins you need a Download Package. Get it with virtual coins that you receive for forum activity or Buy Download Package - We have a zero Spam tolerance so read our forum rules first.

    Buy Download Package Now!
  2. Do not try to cheat our system and do not post an unnecessary amount of useless posts only to earn credits here. We have a zero spam tolerance policy and this will cause a ban of your user account. Otherwise we wish you a pleasant stay here! Read the forum rules
  3. We have a few rules which you need to read and accept before posting anything here! Following these rules will keep the forum clean and your stay pleasant here. Do not following these rules will lead to permanent exclusion from this website: Read the forum rules.

OPEN VR CODER NEEDED !! PLEASE HELP !!

Discussion in 'VR Headsets and Sim Gaming - Virtual Reality' started by SilentChill, Mar 24, 2019.

  1. SilentChill

    SilentChill Problem Maker

    Joined:
    Jul 19, 2014
    Messages:
    2,380
    Occupation:
    Railway Maintenance
    Location:
    Morecambe, Lancashire, England
    Balance:
    18,372Coins
    Ratings:
    +3,070 / 29 / -0
    My Motion Simulator:
    DC motor, Arduino, Motion platform, 6DOF
    I know its a long shot but is there anyone here who could implement in "open vr emulator" a deadzone for the tracker/controller we put on the rig ? Or even make it less sensitive or something like that ?

    If we could I think it would eliminate the problems we have with vibrations and the like. I tried it with my Odyssey Plus with the controller on the rig and it works great but the vibrations and jerks are absolutely dreadful !!

    Wish I knew how to code to try and sort it

    PLEASE HELP , YOU ARE OUR ONLY HOPE :D
    • Like Like x 1
  2. yobuddy

    yobuddy Well-Known Member Staff Member Moderator SimAxe Beta Tester SimTools Developer Gold Contributor

    Joined:
    Feb 9, 2007
    Messages:
    3,366
    Occupation:
    Computer Technician
    Location:
    Portland, Oregon - USA
    Balance:
    25,633Coins
    Ratings:
    +3,420 / 10 / -0
    Ok, I think I may know a way to make this work.

    But I need to know more about how this works now first from people that use it.
    As I have very little VR time, and don't have one currently to play with.

    As I have some questions.
    1) Do we need to compensate for anything but the Pitch and Roll of the sim?
    I can't think of any reason we would need Heave, Yaw, Sway or Surge?
    (In talking about what the sim is actually doing here, now how you drive it in axis settings.)

    2) Will the open VR solution work for all VR headsets? htc vive and oculus and others?

    3) I know you guys connect a controller to the sim itself, how does this translate into motion cancellation?
    For instance, if I can create a virtual controller and move it around with telemetry strait from SimTools, will that fix the problems?

    sorry for all the n00b questions.
    but it's best to collect some more knowledge of how it is, and how it is not, working for you guys first.
    Then see what we can do.

    Take care,
    yobuddy
  3. noorbeast

    noorbeast VR - The Next Generation Staff Member Moderator

    Joined:
    Jul 13, 2014
    Messages:
    12,732
    Occupation:
    Innovative tech specialist for NGOs
    Location:
    St Helens, Tasmania, Australia
    Balance:
    97,290Coins
    Ratings:
    +8,162 / 40 / -2
    My Motion Simulator:
    3DOF, DC motor, JRK
    1. It will need to track 6DOF movement in 3D space.

    2. SteamVR (OpenVR) technically supports all major HMDs but there is a challenge in tracking as some use outside in tracking (cameras (Current Rift) or Lighthouse (Vive, Pimax and pending Valve Index HMDs), while other use inside out tracking (Windows based VR HMDs and pending Rift S).

    3. It would be more efficient in my view to subtract the movement of the controller mounted to the rig in 3D space from the HMD view in OpenVR itself, rather that SimTools telemetry, as latency is to be avoided when using VR.
    • Agree Agree x 1
  4. dododge

    dododge Member Gold Contributor

    Joined:
    Mar 8, 2015
    Messages:
    60
    Balance:
    542Coins
    Ratings:
    +40 / 0 / -0
    If I understand it from a quick skim, it looks like DeviceManipulationHandle::handlePoseUpdate lines 93-113 is where the pose information from the tracking controller is being used to generate the vectors and quaternions that adjust the headset's pose in MotionCompensationManager::_applyMotionCompensation.

    Perhaps instead of passing newpose directly to the motion compensation code, handlePoseUpdate could use it to generate a smoothed/gated pose that gets passed instead -- effectively damping the tracker's movements as seen by the motion compensation code? I don't know anything about the coordinate system used by that pose data so I don't know how difficult it might be.

    Unfortunately my C++ is decades-rusty, I have near-zero experience developing on Windows, and my knowledge of quaternions doesn't go much beyond knowing that they exist, so I'm not readily in a position to try implementing the above myself.
    • Like Like x 1
  5. yobuddy

    yobuddy Well-Known Member Staff Member Moderator SimAxe Beta Tester SimTools Developer Gold Contributor

    Joined:
    Feb 9, 2007
    Messages:
    3,366
    Occupation:
    Computer Technician
    Location:
    Portland, Oregon - USA
    Balance:
    25,633Coins
    Ratings:
    +3,420 / 10 / -0
    I guess I don't understand.
    For instance, how does heave mess up the view?
    What would happen if the tracker simply ignored heave?
    To my understanding, its when you tip that the view on the screen gets messed up?

    I see.
    But this is still probably the best way to cover as many as we can for now?
    (I don't see a better way so far surfing the net)

    Let me explain my thoughts.
    If we know our sim has the physical ability to tip 30deg to -30deg side to side. (Roll)
    Then we can take our Roll Axis output, and do a simple calculation with 30deg to -30deg, we then know where the sim is in real space.
    Then when SimTools sends the command to your interface to move the sim, it simultaneously sends the motion cancellation offset to the tracker.

    This seems a lot faster to me, as the alternative is:
    1) SimTools send the motion data to the interface
    2) The Sim Tips
    3) The tracker reads the tip and sets the offset.

    We could take out any shaking or anything we want this way to?
    So, how far in left field am I?
  6. BlazinH

    BlazinH Well-Known Member

    Joined:
    Oct 19, 2013
    Messages:
    1,928
    Location:
    Oklahoma City, USA
    Balance:
    14,017Coins
    Ratings:
    +1,633 / 30 / -1
    The first method doesn't account for mechanical latency so we still don't know where the rig is until it gets there. Latency using the second method is purely electrical though so it should be more accurate and have the least latency imo.
  7. noorbeast

    noorbeast VR - The Next Generation Staff Member Moderator

    Joined:
    Jul 13, 2014
    Messages:
    12,732
    Occupation:
    Innovative tech specialist for NGOs
    Location:
    St Helens, Tasmania, Australia
    Balance:
    97,290Coins
    Ratings:
    +8,162 / 40 / -2
    My Motion Simulator:
    3DOF, DC motor, JRK
    What I meant for 1 was forget about the sim and traditional axis for a moment, as both the controller and VR HMD are already being tracked in a 6DOF space by SteamVR. So if you subtract the movement of the conroller (which is attachd to the rig) from the HMD postion then that should cancel motion.

    In VR the ideal is to run at 90fps. That is already hard to do with most sim games, as they are generally not really fully optimised for VR. Any processing that adds to latency makes that worse. There are some software tricks that are built into SteamVR to try and mitigate the negative effect of dropped fromes. Motion Smoothing in SteamVR synthesizes entirely new frames to use in the place of dropped frames. It does so by looking at the last two frames, estimating what the next frame should look like, then sending the synthesized frame to the display instead of an entirely new frame. But the ideal is, for all processing and rendering, to aim for a total of 20-30 milliseconds of latency. Obviously the game and computer hardware are the biggest variables relating to that latency target.
    Last edited: Mar 31, 2019
  8. Zed

    Zed VR Simming w/Vive

    Joined:
    Apr 4, 2017
    Messages:
    729
    Location:
    USA
    Balance:
    4,218Coins
    Ratings:
    +748 / 3 / -0
    My Motion Simulator:
    2DOF, DC motor, JRK
    @yobuddy, IIRC and understand what you’re asking, the 6 dof guys have mentioned having their virtual heads pop up through the roof of their cars/planes on big heave moves. @noorbeast is right. The headsets (at least Rift and Vive) are tracking in 6 dof and have 6 dof of inertial sensors as well to fill in motion between optical fixes. But totally agree that reporting commanded sim position to the tracker should be pretty close to actual position minus the errors in the PID loops, lag, and such. Overall I would think it would be minor errors.

    The idea of using a Tracker bolted on near the head position like I did was in the false hope that Valve/Oculus would quickly add simple scaling and subtraction of another tracking device. That would allow affixing a wand, touch controller, or a tracker and the subtraction could all be in the driver software for whatever headset. We just designate the reference. Life could have been so simple. Maybe they will still do that for us and Valve said it was a feature they’ve had in planning, but so far nada.
  9. yobuddy

    yobuddy Well-Known Member Staff Member Moderator SimAxe Beta Tester SimTools Developer Gold Contributor

    Joined:
    Feb 9, 2007
    Messages:
    3,366
    Occupation:
    Computer Technician
    Location:
    Portland, Oregon - USA
    Balance:
    25,633Coins
    Ratings:
    +3,420 / 10 / -0
    This is where it seems a bit confusing, because being in a chair, you can't get up and move around anyway.
    So why have the headset track heave at all?
    All we end up doing is eliminating the heave from the headset input anyway with motion cancellation?
  10. dododge

    dododge Member Gold Contributor

    Joined:
    Mar 8, 2015
    Messages:
    60
    Balance:
    542Coins
    Ratings:
    +40 / 0 / -0
    The headsets track everything and the games generally just allow whatever movements they make. It's the easiest approach and the best user experience.

    For example in Assetto Corsa, LFS, etc, you can literally step out of your cockpit, stand on the track, look back at the car, walk around it, etc. The games aren't really designed for that and there will probably be a headless body still sitting in the driver's seat, but they don't go out of their way to stop it. One of my strongest "VR presence" moments was during one of these out-of-car walks.

    iRacing is the (only?) exception, which limits you to a region of the cockpit as an anti-cheat measure so that you can't get an unrealistically better viewing angle while driving -- and people regularly complain about it. I think they've already expanded the region once and people still regularly complain about it, because when you hit that limiter it breaks immersion or can even be nauseating.

    That's the thing about not having full 6DOF head tracking -- it's a direct line to dizziness and motion sickness. If you're sitting in the cockpit and you lean left or right to look around the A pillar, or stretch your neck to see the gauges through the wheel, that pretty much needs to work. When you don't have that tracking (such as the old DK1 devkit) you have to be careful about your head movements. Even then, they incorporated a virtual head+neck model so that when it detected you tilting your head it automatically added in some lateral motion because your eyes are now over your shoulder. Otherwise get the barf bag ready.

    So heave motion is going to be seen in-game as moving up and down in your car (possibly through the roof or so low that the dash blocks your view). Traction loss may result in you visibly moving side-to-side.

    Aside: in non-racing games the 6DOF movement is an even bigger deal. At the far other side of the spectrum is something like Unseen Diplomacy, which requires a large room because the only way to navigate its virtual corridors, ledges, ducts, etc is to walk/crawl through them in 1:1 real space.
    • Agree Agree x 3
  11. ykeara

    ykeara New Member

    Joined:
    Apr 7, 2019
    Messages:
    5
    Balance:
    58Coins
    Ratings:
    +6 / 0 / -0
    Poking my nose in here to let you know I'm not dead.

    And a few considerations:

    1. w/ lh tracking (and presumably all tracking methods) with haptics you are not going to get very accurate tracking data. (instead of .5-1.5 cm accuracy going to be more like 5 cm accuracy)


    Now if someone w/ a rig can confirm that input emulator fixes the motion cancellation if no vibration.... and It would also be very helpful to have a guide/explanation on what exactly you use/how you set-up input emulator for your 6 - dof rigs that would be appreciated.


    Now I have 3 ideas on how to "fix" the issue.

    1. (weighted) average of last x frames: essentially this would smooth out the crazy adjustments... but too much there would be noticeable latency on the rig turning etc. too little and it would be a jittery mess still.

    2. gate movement: only changes greater than x cm get pushed.... problem here is you need to do your own motion interpretation so you don't just "jump" when the value exceeds the threshold.

    3. 2 tracker solution - Essentially get your data from two trackers.... probably going to be looking into this method.... the further you place them apart the better as it should mask out the bad tracking data ... probably will be looking into this method.

    Just some thoughts And I am sorry for being a bit non-committal... the problem is interesting and I want to look into it just finding time.
    • Like Like x 2
  12. SilentChill

    SilentChill Problem Maker

    Joined:
    Jul 19, 2014
    Messages:
    2,380
    Occupation:
    Railway Maintenance
    Location:
    Morecambe, Lancashire, England
    Balance:
    18,372Coins
    Ratings:
    +3,070 / 29 / -0
    My Motion Simulator:
    DC motor, Arduino, Motion platform, 6DOF
    Sorry dude only just seen this.

    I will do a video without my shakers on to show how it works and I will turn the cancellation on and off so you can see just how much I move around in the cockpit if I don't have the motion cancellation turned on.

    I've had a little idea that the board inside the controller isn't dampened by anything so I'm thinking that maybe if I put some rubber in there on the giro sensor pressed up against the controller case it may stop the little vibrations however it wont stop the vibrations on the LEDs which cancel out the surge heave and sway.

    I'll try and get something uploaded tomorrow
    • Like Like x 2
  13. SilentChill

    SilentChill Problem Maker

    Joined:
    Jul 19, 2014
    Messages:
    2,380
    Occupation:
    Railway Maintenance
    Location:
    Morecambe, Lancashire, England
    Balance:
    18,372Coins
    Ratings:
    +3,070 / 29 / -0
    My Motion Simulator:
    DC motor, Arduino, Motion platform, 6DOF
    Hi @ykeara I've done a quick Video for you, I used SteamVR mirror to capture and it doesnt look too bad on the recording but it was quite horrendous in the headset lol Sorry my mic was quiet aswell but hopefully you get the gist of it :)

  14. Psionic001

    Psionic001 Member Gold Contributor

    Joined:
    Mar 5, 2017
    Messages:
    38
    Location:
    Sydney
    Balance:
    26Coins
    Ratings:
    +21 / 0 / -0
    My Motion Simulator:
    Motion platform, 6DOF
    @SilentChill , here’s an idea.
    As a mechanical fix, try attaching the controller to a very heavy object like a chunk of lead, it must be hard mounted to that lead. Then attach that led block to something softer like foam. The foam has to be firm enough to follow the motion of the seat without the lead block flopping about. The lead will kill your high frequency vibrations. You’ll have to experiment withe the weight of the lead to tune out the vibrations.






    • Like Like x 2
  15. SilentChill

    SilentChill Problem Maker

    Joined:
    Jul 19, 2014
    Messages:
    2,380
    Occupation:
    Railway Maintenance
    Location:
    Morecambe, Lancashire, England
    Balance:
    18,372Coins
    Ratings:
    +3,070 / 29 / -0
    My Motion Simulator:
    DC motor, Arduino, Motion platform, 6DOF
    Nice idea , it's the LED ring that's causing the jerking now pretty much. If I could wrap the outside so the inside LEDs are still visible.

    Now where do I find some lead lol sure I had a little roll from a roof somewhere
  16. dododge

    dododge Member Gold Contributor

    Joined:
    Mar 8, 2015
    Messages:
    60
    Balance:
    542Coins
    Ratings:
    +40 / 0 / -0
    FWIW, when I was experimenting with this last year I did get some lead discs to try using as damping mass. I mounted a 1.25 lbs disc on a threaded shaft between my rubber isolator and the Vive tracker (mounted on the top of my seat), but the problem was that the whole assembly was now several inches long and the isolator was flexing too much. I contemplated having that block of lead swinging around and hitting me in the head while driving and quickly removed it :confused:. I never even tried the 3.25 lbs disc.

    A stiffer isolator might do the trick, plus reworking the assembly to be more compact, but I never got around to it.

    Another idea was to use a giant washer. I got one intended for a 1.25-inch bolt that's about half an inch thick and 4 inches wide. My thinking was that I could 3D print some sort of holder to suspend it below the Vive tracker and around the rubber isolator. This would make it less prone to flopping around and catch it if it did come loose. But again I got sidetracked and never got around to designing the holder.
    Last edited: Apr 23, 2019
  17. dododge

    dododge Member Gold Contributor

    Joined:
    Mar 8, 2015
    Messages:
    60
    Balance:
    542Coins
    Ratings:
    +40 / 0 / -0
    Industrial supply companies would probably have it in convenient shapes. For example McMaster-Carr has discs specifically intended for use "as spacers, washers, and counterbalances". Granted, they aren't exactly cheap. I gave mine a couple coats of plasti-dip as well for more peace of mind while handling them.
  18. Psionic001

    Psionic001 Member Gold Contributor

    Joined:
    Mar 5, 2017
    Messages:
    38
    Location:
    Sydney
    Balance:
    26Coins
    Ratings:
    +21 / 0 / -0
    My Motion Simulator:
    Motion platform, 6DOF
    Most hardwares, Bunnings in a australia, Home Depot in the US have rolls of roofing lead. (Flashing).
    I’d buy some and roll and fold it and knock into shape with a hammer. Drill holes thru it and cable tie the controller to it.

    Search google for “wire isolator”. You can use these to bolt the lead to the seat.

    Add more lead layers as necessary which you can bolt together through the wire isolator holes to tune the system.



  19. SeatTime

    SeatTime Well-Known Member

    Joined:
    Dec 27, 2013
    Messages:
    2,132
    Location:
    Newcastle Australia
    Balance:
    26,043Coins
    Ratings:
    +2,432 / 23 / -0
    My Motion Simulator:
    DC motor, Motion platform, 6DOF
    As I will not be using a tracking camera anymore, when the Pimax hand trackers turn up, I was going to try and mount them to my camera gimbal, which does a pretty good job of absorbing all sorts of movement.
  20. rsbell

    rsbell New Member

    Joined:
    Mar 30, 2019
    Messages:
    14
    Balance:
    98Coins
    Ratings:
    +6 / 0 / -0
    My Motion Simulator:
    6DOF
    Having this issue with the Pimax. I had thought about a lead weight for mass-I’ll see what I can come up with.

    But beside that, I would pay good money for someone to code a software fix for this.