Zum Hauptinhalt springen

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

FarbeLichtsequenzBeschreibung
GelbSchnelles Ein-/AusblendenErste automatische Referenzkalibrierung des Sensors (VerseGrip flach auf den Tisch legen)
Schnelles BlinkenDie Taste zur Orientierungskalibrierung wurde gedrückt, der Kalibrierungsvorgang wurde gestartet
MassivDie Taste zur Orientierungskalibrierung wurde gedrückt, die Kalibrierung ist abgeschlossen
RotSchnelles Ein-/AusblendenAdapter nicht angeschlossen, kein Signal vom Host
Schnelles BlinkenDer Netzschalter wurde gedrückt, der Herunterfahrvorgang wurde gestartet
GrünEin-/AusblendenAdapter angeschlossen, VerseGrip im aktiven Datenstrom-Modus
MassivAdapter angeschlossen, VerseGrip im aktiven Datenübertragungsmodus, USB-Stromversorgung angeschlossen
WeißEin-/AusblendenAdapter angeschlossen, VerseGrip im Leerlauf-/Standby-Modus, kein Daten-Streaming
MassivAdapter angeschlossen, VerseGrip im Ruhe-/Standby-Modus, kein Daten-Streaming, USB-Stromversorgung angeschlossen
OrangeFlash (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ünEin-/AusblendenModus zur Aktualisierung der Geräte-Firmware
(Heller)MassivWenn der Benutzer die Tasten drückt, leuchtet die aktuelle Anzeige durchgehend und heller
AusKein LichtHerunterfahren, Ausschalten
Farbe der LadeanzeigeLichtsequenzBeschreibung
BlauMassivAufladen
Schnelles BlinkenDer Ladevorgang ist fast abgeschlossen
AusKein LichtLadevorgang 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).

FarbeLichtsequenzBeschreibung
RotMassivAnstehende Initialisierung von Komponenten
BlinkStandby-Modus. Keine Datenübertragung
BlauMassivErste automatische Referenzkalibrierung des Sensors (VerseGrip flach auf den Tisch legen)
GrünBlinkAdapter angeschlossen, VerseGrip im aktiven Datenstrom-Modus
AusKein LichtHerunterfahren, Ausschalten
Farbe der LadeanzeigeLichtsequenzBeschreibung
BlauMassivAufladen
Schnelles BlinkenDer Ladevorgang ist fast abgeschlossen
AusKein LichtLadevorgang 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);

}
}