diff options
Diffstat (limited to 'tracker-s2bot')
| -rw-r--r-- | tracker-s2bot/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | tracker-s2bot/README.md | 34 | ||||
| -rw-r--r-- | tracker-s2bot/ftnoir_tracker_s2bot.cpp | 115 | ||||
| -rw-r--r-- | tracker-s2bot/ftnoir_tracker_s2bot.h | 73 | ||||
| -rw-r--r-- | tracker-s2bot/ftnoir_tracker_s2bot_dialog.cpp | 30 | ||||
| -rw-r--r-- | tracker-s2bot/lang/de_DE.ts | 90 | ||||
| -rw-r--r-- | tracker-s2bot/lang/nl_NL.ts | 90 | ||||
| -rw-r--r-- | tracker-s2bot/lang/ru_RU.ts | 90 | ||||
| -rw-r--r-- | tracker-s2bot/lang/stub.ts | 90 | ||||
| -rw-r--r-- | tracker-s2bot/lang/zh_CN.ts | 90 | ||||
| -rw-r--r-- | tracker-s2bot/s2bot-controls.ui | 300 | ||||
| -rw-r--r-- | tracker-s2bot/s2bot-res.qrc | 5 | ||||
| -rw-r--r-- | tracker-s2bot/s2bot.png | bin | 0 -> 3943 bytes |
13 files changed, 1008 insertions, 0 deletions
diff --git a/tracker-s2bot/CMakeLists.txt b/tracker-s2bot/CMakeLists.txt new file mode 100644 index 00000000..6d162828 --- /dev/null +++ b/tracker-s2bot/CMakeLists.txt @@ -0,0 +1 @@ +otr_module(tracker-s2bot) diff --git a/tracker-s2bot/README.md b/tracker-s2bot/README.md new file mode 100644 index 00000000..140bf006 --- /dev/null +++ b/tracker-s2bot/README.md @@ -0,0 +1,34 @@ +# S2Bot plugin for opentrack +This is a tracker providing 3D head tracking using the S2Bot helper application. + +S2Bot is originally a plugin that connect embedded devices with the [Scratch programming environment](https://scratch.mit.edu/). This plugin emulates the Scratch interface to get access to the sensor data from the various boards. It was developed and tested using the [micro:bit](https://www.microbit.co.uk) board, but should work with any of the S2Bot supported sensor boards that have accelerometers and/or magnetometers. S2Bot is available for Windows, Mac and Linux. + +More information on S2Bot can be found [here](http://www.picaxe.com/Teaching/Other-Software/Scratch-Helper-Apps/) + +# Installation and usage + +1. Download & install S2Bot +2. Connect BL112 USB dongle +3. Connect micro:bit to computer via USB +4. Start S2Bot +5. Flash micro:bit with s2bot hex firmware from the S2Bot app +6. Select micro:bit from device selection dropdown +7. Press scan and select device (the device connection LED should go green after a few seconds, and accelerometer data should appear in the S2Bot status window) +8. Start opentrack +9. Select S2Bot plugin as input +10. Press start to start tracking (the Scratch connection LED will go green as S2Bot treats opentract as a Scratch environment) + +# ISC License +Copyright (c) 2017, Attila Csipa + + Author: Attila Csipa <git@csipa.net> + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +# Attribution + +S2Bot and PICAXE® products are developed and distributed by Revolution Education Ltd +BBC micro:bit is created by the British Broadcasting Corporation or BBC partners. +Scratch is created by the MIT Media Lab diff --git a/tracker-s2bot/ftnoir_tracker_s2bot.cpp b/tracker-s2bot/ftnoir_tracker_s2bot.cpp new file mode 100644 index 00000000..98a299ca --- /dev/null +++ b/tracker-s2bot/ftnoir_tracker_s2bot.cpp @@ -0,0 +1,115 @@ +#include "ftnoir_tracker_s2bot.h" +#include "api/plugin-api.hpp" +#include "compat/math.hpp" + +#include <cinttypes> +#include <algorithm> +#include <cmath> +#include <QNetworkRequest> +#include <QNetworkReply> + +tracker_s2bot::tracker_s2bot() : pose { 0,0,0, 0,0,0 }, m_nam (std::make_unique<QNetworkAccessManager>()) +{ +} + +tracker_s2bot::~tracker_s2bot() +{ + QThread::exit(0); // stop event loop + wait(); +} + +static constexpr int add_cbx[] = +{ + 0, + 90, + -90, + 180, + -180, +}; + +#ifdef __GNUG__ +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + +void tracker_s2bot::run() { + int freq = s.freq; + if (freq <= 0) + freq = 10; + timer.setInterval((int)(1000./freq)); + timer.setSingleShot(false); + connect(&timer, &QTimer::timeout, [this] { + QNetworkRequest req{QUrl("http://localhost:17317/poll")}; + req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); + auto* reply = m_nam->get(req); + + connect(reply, &QNetworkReply::finished, [this, reply] { + if (reply->error() == QNetworkReply::NoError) { + //qDebug() << "Request submitted OK"; + } + else { + qWarning() << "Request bounced:" << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) << reply->errorString(); + return; + } + + const QStringList slist = QString::fromLatin1(reply->readAll()).split(QRegExp("[\r\n]+"), QString::SkipEmptyParts); + reply->close(); + reply->deleteLater(); + + int order[] = + { + std::clamp(*s.idx_x, 0, 3), + std::clamp(*s.idx_y, 0, 3), + std::clamp(*s.idx_z, 0, 3), + }; + + int add_indices[] = { s.add_yaw, s.add_pitch, s.add_roll, }; + double orient[4] {}; + + for (auto const& line : slist) + { + QStringList keyval = line.split(' '); + if (keyval.count() < 2) continue; + if (keyval[0].startsWith("accelerometerZ")) orient[0] = keyval[1].toDouble(); + else if (keyval[0].startsWith("accelerometerY")) orient[1] = keyval[1].toDouble(); + else if (keyval[0].startsWith("accelerometerX")) orient[2] = keyval[1].toDouble(); + else if (keyval[0].startsWith("bearing")) orient[3] = keyval[1].toDouble(); + } + + QMutexLocker foo(&mtx); + + for (int i = 0; i < 3; i++) + { + const int axis = order[i]; + const int add_idx = add_indices[i]; + int add = 0; + if (add_idx >= 0 && add_idx < (int)std::size(add_cbx)) + add = add_cbx[add_idx]; + pose[Yaw + i] = orient[axis] + add; // * r2d if it was radians + } + }); + }); + + timer.start(); + exec(); + timer.stop(); +} + +module_status tracker_s2bot::start_tracker(QFrame*) +{ + start(); + timer.moveToThread(this); + m_nam->moveToThread(this); + + return status_ok(); +} + +void tracker_s2bot::data(double *data) +{ + QMutexLocker foo(&mtx); + + data[Yaw] = pose[Yaw]; + data[Pitch] = pose[Pitch]; + data[Roll] = pose[Roll]; +} + +OPENTRACK_DECLARE_TRACKER(tracker_s2bot, dialog_s2bot, meta_s2bot) diff --git a/tracker-s2bot/ftnoir_tracker_s2bot.h b/tracker-s2bot/ftnoir_tracker_s2bot.h new file mode 100644 index 00000000..b05a226c --- /dev/null +++ b/tracker-s2bot/ftnoir_tracker_s2bot.h @@ -0,0 +1,73 @@ +/* Copyright (c) 2014 Stanislaw Halik <sthalik@misaki.pl> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + */ +#pragma once +#include <cinttypes> +#include <QUdpSocket> +#include <QThread> +#include <QNetworkAccessManager> +#include <QTimer> +#include "ui_s2bot-controls.h" +#include "api/plugin-api.hpp" +#include "options/options.hpp" +using namespace options; + +struct settings : opts { + value<int> freq, idx_x, idx_y, idx_z; + value<int> add_yaw, add_pitch, add_roll; + settings() : + opts("s2bot-tracker"), + freq(b, "freq", 30), + idx_x(b, "axis-index-x", 0), + idx_y(b, "axis-index-y", 1), + idx_z(b, "axis-index-z", 2), + add_yaw(b, "add-yaw-degrees", 0), + add_pitch(b, "add-pitch-degrees", 0), + add_roll(b, "add-roll-degrees", 0) + {} +}; + +class tracker_s2bot : public ITracker, private virtual QThread +{ +public: + tracker_s2bot(); + ~tracker_s2bot() override; + module_status start_tracker(QFrame *) override; + void data(double *data) override; +protected: + void run() override; +private: + double pose[6]; + QTimer timer; + settings s; + QMutex mtx; + std::unique_ptr<QNetworkAccessManager> m_nam; + +}; + +class dialog_s2bot : public ITrackerDialog +{ + Q_OBJECT +public: + dialog_s2bot(); + void register_tracker(ITracker *) override {} + void unregister_tracker() override {} +private: + Ui::UI_s2bot_dialog ui; + settings s; +private slots: + void doOK(); + void doCancel(); +}; + +class meta_s2bot : public Metadata +{ + Q_OBJECT + + QString name() { return tr("S2Bot receiver"); } + QIcon icon() { return QIcon(":/s2bot.png"); } +}; + diff --git a/tracker-s2bot/ftnoir_tracker_s2bot_dialog.cpp b/tracker-s2bot/ftnoir_tracker_s2bot_dialog.cpp new file mode 100644 index 00000000..2255156b --- /dev/null +++ b/tracker-s2bot/ftnoir_tracker_s2bot_dialog.cpp @@ -0,0 +1,30 @@ +#include "ftnoir_tracker_s2bot.h" +#include "api/plugin-api.hpp" + +dialog_s2bot::dialog_s2bot() +{ + ui.setupUi(this); + + connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(doOK())); + connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(doCancel())); + + tie_setting(s.freq, ui.freq); + tie_setting(s.idx_x, ui.input_x); + tie_setting(s.idx_y, ui.input_y); + tie_setting(s.idx_z, ui.input_z); + + tie_setting(s.add_yaw, ui.add_yaw); + tie_setting(s.add_pitch, ui.add_pitch); + tie_setting(s.add_roll, ui.add_roll); +} + +void dialog_s2bot::doOK() { + s.b->save(); + close(); +} + +void dialog_s2bot::doCancel() +{ + close(); +} + diff --git a/tracker-s2bot/lang/de_DE.ts b/tracker-s2bot/lang/de_DE.ts new file mode 100644 index 00000000..4071d117 --- /dev/null +++ b/tracker-s2bot/lang/de_DE.ts @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="de_DE"> +<context> + <name>UI_s2bot_dialog</name> + <message> + <source>Tracker settings</source> + <translation>Tracker-Einstellungen</translation> + </message> + <message> + <source>Update frequency (Hz)</source> + <translation>Aktualisierungsfrequenz (Hz)</translation> + </message> + <message> + <source>Axis order</source> + <translation>Achsen-Reihenfolge</translation> + </message> + <message> + <source>output yaw</source> + <translation>Gieren-Ausgabe</translation> + </message> + <message> + <source>input yaw</source> + <translation>Gieren-Eingabe</translation> + </message> + <message> + <source>input pitch</source> + <translation>Nicken-Eingabe</translation> + </message> + <message> + <source>input roll</source> + <translation>Rollen-Eingabe</translation> + </message> + <message> + <source>input bearing</source> + <translation>Peilung-Eingabe</translation> + </message> + <message> + <source>output pitch</source> + <translation>Nicken-Ausgabe</translation> + </message> + <message> + <source>output roll</source> + <translation>Rollen-Ausgabe</translation> + </message> + <message> + <source>Add to axis</source> + <translation>Zur Achse hinzufügen</translation> + </message> + <message> + <source>yaw</source> + <translation>Gieren</translation> + </message> + <message> + <source>0</source> + <translation>0</translation> + </message> + <message> + <source>+90</source> + <translation>+90</translation> + </message> + <message> + <source>-90</source> + <translation>-90</translation> + </message> + <message> + <source>+180</source> + <translation>+180</translation> + </message> + <message> + <source>-180</source> + <translation>-180</translation> + </message> + <message> + <source>pitch</source> + <translation>Nicken</translation> + </message> + <message> + <source>roll</source> + <translation>Rollen</translation> + </message> +</context> +<context> + <name>meta_s2bot</name> + <message> + <source>S2Bot receiver</source> + <translation>S2Bot-Empfänger</translation> + </message> +</context> +</TS> diff --git a/tracker-s2bot/lang/nl_NL.ts b/tracker-s2bot/lang/nl_NL.ts new file mode 100644 index 00000000..8ea33f46 --- /dev/null +++ b/tracker-s2bot/lang/nl_NL.ts @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="nl_NL"> +<context> + <name>UI_s2bot_dialog</name> + <message> + <source>Tracker settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Update frequency (Hz)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Axis order</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>output yaw</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>input yaw</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>input pitch</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>input roll</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>input bearing</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>output pitch</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>output roll</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Add to axis</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>yaw</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>0</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>+90</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>-90</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>+180</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>-180</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>pitch</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>roll</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>meta_s2bot</name> + <message> + <source>S2Bot receiver</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/tracker-s2bot/lang/ru_RU.ts b/tracker-s2bot/lang/ru_RU.ts new file mode 100644 index 00000000..2d5c479b --- /dev/null +++ b/tracker-s2bot/lang/ru_RU.ts @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="ru_RU"> +<context> + <name>UI_s2bot_dialog</name> + <message> + <source>Tracker settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Update frequency (Hz)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Axis order</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>output yaw</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>input yaw</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>input pitch</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>input roll</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>input bearing</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>output pitch</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>output roll</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Add to axis</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>yaw</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>0</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>+90</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>-90</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>+180</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>-180</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>pitch</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>roll</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>meta_s2bot</name> + <message> + <source>S2Bot receiver</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/tracker-s2bot/lang/stub.ts b/tracker-s2bot/lang/stub.ts new file mode 100644 index 00000000..babca884 --- /dev/null +++ b/tracker-s2bot/lang/stub.ts @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1"> +<context> + <name>UI_s2bot_dialog</name> + <message> + <source>Tracker settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Update frequency (Hz)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Axis order</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>output yaw</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>input yaw</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>input pitch</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>input roll</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>input bearing</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>output pitch</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>output roll</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Add to axis</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>yaw</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>0</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>+90</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>-90</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>+180</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>-180</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>pitch</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>roll</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>meta_s2bot</name> + <message> + <source>S2Bot receiver</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/tracker-s2bot/lang/zh_CN.ts b/tracker-s2bot/lang/zh_CN.ts new file mode 100644 index 00000000..f9cc2a4b --- /dev/null +++ b/tracker-s2bot/lang/zh_CN.ts @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="zh_CN"> +<context> + <name>UI_s2bot_dialog</name> + <message> + <source>Tracker settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Update frequency (Hz)</source> + <translation>刷新率(Hz)</translation> + </message> + <message> + <source>Axis order</source> + <translation>输出重映射</translation> + </message> + <message> + <source>output yaw</source> + <translation>输出的航向</translation> + </message> + <message> + <source>input yaw</source> + <translation type="unfinished">输入航向</translation> + </message> + <message> + <source>input pitch</source> + <translation type="unfinished">输入俯仰</translation> + </message> + <message> + <source>input roll</source> + <translation type="unfinished">输入滚转</translation> + </message> + <message> + <source>input bearing</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>output pitch</source> + <translation>输出的俯仰</translation> + </message> + <message> + <source>output roll</source> + <translation>输出的滚转</translation> + </message> + <message> + <source>Add to axis</source> + <translation>添加到轴</translation> + </message> + <message> + <source>yaw</source> + <translation>航向</translation> + </message> + <message> + <source>0</source> + <translation></translation> + </message> + <message> + <source>+90</source> + <translation></translation> + </message> + <message> + <source>-90</source> + <translation></translation> + </message> + <message> + <source>+180</source> + <translation></translation> + </message> + <message> + <source>-180</source> + <translation></translation> + </message> + <message> + <source>pitch</source> + <translation>俯仰</translation> + </message> + <message> + <source>roll</source> + <translation>滚转</translation> + </message> +</context> +<context> + <name>meta_s2bot</name> + <message> + <source>S2Bot receiver</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/tracker-s2bot/s2bot-controls.ui b/tracker-s2bot/s2bot-controls.ui new file mode 100644 index 00000000..3d69321f --- /dev/null +++ b/tracker-s2bot/s2bot-controls.ui @@ -0,0 +1,300 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>UI_s2bot_dialog</class> + <widget class="QWidget" name="UI_s2bot_dialog"> + <property name="windowModality"> + <enum>Qt::NonModal</enum> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>227</width> + <height>372</height> + </rect> + </property> + <property name="windowTitle"> + <string>Tracker settings</string> + </property> + <property name="windowIcon"> + <iconset> + <normaloff>../gui/images/opentrack.png</normaloff>../gui/images/opentrack.png</iconset> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QFrame" name="frame"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="label_5"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Update frequency (Hz)</string> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="freq"> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>120</number> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupBox"> + <property name="title"> + <string>Axis order</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0" rowspan="2"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>output yaw</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="input_x"> + <item> + <property name="text"> + <string>input yaw</string> + </property> + </item> + <item> + <property name="text"> + <string>input pitch</string> + </property> + </item> + <item> + <property name="text"> + <string>input roll</string> + </property> + </item> + <item> + <property name="text"> + <string>input bearing</string> + </property> + </item> + </widget> + </item> + <item row="1" column="1" rowspan="2"> + <widget class="QComboBox" name="input_y"> + <item> + <property name="text"> + <string>input yaw</string> + </property> + </item> + <item> + <property name="text"> + <string>input pitch</string> + </property> + </item> + <item> + <property name="text"> + <string>input roll</string> + </property> + </item> + <item> + <property name="text"> + <string>input bearing</string> + </property> + </item> + </widget> + </item> + <item row="2" column="0" rowspan="2"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>output pitch</string> + </property> + </widget> + </item> + <item row="3" column="1" rowspan="2"> + <widget class="QComboBox" name="input_z"> + <item> + <property name="text"> + <string>input yaw</string> + </property> + </item> + <item> + <property name="text"> + <string>input pitch</string> + </property> + </item> + <item> + <property name="text"> + <string>input roll</string> + </property> + </item> + <item> + <property name="text"> + <string>input bearing</string> + </property> + </item> + </widget> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>output roll</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupBox_2"> + <property name="title"> + <string>Add to axis</string> + </property> + <layout class="QGridLayout" name="gridLayout_2"> + <item row="0" column="0"> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>yaw</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="add_yaw"> + <item> + <property name="text"> + <string>0</string> + </property> + </item> + <item> + <property name="text"> + <string>+90</string> + </property> + </item> + <item> + <property name="text"> + <string>-90</string> + </property> + </item> + <item> + <property name="text"> + <string>+180</string> + </property> + </item> + <item> + <property name="text"> + <string>-180</string> + </property> + </item> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_6"> + <property name="text"> + <string>pitch</string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_9"> + <property name="text"> + <string>roll</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QComboBox" name="add_pitch"> + <item> + <property name="text"> + <string>0</string> + </property> + </item> + <item> + <property name="text"> + <string>+90</string> + </property> + </item> + <item> + <property name="text"> + <string>-90</string> + </property> + </item> + <item> + <property name="text"> + <string>+180</string> + </property> + </item> + <item> + <property name="text"> + <string>-180</string> + </property> + </item> + </widget> + </item> + <item row="2" column="1"> + <widget class="QComboBox" name="add_roll"> + <item> + <property name="text"> + <string>0</string> + </property> + </item> + <item> + <property name="text"> + <string>+90</string> + </property> + </item> + <item> + <property name="text"> + <string>-90</string> + </property> + </item> + <item> + <property name="text"> + <string>+180</string> + </property> + </item> + <item> + <property name="text"> + <string>-180</string> + </property> + </item> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> + <slots> + <slot>startEngineClicked()</slot> + <slot>stopEngineClicked()</slot> + <slot>cameraSettingsClicked()</slot> + </slots> +</ui> diff --git a/tracker-s2bot/s2bot-res.qrc b/tracker-s2bot/s2bot-res.qrc new file mode 100644 index 00000000..40fc3aa9 --- /dev/null +++ b/tracker-s2bot/s2bot-res.qrc @@ -0,0 +1,5 @@ +<RCC> + <qresource prefix="/"> + <file>s2bot.png</file> + </qresource> +</RCC> diff --git a/tracker-s2bot/s2bot.png b/tracker-s2bot/s2bot.png Binary files differnew file mode 100644 index 00000000..1501bf13 --- /dev/null +++ b/tracker-s2bot/s2bot.png |
