Aller directement au corps du texte

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 aux modèles Inverse3, Inverse3X et MinVerse. Ce document décrit la procédure de configuration et les fonctionnalités du stylet VerseGrip.

Présentation du stylet VerseGrip​

Le stylet VerseGrip utilise une technologie de communication sans fil haute vitesse exclusive afin d'assurer le suivi de l'orientation et les opérations d'entrée-sortie (E/S) lorsqu'il est tenu en main. Il a été conçu pour offrir une grande polyvalence et s'adapter à un large éventail d'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 stylos VerseGrip sur un seul dongle au sein d’une même bande.

Assistance client​

Si vous avez des questions ou des inquiétudes concernant l'appareil ou son fonctionnement, veuillez contacter notre service 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 le rendre inopérant. Afin d'éviter des délais de livraison prolongés ou des frais de réparation élevés, veuillez ne jamais ouvrir l'appareil.

Configuration et étalonnage du stylet VerseGrip​

Cette section décrit les étapes à suivre pour connecter la clé, mettre le VerseGrip Stylus sous tension et effectuer son étalonnage.

Paramètres​

  • Branchez la clé sur le port USB de l'ordinateur.
  • Placez la manette sur une surface plane où elle ne bougera pas. Veillez à ce que les boutons soient tournés vers le haut et que le connecteur sphérique soit orienté 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, indiquant que l'IMU intégrée à l'appareil est en cours d'auto-étalonnage.
  • Une fois l'étalonnage automatique terminé, le stylet se connecte à l'ordinateur.
  • Lorsque le Stylus est correctement connecté et transmet des données sans fil, le voyant d'état clignote en vert.
  • Lorsque la batterie est presque à plat, le stylet VerseGrip s'éteint automatiquement toutes les 2 minutes. Rechargez-le immédiatement.

Recalibrage​

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

  • Pour recalibrer l'appareil, maintenez le stylet à l'emplacement souhaité et appuyez sur le bouton de calibrage pendant 3 secondes, ou maintenez-le enfoncé jusqu'à ce que l'orientation change dans la simulation.

Vous trouverez ci-dessous une démonstration comparant le fonctionnement de l'appareil sans et avec étalonnage. Lors de cette démonstration, vous devez maintenir le VerseGrip dans la position indiquée sur l'illustration ci-dessous avant de procéder à l'étalonnage.

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 le transfert de données s'arrête.
  • Pour éteindre le stylet VerseGrip, maintenez le bouton d'alimentation enfoncé pendant 5 secondes, puis relâchez-le. Lorsque vous relâchez le bouton, le voyant d'état s'éteint et aucun indicateur n'apparaît. Le transfert de données est également interrompu.

Recharge​

  • Branchez le stylet VerseGrip via le port de recharge USB-C.
  • Une fois branché sur le secteur, le voyant de charge reste allumé en bleu ; il s'éteint lorsque la charge est terminée.
  • Si vous branchez le Stylus alors qu'il est éteint, il s'allume automatiquement.

Avertissement : si vous utilisez un stylet VerseGrip Stylus commercialisé entre août et décembre 2024, veillez à ne pas laisser la batterie se décharger complètement. Une fois déchargée, la batterie risque de ne plus pouvoir conserver sa charge. Dans ce cas, le stylet VerseGrip Stylus continuera 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 l’équipe d’assistance de Haply .

État et voyants lumineux​

CouleurMotifs des voyants lumineuxDescription
jauneFondu d'entrée/de sortie rapideCalibrage initial du capteur automatique (posez le VerseGrip à l'horizontale sur une table)
Clignotement rapideLe processus de calibrage démarre lorsque l'on appuie sur le bouton de calibrage de l'orientation.
Allumé en permanenceLe bouton de calibrage de l'orientation a été enfoncé ; le calibrage est terminé.
rougeFondu d'entrée/de sortie rapideDéconnexion de l'adaptateur, aucun signal provenant de l'hôte
Clignotement rapideLe bouton d'alimentation a été enfoncé, ce qui a déclenché la procédure d'arrêt.
vertFondu d'entrée/de sortieAdaptateur connecté, VerseGrip en mode flux de données actif
Allumé en permanenceAdaptateur connecté, VerseGrip en mode flux de données actif, alimentation USB connectée
blancFondu d'entrée/de sortieAdaptateur connecté, VerseGrip en mode veille, aucun flux de données
Allumé en permanenceAdaptateur connecté, VerseGrip en mode veille, pas de flux de données, alimentation USB connectée
orangeScintillement (entrelacement)Avertissement de batterie faible : dans l'état actuel, la notification s'affiche en mode entrelacé.
Double balayage (entrelacé)Avertissement « Batterie très faible » : dans l'état actuel, la notification s'affiche en mode entrelacé.
vert-bleuFondu d'entrée/de sortieMode de mise à jour du micrologiciel de l'appareil
(plus clair)Allumé en permanenceLe bouton utilisateur a été enfoncé ; la couleur actuellement affichée reste allumée et est plus claire.
ÉteintPas de voyant lumineuxArrêt, mise hors tension
Couleur du voyant de chargeMotifs des voyants lumineuxDescription
bleuAllumé en permanenceEn cours de recharge
Clignotement rapideLa recharge est presque terminée
ÉteintPas de voyant lumineuxRecharge terminée

État et voyants des versions précédentes​

Les états et couleurs des voyants indiqués ci-dessous correspondent aux états hérités utilisés dans les versions antérieures du VerseGrip Stylus (firmware 1.10 ou antérieur).

CouleurMotifs des voyants lumineuxDescription
rougeAllumé en permanenceEn attente de l'initialisation des composants
scintillementMode veille. Aucun transfert de données
bleuAllumé en permanenceCalibrage initial du capteur automatique (posez le VerseGrip à l'horizontale sur une table)
vertscintillementAdaptateur connecté, VerseGrip en mode flux de données actif
ÉteintPas de voyant lumineuxArrêt, mise hors tension
Couleur du voyant de chargeMotifs des voyants lumineuxDescription
bleuAllumé en permanenceEn cours de recharge
Clignotement rapideLa recharge est presque terminée
ÉteintPas de voyant lumineuxRecharge terminée

Exemple de code​

Voici un exemple simple illustrant comment utiliser le stylet VerseGrip dans un environnement 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);

}
}