Skip to content

SenseGlove Haptics

Max Lammers edited this page Jul 21, 2021 · 5 revisions

(WIP)

This page deals with how the SenseGlove's Haptic commands work

Under the hood

A Haptic command sent to the SenseGlove DK1 contains the levels of force- or vibrotactile feedback of each actuator. Once set, the glove will keep the actuators at these levels until a different command is received. For example; one command might tell the SenseGlove to set the Force-Feedback of the index finger to maximum, and to vibrate the thumb at 50% intensity. Until the glove receives a new command, it will keep the force on the index finger and the vibration on the thumb active.

Because the command sent to the glove contains both force- and vibrotactile information, the SenseGlove keeps track of the last sent force-feedback and vibrotactile commands. Sending only force-feedback commands will not affect the buzz motors and vice versa. However, it is faster to send both at the same time

// You can do this, no problem
mySenseGlove.SendHaptics(new SGCore.Haptics.SG_BuzzCmd(0, 80, 0, 0, 0)); //writes this buzz cmd and the last sent ffb cmd to memory
mySenseGlove.SendHaptics(new SGCore.Haptics.SG_FFBCmd(100, 0, 0, 0, 0)); //writes this ffb cmd and the last buzz cmd (the one above) to memory

// But this does the exact same, and is faster by a few operations
mySenseGlove.SendHaptics(new SGCore.Haptics.SG_FFBCmd(100, 0, 0, 0, 0), new SGCore.Haptics.SG_BuzzCmd(0, 80, 0, 0, 0)); //writes both cmds to memory.

New commands are sent to the glove every 5-10 milliseconds. At that point, the latest command in memory will be sent over to the device. More on this topic can be found on the SGConnect page.

Sending Multiple Commands

Calling a SendCmd function on your SenseGlove instance will clear the older command and replace it with your new one. If you write two haptic commands one after another, only the last one will usually be sent to the glove. This happens because the writing operation takes much less than a milisecond. When the device checks which command to send some 5 miliseconds later, it only sees the last one sent.

// C# Example
mySenseGlove.SendHaptics(new SGCore.Haptics.SG_BuzzCmd(0, 80, 0, 0, 0)); //1: vibrate the index finger at 80% intensity.
mySenseGlove.SendHaptics(new SGCore.Haptics.SG_BuzzCmd(50, 0, 0, 0, 0)); //2: vibrate the thumb at 50% intensity.
// Only the thumb will vibrate, because the first command was overridden by the second one

//If you want both to activate at the same time, use this:
mySenseGlove.SendHaptics(new SGCore.Haptics.SG_BuzzCmd(50, 80, 0, 0, 0)); //2: vibrate thumb at 50% intensity and the index finger at 80% intensity.

As indicated before, sending only Buzz commands will not affect your last Force-Feedback command and vice versa. You could opt to handle these separately, should you so desire.

Force-Feedback parameters

A Force-Feedback command consists of a single integer value between 0 and 100, which represents the voltage sent to the actuator inside the brake housing. Sending a value of 0 will set the motor voltage to 0V, while sending 100 will set the actuator voltage to maximum (24V). This actuator controls the brake force on the cables running through the exoskeleton. The SenseGlove hardware cannot pull on said cables, only apply a braking force. There is currently no control system inside the API or SenseGlove to determine when Force-Feedback should disengage again.

Please note that activating the Force-Feedback will lock the cable to a certain length: Locking the cable (magnitude = 100%) when the finger is semi-flexed will mean that this finger shouldn't be able to flex further. However, the user is still free to extend their fingers and, since the cable is now locked, it won't retract to keep up with the motion anymore. The user is free to then flex again up to the original point.

Until a proper Voltage-Force mapping is done, use the following guidelines from our CTO to help you determine what to send and when:

There isn't any force added to our cables until the PWM duty cycle reaches 60%, and the maximum force is reached when the signal reaches 100%. Using a test setup involving a digital force-sensor, we determined that a brake housing operating at 24V can pull up to 40N before slipping occurs. Once it drops below 30% again, the force on the cables will fall back to 0N.

Buzz Motor Parameters

The Magnitude parameter of the Buzz Motors determines the intensity of the vibration (a.k.a. the Amplitude). With the Eccentric Rotating Mass (ERM) actuators in the DK1, it is impossible to change the frequency of the vibration.

Generally the vibration motors won't start spinning until a Magnitude of 30% is given.