import Tabs aus '@theme/Tabs'; import TabItem aus '@theme/TabItem';
VerseGrip Stylus – Einsteigerhandbuch
VerseGrip erweitert „ Inverse3“, „Inverse3X“ und „ MinVerse “ um eine Funktion zur Lageverfolgung. In diesem Artikel werden die Einrichtungsschritte für den VerseGrip Stylus sowie dessen Funktionen vorgestellt.
VerseGrip-Stift
Der VerseGrip Stylus nutzt eine proprietäre Hochgeschwindigkeits-Funktechnologie und bietet Funktionen zur Gestenverfolgung sowie zur Eingabe und Ausgabe (I/O) aus der Hand. Er wurde für eine Vielzahl von Anwendungsszenarien entwickelt und zeichnet sich durch eine hohe Vielseitigkeit aus.
Zu den wichtigsten Funktionen gehören:
- 2 Schaltflächen zur Benutzereingabe,
- 1 Kalibrierungstaste,
- 1 Ein-/Aus- und Standby-Taste
- 2 Status-LEDs
- USB-C-Ladeanschluss
- Die Übertragungsrate bei der drahtlosen Kommunikation beträgt bis zu 1 kHz
- Akkulaufzeit: 10–12 Stunden
- Auf einem Band können bis zu 8 VerseGrip Stylus mit einem Empfänger (Dongle) gekoppelt werden.

Kundensupport
Sollten Sie Fragen oder Bedenken bezüglich des Geräts oder dessen Betrieb haben, wenden Sie sich bitte an unseren Kundendienst, um Unterstützung zu erhalten. Der VerseGrip Stylus enthält komplexe, proprietäre Funktechnologie. Das Öffnen des Geräts führt zum Erlöschen der Garantie und kann dazu führen, dass das Gerät nicht mehr funktionsfähig ist. Um längere Lieferzeiten und hohe Reparaturkosten zu vermeiden,öffnen Sie das Gerät bitte nicht.
Einrichtung und Kalibrierung des VerseGrip-Stifts
In diesem Abschnitt werden die Schritte zum Einsetzen des Empfängers, zum Einschalten des VerseGrip Stylus sowie zur Kalibrierung beschrieben.
Einstellungen
- Stecken Sie den Empfänger in den USB-Anschluss des Computers.
- Legen Sie den Controller auf eine ebene, rutschfeste Oberfläche, wobei die Tasten nach oben und der Kugelstecker zum Bildschirm zeigen.
Inbetriebnahme und Kalibrierung
- Drücken Sie einmal auf den Netzschalter. Die Statusanzeige leuchtet zunächst rot und wechselt dann zu gelb, was bedeutet, dass die IMU im Gerät gerade eine Selbstkalibrierung durchführt.
- Nach Abschluss der Selbstkalibrierung wird der Stylus an den Computer angeschlossen.
- Wenn der Stylus erfolgreich verbunden ist und Daten drahtlos überträgt, blinkt die Statusanzeige grün.
- Wenn der Akku fast leer ist, schaltet sich der VerseGrip Stylus alle 2 Minuten automatisch aus;laden Sie ihn bitte umgehend auf.
Neukalibrierung
Durch den Kalibrierungsvorgang wird das Koordinatensystem des VerseGrip zurückgesetzt, sodass die Ausrichtung des Geräts zum Zeitpunkt der Kalibrierung zur neuen Referenzachse wird.
- Um eine Neukalibrierung durchzuführen, halten Sie den Stylus in der gewünschten Position und halten Sie die Kalibrierungstaste drei Sekunden lang gedrückt oder so lange, bis sich die Position in der Simulation ändert.
Die folgende Abbildung zeigt einen Vergleich des Verhaltens des Geräts im unkalibrierten und im kalibrierten Zustand. Bei der Demonstration muss der VerseGrip zunächst die in der Abbildung gezeigte Lage beibehalten, bevor die Kalibrierung durchgeführt wird.

Standby und Ausschalten
- Durch einmaliges Drücken der Ein-/Aus-Taste kehren Sie in den Standby-Modus zurück. Die Statusanzeige beginnt weiß zu blinken, und die Datenübertragung wird unterbrochen.
- Um den VerseGrip Stylus auszuschalten, halten Sie die Ein-/Aus-Taste 5 Sekunden lang gedrückt und lassen Sie sie dann los. Nach dem Loslassen sollte die Statusanzeige erlöschen und es sollten keine Anzeigen mehr zu sehen sein. Das Gerät stellt die Datenübertragung ein.
Aufladen
- Laden Sie den VerseGrip Stylus über den USB-C-Ladeanschluss auf.
- Wenn das Gerät an die Stromversorgung angeschlossen wird, leuchtet die Ladeanzeige dauerhaft blau und erlischt, sobald der Ladevorgang abgeschlossen ist.
- Wenn der Stylus beim Anschließen an die Stromversorgung ausgeschaltet ist, schaltet er sich automatisch ein.
Warnung: Wenn Ihr VerseGrip Stylus zwischen August und Dezember 2024 ausgeliefert wurde, lassen Sie den Akku bitte nicht vollständig entladen. Nach einer vollständigen Entladung kann der Akku möglicherweise keine Ladung mehr halten. In diesem Fall funktioniert der VerseGrip Stylus weiterhin, solange er an die Stromversorgung angeschlossen bleibt. Bitte wenden Sie sich an den Support unter Haply , um eine Firmware-Aktualisierung zur Behebung dieses Problems zu erhalten.
Status und Anzeigeleuchten
| Farbe | Beleuchtungsmodi | Erläuterung |
|---|---|---|
| Gelb | Schnelles Aufhellen/Abdunkeln | Anfängliche automatische Kalibrierung des Sensors (VerseGrip auf dem Tisch abstellen) |
| Schnelles Blinken | Die Taste zur Lagekalibrierung wurde gedrückt, der Kalibrierungsvorgang wurde gestartet. | |
| Ständig leuchtend | Die Taste zur Lagekalibrierung wurde gedrückt, die Kalibrierung ist abgeschlossen. | |
| Rot | Schnelles Aufhellen/Abdunkeln | Der Adapter ist getrennt, der Host sendet kein Signal. |
| Schnelles Blinken | Der Netzschalter wurde gedrückt, der Ausschaltvorgang hat begonnen. | |
| Grün | Aufhellen/Abdunkeln | Der Adapter ist angeschlossen, VerseGrip befindet sich im aktiven Datenstrom-Modus. |
| Ständig leuchtend | Der Adapter ist angeschlossen, der VerseGrip befindet sich im aktiven Datenstrom-Modus, die USB-Stromversorgung ist angeschlossen. | |
| Weiß | Aufhellen/Abdunkeln | Der Adapter ist angeschlossen, der VerseGrip befindet sich im Leerlauf-/Standby-Modus, es findet keine Datenübertragung statt. |
| Ständig leuchtend | Der Adapter ist angeschlossen, der VerseGrip befindet sich im Leerlauf-/Standby-Modus, es findet keine Datenübertragung statt, die USB-Stromversorgung ist angeschlossen. | |
| orange | Blinken (Wechseln) | Warnmeldung bei niedrigem Akkustand; die Benachrichtigung wird im aktuellen Status versetzt angezeigt |
| Warnblinklicht (abwechselnd) | Warnmeldung bei stark erschöpfter Batterie; die Benachrichtigung wird im aktuellen Zustand versetzt angezeigt | |
| Blau | Aufhellen/Abdunkeln | Modi für die Firmware-Aktualisierung von Geräten |
| (heller) | Ständig leuchtend | Eine Taste wird gedrückt, die aktuelle Anzeigefarbe leuchtet dauerhaft und ist heller. |
| Schließen | Ohne Licht | Herunterfahren, Strom abschalten |
| Farbe der Ladeanzeige | Beleuchtungsmodi | Erläuterung |
|---|---|---|
| Blau | Ständig leuchtend | Wird aufgeladen |
| Schnelles Blinken | Wird bald voll sein | |
| Schließen | Ohne Licht | Aufladen abgeschlossen |
Status und Kontrollleuchten der alten Version
Die folgenden Status-LEDs entsprechen den alten Zuständen und Farben, wie sie bei früheren Versionen des VerseGrip Stylus (Firmware 1.10 und früher) zu finden waren.
| Farbe | Beleuchtungsmodi | Erläuterung |
|---|---|---|
| Rot | Ständig leuchtend | Warten auf die Initialisierung der Komponente |
| Blinken | Standby-Modus, keine Datenübertragung | |
| Blau | Ständig leuchtend | Anfängliche automatische Kalibrierung des Sensors (VerseGrip auf dem Tisch abstellen) |
| Grün | Blinken | Der Adapter ist angeschlossen, VerseGrip befindet sich im aktiven Datenstrom-Modus. |
| Schließen | Ohne Licht | Herunterfahren, Strom abschalten |
| Farbe der Ladeanzeige | Beleuchtungsmodi | Erläuterung |
|---|---|---|
| Blau | Ständig leuchtend | Wird aufgeladen |
| Schnelles Blinken | Wird bald voll sein | |
| Schließen | Ohne Licht | Aufladen abgeschlossen |
Beispielcode
Im Folgenden finden Sie ein einfaches Beispiel für die Verwendung des VerseGrip Stylus in 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);
}
}