import Tabs aus '@theme/Tabs'; import TabItem aus '@theme/TabItem';
Erste Schritte mit dem VerseGrip Stylus
VerseGrips erweitern die Modelle Inverse3, Inverse3X und MinVerse um Funktionen zur Orientierungserfassung. Dieser Artikel beschreibt die Einrichtung des VerseGrip-Stifts und seine Funktionen.
Der VerseGrip-Stift
Der VerseGrip Stylus nutzt eine proprietäre drahtlose Hochgeschwindigkeits-Kommunikationstechnologie, um die Ausrichtung zu erfassen und Eingaben und Ausgaben (I/O) direkt in der Hand zu ermöglichen. Er wurde für vielseitigen Einsatz in einer Vielzahl von Anwendungsbereichen entwickelt.
Die wichtigsten Merkmale sind:
- 2 Tasten zur Benutzereingabe,
- 1 Kalibrierungstaste,
- 1 Ein-/Aus-Taste
- 2 Status-LEDs
- USB-C-Ladeanschluss
- Drahtlose Kommunikationsgeschwindigkeit bis zu 1 KHz
- 10-12 Stunden Akkulaufzeit
- Bis zu 8 VerseGrip Stylus können mit einem Dongle an einem einzigen Band gekoppelt werden

Kundenbetreuung
Wenn Sie Fragen oder Bedenken bezüglich Ihres Geräts oder seiner Bedienung haben, wenden Sie sich bitte an unser Support-Team, um Hilfe zu erhalten. Der VerseGrip Stylus enthält eine komplexe, proprietäre Funktechnologie. Das Öffnen des Geräts führt zum Erlöschen der Garantie und kann das Gerät funktionsunfähig machen. Um lange Versandzeiten und teure Reparaturen zu vermeiden, öffnen Sie das Gerät NICHT.
VerseGrip-Stift - Einrichtung und Kalibrierung
In diesem Abschnitt werden die Schritte des Anschließens des Dongles, des Einschaltens des VerseGrip Stylus und der Kalibrierung beschrieben.
Einrichten
- Stecken Sie den Dongle in einen USB-Anschluss Ihres Computers.
- Legen Sie den Controller auf eine ebene Fläche, auf der er nicht verrutschen kann, wobei die Tasten nach oben zeigen und der Kugelstecker in Richtung Bildschirm zeigt.
Einschalten und Kalibrierung
- Drücken Sie einmal auf den Ein-/Aus-Schalter. Die Statusanzeige leuchtet zunächst rot und wechselt dann zu gelb, um anzuzeigen, dass die IMU im Gerät gerade eine Selbstkalibrierung durchführt.
- Nach der Selbstkalibrierung stellt der Stift eine Verbindung zum Computer her.
- Wenn der Stift 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; bitte laden Sie ihn umgehend auf.
Rekalibrierung
Durch den Kalibrierungsvorgang wird das Koordinatensystem des VerseGrip zurückgesetzt, sodass die Richtung, in der das Gerät während der Kalibrierung gehalten wird, zur neuen Referenzachse wird.
- Um die Kalibrierung durchzuführen, halten Sie den Stift in der Position, auf die Sie kalibrieren möchten, und halten Sie die Kalibrierungstaste drei Sekunden lang gedrückt oder bis sich die Ausrichtung in der Simulation ändert.
Im Folgenden wird das Verhalten des Geräts im nicht kalibrierten Zustand mit dem im kalibrierten Zustand verglichen. Für unsere Demonstrationen muss der VerseGrip vor der Kalibrierung in der abgebildeten Position gehalten werden.

Standby und Ausschalten
- Drücken Sie einmal auf den Ein-/Aus-Schalter, um wieder in den Standby-Modus zu wechseln. Die Statusanzeige beginnt weiß zu blinken, und die Datenübertragung wird unterbrochen.
- Um den VerseGrip Stylus auszuschalten, halten Sie die Einschalttaste 5 Sekunden lang gedrückt und lassen Sie sie dann los. Wenn Sie loslassen, sollte die Statusleuchte erlöschen und es werden keine Anzeigen mehr angezeigt. Es werden keine Daten mehr übertragen.
Aufladen
- Schließen Sie den VerseGrip-Stift über den USB-C-Ladeanschluss an.
- Die Ladeanzeige leuchtet blau, wenn das Gerät an die Stromversorgung angeschlossen ist, und erlischt, sobald es vollständig aufgeladen ist.
- Wenn der Stift ausgeschaltet ist, wenn Sie ihn an die Stromversorgung anschließen, schaltet er sich automatisch ein.
WARNUNG: Wenn Sie einen VerseGrip Stylus besitzen, der zwischen August und Dezember 2024 ausgeliefert wurde – lassen Sie den Akku nicht vollständig entladen. Ist er einmal leer, lässt er sich möglicherweise nicht mehr aufladen. In diesem Fall funktioniert der VerseGrip Stylus nur noch, solange er an die Stromversorgung angeschlossen ist. Wenden Sie sich an Haply , um die Firmware-Update-Datei zur Behebung dieses Problems zu erhalten.
Zustände und Lichtindikatoren
| Farbe | Lichtsequenz | Beschreibung |
|---|---|---|
| Gelb | Schnelles Ein-/Ausblenden | Erste automatische Referenzkalibrierung des Sensors (VerseGrip flach auf den Tisch legen) |
| Schnelles Blinken | Die Taste zur Orientierungskalibrierung wurde gedrückt, der Kalibrierungsvorgang wurde gestartet | |
| Massiv | Die Taste zur Orientierungskalibrierung wurde gedrückt, die Kalibrierung ist abgeschlossen | |
| Rot | Schnelles Ein-/Ausblenden | Adapter nicht angeschlossen, kein Signal vom Host |
| Schnelles Blinken | Der Netzschalter wurde gedrückt, der Herunterfahrvorgang wurde gestartet | |
| Grün | Ein-/Ausblenden | Adapter angeschlossen, VerseGrip im aktiven Datenstrom-Modus |
| Massiv | Adapter angeschlossen, VerseGrip im aktiven Datenübertragungsmodus, USB-Stromversorgung angeschlossen | |
| Weiß | Ein-/Ausblenden | Adapter angeschlossen, VerseGrip im Leerlauf-/Standby-Modus, kein Daten-Streaming |
| Massiv | Adapter angeschlossen, VerseGrip im Ruhe-/Standby-Modus, kein Daten-Streaming, USB-Stromversorgung angeschlossen | |
| Orange | Flash (Zeilenverschachtelung) | Warnanzeige bei niedrigem Batteriestand; die Benachrichtigung wird im aktuellen Zustand eingeblendet |
| Doppelblitz (zeilenverschachtelt) | Warnanzeige bei kritisch niedrigem Batteriestand; die Benachrichtigung wird im aktuellen Status eingeblendet | |
| Blaugrün | Ein-/Ausblenden | Modus zur Aktualisierung der Geräte-Firmware |
| (Heller) | Massiv | Wenn der Benutzer die Tasten drückt, leuchtet die aktuelle Anzeige durchgehend und heller |
| Aus | Kein Licht | Herunterfahren, Ausschalten |
| Farbe der Ladeanzeige | Lichtsequenz | Beschreibung |
|---|---|---|
| Blau | Massiv | Aufladen |
| Schnelles Blinken | Der Ladevorgang ist fast abgeschlossen | |
| Aus | Kein Licht | Ladevorgang abgeschlossen |
Alte Zustände und Leuchtanzeige
Die unten aufgeführten Statusanzeigen entsprechen den Zuständen und Farben früherer Versionen des VerseGrip Stylus (Firmware 1.10 und älter).
| Farbe | Lichtsequenz | Beschreibung |
|---|---|---|
| Rot | Massiv | Anstehende Initialisierung von Komponenten |
| Blink | Standby-Modus. Keine Datenübertragung | |
| Blau | Massiv | Erste automatische Referenzkalibrierung des Sensors (VerseGrip flach auf den Tisch legen) |
| Grün | Blink | Adapter angeschlossen, VerseGrip im aktiven Datenstrom-Modus |
| Aus | Kein Licht | Herunterfahren, Ausschalten |
| Farbe der Ladeanzeige | Lichtsequenz | Beschreibung |
|---|---|---|
| Blau | Massiv | Aufladen |
| Schnelles Blinken | Der Ladevorgang ist fast abgeschlossen | |
| Aus | Kein Licht | Ladevorgang abgeschlossen |
Beispiel-Code
Hier ist ein einfaches Beispiel für die Verwendung des VerseGrip-Stifts mit 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);
}
}