Zum Hauptinhalt springen

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​

FarbeBeleuchtungsmodiErläuterung
GelbSchnelles Aufhellen/AbdunkelnAnfängliche automatische Kalibrierung des Sensors (VerseGrip auf dem Tisch abstellen)
Schnelles BlinkenDie Taste zur Lagekalibrierung wurde gedrückt, der Kalibrierungsvorgang wurde gestartet.
Ständig leuchtendDie Taste zur Lagekalibrierung wurde gedrückt, die Kalibrierung ist abgeschlossen.
RotSchnelles Aufhellen/AbdunkelnDer Adapter ist getrennt, der Host sendet kein Signal.
Schnelles BlinkenDer Netzschalter wurde gedrückt, der Ausschaltvorgang hat begonnen.
GrünAufhellen/AbdunkelnDer Adapter ist angeschlossen, VerseGrip befindet sich im aktiven Datenstrom-Modus.
Ständig leuchtendDer Adapter ist angeschlossen, der VerseGrip befindet sich im aktiven Datenstrom-Modus, die USB-Stromversorgung ist angeschlossen.
WeißAufhellen/AbdunkelnDer Adapter ist angeschlossen, der VerseGrip befindet sich im Leerlauf-/Standby-Modus, es findet keine Datenübertragung statt.
Ständig leuchtendDer Adapter ist angeschlossen, der VerseGrip befindet sich im Leerlauf-/Standby-Modus, es findet keine Datenübertragung statt, die USB-Stromversorgung ist angeschlossen.
orangeBlinken (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
BlauAufhellen/AbdunkelnModi für die Firmware-Aktualisierung von Geräten
(heller)Ständig leuchtendEine Taste wird gedrückt, die aktuelle Anzeigefarbe leuchtet dauerhaft und ist heller.
SchließenOhne LichtHerunterfahren, Strom abschalten
Farbe der LadeanzeigeBeleuchtungsmodiErläuterung
BlauStändig leuchtendWird aufgeladen
Schnelles BlinkenWird bald voll sein
SchließenOhne LichtAufladen 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.

FarbeBeleuchtungsmodiErläuterung
RotStändig leuchtendWarten auf die Initialisierung der Komponente
BlinkenStandby-Modus, keine Datenübertragung
BlauStändig leuchtendAnfängliche automatische Kalibrierung des Sensors (VerseGrip auf dem Tisch abstellen)
GrünBlinkenDer Adapter ist angeschlossen, VerseGrip befindet sich im aktiven Datenstrom-Modus.
SchließenOhne LichtHerunterfahren, Strom abschalten
Farbe der LadeanzeigeBeleuchtungsmodiErläuterung
BlauStändig leuchtendWird aufgeladen
Schnelles BlinkenWird bald voll sein
SchließenOhne LichtAufladen 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);

}
}