Commit graph

1208 commits

Author SHA1 Message Date
Mateo de Mayo 59c3c911e6 d/rift_s: Add initial multicamera support
Tested-by: Nova <technobaboo@gmail.com>
2023-03-01 19:47:10 +00:00
Mateo de Mayo c39dc977c4 d/euroc: Support datasets with more than two cameras 2023-03-01 19:43:06 +00:00
Mateo de Mayo 186ca8258e t/slam: Adapt camera calibration data for multiple cameras 2023-03-01 19:43:06 +00:00
Mateo de Mayo d8e1b7d921 t/slam: Handle multiple camera sinks 2023-03-01 19:43:06 +00:00
Mateo de Mayo 52cac31d3a xrt: Support more than two cameras in a SLAM sink 2023-03-01 19:43:06 +00:00
Jan Schmidt 699a92d9f8 rift_s: Ignore the first 100 samples for the clock
After turning on the display, the Rift S
sends a burst of stale data and it can lead to
wildly incorrect clock estimates that then
recover really slowly and cause SLAM tracking to
lag horribly.

Throw away the first 100 samples, which seems to be
enough (only the first 20 or so seem to be bad).

Also reduce the clock a2b cutoff frequency, for
faster adaptation to changes.

Tested-By: Nova <technobaboo@gmail.com>
2023-03-01 17:08:09 +00:00
Simon Zeni fdec80cd99 d/survive: add hand tracking pose offsets to controller 2023-02-22 23:51:50 +00:00
Mateo de Mayo 5ba9efd522 t/euroc: Implement trajectory recording 2023-02-17 21:03:08 +00:00
Moses Turner 8621acd899 d/ht, h/mercury: Use u_file_get_hand_tracking_models_dir
Needed for Windows SteamVR driver
2023-02-16 17:03:17 -06:00
Ryan Pavlik a51c2bcb1a d/rift_s: Fix typo 2023-02-08 17:35:22 -06:00
Daniel Willmott 795de613c1 d/survive: Add aim pose offset to index controllers 2023-02-05 20:19:52 +00:00
Jakob Bornecrantz 0938a1a02b xrt: Fix missing function declaration without a prototype warnings
Found by clang-15.

src/xrt/auxiliary/math/m_permutation.c:133:15: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
m_do_the_thing()
              ^
               void
2023-02-02 13:03:08 +00:00
Moses Turner 86e31f54f3 xrt: Refactor t_camera_calibration to use a tagged union instead of a bare array
Co-authored-by: Jakob Bornecrantz <jakob@collabora.com>
2023-01-30 17:09:27 -06:00
Jakob Bornecrantz d1b7e3e557 d/simulated: Add controllers
Supports simulating Simple, WinMR and ML2 controllers
2023-01-30 13:20:57 +00:00
Jakob Bornecrantz c562930cdc d/simulated: Export logging level 2023-01-30 13:20:57 +00:00
Jakob Bornecrantz 0494777d1a d/simulated: Make hmd center be pose and make it possible to pass it in at start 2023-01-30 13:20:57 +00:00
Jakob Bornecrantz 121bcf028a d/simulated: Make it possible to pass in movement mode
And a little bit of tidy.
2023-01-30 13:20:57 +00:00
Jakob Bornecrantz 9bd63cb37d d/dai: It's using aux_util so depend on it 2023-01-27 20:17:27 +00:00
Moses Turner 1bba34e944 xrt: Remove old_rgb hand tracking 2023-01-27 12:37:33 -06:00
Moses Turner 2c73485ecd d/ht: Tidy header 2023-01-26 19:10:57 -06:00
Mateo de Mayo da50a2499f d/wmr: Adjust exposure and gain individually for each camera 2023-01-26 18:07:10 +00:00
Mateo de Mayo 60b996239c u/aeg: Add optional prefix for having multiple aeg UIs 2023-01-26 18:07:10 +00:00
Christoph Haag e7fff3e435 d/hdk: handle 0 bytes read 2023-01-26 00:23:18 +01:00
Christoph Haag bc1d355e26 d/hdk: Zero initialize buffer 2023-01-26 00:17:37 +01:00
Christoph Haag 4030b474ad d/hdk: Use 100 ms hid read timeout
Avoids burning cpu cycles with busy looping
2023-01-26 00:17:37 +01:00
Moses Turner 4709ab85ca d/wmr: Fix grammar 2023-01-23 14:24:28 -06:00
Christoph Haag 87680c69d4 d/ohmd: Get rid of enum alias
The last enum index was used to determine the size of the inputs array.
The "clever" solution of aliasing enum values saved a minor amount of space
when allocating the xrt_device, while still allowing to dynamically assign
any input profile.

It also has drawbacks of being confusing and making it impossible to
validate that inputs from the correct xrt_input_name is requested.
Therefore just get rid of it, the minor space savings is not worth it.

fixes 2be4cbf4c3
2023-01-23 17:46:33 +01:00
Mario Kleiner 50f7b5ba5f d/ohmd: Fix input from controls_mapping[0].
Use INPUT_INDICES_LAST instead of 0 for checking if control_mapping[i]
is unassigned for index i, ie. for skipping input.

As 0 is a valid mapping assignment defined in "enum input_indices", this
lead to dead input for SIMPLE_SELECT_CLICK and OCULUS_TOUCH_X_CLICK, both
assigned to 0.

This commit makes the Oculus Rift CV-1 left touch controllers X-Button
work in Monado OpenXR native and SteamVR via. Monado driver plugin.

Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
2023-01-23 16:30:27 +00:00
Christoph Haag 694baebd07 d/ohmd: Fix build
fixes 2be4cbf4c3
2023-01-22 22:04:47 +01:00
Christoph Haag 2be4cbf4c3 d/ohmd: Support generic trackers and clean up 2023-01-21 19:21:59 +00:00
Moses Turner 1ef49b92f2 d/dai: Control floodlight brightness with an env var
Co-authored-by: Jakob Bornecrantz <jakob@collabora.com>
2023-01-15 09:54:54 -05:00
Christoph Haag 01dd02dc83 d/hdk: initialized thread helper
Fixes assert in debug mode.
2023-01-08 23:42:31 +01:00
Mateo de Mayo 6bd921b390 d/wmr: Fix unused corrected IMU timestamp 2023-01-02 16:21:08 -03:00
Jakob Bornecrantz b87239e7d8 d/wmr: Increase display init sleep and also add debug variable to control it 2022-12-14 12:20:10 +00:00
Jakob Bornecrantz ebb7c3cac2 d/wmr: Tidy prober code 2022-12-05 15:21:20 +00:00
Moses Turner 8c0735feec d/rift_s: Link to hand tracking driver if necessary 2022-12-04 18:05:02 +00:00
Mateo de Mayo dad7957fb2 a/math: Add clock_offset.h
For now it only has our simple exponential smoothing clock offset estimator.
But more advanced ones can go here too.
2022-12-02 16:10:09 +00:00
Moses Turner f580271291 d/wmr: Guess camera orientation for Reverb G2 based on HT0 twist value 2022-11-23 13:02:35 -06:00
Jakob Bornecrantz 8efb55403c d/psvr: Switch to reading sensors from its own thread
Tested-by: number-g <g@imagination.eu.org>
2022-11-22 17:58:07 +00:00
Jakob Bornecrantz b1b63a9397 d/vive: Do more tracing during packet handling 2022-11-21 13:47:58 +00:00
Jakob Bornecrantz c9bbeac70a d/v4l2: Use U_TRACE_SET_THREAD_NAME 2022-11-20 14:36:37 +00:00
Jakob Bornecrantz 36d1734377 d/vive: Use U_TRACE_SET_THREAD_NAME 2022-11-20 14:36:37 +00:00
Jakob Bornecrantz 5142fa7e88 d/psmv: Use U_TRACE_SET_THREAD_NAME 2022-11-20 14:36:37 +00:00
Jakob Bornecrantz 0691ed9b89 d/wmr: Use U_TRACE_SET_THREAD_NAME 2022-11-20 14:36:37 +00:00
Jakob Bornecrantz 89aee1892b d/remote: Update protocol to allow per view data 2022-11-14 16:07:15 +00:00
Ryan Pavlik 11bdba7e64 drivers: can not -> cannot 2022-11-09 14:52:03 -06:00
Mateo de Mayo 0ebc7e042f d/vive: Improve readability of precompute_sensor_transforms (NFC) 2022-11-08 17:41:43 +00:00
Mateo de Mayo 9d6c29397f misc: Fix multiple compile warnings in gcc and clang 2022-11-03 20:08:52 +00:00
Mateo de Mayo 8f14c572ee d/vive: Apply IMU pose correction for SLAM tracking
The offset between IMU and middle-of-eyes for the Index is quite noticeable and
tracking felt very off before this.
2022-11-03 13:08:02 +00:00
Jakob Bornecrantz ede2292690 d/psvr: Paranoia 2022-11-02 17:55:58 +00:00
Jakob Bornecrantz 200bbc9da0 d/psvr: Protect sensore reads with device_mutex
Fixes asserts by the fusion code where samples where pushed in the wrong
order to the fusion code.
2022-11-02 17:55:58 +00:00
Jakob Bornecrantz fdac0b5137 d/psvr: Make sure to init the device_mutex before teardown can be called 2022-11-02 17:55:58 +00:00
Jakob Bornecrantz 637c49c1ea a/os: Refactor out BLE functions into own library 2022-10-27 17:19:57 +00:00
Jakob Bornecrantz 8ca60f4304 a/util: Split out sink functions into own library 2022-10-27 17:19:57 +00:00
Christoph Haag 9054dc01ca d/ht_ctrl_emu: Stub set_output 2022-10-24 17:20:59 +00:00
Jakob Bornecrantz 9077261ada d/dai: Set fields after nullptr check 2022-10-10 22:39:38 +00:00
Jakob Bornecrantz 00c3cc4c2f d/dai: With the latest depthai-core we can support color OV9782 sensors 2022-10-10 22:39:38 +00:00
Jakob Bornecrantz 4814f627c6 d/dai: Fix conversion warnings 2022-10-10 22:39:38 +00:00
Jakob Bornecrantz 504a2a288e d/dai: Fix typo 2022-10-10 22:39:38 +00:00
Christoph Haag 74d82ff37f d/ht_ctrl_emu: Set xdev serial 2022-10-03 19:23:24 +02:00
Jan Schmidt e409264ba7 d/wmr: Fix Reverb G2 detection
196bf24276 broke Reverb G2
detection. Use the right PID to match the Reverb G2 headset
again.
2022-10-02 03:57:19 +11:00
Jakob Bornecrantz 13124f019e d/opengloves: Fix left/right typos 2022-09-29 21:12:44 +00:00
Jakob Bornecrantz 2673787429 d/opengloves: Fix leak of config JSON 2022-09-29 21:12:44 +00:00
Jakob Bornecrantz 1e639fc2f3 d/opengloves: Fix leaks of udev objects 2022-09-29 21:12:44 +00:00
Moses Turner 034099211f d/dai: Initialize mutex and thread helper 2022-09-28 18:37:49 -05:00
Jan Schmidt 3b7f95b39e d/rift_s: Rework hw2mono clock tracking
Use the common hw2mono/a2b clock code from vive_source
2022-09-26 00:32:28 +10:00
Jan Schmidt 942df72c26 d/rift_s: Reduce camera frame delay to 2 2022-09-26 00:32:28 +10:00
Jan Schmidt 32cc6e05da d/rift_s: Move builder to targets/common
Move the builder into the common area.
2022-09-26 00:32:28 +10:00
Jan Schmidt 5c573152a8 d/rift_s: Set camera orientation in calibration
Put the right rotation of the front cameras
into the camera calibration struct
2022-09-26 00:32:28 +10:00
Jan Schmidt 495eecb65f d/rift_s: Add 6DOF SLAM tracking and hand tracking
Find and capture input from cameras, and split according to
frame type. Send long exposure tracking frames through
the AEG module, and SLAM and hand tracking trackers.

Add controller emulated hand devices.

The native "fisheye62" camera distortion model is
dynamically converted to OpenCV Kannala-Brandt
parameters using a TinyCeres solver.
2022-09-26 00:32:28 +10:00
Jan Schmidt 9fbe81e494 d/rift_s: Port OpenHMD Oculus Rift S driver
Port across the Oculus Rift S driver from OpenHMD as a native
Monado driver.

This is mostly the same as the OpenHMD 3DOF driver, with
slightly better HMD distortion correction, various small
fixes, some capsense touch detection support.

Controller poses are rotated 40° to match grip pose.
2022-09-25 02:17:44 +10:00
Moses Turner 6ec9b73e1e d/wmr: Provide camera orientation to hand tracking 2022-09-21 23:11:58 -05:00
Jakob Bornecrantz 5c958d096d d/vive: Make sure to free the source 2022-09-22 00:41:10 +01:00
Moses Turner 45e52dee8f d/ns: Switch NS driver to builders 2022-09-21 07:57:03 -05:00
Moses Turner 6fdd790da0 d/dai: Update DepthAI driver
* Removed depthai_tracked_device - now you create a "SLAM" device, plug any frameserver into it and you're done
* Consolidated the grayscale frameservers into just one that gives you SLAM sinks
* Allows for different framerates and half-size for ov9282s
* Added debug frame sinks
* Added the ability to wait at startup for a number of frames for the streams to stabilize before submitting them to SLAM
2022-09-21 07:57:03 -05:00
Moses Turner 201708dee5 d/ht: Remove DepthAI hand tracking device
This was super crufty. Instead now you use a builder to create SLAM sinks with the DepthAI builder and plug them into a regular HT device
2022-09-21 07:57:03 -05:00
Moses Turner 074e18cac9 d/twrap: Add tracking wrapper driver 2022-09-21 07:57:03 -05:00
Moses Turner ef767af2ad cmake: Always build ht_ctrl_emu driver 2022-09-21 07:57:03 -05:00
Moses Turner 16dffc8d3b cmake: Link drv_ht and drv_cemu in t/common instead of vive/survive 2022-09-21 07:57:03 -05:00
Moses Turner 5c18f83e8d d/ulv2: Convert Ultraleap driver create function to helper 2022-09-21 01:54:40 +01:00
Moses Turner a23bf9ab36 d/ns: Use math/m_mathinclude.h to fix Windows build 2022-09-21 01:45:24 +01:00
Moses Turner 956ee5ae9d d/ns: Allow for freeing the 3D optical system 2022-09-21 01:45:24 +01:00
Daniel Willmott c83c21ef90 d/opengloves: Clarify encoding constants 2022-09-19 22:08:28 +00:00
Daniel Willmott f953ed7846 d/opengloves: Clarify input enums 2022-09-19 22:08:28 +00:00
Daniel Willmott ddda9ec727 d/opengloves: Add force feedback extension support 2022-09-19 22:08:28 +00:00
Daniel Willmott 74f14f2414 d/opengloves: Communication api change 2022-09-19 22:08:28 +00:00
Moses Turner d2e2c3a988 cmake: Run cmake-format.sh 2022-09-19 21:57:37 +01:00
Christoph Haag 196bf24276 d/wmr: Add HP VR1000 support 2022-09-19 18:16:21 +00:00
Moses Turner bd265c611d d/ns: update Moses's distortion method 2022-09-19 11:20:04 -05:00
Moses Turner 33226dd892 d/rs: Add PID/VIDs for T265 2022-09-19 11:17:34 -05:00
Moses Turner 34d158b299 d/dai: Use setXLinkChunkSize(0) to reduce latency 2022-09-19 11:17:34 -05:00
Moses Turner bea3569016 d/dai: Enable IR floodlight code and allow the floodlight to be controlled with an env var
IR floodlight support has been merged into DepthAI core
2022-09-13 19:56:27 -05:00
Moses Turner 4c55364d95 d/vive: Always give a vive config 2022-09-13 22:10:58 +00:00
Moses Turner 9d6ca80af3 xrt: Add SimulaVR driver 2022-09-12 12:20:51 +00:00
Moses Turner cc62600972 d/rs: Allow Realsense device to be created outside of normal target list 2022-09-12 12:20:51 +00:00
Jan Schmidt 1811951dd6 t/ht: Add support for camera orientation
Add a way to pass in extra information about camera views, this new
struct is merged with the old image boundary information struct.

Co-authored-by: Moses Turner <moses@collabora.com>
Co-authored-by: Jakob Bornecrantz <jakob@collabora.com>
2022-09-06 18:36:53 +01:00
Jarvis Huang 7be4163b91 d/android: Fix errors while getting display metrics 2022-09-02 16:25:12 +00:00
Jakob Bornecrantz ff4ce5f7e2 d/remote: Reset timout argument to select
Select can modify the argument, so need to reset it.
2022-08-24 14:36:56 +01:00
Ryan Pavlik 1b02783113 d/sample: Clean up, specify a blend mode 2022-08-18 16:45:45 -05:00
Jakob Bornecrantz 8e70290ec1 d/opengloves: Pass in identity pose to hand simulation 2022-08-14 16:16:27 +01:00
Jakob Bornecrantz 936733d4b7 d/vive: Pass in identity pose to hand simulation 2022-08-14 16:16:27 +01:00
Jakob Bornecrantz d978a863c1 d/vive: Tidy 2022-08-14 16:16:27 +01:00
Jakob Bornecrantz e6efcd7a02 u/hand: Take xrt_hand enum instead of bool 2022-08-14 16:16:27 +01:00
Jakob Bornecrantz dc28c1f04a d/remote: Fix hand tracking 2022-08-14 16:16:27 +01:00
Jakob Bornecrantz f535135c13 d/survive: Fix warning and org code (NFC) 2022-08-14 13:19:00 +01:00
Moses Turner e5466553a2 d/euroc: Allow zero timestamps
Negative timestamps are still not allowed, but artificially generated datasets might start at exactly zero
2022-08-10 15:09:53 +00:00
Jakob Bornecrantz d6df203d03 d/opengloves: Fix warning (NFC) 2022-08-10 16:03:33 +01:00
Jakob Bornecrantz 39f80f2ef5 d/vive: Remove unsued variable 2022-08-10 14:18:45 +00:00
Jakob Bornecrantz 42f5cf4c9d d/opengloves: Use correct argument when casting 2022-08-10 14:18:45 +00:00
Jan Schmidt 96fb9ce34a wmr: Clean up camera debug last.
Make sure to stop the USB thread before destroying the debug sink
as cancelling the transfers is not sufficient to guarantee
there will be no final callback (or one in progress)
2022-08-08 17:31:53 +00:00
Christoph Haag c24e482e5e st/oxr: Make OpenXR timestamps relative to service startup
This solves a problem where OpenXR timestamps could become invalid
(negative) in certain circumstances:

The timestamps that the OpenXR state tracker returned were offset such
that they appeared to start at OpenXR application startup time.

However monado-service is a long running service using system timestamps.
Because of this, if monado-service started work using a system timestamp
acquired before an OpenXR application started, then this system timestamp
could not be converted into an OpenXR without becoming invalid.

With this change, the OpenXR timestamps for OpenXR applications are offset
such that they appear to start at monado-service startup time instead.

As a side effect, all OpenXR applications connected to the same
monado-service instance will receive timestamps from the same domain.
2022-08-08 15:52:18 +00:00
danwillm 76f96686d1 xrt/drivers: Convert hand tracking drivers to use hand simulation
Co-authored-by: Moses Turner <moses@collabora.com>
2022-08-01 17:33:40 +00:00
Moses Turner 2868348e8c t/common: Make controllers work again with the Lighthouse builder
!1418 briefly broke controller setup.
2022-07-27 10:49:29 +00:00
Moses Turner c0eed827c5 xrt: Remove t_hand_tracking_output_space
LEFT_CAMERA is the only one that remained useful
2022-07-27 10:49:29 +00:00
Jakob Bornecrantz 86ae6a5bb1 d/wmr: Fix warning 2022-07-26 18:15:04 +00:00
danwillm fd61dd08b2 drivers: add all of opengloves driver 2022-07-25 23:57:45 +01:00
danwillm 0943ce10be a/util, xrt: u_hand_tracking interface change 2022-07-25 23:57:45 +01:00
Mateo de Mayo 36ca9260cf d/vive: Update tracking status to fix segfault
Co-authored-by: Moses Turner <moses@collabora.com>
2022-07-25 19:08:46 +00:00
Mateo de Mayo 6e16959098 d/vive: Add vive_source to convert v4l2 timestamps into monotonic clock
Use a sink in the middle of the stream to correct for v4l2 timestamps with
hardware timestamps to monotonic clock.

This sink, together with other utilities related to data streaming, lives in a
new vive_source entity, with similar functionality to wmr_source or rs_source.

The vive_source lifetime is managed by the builder xfctx, which prevents
deallocation dependencies between vive_device and the v4l2_fs to cause segfaults.
2022-07-25 19:08:46 +00:00
Mateo de Mayo 13d90bff77 d/vive: Implement 3DoF/SLAM switching button and pose offset 2022-07-25 19:08:46 +00:00
Mateo de Mayo f0ceb40f6a d/vive: Prepare data streaming and SLAM tracker 2022-07-25 19:08:46 +00:00
Mateo de Mayo 3cbb7f6b9f d/vive: Pass status of visual tracking into the driver 2022-07-25 19:08:46 +00:00
Mateo de Mayo 8d929fe2fa d/v4l2: Split some definitions into a new header 2022-07-25 19:08:46 +00:00
danwillm de53e431ed d/multi: fix untested codepath 2022-07-25 15:23:49 +01:00
Nova 0954bd0dd8 d/wmr: Clean up check_and_get_interface in wmr_prober.c 2022-07-25 12:19:48 +01:00
Nova e141aa2d55 d/wmr: Add initial support for original Odyssey HMD 2022-07-25 12:19:48 +01:00
Christoph Haag ffb0346ba4 d/survive: Fix compilation on clang
Fixes error

/home/haagch-collabora/monado/src/xrt/drivers/survive/survive_driver.c:384:53: error: passing 'const union xrt_output_value *' to parameter of type 'union xrt_output_value *' discards qualifiers [-Werror,-Wincompatible-pointer-types-discards-qualifiers]
        int ret = survive_controller_haptic_pulse(survive, value);
                                                           ^~~~~
/home/haagch-collabora/monado/src/xrt/drivers/survive/survive_driver.c:340:89: note: passing argument to parameter 'value' here
survive_controller_haptic_pulse(struct survive_device *survive, union xrt_output_value *value)
2022-07-24 23:48:57 +02:00
Mateo de Mayo aaf5fe1b7b d/vive: Improve ticks-to-nanoseconds conversion 2022-07-22 16:19:49 +00:00
Mateo de Mayo aa617a9d8b d/vive: Group 3dof IMU fusion fields and add a mutex 2022-07-22 16:19:49 +00:00
Moses Turner f6ef1d8f28 d/dai: Add code to control IR floodlight and exposure behind ifdef 2022-07-21 00:23:32 +01:00
Moses Turner 4d0e46a5ac d/dai: Remove depthai::opencv dependency 2022-07-21 00:23:32 +01:00
bjorn 919936991c ipc: make all IPC input aggregates const; 2022-07-14 20:31:38 +00:00
Mateo de Mayo 49cd45b24e d/euroc: Fix typo 2022-07-12 12:47:05 +00:00
Moses Turner 567304374d d/v4l2: Factor out format setup so we can catch errors in stream_start 2022-06-30 15:19:51 +01:00
Moses Turner bd421e683c d/vive: Handle not-found devices correctly 2022-06-24 01:58:51 +01:00
Moses Turner 29cd525a3b d/vive: Prepare for lighthouse builder 2022-06-24 01:54:45 +01:00
Moses Turner 766f1b94e9 d/survive: Remove lots of cruft and prepare for Lighthouse builder 2022-06-24 01:54:45 +01:00
Moses Turner 19958b4d77 d/ht: Remove cruft for Index 2022-06-24 01:54:45 +01:00
Moses Turner 00b6dd35ec d/survive: Don't create hand-tracker ourselves 2022-06-24 01:54:45 +01:00
Moses Turner a853022a66 d/vive: Don't create the hand-tracker ourselves 2022-06-24 01:54:45 +01:00
Moses Turner 0e50364be6 d/ht: Don't drop algorithm_choice on the floor 2022-06-24 01:54:45 +01:00
Moses Turner 6f21741c51 xrt: Fixup - rename *all* of the relevant hand-tracking structs 2022-06-21 21:18:41 +01:00
Moses Turner 1718d01fb1 xrt: Rename some hand-tracking structs and document them better 2022-06-21 20:37:08 +01:00
Moses Turner 8040224b39 xrt: add hand_tracking_image_boundary_info 2022-06-20 16:33:48 +01:00
Mateo de Mayo 329b5c05bc d/wmr: Wait 3 seconds for Odyssey+ display 2022-06-18 14:19:01 -03:00
Mateo de Mayo ed7c148a00 d/wmr: Optionally average IMU samples for 3DoF tracker
Similar to how this was being done for SLAM.
It's significantly less jittery and still has a good response.
Smarter filters might benefit from raw measurements so the functionality can
be enabled again with a checkbox.
2022-06-18 14:19:01 -03:00
Mateo de Mayo 10e39d79b8 d/wmr: Use poses instead of isometries for T_imu_cam poses
Now that sensor poses are in WMR space, this is a bit tidier
than creating the 4x4 matrices.
2022-06-18 14:19:01 -03:00
Mateo de Mayo f98b71243c d/wmr: Correct hand tracking pose
Now the tracked hand appears roughly in the same spot as your real hand and
the tracking works a bit better.
2022-06-18 14:19:01 -03:00
Mateo de Mayo f390214f66 d/wmr: Correct SLAM-tracked IMU pose to middle of the eyes 2022-06-18 14:19:01 -03:00
Mateo de Mayo 008ba2433b d/wmr: Refactor how precomputed transforms work
Hopefully this is an improvement and not just a rewrite. Some ideas were:
1. Keep poses in WMR space as much as possible.
2. Add an explicit function that precomputes a handful of transforms that allow
   converting between WMR and OpenXR coordinates.
3. Make naming of variables in line with a relatively common T_A_B notation.
4. I wasn't able to figure out why `wmr_config_compute_pose` worked before,
   in any case, hopefully the new notation convention helps understanding
   why P_oxr_{acc,gyr} work.
2022-06-18 14:19:01 -03:00
Moses Turner afec083047 d/ht: Don't depend directly on any external libraries; t/hand does that for us now 2022-06-16 15:51:55 +01:00
Mateo de Mayo 604815cb51 d/wmr: Fix pose correction from Basalt
There was a confusion about whether this was needed for some apps. It was.
2022-06-02 15:47:57 +00:00
Christoph Haag 77ee72d4eb d/remote: Rename r_hub_system_devices_destroy
r_hub_destroy() taking a parameter of type struct xrt_system_devices* was weird.
2022-06-02 15:29:10 +02:00
Jakob Bornecrantz 9932e75db6 d/remote: Tidy and comment 2022-06-01 16:50:19 +01:00
Jakob Bornecrantz 7990ca9208 d/remote: Print out name values on wrong input name 2022-06-01 16:50:19 +01:00
Jakob Bornecrantz 93d92ec6a7 d/remote: Use vive_bindings helper library 2022-06-01 16:50:19 +01:00
Jakob Bornecrantz 7f73a58045 d/remote: Expose a Index controller instead of simple controller 2022-06-01 16:50:19 +01:00
Jakob Bornecrantz 46305b77db d/remote: Properly shut down the run_thread 2022-06-01 16:50:19 +01:00
Jakob Bornecrantz 2b35699d85 d/remote: Use better logging helpers 2022-06-01 16:50:19 +01:00
Jakob Bornecrantz d0cc7e4082 d/remote: Use xrt_system_devices directly in the driver
And also make shutdown properly work.
2022-06-01 16:50:19 +01:00
Campbell Suter bb414f7d39 d/qwerty: Fix the aim pose not being HMD-relative
Commit e41cc1eec3 added support for the XRT_INPUT_SIMPLE_AIM_POSE pose
input in the QWERTY driver. Unfortunately it didn't change the code that
identifies whether the pose for a controller or HMD is being read.

In the QWERTY driver, the hands are positioned relative to the HMD, so
if you move or rotate the HMD the hands stay in the same place
on-screen. Whether a pose lookup is multiplied by the HMD transform
depends on whether the pose being looked up is that of a controller.

Thus the aim pose would not be positioned relative to the HMD.
2022-06-01 12:52:17 +00:00
Campbell Suter 45703f0952 d/remote: Mark pose as invalid when deactivated
Previously the pose on the remote driver controllers would always have
the set pose and the valid-tracking flags set. Leaving the pose set
makes sense (you might want to track how your game behaves when a
controller looses tracking but still has a pose set, for example
tracking issues caused by occlusion) but it wasn't possible to test with
the pose marked as not being tracked.

Therefore this patch deactivates the tracking flags when the controller
is not marked as active.
2022-06-01 17:36:49 +12:00
Ryan Pavlik bbda2bac48 d/wmr: Add TODO at suspicious code. 2022-05-31 13:38:56 +00:00
Mateo de Mayo 2785c6bcfa d/wmr: Wait until first IMU sample to send frames
In an Odyssey+, it seems that before the first IMU sample the frame timestamps
do not make sense and thus can make the SLAM system crash.

Also, this commit enables SLAM submission from start unless specified.
SLAM for WMR headsets now works "out of the box" :)
2022-05-26 18:35:39 +00:00
Mateo de Mayo 24be4b0a98 d/wmr: Send calibration to SLAM tracker
This makes it possible to use Basalt without having to create a calibration file
for the headset anymore.
2022-05-26 18:35:39 +00:00
Mateo de Mayo 3bf07a2711 d/wmr: Load IMU calibration 2022-05-26 18:35:39 +00:00
Aidan Thornton 2fdd01afdd d/android: initialize our thread and mutex 2022-05-25 12:30:21 +01:00
Moses Turner 6ef55d1f73 d/survive: Initialize threading primitive 2022-05-23 14:27:42 +00:00
Jakob Bornecrantz 38eac9dddc xrt: Do not depend on util 2022-05-23 09:12:54 -05:00
Jakob Bornecrantz a75e00d25e d/qwerty: Include u_time.h in device file 2022-05-23 09:12:54 -05:00
Jakob Bornecrantz 08d100d7b0 d/hydra: Depend on util 2022-05-23 09:12:54 -05:00
Jakob Bornecrantz 0d055bb740 d/vive: Fix threading primitive initialization 2022-05-23 13:54:42 +00:00
Jakob Bornecrantz 4fa406610f a/os: Fix fallout from name change 2022-05-20 23:07:33 +01:00
Ryan Pavlik ea4c14c3aa a/os: Rename os_thread_helper_stop to os_thread_helper_stop_and_wait 2022-05-20 18:46:37 +01:00
Mateo de Mayo 85bdbc1817 u/aeg: Implement state machine to correct overshooting and avoid oscillations 2022-05-19 14:03:17 +00:00
Mateo de Mayo 63b477d250 a/math: Add MIN, MAX and CLAMP macros 2022-05-19 14:03:17 +00:00
Mateo de Mayo df5b5f40a9 d/wmr: Add auto exposure 2022-05-19 14:03:17 +00:00
Mateo de Mayo 84422acd74 d/wmr: Centralize exposure and gain update logic
Also use the new draggable_u16 UI input for exposure.
2022-05-19 14:03:17 +00:00
Ryan Pavlik 6706180cd8 drivers: Improve word choice/clarity 2022-05-17 17:40:58 -05:00
Ryan Pavlik 56a1c25378 d/simulated: Rename the simulated device driver. 2022-05-17 17:39:52 -05:00
Ryan Pavlik df413a3809 d/ht: Fix doxygen warnings 2022-05-17 14:42:02 -05:00
Ryan Pavlik 0e4f40c980 d/wmr: Fix doxygen warning 2022-05-17 14:42:02 -05:00
Moses Turner 8ac95a5177 d/ht: Add some things to the WMR creation interface, and make it the default interface. 2022-05-16 19:15:33 +01:00
Jakob Bornecrantz 85d4a72d0f d/psmv: Fix NULL check 2022-05-15 21:40:26 +01:00
Jakob Bornecrantz 6a2426c0a2 d/psmv: Refactor device creation in preperation of builders 2022-05-15 14:45:01 +01:00
Jakob Bornecrantz ddb142564f d/psvr: Refactor device creation in preperation of builders 2022-05-15 14:45:01 +01:00
Jakob Bornecrantz 23ed0a6632 xrt: Remove unused xdev argument to trackers 2022-05-14 22:40:36 +01:00
Moses Turner 5122ecd0b0 d/dai: Fisheye calibration was upstreamed, actually use it now 2022-05-12 20:01:15 +00:00
Jakob Bornecrantz 116d1a9bf8 xrt: Typedefs have a _t suffix 2022-05-12 11:59:12 +00:00
Jakob Bornecrantz a38ea4231c d/vive: Use prober helper code 2022-05-12 11:59:12 +00:00
Jakob Bornecrantz b9d88f4eab d/wmr: Use prober helper code 2022-05-12 11:59:12 +00:00
Moses Turner e8776fd705 d/dai: Add little xrt_device implementation for head tracking 2022-05-10 23:47:30 +01:00
Moses Turner 5ba7ae3c53 d/dai: Add initial IMU support 2022-05-10 23:47:30 +01:00
Moses Turner af5516f4b6 d/dai: We didn't need this calibration struct for anything 2022-05-10 23:47:30 +01:00
Jakob Bornecrantz 6b19eedf9c d/survive: Use shared bindings 2022-05-09 10:46:44 +00:00
Jakob Bornecrantz 456f9c7f09 d/vive: Use shared bindings 2022-05-09 10:46:44 +00:00
Mateo de Mayo 1a687cdee4 d/wmr: Add initial hand tracking for WMR devices
Co-authored-by: Moses Turner <moses@collabora.com>
2022-05-07 15:53:56 +00:00
Mateo de Mayo 7e1f9a7964 t/hand: Add option for allowing xfctx to be managed externally
Other trackers (e.g., psmv, slam, etc) work as sinks and the xfctx that manages
them is handled by the device providing the data streams. This change helps
the hand tracker have a more similar interface to other trackers.
2022-05-07 15:53:56 +00:00
Mateo de Mayo 44dac0eb5d d/wmr: Refactor UI and tracker initialization into their own methods (NFC) 2022-05-07 15:53:56 +00:00
Mateo de Mayo e3fadb5364 doc: Fix some doxygen warnings 2022-05-07 15:53:56 +00:00