Aller au contenu principal

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​

CouleurSéquence lumineuseDescription
JauneFondu rapide entrant/sortantÉtalonnage automatique initial de référence du capteur (posez l'appareil VerseGrip immobile sur la table)
Clignotement rapideBouton d'étalonnage de l'orientation enfoncé, processus d'étalonnage démarré
FixeBouton d'étalonnage de l'orientation enfoncé, étalonnage terminé
RougeFondu rapide entrant/sortantAdaptateur débranché, aucun signal de l'hôte
Clignotement rapideBouton marche/veille enfoncé, processus d'arrêt démarré
VertFondu entrant/sortantAdaptateur connecté, VerseGrip en mode de flux de données actif
FixeAdaptateur connecté, VerseGrip en mode de flux de données actif, alimentation USB connectée
BlancFondu entrant/sortantAdaptateur 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 (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
SarcelleFondu entrant/sortantMode de mise à jour du micrologiciel de l'appareil
(Plus vif)FixeBoutons utilisateur enfoncés, la couleur d'indication actuelle est fixe et plus vive
ÉteintAucune lumièreArrêt, mise hors tension
Couleur du voyant de rechargeSéquence lumineuseDescription
BleuFixeEn charge
Clignotement rapideRecharge presque terminée
ÉteintAucune lumièreRecharge 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).

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 immobile sur la table)
VertClignotementAdaptateur connecté, VerseGrip en mode de flux de données actif
ÉteintAucune lumièreArrêt, mise hors tension
Couleur du voyant de rechargeSéquence lumineuseDescription
BleuFixeEn charge
Clignotement rapideRecharge presque terminée
ÉteintAucune 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);

}
}