import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem';
Premiers pas avec VerseGrip Stylus
Les VerseGrips ajoutent la fonction de suivi de l'orientation aux Inverse3, Inverse3X et MinVerse. Cet article présente la procédure de configuration de VerseGrip Stylus ainsi que ses fonctionnalités.
Présentation de VerseGrip Stylus
L'appareil VerseGrip Stylus utilise une technologie de communication sans fil propriétaire à haute vitesse pour assurer le suivi de l'orientation ainsi que les entrées et sorties (E/S) en main. Il est conçu pour offrir une grande polyvalence dans un é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 allant jusqu'à 1 KHz
- Autonomie de la batterie de 10 à 12 heures
- Jusqu'à 8 VerseGrip Stylus peuvent s'appairer à un dongle sur une seule bande

Service à la clientèle
Si vous avez des questions ou des préoccupations concernant votre appareil ou son fonctionnement, veuillez communiquer avec notre équipe de soutien pour obtenir de l'aide. L'appareil VerseGrip Stylus renferme une technologie sans fil complexe et propriétaire. 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 de VerseGrip Stylus
Cette section décrit les étapes pour brancher le dongle, mettre en marche l'appareil VerseGrip Stylus et effectuer l'étalonnage.
Installation
- Branchez le dongle dans un port USB de votre ordinateur.
- Placez la poignée sur une surface plane où elle ne bougera pas, les boutons orientés vers le haut et le connecteur à bille pointé 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 effectue son autoétalonnage.
- Une fois l'autoétalonnage terminé, le stylet se connectera à l'ordinateur.
- Lorsque le stylet est connecté avec succès et transmet des données sans fil, le voyant d'état clignotera 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.
Recalibrage
Le processus d'étalonnage réinitialise le système de coordonnées de VerseGrip de sorte que la direction dans laquelle l'appareil est tenu pendant l'étalonnage devienne le nouvel axe de référence.
- Pour recalibrer, tenez le stylet dans la position à laquelle vous souhaitez recalibrer, puis appuyez sur le bouton d'étalonnage et maintenez-le enfoncé pendant trois secondes, ou jusqu'à ce que l'orientation change dans la simulation.
Vous trouverez ci-dessous une démonstration qui compare 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 au 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 au port de recharge USB-C.
- Le voyant de recharge sera bleu fixe lorsque l'appareil sera branché au secteur, et s'éteindra lorsque la batterie sera entièrement chargée.
- Si le stylet est éteint au moment où vous le branchez au secteur, il s'allumera automatiquement.
AVERTISSEMENT : Si vous possédez l'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 retenir de charge. Si cela se produit, l'appareil VerseGrip Stylus continuera de fonctionner tant qu'il restera branché. Communiquez avec l'équipe de soutien de Haply pour recevoir le fichier de mise à jour du micrologiciel permettant de corriger ce problème.
États et indicateurs lumineux
| Couleur | Séquence lumineuse | Description |
|---|---|---|
| Jaune | Fondu rapide entrant/sortant | Étalonnage automatique initial de référence du capteur (posez l'appareil VerseGrip immobile sur la table) |
| Clignotement rapide | Bouton d'étalonnage de l'orientation enfoncé, processus d'étalonnage démarré | |
| Fixe | Bouton d'étalonnage de l'orientation enfoncé, étalonnage terminé | |
| Rouge | Fondu rapide entrant/sortant | Adaptateur débranché, aucun signal de l'hôte |
| Clignotement rapide | Bouton marche/veille enfoncé, processus d'arrêt démarré | |
| Vert | Fondu entrant/sortant | Adaptateur connecté, VerseGrip en mode de flux de données actif |
| Fixe | Adaptateur connecté, VerseGrip en mode de flux de données actif, alimentation USB connectée | |
| Blanc | Fondu entrant/sortant | Adaptateur connecté, VerseGrip en mode veille/repos, sans transmission de données |
| Fixe | Adaptateur connecté, VerseGrip en mode veille/repos, sans transmission de données, alimentation USB connectée | |
| Orange | Flash (alterné) | Avertissement de batterie faible, la notification est alternée dans l'état actuel |
| Double flash (alterné) | Avertissement de batterie critiquement faible, la notification est alternée dans l'état actuel | |
| Sarcelle | Fondu entrant/sortant | Mode de mise à jour du micrologiciel de l'appareil |
| (Plus vif) | Fixe | Boutons utilisateur enfoncés, la couleur d'indication actuelle est fixe et plus vive |
| Éteint | Aucune lumière | Arrêt, mise hors tension |
| Couleur du voyant de recharge | Séquence lumineuse | Description |
|---|---|---|
| Bleu | Fixe | En charge |
| Clignotement rapide | Recharge presque terminée | |
| Éteint | Aucune lumière | Recharge terminée |
Anciens états et indicateurs lumineux
Les voyants d'état ci-dessous correspondent aux anciens états et couleurs présents dans les versions précédentes de VerseGrip Stylus (micrologiciel 1.10 et antérieurs).
| Couleur | Séquence lumineuse | Description |
|---|---|---|
| Rouge | Fixe | Initialisation des composants en attente |
| Clignotement | Mode veille. Aucune transmission de données | |
| Bleu | Fixe | Étalonnage automatique initial de référence du capteur (posez l'appareil VerseGrip immobile sur la table) |
| Vert | Clignotement | Adaptateur connecté, VerseGrip en mode de flux de données actif |
| Éteint | Aucune lumière | Arrêt, mise hors tension |
| Couleur du voyant de recharge | Séquence lumineuse | Description |
|---|---|---|
| Bleu | Fixe | En charge |
| Clignotement rapide | Recharge presque terminée | |
| Éteint | Aucune lumière | Recharge 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);
}
}