Aller au contenu principal

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

Premiers pas avec le stylet VerseGrip

Les VerseGrips ajoutent la fonction de suivi de l'orientation aux modèles « Inverse3 », «Inverse3X» et « MinVerse ». Cet article présente la procédure de configuration du VerseGrip Stylus ainsi que ses fonctionnalités.

Présentation du stylet VerseGrip​

L'appareil VerseGrip Stylus utilise une technologie de communication sans fil propriétaire à haut débit pour assurer le suivi de l'orientation ainsi que des entrées et sorties (E/S) en temps réel. Il est conçu pour offrir une grande polyvalence dans un large éventail d'applications.

Les principales caractéristiques sont les suivantes :

  • 2 boutons de saisie utilisateur,
  • 1 bouton d'étalonnage,
  • 1 bouton marche/veille
  • 2 voyants d'état DEL
  • Port de recharge USB-C
  • Vitesse de communication sans fil pouvant atteindre 1 kHz
  • Autonomie de la batterie : de 10 à 12 heures
  • Jusqu'à 8 stylets VerseGrip peuvent être appairés à un dongle sur une seule bande

Service client​

Si vous avez des questions ou des préoccupations concernant votre appareil ou son fonctionnement, veuillez contacter notre équipe d'assistance pour obtenir de l'aide. L'appareil VerseGrip Stylus intègre une technologie sans fil complexe et exclusive. L'ouverture de l'appareil annulera votre garantie et pourrait le rendre inutilisable. 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 à suivre pour brancher la clé USB, mettre en marche l'appareil VerseGrip Stylus et procéder à l'étalonnage.

Installation​

  • Branchez la clé USB sur un port USB de votre ordinateur.
  • Placez la manette sur une surface plane où elle ne bougera pas, les boutons tournés vers le haut et le connecteur à bille orienté vers l'écran.

Mise sous tension et étalonnage​

  • Appuyez une fois sur le bouton marche/veille. Le voyant d'état s'allumera en rouge, puis passera au jaune pour indiquer que l'unité de mesure inertielle (IMU) de l'appareil procède à son 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 sans fil, le voyant d'état clignote en vert.
  • Si le niveau de la batterie est critique, l'appareil VerseGrip Stylus 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 de VerseGrip de manière à ce que la direction 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 appuyez sur le bouton de calibrage et maintenez-le 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 étalonné et lorsqu'il l'est. Pour nos démonstrations, l'appareil VerseGrip doit être tenu dans la configuration illustrée avant l'étalonnage.

Veille et mise hors tension​

  • Appuyez une fois sur le bouton marche/veille pour revenir en mode veille. Le voyant d'état commencera à clignoter en blanc et la transmission des données s'arrêtera.
  • Pour éteindre l'appareil VerseGrip Stylus, maintenez le bouton marche/veille enfoncé pendant 5 secondes, puis relâchez-le. Une fois le bouton relâché, le voyant d'état devrait s'éteindre et aucun signal lumineux ne sera émis. La transmission des données cessera.

Recharge​

  • Branchez l'appareil VerseGrip Stylus sur le port de recharge USB-C.
  • Le voyant de recharge restera allumé en bleu lorsque l'appareil sera branché sur le secteur, et s'éteindra lorsque la batterie sera complètement chargée.
  • Si le stylet est éteint au moment où vous le branchez sur le secteur, il s'allumera automatiquement.

AVERTISSEMENT : Si vous possédez un appareil VerseGrip Stylus expédié entre août et décembre 2024, ne laissez pas la batterie se décharger complètement. Une fois épuisée, elle pourrait ne plus se recharger. Si cela se produit, l'appareil VerseGrip Stylus continuera de fonctionner tant qu'il restera branché. Contactez l'équipe d'assistance de Haply pour recevoir le fichier de mise à jour du micrologiciel permettant de corriger ce problème.

États et voyants lumineux​

CouleurSéquence lumineuseDescription
JauneFondu rapide d'entrée/de sortieÉtalonnage automatique initial de référence du capteur (posez l'appareil VerseGrip à l'arrêt sur la table)
Clignotement rapideBouton d'étalonnage de l'orientation enfoncé, processus d'étalonnage lancé
FixeLe bouton d'étalonnage de l'orientation a été enfoncé, l'étalonnage est terminé
RougeFondu rapide d'entrée/de sortieAdaptateur débranché, aucun signal provenant de l'hôte
Clignotement rapideBouton marche/veille enfoncé, processus d'arrêt lancé
VertFondu d'entrée/de sortieAdaptateur connecté, VerseGrip en mode de flux de données actif
FixeAdaptateur connecté, VerseGrip en mode de transfert de données actif, alimentation USB connectée
BlancFondu d'entrée/de sortieAdaptateur connecté, VerseGrip en mode veille/repos, sans transmission de données
FixeAdaptateur connecté, VerseGrip en mode veille/repos, sans transmission de données, alimentation USB connectée
OrangeFlash (en alternance)Avertissement de batterie faible : la notification s'affiche en alternance dans l'état actuel
Double clignotement (en alternance)Avertissement de batterie très faible ; la notification s'affiche en alternance dans l'état actuel
SarcelleFondu d'entrée/de sortieProcédure de mise à jour du micrologiciel de l'appareil
(Plus vif)FixeLorsque les boutons utilisateur sont enfoncés, la couleur d'indication actuelle est fixe et plus vive
ÉteintPas de lumièreArrêt, mise hors tension
Couleur du voyant de rechargeSéquence lumineuseDescription
BleuFixeEn charge
Clignotement rapideRecharge presque terminée
ÉteintPas de lumièreRecharge terminée

Anciens états et voyants lumineux​

Les voyants d'état ci-dessous correspondent aux anciens états et couleurs présents dans les versions précédentes du VerseGrip Stylus (micrologiciel 1.10 et antérieurs).

CouleurSéquence lumineuseDescription
RougeFixeInitialisation des composants en attente
ClignotementMode veille. Aucune transmission de données
BleuFixeÉtalonnage automatique initial de référence du capteur (posez l'appareil VerseGrip à l'arrêt sur la table)
VertClignotementAdaptateur connecté, VerseGrip en mode de flux de données actif
ÉteintPas de lumièreArrêt, mise hors tension
Couleur du voyant de rechargeSéquence lumineuseDescription
BleuFixeEn charge
Clignotement rapideRecharge presque terminée
ÉteintPas de lumièreRecharge terminée

Exemple de code​

Voici un exemple simple d'utilisation de VerseGrip Stylus 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);

}
}