cancel
Showing results for 
Search instead for 
Did you mean: 

Oculus Monitor (v0.2.2 - 27/Mar/20)

kojack
MVP
MVP

Oculus Monitor

szzdy92kgbvm.png

Oculus Monitor shows realtime information about your Oculus setup. Sensors change if you move them, controller tracking is shown if your headset proximity sensor is active, the guardian boundary even updates if you set a new one (in the Oculus app) while Oculus Monitor is running.

(The Show Serial option turns on or off showing the headset serial number. If you want to take a screenshot to post online, it probably is a good idea to not include your serial)
You might notice the left and right touch panels have slightly different data. That's because the oculus button on the right touch can't be accessed by user programs, so I left it out.

Oculus Monitor is using Dear ImGui, with it's default DirectX 11 sample app.


Binary release

Source




Readme

Oculus Monitor
Copyright (C) 2018 Kojack (rajetic@gmail.com)

Oculus Monitor is released under the MIT License 
https://opensource.org/licenses/MIT


Oculus Monitor is a tool for viewing the current state of various aspects of the Oculus VR environment.
Currently Oculus Monitor can show you:
Headset:
- Serial number
- Firmware
- Product name
- Tracking capability flags
- Panel resolution
- Oculus runtime version
- turn on any performance hud mode
- Pixel density to render resolution calculator

Controllers:
- Which controllers are active (left touch, right touch, remote, xbox, 4 VR objects)
- Every button on the remote
- Every button, touch state, analog axis and tracking data for both touch controllers

Room layout:
- Guardian outer boundary
- Guardian play boundary
- Touch and headset position and orientation
- World origin
- Sensor coverage

Change History
v0.1.0 - Initial release. Built against Oculus SDK 1.26
v0.2.0 - Recording, replay and export added
v0.2.1 - Added Collada export
v0.2.2 - Added raw and no dead zone values to the triggers and thumbsticks.

Installation
Oculus Monitor can be placed anywhere. No explicit installation is required.

Room Layout Display
The guardian boundary is shown as a white outline.
The play area is shown as a cyan outline.
Sensors are purple. Note, this is using leveled poses, which means it doesn't take into account sensors angled up or down. Rendering that in 2D in a meaningful way is tricky.
Touch controllers are white circles with a three axis orientation marker.
The headset is a yellow circle with a three axis orientation marker.
The current origin (when you reset the view) is a red circle with a three axis orientation marker.
The three axis orientation markers are red to the right, green upwards and blue forwards.

Note: Position tracking of Touch controllers doesn't work unless the headset proximity sensor is active (by wearing the headset, putting an object like a cloth on it, or forced on by the Oculus Debug Tool). The orientation of Touch controllers may also be wrong until they can be calibrated by the headset proximity sensor being active at least once (after that they are tracked with the IMU gyroscopes).

Recording/Replay
A new Playback panel has been added. All major properties (touch tracking and state, headset tracking, sensor poses) can now be recorded and played back. There 6 controls in this panel:
- Record : Start recording the state. Frames are captured based on your monitor framerate. Press record a second time to stop recording. Each time you start recording, it will wipe the previous recording.
- Play : Start replaying the recording. Most panels will show the replay data (not all data is captured per frame, such as headset resolution and serial number, since they don't change at runtime).
- Stop : Stop playing or recording and go back to live mode (live data is displayed).
- Pause : Pause the recording or playback.
- Export CSV : save the tracking data to a CSV file. You can open this in most spreadsheet applications like Excel.
- Export DAE : save the tracking data to a Collada DAE file. You can open this in Blender (and maybe other 3D software).
- Time Slider : This lets you scrub through the timeline.








Author: Oculus Monitor,  Auto Oculus Touch,  Forum Dark Mode, Phantom Touch Remover,  X-Plane Fixer
Hardware: Threadripper 1950x, MSI Gaming Trio 2080TI, Asrock X399 Taich
Headsets: Wrap 1200VR, DK1, DK2, CV1, Rift-S, GearVR, Go, Quest, Quest 2, Reverb G2
12 REPLIES 12

kojack
MVP
MVP
Version 0.2.0 is now out.

There's one major change in this version: I've added recording, playback and exporting of tracking data.

There's a playback window. From here you can record tracking, play back, pause and export. It has a timeline slider that you can drag during playback to quickly skip through the recording.
You can export the data to a CSV spreadsheet (Excel and other spreadsheets can open it as a comma separated file, not tab separated).
qefc9tltky0h.png
The following data is currently recorded/played back:
- active controllers
- button/touch sensor/tracking of the remote and touch controllers (no VR Object yet, I didn't have any connected to test).
- headset tracking
- up to 4 sensors with details and tracking

You can see flags like if a touch/headset is position tracked (that flag turns off when the sensors lose line of sight).

The purpose of this is to diagnose bad tracking. You can record yourself while playing a game (OculusMonitor can run while other games are playing), then replay to watch things like sensors recalibrating or touch controllers jittering in certain positions. You can export too, to keep a log (maybe for Oculus Support, although they won't know where the hell this data came from).


I have some more ideas for this. The next feature I'll add soon is saving the tracking data to a collada file so you can replay the scene in Blender or other 3D software. That already works in a test project, just not this project yet.



Author: Oculus Monitor,  Auto Oculus Touch,  Forum Dark Mode, Phantom Touch Remover,  X-Plane Fixer
Hardware: Threadripper 1950x, MSI Gaming Trio 2080TI, Asrock X399 Taich
Headsets: Wrap 1200VR, DK1, DK2, CV1, Rift-S, GearVR, Go, Quest, Quest 2, Reverb G2

LZoltowski
Champion
Wow, amazing! ... also you do realise that if the 3d export works with animation you are basically giving a rudimentary motion capture system to us artists to mess about with 🙂
Core i7-7700k @ 4.9 Ghz | 32 GB DDR4 Corsair Vengeance @ 3000Mhz | 2x 1TB Samsung Evo | 2x 4GB WD Black
ASUS MAXIMUS IX HERO | MSI AERO GTX 1080 OC @ 2000Mhz | Corsair Carbide Series 400C White (RGB FTW!) 

Be kind to one another 🙂

kojack
MVP
MVP
Here's a little sample from my test app.
Open the dae file in that in Blender and you'll see touch controllers, headset and sensors tracked as animations. (Plus cameras attached to the sensors and head)

Author: Oculus Monitor,  Auto Oculus Touch,  Forum Dark Mode, Phantom Touch Remover,  X-Plane Fixer
Hardware: Threadripper 1950x, MSI Gaming Trio 2080TI, Asrock X399 Taich
Headsets: Wrap 1200VR, DK1, DK2, CV1, Rift-S, GearVR, Go, Quest, Quest 2, Reverb G2

LZoltowski
Champion
Holy shit, that is amazing, even the pov of the headset as a camera! ... Definitely, something that I could use in the future! 
Core i7-7700k @ 4.9 Ghz | 32 GB DDR4 Corsair Vengeance @ 3000Mhz | 2x 1TB Samsung Evo | 2x 4GB WD Black
ASUS MAXIMUS IX HERO | MSI AERO GTX 1080 OC @ 2000Mhz | Corsair Carbide Series 400C White (RGB FTW!) 

Be kind to one another 🙂

Very nice work kojack !

Do you know if there's something within the runtime that can be called to determine if the headset is being worn? i.e. the proximity detector is activated?

I'm trying to put together a little autoit script to auto-sleep the monitor when the headset is worn... and switch Windows sound output for Steam games that need this additional switch on top of the Oculus audio output setting. There's no registry key change for this but there must be some event that can be called... or maybe it's a thing that can only be utilised from with Unreal or Unity projects.

kojack
MVP
MVP
I guess I'd better do some coding then. 🙂
What I really want with the export is properties like triggers, thumbsticks, etc stored too. But I can't find a way for collada to handle that. I don't think FBX does either. Blender can, but I'd need to export the data raw then make a blender plugin to import it and set up the properties. I hate Python though, I don't want to resort to plugin writing.
Maybe I'll just export them as dummy objects that are relative to the origin based on their values (so the left trigger is a dummy that goes from (0,0,0) to (0,0,1) or something when pulled).


I just had an idea for another app too. Attach a pointer (pen, stick, whatever) to a touch controller and use it as a point cloud 3d digitiser. Hmm, interesting...



Author: Oculus Monitor,  Auto Oculus Touch,  Forum Dark Mode, Phantom Touch Remover,  X-Plane Fixer
Hardware: Threadripper 1950x, MSI Gaming Trio 2080TI, Asrock X399 Taich
Headsets: Wrap 1200VR, DK1, DK2, CV1, Rift-S, GearVR, Go, Quest, Quest 2, Reverb G2

kojack
MVP
MVP


Very nice work kojack !

Do you know if there's something within the runtime that can be called to determine if the headset is being worn? i.e. the proximity detector is activated?

I'm trying to put together a little autoit script to auto-sleep the monitor when the headset is worn... and switch Windows sound output for Steam games that need this additional switch on top of the Oculus audio output setting. There's no registry key change for this but there must be some event that can be called... or maybe it's a thing that can only be utilised from with Unreal or Unity projects.



I haven't used it myself, but in the C++ sdk you can call ovr_GetSessionStatus. The structure it fills in has a member called HmdMounted that is true if the headset is currently being worn.

Hmm, I should add that to autooculustouch.


What I REALLY want is current Touch battery level. Dash has access to it, but the SDK doesn't expose it. I may have to hack my way into the oculus service to grab the data. I want to record the battery level over time.

Author: Oculus Monitor,  Auto Oculus Touch,  Forum Dark Mode, Phantom Touch Remover,  X-Plane Fixer
Hardware: Threadripper 1950x, MSI Gaming Trio 2080TI, Asrock X399 Taich
Headsets: Wrap 1200VR, DK1, DK2, CV1, Rift-S, GearVR, Go, Quest, Quest 2, Reverb G2

LZoltowski
Champion

kojack said:

I guess I'd better do some coding then. 🙂
What I really want with the export is properties like triggers, thumbsticks, etc stored too. But I can't find a way for collada to handle that. I don't think FBX does either. Blender can, but I'd need to export the data raw then make a blender plugin to import it and set up the properties. I hate Python though, I don't want to resort to plugin writing.
Maybe I'll just export them as dummy objects that are relative to the origin based on their values (so the left trigger is a dummy that goes from (0,0,0) to (0,0,1) or something when pulled).


I just had an idea for another app too. Attach a pointer (pen, stick, whatever) to a touch controller and use it as a point cloud 3d digitiser. Hmm, interesting...





 Amazing! ... yeah definitely would have a use for this data in projects. Amazing stuff.
Core i7-7700k @ 4.9 Ghz | 32 GB DDR4 Corsair Vengeance @ 3000Mhz | 2x 1TB Samsung Evo | 2x 4GB WD Black
ASUS MAXIMUS IX HERO | MSI AERO GTX 1080 OC @ 2000Mhz | Corsair Carbide Series 400C White (RGB FTW!) 

Be kind to one another 🙂

kojack
MVP
MVP
So, I was in a programming mood. Version 0.2.1 now released.
Collada export has been added. The code sucks a bit, I need to do a refactoring. But it's working for now.


Author: Oculus Monitor,  Auto Oculus Touch,  Forum Dark Mode, Phantom Touch Remover,  X-Plane Fixer
Hardware: Threadripper 1950x, MSI Gaming Trio 2080TI, Asrock X399 Taich
Headsets: Wrap 1200VR, DK1, DK2, CV1, Rift-S, GearVR, Go, Quest, Quest 2, Reverb G2