Zum Hauptinhalt springen

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​

FarbeLichtsequenzBeschreibung
GelbSchnelles Ein-/AusblendenAutomatische Erstkalibrierung der Sensorreferenz (VerseGrip bewegungslos auf dem Tisch ablegen)
Schnelles BlinkenAusrichtungs-Kalibrierungstaste gedrückt, Kalibrierungsvorgang gestartet
DauerhaftAusrichtungs-Kalibrierungstaste gedrückt, Kalibrierung abgeschlossen
RotSchnelles Ein-/AusblendenAdapter getrennt, kein Signal vom Host
Schnelles BlinkenEin-/Aus-Taste gedrückt, Abschaltvorgang gestartet
GrünEin-/AusblendenAdapter verbunden, VerseGrip im aktiven Datenstrommodus
DauerhaftAdapter verbunden, VerseGrip im aktiven Datenstrommodus, USB-Stromversorgung verbunden
WeißEin-/AusblendenAdapter verbunden, VerseGrip im Leerlauf-/Standby-Modus ohne Datenübertragung
DauerhaftAdapter verbunden, VerseGrip im Leerlauf-/Standby-Modus ohne Datenübertragung, USB-Stromversorgung verbunden
OrangeBlitz (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ürkisEin-/AusblendenFirmware-Update-Modus des Geräts
(Heller)DauerhaftBenutzertasten gedrückt, aktuelle Anzeigefarbe ist dauerhaft und heller
AusKeine LeuchteHerunterfahren, Ausschalten
Ladeanzeige-FarbeLichtsequenzBeschreibung
BlauDauerhaftLaden
Schnelles BlinkenLadevorgang fast abgeschlossen
AusKeine LeuchteLadevorgang 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.

FarbeLichtsequenzBeschreibung
RotDauerhaftInitialisierung der Komponenten ausstehend
BlinkenStandby-Modus. Keine Datenübertragung
BlauDauerhaftAutomatische Erstkalibrierung der Sensorreferenz (VerseGrip bewegungslos auf dem Tisch ablegen)
GrünBlinkenAdapter verbunden, VerseGrip im aktiven Datenstrommodus
AusKeine LeuchteHerunterfahren, Ausschalten
Ladeanzeige-FarbeLichtsequenzBeschreibung
BlauDauerhaftLaden
Schnelles BlinkenLadevorgang fast abgeschlossen
AusKeine LeuchteLadevorgang 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);

}
}