Passer directement au contenu principal

import Tabs depuis '@theme/Tabs' ; import TabItem depuis '@theme/TabItem' ;

Premiers pas avec le stylet VerseGrip

VerseGrips ajoute une fonctionnalité de suivi de l'orientation àInverse3, Inverse3X et MinVerse. Cet article explique la procédure de configuration du stylet VerseGrip Stylus ainsi que ses fonctionnalités.

À propos du stylet VerseGrip​

Le stylet VerseGrip utilise une technologie de communication sans fil haute vitesse exclusive pour assurer le suivi de la posture et permettre des opérations d'entrée-sortie (E/S) lorsqu'il est tenu en main. Il est conçu pour s'adapter à diverses applications.

Les principales fonctionnalités sont les suivantes :

  • 2 boutons de saisie utilisateur,
  • 1 bouton de calibrage,
  • 1 bouton d'alimentation/veille
  • 2 voyants LED d'état
  • Port de recharge USB-C
  • Vitesse de communication sans fil pouvant atteindre 1 kHz
  • Autonomie de la batterie : 10 à 12 heures
  • Il est possible de coupler jusqu’à 8 stylets VerseGrip par bracelet avec le dongle.

Service client​

Si vous avez des questions ou des inquiétudes concernant l'appareil ou son fonctionnement, veuillez contacter notre équipe d'assistance. Le stylet VerseGrip intègre une technologie sans fil complexe et exclusive. L'ouverture de l'appareil entraîne l'annulation de la garantie et peut entraîner un dysfonctionnement de celui-ci. Afin d'éviter des délais de livraison prolongés ou des réparations coûteuses,veuillez ne pas ouvrir l'appareil.

Configuration et étalonnage du stylet VerseGrip​

Cette section décrit la procédure à suivre pour connecter la clé USB, mettre le stylet VerseGrip sous tension et effectuer son étalonnage.

Configuration​

  • Branchez la clé USB sur le port USB de l'ordinateur.
  • Veuillez poser la manette sur une surface plane et stable. Les boutons doivent être orientés vers le haut et le connecteur sphérique doit être tourné vers l'écran.

Mise sous tension et étalonnage​

  • Appuyez une fois sur le bouton d'alimentation. Le voyant d'état s'allume en rouge, puis passe au jaune pour indiquer que l'IMU intégrée à l'appareil est en cours d'auto-étalonnage.
  • Une fois l'auto-étalonnage terminé, le stylet est connecté à l'ordinateur.
  • Lorsque le stylet est correctement connecté et qu'il transmet des données sans fil, le voyant d'état clignote en vert.
  • Lorsque le niveau de charge de la batterie est extrêmement faible, le VerseGrip Stylus s'éteint automatiquement toutes les 2 minutes.Veuillez le recharger immédiatement.

Recalibrage​

Le processus d'étalonnage réinitialise le système de coordonnées du VerseGrip, et l'orientation dans laquelle l'appareil était tenu pendant l'étalonnage devient le nouvel axe de référence.

  • Pour procéder à un nouvel étalonnage, maintenez le stylet à l'endroit que vous souhaitez réétalonner et appuyez sur le bouton d'étalonnage pendant 3 secondes, ou maintenez-le enfoncé jusqu'à ce que la position change dans la simulation.

Vous trouverez ci-dessous une démonstration comparant le fonctionnement de l'appareil lorsqu'il n'est pas calibré et lorsqu'il l'est. Dans cette démonstration, vous devez tenir le VerseGrip dans la position indiquée sur l'illustration avant de procéder à la calibration.

Mode veille et mise hors tension​

  • Appuyez une fois sur le bouton d'alimentation pour revenir en mode veille. Le voyant d'état commence à clignoter en blanc et la transmission des données s'arrête.
  • Pour éteindre le stylet VerseGrip, maintenez le bouton d'alimentation enfoncé pendant 5 secondes, puis relâchez-le. Une fois relâché, le voyant d'état s'éteint et l'écran devient noir. La transmission des données s'arrête également.

Recharge​

  • Branchez le stylet VerseGrip via le port de recharge USB-C.
  • Tant que l'appareil est branché sur le secteur, le voyant d'état de charge reste allumé en bleu ; il s'éteint lorsque la charge est terminée.
  • Si vous branchez l'appareil sur le secteur alors que le stylet est éteint, celui-ci s'allume automatiquement.

Avertissement : si vous possédez un stylet VerseGrip Stylus expédié entre août et décembre 2024, veillez à ne pas décharger complètement sa batterie. Une fois complètement déchargée, celle-ci pourrait ne plus tenir la charge. Dans ce cas, le stylet VerseGrip Stylus continuera toutefois de fonctionner tant qu’il restera branché sur une source d’alimentation. Pour obtenir le fichier de mise à jour du micrologiciel permettant de résoudre ce problème, veuillez contacter le service d’assistance Haply.

État et voyants lumineux​

CouleurSéquence lumineuseExplication
jauneFondus d'entrée et de sortie rapidesCalibrage initial de référence du capteur automatique (veuillez placer le VerseGrip à l'arrêt sur le support)
Clignotement rapideLe bouton de calibrage de la posture a été actionné et le processus de calibrage a démarré.
AllumageLe bouton de calibrage de la posture a été actionné et le calibrage est terminé.
RougeFondus d'entrée et de sortie rapidesL'adaptateur a été déconnecté et aucun signal ne provient de l'hôte.
Clignotement rapideLe bouton d'alimentation a été actionné et la procédure d'arrêt a commencé.
vertFondu d'entrée/de sortieL'adaptateur est connecté et le VerseGrip est en mode flux de données actif.
AllumageL'adaptateur est branché, le VerseGrip est en mode « flux de données actif » et l'alimentation USB est également connectée.
BlancFondu d'entrée/de sortieL'adaptateur est connecté et le VerseGrip est en mode veille ; il n'y a pas de flux de données.
AllumageL'adaptateur est branché, le VerseGrip est en mode veille/repos, aucun flux de données n'est en cours, et l'alimentation USB est également connectée.
OrangeFlash (entrelacé)Il s'agit d'un message d'avertissement indiquant que le niveau de la batterie est faible. La notification s'affiche en mode entrelacé dans l'état actuel.
Double flash (entrelacé)Il s'agit d'un message d'avertissement indiquant que le niveau de charge de la batterie est dangereusement bas. La notification s'affiche en mode entrelacé dans l'état actuel.
TealFondu d'entrée/de sortieMode de mise à jour du micrologiciel de l'appareil
(lumineux)AllumageLe bouton utilisateur a été actionné. La couleur actuellement affichée s'allume et devient plus vive.
désactivéExtinction des lumièresArrêt, mise hors tension
Couleur de l'indicateur de chargeSéquence lumineuseExplication
BleuAllumageEn cours de recharge
Clignotement rapideLa recharge est presque terminée
désactivéExtinction des lumièresChargement terminé

État de l'ancienne version et voyants lumineux​

Les voyants d'état ci-dessous correspondent aux états et aux couleurs utilisés dans les anciennes versions du VerseGrip Stylus (firmware 1.10 ou antérieur).

CouleurSéquence lumineuseExplication
RougeAllumageEn attente de l'initialisation des composants
clignotementMode veille. Aucune transmission de données
BleuAllumageCalibrage initial de référence du capteur automatique (veuillez placer le VerseGrip à l'arrêt sur le support)
vertclignotementL'adaptateur est connecté et le VerseGrip est en mode flux de données actif.
désactivéExtinction des lumièresArrêt, mise hors tension
Couleur de l'indicateur de chargeSéquence lumineuseExplication
BleuAllumageEn cours de recharge
Clignotement rapideLa recharge est presque terminée
désactivéExtinction des lumièresChargement terminé

Exemple de code​

Vous trouverez ci-dessous un exemple simple d'utilisation du stylet VerseGrip avec C++.

#include <external/libhv.h>

#include <nlohmann/json.hpp>

#include <chrono>
#include <cstdio>
#include <string>

using namespace hv;
using json = nlohmann::json;

// Procedure to get the first detected and available Wired VerseGrip Stylus device id
std::string get_first_verse_grip_device_id(const json &data) {
const auto& vgs = data["wireless_verse_grip"];

if (vgs.empty()) {
return "";
}

return vgs.items().begin().key();
}

int main() {
const auto print_delay = std::chrono::milliseconds(100);
auto current = std::chrono::high_resolution_clock::now();
bool first_message = true;
std::string device_id;

WebSocketClient ws;

ws.onmessage = [&](const std::string &msg) {
json data = json::parse(msg);

if (first_message) {
first_message = false;
const std::string first_id = get_first_verse_grip_device_id(data);

if (first_id.empty()) {
printf("no Wireless VerseGrip found.\n");
ws.close();
return;
}

device_id = first_id;
}

if (device_id.empty() || !data["wireless_verse_grip"].contains(device_id)) {
return;
}

const auto now = std::chrono::high_resolution_clock::now();

if (std::chrono::high_resolution_clock::now() > current + print_delay) {
current = now;
const json state = data["wireless_verse_grip"][device_id];

printf("Rotation : { x:%f, y:%f, z:%f, w:%f }, Hall:%i, Button : [%d, %d, %d], Battery: {%f}\n",
state["orientation"]["x"].get<float>(),
state["orientation"]["y"].get<float>(),
state["orientation"]["z"].get<float>(),
state["orientation"]["w"].get<float>(),
state["hall"].get<int8_t>(),
state["buttons"]["a"].get<bool>(),
state["buttons"]["b"].get<bool>(),
state["buttons"]["c"].get<bool>(),
state["battery_level"].get<float>());
}
};

ws.open("ws://localhost:10000");

printf("Press ENTER to stop...\n\n");
while (std::cin.get() != '\n') {
}

if (ws.isConnected()) {
ws.close();
}

return 0;
}
#include <string.h>

#include <chrono>
#include <iostream>
#include <iterator>
#include <string>
#include <thread>

#include "HardwareAPI.h"

int main(int argc, char* argv[])
{
char* portName;

if (argc < 2)
{
std::printf("Usage: %s <port>\n", argv[0]);
}
else
{
#if defined(_WIN32) || defined(_WIN64)
portName = _strdup(argv[1]); // argv1;
#endif
#if defined(__linux__)
portName = strdup(argv[1]); // argv1;
#endif
}

Haply::HardwareAPI::IO::SerialStream serial_stream(portName);

Haply::HardwareAPI::Devices::Handle handle(&serial_stream);

while (true)
{
Haply::HardwareAPI::Devices::Handle::VersegripStatusResponse data;
data = handle.GetVersegripStatus();
std::printf(
"device_id: %d battery_level: %f quaternion: %f %f %f %f buttons: "
"%d error_flags: %d\n",
data.device_id, data.battery_level, data.quaternion[0],
data.quaternion[1], data.quaternion[2], data.quaternion[3],
data.buttons, data.error_flag);

}
}