import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem';
Erste Schritte mit VerseGrip Stylus
VerseGrips fügen Inverse3, Inverse3X und MinVerse Funktionen zur Orientierungserfassung hinzu. Dieser Artikel beschreibt das Einrichtungsverfahren für VerseGrip Stylus sowie dessen Funktionen.
VerseGrip Stylus
VerseGrip Stylus nutzt eine proprietäre Hochgeschwindigkeits-Funktechnik, um Orientierungserfassung sowie Ein- und Ausgabe in der Hand (I/O) bereitzustellen. Es ist vielseitig einsetzbar und für eine Vielzahl von Anwendungen konzipiert.
Zu den wichtigsten Funktionen gehören:
- 2 Benutzereingabetasten,
- 1 Kalibrierungstaste,
- 1 Ein-/Standby-Taste
- 2 Status-LEDs
- USB-C-Ladeanschluss
- Funkkommunikation mit bis zu 1 KHz
- 10-12 Stunden Akkulaufzeit
- Bis zu 8 VerseGrip Stylus können auf einem Band mit einem Dongle gekoppelt werden

Kundensupport
Bei Fragen oder Anliegen zu Ihrem Gerät oder dessen Betrieb wenden Sie sich bitte an unser Support-Team. VerseGrip Stylus enthält komplexe, proprietäre Funktechnik. Das Öffnen des Geräts erlischt Ihre Garantie und kann es funktionsunfähig machen. Um längere Versandzeiten und teure Reparaturen zu vermeiden, ÖFFNEN SIE DAS GERÄT NICHT.
VerseGrip Stylus Einrichtung und Kalibrierung
Dieser Abschnitt beschreibt die Schritte zum Einstecken des Dongles, zum Einschalten von VerseGrip Stylus und zur Kalibrierung.
Einrichtung
- Stecken Sie den Dongle in einen USB-Anschluss Ihres Computers.
- Legen Sie den Griff auf eine ebene Fläche, auf der er nicht verrutscht, mit den Tasten nach oben und dem Kugelanschluss zum Bildschirm gerichtet.
Einschalten und Kalibrierung
- Drücken Sie die Ein-/Aus-Taste einmal. Die Statusleuchte leuchtet zunächst rot und wechselt dann auf Gelb, was anzeigt, dass die IMU im Gerät eine Selbstkalibrierung durchführt.
- Nach der Selbstkalibrierung verbindet sich der Stylus mit dem Computer.
- Sobald der Stylus erfolgreich verbunden ist und Daten drahtlos überträgt, blinkt die Statusleuchte grün.
- Ist der Akku kritisch schwach, schaltet sich VerseGrip Stylus alle 2 Minuten selbst aus; bitte laden Sie ihn sofort auf.
Neukalibrierung
Der Kalibrierungsvorgang setzt das Koordinatensystem von VerseGrip zurück, sodass die Richtung, in der das Gerät während der Kalibrierung gehalten wird, zur neuen Referenzachse wird.
- Um neu zu kalibrieren, halten Sie den Stylus in der Position, auf die Sie neu kalibrieren möchten, und drücken und halten Sie die Kalibrierungstaste drei Sekunden lang oder bis sich die Ausrichtung in der Simulation ändert.
Nachfolgend wird eine Demonstration gezeigt, die das Verhalten des Geräts im unkalibrierten und im kalibrierten Zustand vergleicht. Für unsere Demonstrationen muss VerseGrip vor der Kalibrierung in der gezeigten Konfiguration gehalten werden.

Standby und Ausschalten
- Drücken Sie die Ein-/Aus-Taste einmal, um in den Standby-Modus zurückzukehren. Die Statusleuchte beginnt weiß zu blinken, und die Datenübertragung wird beendet.
- Um VerseGrip Stylus auszuschalten, halten Sie die Ein-/Aus-Taste 5 Sekunden lang gedrückt und lassen sie dann los. Nach dem Loslassen sollte die Statusleuchte erlöschen, und es erfolgt keine Anzeige mehr. Die Datenübertragung wird dabei beendet.
Laden
- Schließen Sie VerseGrip Stylus über den USB-C-Ladeanschluss an die Stromversorgung an.
- Die Ladestatusleuchte leuchtet bei angeschlossener Stromversorgung dauerhaft blau, und wenn der Akku vollständig geladen ist, erlischt sie.
- Ist der Stylus ausgeschaltet, wenn Sie ihn an die Stromversorgung anschließen, schaltet er sich automatisch ein.
WARNUNG: Bei VerseGrip Stylus-Geräten, die zwischen August und Dezember 2024 ausgeliefert wurden, lassen Sie den Akku nicht vollständig entladen. Sobald der Akku entleert ist, kann er unter Umständen keine Ladung mehr halten. Falls dies geschieht, funktioniert VerseGrip Stylus weiterhin, solange es angeschlossen ist. Kontaktieren Sie den Haply-Support, um die Firmware-Update-Datei zur Behebung dieses Problems zu erhalten.
Zustände und Leuchtanzeigen
| Farbe | Lichtsequenz | Beschreibung |
|---|---|---|
| Gelb | Schnelles Ein-/Ausblenden | Automatische Erstkalibrierung der Sensorreferenz (VerseGrip bewegungslos auf dem Tisch ablegen) |
| Schnelles Blinken | Ausrichtungs-Kalibrierungstaste gedrückt, Kalibrierungsvorgang gestartet | |
| Dauerhaft | Ausrichtungs-Kalibrierungstaste gedrückt, Kalibrierung abgeschlossen | |
| Rot | Schnelles Ein-/Ausblenden | Adapter getrennt, kein Signal vom Host |
| Schnelles Blinken | Ein-/Aus-Taste gedrückt, Abschaltvorgang gestartet | |
| Grün | Ein-/Ausblenden | Adapter verbunden, VerseGrip im aktiven Datenstrommodus |
| Dauerhaft | Adapter verbunden, VerseGrip im aktiven Datenstrommodus, USB-Stromversorgung verbunden | |
| Weiß | Ein-/Ausblenden | Adapter verbunden, VerseGrip im Leerlauf-/Standby-Modus ohne Datenübertragung |
| Dauerhaft | Adapter verbunden, VerseGrip im Leerlauf-/Standby-Modus ohne Datenübertragung, USB-Stromversorgung verbunden | |
| Orange | Blitz (verschachtelt) | Warnanzeige für niedrigen Akkustand, Benachrichtigung im aktuellen Zustand verschachtelt |
| Doppelblitz (verschachtelt) | Warnanzeige für kritisch niedrigen Akkustand, Benachrichtigung im aktuellen Zustand verschachtelt | |
| Türkis | Ein-/Ausblenden | Firmware-Update-Modus des Geräts |
| (Heller) | Dauerhaft | Benutzertasten gedrückt, aktuelle Anzeigefarbe ist dauerhaft und heller |
| Aus | Keine Leuchte | Herunterfahren, Ausschalten |
| Ladeanzeige-Farbe | Lichtsequenz | Beschreibung |
|---|---|---|
| Blau | Dauerhaft | Laden |
| Schnelles Blinken | Ladevorgang fast abgeschlossen | |
| Aus | Keine Leuchte | Ladevorgang abgeschlossen |
Ältere Zustände und Leuchtanzeigen
Die folgenden Statusleuchten sind ältere Zustände und Farben, die in früheren Versionen von VerseGrip Stylus (Firmware 1.10 und älter) vorkamen.
| Farbe | Lichtsequenz | Beschreibung |
|---|---|---|
| Rot | Dauerhaft | Initialisierung der Komponenten ausstehend |
| Blinken | Standby-Modus. Keine Datenübertragung | |
| Blau | Dauerhaft | Automatische Erstkalibrierung der Sensorreferenz (VerseGrip bewegungslos auf dem Tisch ablegen) |
| Grün | Blinken | Adapter verbunden, VerseGrip im aktiven Datenstrommodus |
| Aus | Keine Leuchte | Herunterfahren, Ausschalten |
| Ladeanzeige-Farbe | Lichtsequenz | Beschreibung |
|---|---|---|
| Blau | Dauerhaft | Laden |
| Schnelles Blinken | Ladevorgang fast abgeschlossen | |
| Aus | Keine Leuchte | Ladevorgang abgeschlossen |
Beispielcode
Hier ist ein einfaches Beispiel, wie Sie VerseGrip Stylus mit C++ verwenden.
#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);
}
}