How to (1) prevent initial movements after grabs, (2) set narrower grab thresholds, and (3) check pinching point calculation?

penguin 20 Reputation points
2024-05-22T07:30:57.6566667+00:00

Inquiries

  1. May I see how to prevent initial movement after grabbing an object with MRTK3?
  2. May I see how to set smaller thresholds for detecting grab actions?
  3. Also, may I see how pinching points are calculated?

Problem statement

(1) The position of an object shifts right after grabbed, or even right after enabling manipulations (move, rotation) from disabled (none). The latter is detailed in screenshots below.

(2) With a headset on, a "a little bit" sign (a posture with space between an index finger and a thumb) enables a grabbing action.

(3) This is related with item (2). The pinching point may be ambiguous.

Background

(1) The current settings seem to let an object shift its position after being grabbed. This is likely not what actually occurs when grabbing an object in the real world. I would like to recreate a situation where simply grabbing an object keeps its static status, yet dynamic movements initiating (move, rotate) once fingers operate. I have looked for Inspector settings of the Object Manipulator script and codes inside but found no solution yet.

(2) While wearing a Hololens 2 headset, a grabbing action occurs even before contacting an index finder with a thumb. I would like to reflect the action of contacting these two fingers translated into a grabbing action, or more of a smaller threshold to detect this action via a narrower space between these two fingers. I was assuming that collider radius may be related for grabbing actions, thinking that the collision of a collider of an index finger tip and that of a thumb may trigger some action. Yet, I have not found solution yet after trying sphere collider of the NearInteractionModeDetector.

(3) The present program tries to get a pinching position by calling TryGetPinchingPoint (https://learn.microsoft.com/en-us/dotnet/api/mixedreality.toolkit.subsystems.handsaggregatorsubsystem.trygetpinchingpoint?view=mrtkcore-3.1). However, I am not quite sure how they are calculated (or even conceptually). This is related with item (2). I am assuming that pinching points are the middle point between an index finger and a thumb (average of two 3D vectors). This information would provide an advantage to program for letting users to more precisely place their index finger and thumb to a target grab point, pinch it, and then rotate around it rather than other points such as the perimeter of the target grab point.

Environments

Hololens 2 (Hand tracking)

Windows 10, Visual Studio 2022 with workloads (https://learn.microsoft.com/en-us/windows/mixed-reality/develop/install-the-tools)

Unity 2022.3.19f1 with MRTK3 (https://learn.microsoft.com/en-us/training/modules/learn-mrtk-tutorials/)

1

2

3

HoloLens Development
HoloLens Development
HoloLens: A family of Microsoft self-contained, holographic devices that enable engagement with digital content and interaction with holograms in the surrounding environment.Development: The process of researching, productizing, and refining new or existing technologies.
387 questions
{count} votes

Accepted answer
  1. mayshaherry 75 Reputation points
    2024-06-02T19:07:08.0066667+00:00

    Hi penguin,

    For your queries:

    1. Preventing Initial Movement After Grabs: You can adjust the settings in the Object Manipulator script to prevent objects from shifting position upon grab. Look into the "Smoothing" options and "Release Behavior" settings to ensure the object maintains its position until active manipulation begins.
    2. Setting Narrower Grab Thresholds: To adjust the grab threshold, you can tweak the collider settings on the NearInteractionModeDetector or similar components. Try reducing the sphere collider radius to make the detection area smaller, which should help in recognizing more precise pinch gestures.
    3. Checking Pinching Point Calculation: The pinching point is typically calculated as the midpoint between the index finger and thumb. You can confirm this by checking the TryGetPinchingPoint method in the MRTK3 documentation and verifying the implementation in your code.

    Hope this helps!

    Best,


0 additional answers

Sort by: Most helpful