Skip to main content

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

Démarrer avec le stylet VerseGrip

Les VerseGrips ajoutent des capacités de suivi de l'orientation aux modèles Inverse3, Inverse3X et MinVerse. Cet article décrit la procédure de configuration du stylet VerseGrip ainsi que ses fonctionnalités.

Le stylet VerseGrip

Le stylet VerseGrip utilise une technologie de communication sans fil haute vitesse exclusive pour assurer le suivi de l'orientation et la saisie/sortie (E/S) en main. Il est conçu pour offrir une grande polyvalence dans un large éventail d'applications.

Les principales caractéristiques sont les suivantes :

  • 2 boutons d'entrée utilisateur,
  • 1 bouton d'étalonnage,
  • 1 bouton marche/veille
  • 2 voyants LED d'état
  • Port de recharge USB-C
  • Vitesse de communication sans fil jusqu'à 1 KHz
  • Autonomie de 10 à 12 heures
  • Jusqu'à 8 VerseGrip Stylus peuvent être couplés à un dongle sur une même bande.

Soutien à la clientèle

Si vous avez des questions ou des inquiétudes concernant votre appareil ou son fonctionnement, veuillez contacter notre équipe d'assistance pour obtenir de l'aide. Le stylet VerseGrip contient une technologie sans fil complexe et exclusive. Ouvrir l'appareil annulera votre garantie et peut le rendre inopérant. Pour éviter des délais d'expédition prolongés et des réparations coûteuses, N'OUVREZ PAS L'APPAREIL.

Configuration et étalonnage du stylet VerseGrip

Cette section décrit les étapes de branchement du dongle, de mise sous tension de votre VerseGrip Stylus et d'étalonnage.

Mise en place

  • Branchez la clé USB sur un port USB de votre ordinateur.
  • Posez la manette sur une surface plane où elle ne bougera pas, les boutons tournés vers le haut et le connecteur sphérique dirigé 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 de l'appareil est en cours d'auto-étalonnage.
  • Une fois l'auto-étalonnage terminé, le stylet se connectera à l'ordinateur.
  • Lorsque le stylet est correctement connecté et transmet des données par liaison sans fil, le voyant d'état clignote en vert.
  • Si la batterie est presque à plat, le stylet VerseGrip s'éteindra toutes les 2 minutes ; veuillez le recharger immédiatement.

Recalibrage

Le processus d'étalonnage réinitialise le système de coordonnées du VerseGrip de manière à ce que l'orientation dans laquelle l'appareil est tenu pendant l'étalonnage devienne le nouvel axe de référence.

  • Pour recalibrer, placez le stylet dans la position souhaitée, puis maintenez le bouton de calibrage enfoncé pendant trois secondes, ou jusqu'à ce que l'orientation change dans la simulation.

Vous trouverez ci-dessous une démonstration comparant le comportement de l'appareil lorsqu'il n'est pas calibré et lorsqu'il l'est. Pour nos démonstrations, le VerseGrip doit être tenu dans la configuration indiquée avant de procéder au calibrage.

Mise en veille et mise hors tension

  • Appuyez une fois sur le bouton d'alimentation pour revenir en mode veille. Le voyant d'état se mettra à clignoter en blanc et la transmission de données s'arrêtera.
  • Pour éteindre le stylet VerseGrip, maintenez le bouton d'alimentation enfoncé pendant 5 secondes et relâchez-le. Lorsque vous relâchez le bouton, le voyant d'état doit s'éteindre et il n'y a plus d'indications. Il cessera de transmettre des données.

Chargement

  • Branchez le stylet VerseGrip via le port de chargement USB-C.
  • Le voyant d'état de charge s'allume en bleu fixe lorsque l'appareil est branché sur le secteur, et s'éteint une fois la charge terminée.
  • Si le stylet est éteint lorsque vous le branchez sur le secteur, il s'allumera automatiquement.

AVERTISSEMENT : Si vous possédez un stylet VerseGrip expédié entre août et décembre 2024, veillez à ne pas laisser la batterie se décharger complètement. Une fois déchargée, elle risque de ne plus se recharger. Si cela se produit, le stylet VerseGrip continuera de fonctionner tant qu'il restera branché. Contactez Haply pour obtenir le fichier de mise à jour du micrologiciel permettant de résoudre ce problème.

États et indicateurs lumineux

CouleurSéquence lumineuseDescription
JauneFondu rapide en entrée/sortieÉtalonnage initial automatisé de référence du capteur (laisser le VerseGrip à plat sur la table)
Clignotement rapideLe bouton de calibrage de l'orientation a été enfoncé, le processus de calibrage a démarré
SolideLe bouton de calibrage de l'orientation a été enfoncé, le calibrage est terminé
RougeFondu rapide en entrée/sortieAdaptateur déconnecté, aucun signal provenant de l'hôte
Clignotement rapideLe bouton d'alimentation a été enfoncé, le processus d'arrêt a commencé
VertFondu en entrée/sortieAdaptateur connecté, mode de flux de données actif VerseGrip
SolideAdaptateur branché, mode de flux de données VerseGrip activé, alimentation USB connectée
BlancFondu en entrée/sortieAdaptateur connecté, VerseGrip en mode veille : pas de transmission de données
SolideAdaptateur branché, VerseGrip en mode veille/veille prolongée, pas de transmission de données, alimentation USB connectée
OrangeFlash (entrelacé)Avertissement de batterie faible : la notification est intégrée à l'état actuel
Double flash (entrelacé)Avertissement de niveau de batterie extrêmement bas ; la notification s'affiche en alternance avec l'état actuel
Bleu sarcelleFondu en entrée/sortieMode de mise à jour du micrologiciel de l'appareil
(Plus lumineux)SolideLorsque l'utilisateur appuie sur les boutons, la couleur de l'indication actuelle devient unie et plus vive
DésactivéPas de lumièreArrêt, mise hors tension
Couleur de l'indicateur de chargeSéquence lumineuseDescription
BleuSolideChargement
Clignotement rapideLa recharge est presque terminée
DésactivéPas de lumièreChargement terminé

États hérités et voyant lumineux

Les voyants d'état ci-dessous correspondent aux états et aux couleurs utilisés dans les versions précédentes du stylet VerseGrip (micrologiciel 1.10 et versions antérieures).

CouleurSéquence lumineuseDescription
RougeSolideEn attente d'initialisation des composants
ClignementMode veille. Aucune transmission de données
BleuSolideÉtalonnage initial automatisé de référence du capteur (laisser le VerseGrip à plat sur la table)
VertClignementAdaptateur connecté, mode de flux de données actif VerseGrip
DésactivéPas de lumièreArrêt, mise hors tension
Couleur de l'indicateur de chargeSéquence lumineuseDescription
BleuSolideChargement
Clignotement rapideLa recharge est presque terminée
DésactivéPas de lumièreChargement terminé

Exemple de code

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

}
}