Aller au contenu principal

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

Guide de démarrage du stylet VerseGrip

VerseGrip ajoute une fonctionnalité de suivi de la posture aux modèles « Inverse3», « Inverse3X » et « MinVerse ». Cet article présente les étapes de configuration du stylet VerseGrip ainsi que ses fonctionnalités.

Stylet VerseGrip​

Le stylet VerseGrip utilise une technologie exclusive de communication sans fil à haut débit et offre des fonctionnalités de suivi de la posture ainsi que des fonctions d'entrée/sortie (E/S) en mode portable. Conçu pour s'adapter à de nombreux scénarios d'utilisation, il présente une grande polyvalence.

Les principales fonctionnalités sont les suivantes :

  • 2 boutons de saisie,
  • 1 bouton d'étalonnage,
  • 1 bouton d'alimentation/veille
  • 2 voyants d'état
  • Port de recharge USB-C
  • La vitesse de communication sans fil peut atteindre 1 kHz
  • Autonomie de la batterie : 10 à 12 heures
  • Il est possible d'appairer jusqu'à 8 stylos VerseGrip avec un seul récepteur (dongle) sur une même bande.

Service client​

Si vous avez des questions ou des inquiétudes concernant l'appareil ou son fonctionnement, veuillez contacter notre équipe d'assistance pour obtenir de l'aide. Le stylet VerseGrip intègre une technologie sans fil propriétaire complexe. L'ouverture de l'appareil entraînera l'annulation de la garantie et pourra rendre l'appareil inutilisable. Afin d'éviter des délais de livraison prolongés et des frais de réparation élevés,veuillez ne pas ouvrir l'appareil.

Configuration et étalonnage du stylet VerseGrip​

Cette section décrit les étapes à suivre pour insérer le récepteur, mettre en marche le stylet VerseGrip et procéder à son étalonnage.

Paramètres​

  • Branchez le récepteur sur un port USB de l'ordinateur.
  • Placez la manette sur une surface plane et stable, les boutons vers le haut et le connecteur sphérique tourné vers l'écran.

Mise en marche et étalonnage​

  • Appuyez une fois sur le bouton d'alimentation. Le voyant d'état passe d'abord au rouge, puis au jaune, ce qui indique que l'IMU intégrée à l'appareil est en cours d'auto-étalonnage.
  • Une fois l'étalonnage automatique terminé, le Stylus sera connecté à l'ordinateur.
  • Lorsque le Stylus est correctement connecté et qu'il transmet des données sans fil, le voyant d'état clignote en vert.
  • Si le niveau de charge de la batterie est très faible, le stylet VerseGrip s'éteindra automatiquement toutes les 2 minutes ;veuillez le recharger immédiatement.

Réétalonnage​

Le processus d'étalonnage réinitialise le système de coordonnées du VerseGrip, de sorte que l'orientation de l'appareil au moment de l'étalonnage devient le nouvel axe de référence.

  • Pour procéder à un nouvel étalonnage, maintenez le Stylus dans la position que vous souhaitez étalonner, puis maintenez le bouton d'étalonnage enfoncé pendant trois secondes ou jusqu'à ce que la position dans la simulation change.

L'illustration ci-dessous compare le comportement de l'appareil lorsqu'il n'est pas calibré et lorsqu'il l'est. Lors de la démonstration, le VerseGrip doit d'abord conserver la position indiquée sur l'illustration, puis être calibré.

Mode veille et arrêt​

  • Appuyez une fois sur le bouton d'alimentation pour revenir en mode veille. Le voyant d'état se mettra à clignoter en blanc et le transfert de données s'arrêtera.
  • 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 doit s'éteindre et aucun autre indicateur ne doit être visible. L'appareil cessera alors de transmettre des données.

Recharge​

  • Rechargez le stylet VerseGrip via le port de recharge USB-C.
  • Lorsque l'appareil est branché, le voyant d'état de charge reste allumé en bleu ; il s'éteint une fois la charge terminée.
  • Si le Stylus est éteint au moment de la mise sous tension, il s'allumera automatiquement.

Avertissement : si votre stylet VerseGrip a été expédié entre août et décembre 2024, veillez à ne pas laisser la batterie se décharger complètement. Une fois complètement déchargée, la batterie risque de ne plus pouvoir se recharger. Si cela se produit, le stylet VerseGrip continuera de fonctionner tant qu’il restera branché sur le secteur. Veuillez contacter l’équipe d’assistance à l’adresse Haply pour obtenir le fichier de mise à jour du micrologiciel permettant de résoudre ce problème.

États et voyants lumineux​

CouleurModes d'éclairageExplication
jauneAllumage/extinction progressive rapideCalibrage initial automatique du capteur (en laissant le VerseGrip au repos sur une table)
Clignotement rapideLe bouton de calibrage de la posture a été enfoncé ; le processus de calibrage a commencé.
Allumage permanentLe bouton de calibrage de la posture a été enfoncé. Le calibrage est terminé.
RougeAllumage/extinction progressive rapideL'adaptateur est déconnecté, l'ordinateur ne reçoit aucun signal
Clignotement rapideLe bouton d'alimentation a été enfoncé ; la procédure d'arrêt a commencé.
vertAllumage progressif / Extinction progressiveL'adaptateur est connecté, le VerseGrip est en mode de flux de données actif
Allumage permanentL'adaptateur est connecté, le VerseGrip est en mode de flux de données actif et l'alimentation par USB est activée.
blancAllumage progressif / Extinction progressiveL'adaptateur est connecté, le VerseGrip est en mode veille/inactif, aucun flux de données n'est en cours de transmission
Allumage permanentL'adaptateur est connecté, le VerseGrip est en mode veille/inactif, aucun flux de données n'est en cours de transmission, l'alimentation USB est connectée
orangeScintillement (entrelacement)Avertissement de batterie faible : les notifications s'affichent en alternance selon l'état actuel
Feux de détresse (alternés)Avertissement indiquant que la batterie est presque à plat ; la notification s'affiche en alternance selon l'état actuel
BleuAllumage progressif / Extinction progressiveModes de mise à jour du micrologiciel des appareils
(Plus lumineux)Allumage permanentLorsqu'un bouton utilisateur est enfoncé, la couleur d'indication actuelle reste allumée en permanence et devient plus vive.
Fermersans lumièreÉteindre, couper le courant
Couleur du voyant de chargeModes d'éclairageExplication
BleuAllumage permanentEn cours de recharge
Clignotement rapideBientôt plein
Fermersans lumièreChargement terminé

État et voyants de l'ancienne version​

Les voyants d'état ci-dessous correspondent aux anciens modèles et à leurs couleurs, présents sur les premières versions du VerseGrip Stylus (firmware 1.10 et versions antérieures).

CouleurModes d'éclairageExplication
RougeAllumage permanentAttente de l'initialisation du composant
ScintillementMode veille, pas de transfert de données
BleuAllumage permanentCalibrage initial automatique du capteur (en laissant le VerseGrip au repos sur une table)
vertScintillementL'adaptateur est connecté, le VerseGrip est en mode de flux de données actif
Fermersans lumièreÉteindre, couper le courant
Couleur du voyant de chargeModes d'éclairageExplication
BleuAllumage permanentEn cours de recharge
Clignotement rapideBientôt plein
Fermersans lumièreChargement terminé

Exemple de code​

Voici un exemple simple d'utilisation du stylet VerseGrip en 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);

}
}