Zum Hauptinhalt springen

import Tabs aus '@theme/Tabs'; import TabItem aus '@theme/TabItem';

Erste Schritte mit dem VerseGrip Stylus

VerseGrips erweitertInverse3, Inverse3X und MinVerse um eine Funktion zur Positionsverfolgung (Orientierung). In diesem Artikel werden die Schritte zur Einrichtung des VerseGrip Stylus sowie dessen Funktionen erläutert.

Über den VerseGrip-Stift​

Der VerseGrip Stylus nutzt eine einzigartige, schnelle Funktechnologie, um die Erfassung der Handhaltung sowie die Eingabe und Ausgabe (I/O) im Handbetrieb zu ermöglichen. Er wurde für den Einsatz in einer Vielzahl von Anwendungen entwickelt.

Die wichtigsten Funktionen sind wie folgt:

  • 2 Schaltflächen für Benutzereingaben,
  • 1 Kalibrierungstaste,
  • 1 Ein-/Standby-Taste
  • 2 Status-LEDs
  • USB-C-Ladeanschluss
  • Drahtlose Übertragungsgeschwindigkeit von bis zu 1 kHz
  • Akkulaufzeit: 10 bis 12 Stunden
  • Pro Band können bis zu 8 VerseGrip-Stifte mit dem Dongle gekoppelt werden

Kundensupport​

Sollten Sie Fragen oder Bedenken bezüglich des Geräts oder dessen Funktionsweise haben, wenden Sie sich bitte an unseren Support. Der VerseGrip Stylus verfügt über eine 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 funktioniert. Um längere Lieferzeiten und hohe Reparaturkosten zu vermeiden,öffnen Sie das Gerät bitte nicht.

Einrichtung und Kalibrierung des VerseGrip Stylus​

In diesem Abschnitt werden der Anschluss des Dongles, das Einschalten des VerseGrip Stylus sowie die Kalibrierung beschrieben.

Einrichtung​

  • Schließen Sie den Dongle an den USB-Anschluss des Computers an.
  • Bitte legen Sie den Controller auf eine ebene, nicht rutschende Fläche. Die Tasten sollten nach oben zeigen, und der Kugelstecker sollte in Richtung des Bildschirms ausgerichtet sein.

Einschalten und Kalibrierung​

  • Drücken Sie einmal auf den Ein-/Aus-Schalter. Die Status-LED leuchtet zunächst rot und wechselt anschließend zu gelb, um anzuzeigen, dass die IMU im Gerät gerade eine Selbstkalibrierung durchführt.
  • Sobald die Selbstkalibrierung abgeschlossen ist, wird der Stift an den Computer angeschlossen.
  • Sobald der Stylus ordnungsgemäß angeschlossen ist und Daten drahtlos überträgt, blinkt die Statusleuchte grün.
  • Wenn der Akkustand extrem niedrig ist, schaltet sich der VerseGrip Stylus alle zwei Minuten automatisch aus.Bitte laden Sie ihn umgehend auf.

Neukalibrierung​

Durch den Kalibrierungsvorgang wird das Koordinatensystem des VerseGrip zurückgesetzt, und die Ausrichtung, in der das Gerät während der Kalibrierung gehalten wurde, wird zur neuen Referenzachse.

  • Um die Kalibrierung zu wiederholen, halten Sie den Stift an der Position, die Sie neu kalibrieren möchten, und drücken Sie die Kalibrierungstaste 3 Sekunden lang oder so lange, bis sich die Lage innerhalb der Simulation ändert.

Im Folgenden finden Sie eine Demonstration, in der der Betrieb des Geräts im nicht kalibrierten und im kalibrierten Zustand verglichen wird. Für diese Demonstration muss der VerseGrip vor der Kalibrierung in der in der Abbildung gezeigten Position gehalten werden.

Standby und Ausschalten​

  • Durch einmaliges Drücken der Ein-/Aus-Taste kehrt das Gerät in den Standby-Modus zurück. Die Status-LED 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. Sobald Sie die Taste loslassen, erlischt die Statusanzeige und es wird nichts mehr angezeigt. Die Datenübertragung wird ebenfalls beendet.

Aufladen​

  • Schließen Sie den VerseGrip Stylus über den USB-C-Ladeanschluss an.
  • Solange das Gerät an die Stromversorgung angeschlossen ist, leuchtet die Ladeanzeige blau; sobald der Ladevorgang abgeschlossen ist, erlischt sie.
  • Wenn das Gerät bei ausgeschaltetem Stylus an die Stromversorgung angeschlossen wird, schaltet es sich automatisch ein.

Warnung: Wenn Sie einen VerseGrip Stylus besitzen, der zwischen August und Dezember 2024 ausgeliefert wurde, lassen Sie den Akku bitte nicht vollständig entladen. Nach einer vollständigen Entladung kann es vorkommen, dass der Akku die Ladung nicht mehr hält. In diesem Fall funktioniert der VerseGrip Stylus jedoch weiterhin, solange er an die Stromversorgung angeschlossen ist. Um eine Firmware-Aktualisierungsdatei zur Behebung dieses Problems zu erhalten, wenden Sie sich bitte an den Haply-Support.

Status und Leuchtanzeigen​

FarbeLichtsequenzErläuterung
GelbSchnelles Ein- und AusblendenAnfängliche automatische Sensorkalibrierung (Bitte legen Sie den VerseGrip ruhig auf die Unterlage.)
Schnelles BlinkenDie Taste zur Kalibrierung der Körperhaltung wurde gedrückt, und der Kalibrierungsvorgang wurde gestartet.
EinschaltenDie Taste zur Kalibrierung der Körperhaltung wurde gedrückt, und die Kalibrierung ist abgeschlossen.
RotSchnelles Ein- und AusblendenDer Adapter ist getrennt, und es liegen keine Signale vom Host vor.
Schnelles BlinkenDer Netzschalter wurde gedrückt, und der Herunterfahrvorgang wurde gestartet.
GrünEin-/AusblendenDer Adapter ist angeschlossen und der VerseGrip befindet sich im aktiven Datenstrom-Modus.
EinschaltenDer Adapter ist angeschlossen, der VerseGrip befindet sich im aktiven Datenstrom-Modus und die USB-Stromversorgung ist ebenfalls angeschlossen.
WeißEin-/AusblendenDer Adapter ist angeschlossen, und der VerseGrip befindet sich im Leerlauf-/Standby-Modus, sodass kein Datenstrom stattfindet.
EinschaltenDer Adapter ist angeschlossen, der VerseGrip befindet sich im Leerlauf-/Standby-Modus, es findet kein Datenstrom statt und die USB-Stromversorgung ist ebenfalls angeschlossen.
OrangeFlash (Interlaced)Dies ist eine Warnmeldung wegen niedriger Akkuladung. Die Benachrichtigung wird im aktuellen Zustand im Interlace-Modus angezeigt.
Doppelblitz (Interlaced)Dies ist eine Warnmeldung, die darauf hinweist, dass der Akkustand gefährlich niedrig ist. Die Benachrichtigung wird im aktuellen Zustand im Interlace-Modus angezeigt.
TealEin-/AusblendenDies ist der Firmware-Update-Modus des Geräts.
(hell)EinschaltenDie Benutzertaste wurde gedrückt. Die aktuelle Anzeige leuchtet auf und wird heller.
AusLicht ausHerunterfahren, Ausschalten
Farbe der LadeanzeigeLichtsequenzErläuterung
BlauEinschaltenWird aufgeladen
Schnelles BlinkenDer Ladevorgang ist fast abgeschlossen
AusLicht ausAufladen abgeschlossen

Status der alten Version und Leuchtanzeige​

Die folgenden Statusleuchten entsprechen den früheren Zuständen und Farben, die bei älteren Versionen des VerseGrip Stylus (Firmware 1.10 oder früher) zu finden waren.

FarbeLichtsequenzErläuterung
RotEinschaltenWarten auf die Initialisierung der Komponente
BlinkenStandby-Modus. Keine Datenübertragung
BlauEinschaltenAnfängliche automatische Sensorkalibrierung (Bitte legen Sie den VerseGrip ruhig auf die Unterlage.)
GrünBlinkenDer Adapter ist angeschlossen und der VerseGrip befindet sich im aktiven Datenstrom-Modus.
AusLicht ausHerunterfahren, Ausschalten
Farbe der LadeanzeigeLichtsequenzErläuterung
BlauEinschaltenWird aufgeladen
Schnelles BlinkenDer Ladevorgang ist fast abgeschlossen
AusLicht ausAufladen abgeschlossen

Beispielcode​

Im Folgenden finden Sie ein einfaches Beispiel für die Verwendung des VerseGrip Stylus in Verbindung 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);

}
}