From 0e2ccaf2f2507a9447846f7307f20a0bf0e18f61 Mon Sep 17 00:00:00 2001 From: Samyar Sadat Akhavi Date: Thu, 19 Sep 2024 03:58:00 +0300 Subject: [PATCH] GUI development continues... --- .gitmodules | 3 + Source Code/ros_robot_project | 2 +- .../.devcontainer/devcontainer.json | 3 +- .../src/ros_remote_gui/package.xml | 2 +- .../ros_remote_gui/ros_remote_gui/config.py | 50 +- .../ros_remote_gui/gui_files/about_dialog.ui | 166 +- .../gui_files/calibration_result_dialog.ui | 326 +- .../gui_files/joystick_dialog.ui | 808 +- .../ros_remote_gui/gui_files/main_window.ui | 8683 +++++++++-------- .../gui_files/selftest_result_dialog.ui | 352 +- .../gui_files/test_remote_buttons_dialog.ui | 1496 +-- .../gui_files/ui_about_dialog.py | 160 +- .../gui_files/ui_calibration_result_dialog.py | 190 +- .../gui_files/ui_joystick_dialog.py | 430 +- .../gui_files/ui_main_window.py | 4471 ++++----- .../gui_files/ui_selftest_result_dialog.py | 206 +- .../ui_test_remote_buttons_dialog.py | 720 +- .../src/ros_remote_gui/ros_remote_gui/main.py | 48 +- .../ros_remote_gui/main_window.py | 10 + .../ros_remote_gui/modules/diag_tab.py | 52 +- .../ros_remote_gui/modules/main_tab.py | 38 +- .../ros_remote_gui/modules/power_tab.py | 2 +- .../ros_remote_gui/ros_remote_gui/ros_main.py | 255 +- .../ros_remote_gui/utils/gui_utils.py | 21 + .../util_scripts/qt_index_rearranger.py | 2 +- 25 files changed, 9465 insertions(+), 9031 deletions(-) create mode 100644 Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/utils/gui_utils.py diff --git a/.gitmodules b/.gitmodules index 480da3f..bebdc6d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -12,7 +12,10 @@ url = https://github.com/micro-ROS/micro_ros_setup branch = humble ignore = all + +# THIS IS TEMPORARY! IT WILL BE REMOVED! [submodule "The ROS Robot Project"] path = Source Code/ros_robot_project url = https://github.com/samyarsadat/ROS-Robot branch = stage-1 + ignore = all diff --git a/Source Code/ros_robot_project b/Source Code/ros_robot_project index 67b0e26..9d0e0eb 160000 --- a/Source Code/ros_robot_project +++ b/Source Code/ros_robot_project @@ -1 +1 @@ -Subproject commit 67b0e265c5889c8b36951a9d8b3e0b4449eac820 +Subproject commit 9d0e0eb96b4408e106da5a4fbf347988658cb9ef diff --git a/Source Code/ros_ws_remote/.devcontainer/devcontainer.json b/Source Code/ros_ws_remote/.devcontainer/devcontainer.json index 1cac1ab..26d0d77 100644 --- a/Source Code/ros_ws_remote/.devcontainer/devcontainer.json +++ b/Source Code/ros_ws_remote/.devcontainer/devcontainer.json @@ -49,7 +49,8 @@ }, "workspaceFolder": "/home/nonroot/ros_ws", - //"mounts": [{"source": "${localWorkspaceFolder}", "target": "/home/nonroot/ros_ws", "type": "bind"}], + "mounts": [{"source": "${localWorkspaceFolder}/../ros_robot_project/Source Code/ros_ws_robot/src/ros_robot_msgs", + "target": "/home/nonroot/ros_ws/src/ros_robot_msgs", "type": "bind"}], "runArgs": ["--net=host", "--cap-add=SYS_PTRACE", diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/package.xml b/Source Code/ros_ws_remote/src/ros_remote_gui/package.xml index 4e55841..88d7ff1 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/package.xml +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/package.xml @@ -9,7 +9,7 @@ GPL-3.0-only rclpy - python3-pyside6-pip + python3-pyside6 ament_copyright ament_flake8 diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/config.py b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/config.py index 2928921..880835b 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/config.py +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/config.py @@ -17,6 +17,7 @@ # along with this program. If not, see . PROGRAM_VERSION = "2024.8.8" +from rclpy.qos import QoSProfile, ReliabilityPolicy, HistoryPolicy, LivelinessPolicy # ---- Program Info ---- @@ -25,6 +26,12 @@ class ProgramInfoConfig: VERSION_DATE = "2024/08/08 @ 12:15PM UTC" +class ProgramConfig: + THREADS_LIVELINESS_CHECK_INTERVAL_S = 2 + UI_DATA_UPDATE_INTERVAL_MS = 100 + UI_VIEWPORT_UPDATE_INTERVAL_MS = 50 + + # ---- ROS Config ---- class RosConfig: NODE_NAME = "remote_gui_node" @@ -32,8 +39,47 @@ class RosConfig: EXECUTOR_DOMAIN_ID = None EXECUTOR_TIMEOUT = 0.05 # 50ms EXECUTOR_SHUTDOWN_TIMEOUT = 5 # 5s + QOS_BEST_EFFORT = QoSProfile(reliability=ReliabilityPolicy.BEST_EFFORT, history=HistoryPolicy.KEEP_LAST, depth=1, liveliness=LivelinessPolicy.AUTOMATIC) + QOS_RELIABLE = QoSProfile(reliability=ReliabilityPolicy.RELIABLE, history=HistoryPolicy.KEEP_LAST, depth=1, liveliness=LivelinessPolicy.AUTOMATIC) + THREAD_NAME = "robot_ros_thread" class RosNames: - # Main tab - SET_CAMERA_LED_SRV_NAME = "" + ROBOT_NAMESPACE = "ros_robot" + + DIAGNOSTICS_TOPIC = f"{ROBOT_NAMESPACE}/diagnostics" + ENABLE_RELAY_SRV = f"{ROBOT_NAMESPACE}/enable/set_relay" + BATTERY_INFO_TOPIC = f"{ROBOT_NAMESPACE}/electrical/battery_state" + ENCODER_ODOM_TOPIC = f"{ROBOT_NAMESPACE}/pos_data/encoder_odom" + SET_CAMERA_LEDS_SRV = f"{ROBOT_NAMESPACE}/lights/camera/set" + GET_CAMERA_LEDS_SRV = f"{ROBOT_NAMESPACE}/lights/camera/get" + IMU_SENS_TOPIC = f"{ROBOT_NAMESPACE}/pos_data/imu" + ENV_TEMP_SENS_TOPIC = f"{ROBOT_NAMESPACE}/env_sensors/temp" + ENV_HUMIDITY_SENS_TOPIC = f"{ROBOT_NAMESPACE}/env_sensors/humidity" + EMERGENCY_STOP_TOPIC = f"{ROBOT_NAMESPACE}/emergency_stop" + PICO_A_CPU_TEMP_TOPIC = f"{ROBOT_NAMESPACE}/sys_temps/processor/pico_a" + PICO_B_CPU_TEMP_TOPIC = f"{ROBOT_NAMESPACE}/sys_temps/processor/pico_b" + PICO_A_SELFTEST_SRV = f"{ROBOT_NAMESPACE}/self_test/run_pico_a_routines" + PICO_B_SELFTEST_SRV = f"{ROBOT_NAMESPACE}/self_test/run_pico_b_routines" + PICO_A_CALIBRATE_SRV = f"{ROBOT_NAMESPACE}/calibrate/run_pico_a_routines" + ENABLE_EMITTERS_SRV = f"{ROBOT_NAMESPACE}/enable/set_emitters" + GET_EMITTERS_ENABLED_SRV = f"{ROBOT_NAMESPACE}/enable/get_emitters" + LEFT_MTR_CTRL_TOPIC = f"{ROBOT_NAMESPACE}/motors/controllers/left_state" + RIGHT_MTR_CTRL_TOPIC = f"{ROBOT_NAMESPACE}/motors/controllers/right_state" + MTR_CTRL_ENABLE_SRV = f"{ROBOT_NAMESPACE}/motors/controllers/enable" + MTR_CTRL_SET_PID_SRV = f"{ROBOT_NAMESPACE}/motors/controllers/set_pid" + + MICRO_SWITCH_TOPIC_BASE = ROBOT_NAMESPACE + "/range_sens/micro_switch/{}" + MICRO_SWITCH_TOPIC_NAMES = ["front_right", "front_left", "back_right", "back_left"] + + ULTRASONIC_SENS_TOPIC_BASE = ROBOT_NAMESPACE + "/range_sens/ultrasonic/{}" + ULTRASONIC_SENS_TOPIC_NAMES = ["front", "back", "right", "left"] + + CLIFF_SENS_TOPIC_BASE = ROBOT_NAMESPACE + "/range_base/cliff/{}" + CLIFF_SENS_TOPIC_NAMES = ["front_1", "front_2", "front_3", "front_4", "back_1", "back_2", "back_3", "back_4"] + + +class RosFrameIds: + CLIFF_SENS_BASE_FRAME_ID = "cliff_sens_{}" + ULTRASONIC_SENS_BASE_FRAME_ID = "ultrasonic_sens_{}" + MICRO_SW_SENS_BASE_FRAME_ID = "micro_switch_{}" diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/about_dialog.ui b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/about_dialog.ui index 33fafe8..d8f6057 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/about_dialog.ui +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/about_dialog.ui @@ -1,83 +1,83 @@ - - - Dialog - - - - 0 - 0 - 493 - 350 - - - - About - - - - - - QFrame::Shape::StyledPanel - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Segoe UI'; font-size:9pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:14pt; font-weight:700; font-style:italic;">The ROS Remote Project</span></p> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:11pt; font-style:italic;">Created by Samyar Sadat Akhavi, 2024</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu Sans'; font-size:11pt; font-style:italic;"><br /></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu Sans'; font-size:11pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:10pt;">User interface created using QT and PySide6.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:10pt; font-weight:700;">PySide6 Version: </span><span style=" font-family:'Ubuntu Sans'; font-size:10pt;">{pyside_version}</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:10pt; font-weight:700;">QT Version: </span><span style=" font-family:'Ubuntu Sans'; font-size:10pt;">{qt_version}</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:10pt; font-weight:700;">Interface Version: </span><span style=" font-family:'Ubuntu Sans'; font-size:10pt;">{version}</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:10pt; font-weight:700;">Creation Date: </span><span style=" font-family:'Ubuntu Sans'; font-size:10pt;">{date}</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu Sans'; font-size:10pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:samyarsadat@gigawhat.net"><span style=" font-family:'Ubuntu Sans'; font-size:10pt; text-decoration: underline; color:#007af4;">samyarsadat@gigawhat.net</span></a></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/samyarsadat/ROS-Remote"><span style=" font-family:'Ubuntu Sans'; font-size:10pt; text-decoration: underline; color:#007af4;">github.com/samyarsadat/ROS-Remote</span></a></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu Sans'; font-size:11pt; text-decoration: underline; color:#007af4;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:10pt; font-style:italic;">Copyright (c) 2024, Samyar Sadat Akhavi.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:10pt; font-style:italic;">Licensed under the General Public License V3.</span></p></body></html> - - - true - - - - - - - Qt::Orientation::Horizontal - - - QDialogButtonBox::StandardButton::Ok - - - - - - - - - buttonBox - accepted() - Dialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - + + + Dialog + + + + 0 + 0 + 493 + 350 + + + + About + + + + + + QFrame::Shape::StyledPanel + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Segoe UI'; font-size:9pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:14pt; font-weight:700; font-style:italic;">The ROS Remote Project</span></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:11pt; font-style:italic;">Created by Samyar Sadat Akhavi, 2024</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu Sans'; font-size:11pt; font-style:italic;"><br /></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu Sans'; font-size:11pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:10pt;">User interface created using QT and PySide6.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:10pt; font-weight:700;">PySide6 Version: </span><span style=" font-family:'Ubuntu Sans'; font-size:10pt;">{pyside_version}</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:10pt; font-weight:700;">QT Version: </span><span style=" font-family:'Ubuntu Sans'; font-size:10pt;">{qt_version}</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:10pt; font-weight:700;">Interface Version: </span><span style=" font-family:'Ubuntu Sans'; font-size:10pt;">{version}</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:10pt; font-weight:700;">Creation Date: </span><span style=" font-family:'Ubuntu Sans'; font-size:10pt;">{date}</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu Sans'; font-size:10pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:samyarsadat@gigawhat.net"><span style=" font-family:'Ubuntu Sans'; font-size:10pt; text-decoration: underline; color:#007af4;">samyarsadat@gigawhat.net</span></a></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/samyarsadat/ROS-Remote"><span style=" font-family:'Ubuntu Sans'; font-size:10pt; text-decoration: underline; color:#007af4;">github.com/samyarsadat/ROS-Remote</span></a></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu Sans'; font-size:11pt; text-decoration: underline; color:#007af4;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:10pt; font-style:italic;">Copyright (c) 2024, Samyar Sadat Akhavi.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu Sans'; font-size:10pt; font-style:italic;">Licensed under the General Public License V3.</span></p></body></html> + + + true + + + + + + + Qt::Orientation::Horizontal + + + QDialogButtonBox::StandardButton::Ok + + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/calibration_result_dialog.ui b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/calibration_result_dialog.ui index 856dba0..27351d5 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/calibration_result_dialog.ui +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/calibration_result_dialog.ui @@ -1,163 +1,163 @@ - - - Dialog - - - - 0 - 0 - 600 - 360 - - - - Calibration Result - - - - 20 - - - 20 - - - 20 - - - 15 - - - - - 0 - - - - - **Result:** - - - Qt::TextFormat::MarkdownText - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 5 - 20 - - - - - - - - - 0 - 0 - - - - QFrame::Shape::Box - - - STATUS - - - Qt::AlignmentFlag::AlignCenter - - - 3 - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - Qt::Orientation::Horizontal - - - QDialogButtonBox::StandardButton::Ok - - - - - - - - - buttonBox - accepted() - Dialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - + + + Dialog + + + + 0 + 0 + 600 + 360 + + + + Calibration Result + + + + 20 + + + 20 + + + 20 + + + 15 + + + + + 0 + + + + + **Result:** + + + Qt::TextFormat::MarkdownText + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 5 + 20 + + + + + + + + + 0 + 0 + + + + QFrame::Shape::Box + + + STATUS + + + Qt::AlignmentFlag::AlignCenter + + + 3 + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + Qt::Orientation::Horizontal + + + QDialogButtonBox::StandardButton::Ok + + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/joystick_dialog.ui b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/joystick_dialog.ui index 88da23f..d872fe8 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/joystick_dialog.ui +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/joystick_dialog.ui @@ -1,404 +1,404 @@ - - - Dialog - - - - 0 - 0 - 635 - 357 - - - - Joystick Configuration - - - - - - 15 - - - 20 - - - 15 - - - 5 - - - - - 10 - - - 0 - - - 0 - - - - - - 100 - 0 - - - - - 0 - 0 - - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 0 - - - X Axis - - - Qt::AlignmentFlag::AlignCenter - - - - - - - -512 - - - 512 - - - -200 - - - %p - - - - - - - - - 10 - - - 0 - - - 0 - - - - - - 100 - 0 - - - - QFrame::Shape::Box - - - Y Axis - - - Qt::AlignmentFlag::AlignCenter - - - - - - - -512 - - - 512 - - - -200 - - - %p - - - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 25 - - - - - - - - 10 - - - 0 - - - - - - 100 - 16777215 - - - - QFrame::Shape::Box - - - X Deadzone - - - Qt::AlignmentFlag::AlignCenter - - - - - - - -512 - - - 512 - - - - - - - - - 10 - - - 0 - - - 0 - - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - QFrame::Shape::Box - - - Y Deadzone - - - Qt::AlignmentFlag::AlignCenter - - - - - - - -512 - - - 512 - - - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 8 - - - - - - - - 10 - - - 0 - - - 0 - - - - - - 100 - 16777215 - - - - QFrame::Shape::Box - - - Y Offset - - - Qt::AlignmentFlag::AlignCenter - - - - - - - -512 - - - 512 - - - - - - - - - 10 - - - 0 - - - - - - 100 - 16777215 - - - - QFrame::Shape::Box - - - X Offset - - - Qt::AlignmentFlag::AlignCenter - - - - - - - -512 - - - 512 - - - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Expanding - - - - 20 - 40 - - - - - - - - Qt::Orientation::Horizontal - - - QDialogButtonBox::StandardButton::Ok - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - - - - - buttonBox - accepted() - Dialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - + + + Dialog + + + + 0 + 0 + 635 + 357 + + + + Joystick Configuration + + + + + + 15 + + + 20 + + + 15 + + + 5 + + + + + 10 + + + 0 + + + 0 + + + + + + 100 + 0 + + + + + 0 + 0 + + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 0 + + + X Axis + + + Qt::AlignmentFlag::AlignCenter + + + + + + + -512 + + + 512 + + + -200 + + + %p + + + + + + + + + 10 + + + 0 + + + 0 + + + + + + 100 + 0 + + + + QFrame::Shape::Box + + + Y Axis + + + Qt::AlignmentFlag::AlignCenter + + + + + + + -512 + + + 512 + + + -200 + + + %p + + + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 25 + + + + + + + + 10 + + + 0 + + + + + + 100 + 16777215 + + + + QFrame::Shape::Box + + + X Deadzone + + + Qt::AlignmentFlag::AlignCenter + + + + + + + -512 + + + 512 + + + + + + + + + 10 + + + 0 + + + 0 + + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + QFrame::Shape::Box + + + Y Deadzone + + + Qt::AlignmentFlag::AlignCenter + + + + + + + -512 + + + 512 + + + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 8 + + + + + + + + 10 + + + 0 + + + 0 + + + + + + 100 + 16777215 + + + + QFrame::Shape::Box + + + Y Offset + + + Qt::AlignmentFlag::AlignCenter + + + + + + + -512 + + + 512 + + + + + + + + + 10 + + + 0 + + + + + + 100 + 16777215 + + + + QFrame::Shape::Box + + + X Offset + + + Qt::AlignmentFlag::AlignCenter + + + + + + + -512 + + + 512 + + + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Expanding + + + + 20 + 40 + + + + + + + + Qt::Orientation::Horizontal + + + QDialogButtonBox::StandardButton::Ok + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/main_window.ui b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/main_window.ui index 00f1c4d..0bb2920 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/main_window.ui +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/main_window.ui @@ -1,4339 +1,4344 @@ - - - MainWindow - - - - 0 - 0 - 1024 - 600 - - - - - 0 - 0 - - - - - 1024 - 600 - - - - - 1024 - 600 - - - - ROS Remote UI - - - - true - - - - - 0 - 0 - 1024 - 577 - - - - - 0 - 0 - - - - - 1024 - 577 - - - - ArrowCursor - - - 0 - - - false - - - false - - - false - - - - Main - - - - - 20 - 20 - 980 - 430 - - - - - 0 - 0 - - - - - 980 - 430 - - - - - 980 - 430 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Sunken - - - - - - Qt::AlignmentFlag::AlignCenter - - - - - - 20 - 460 - 360 - 70 - - - - Viewport - - - - - - FPS: - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - CrossCursor - - - Camera View - - - - Camera View - - - - - Camera View (Overlay) - - - - - LiDAR View - - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 10 - 20 - - - - - - - - - - 400 - 460 - 375 - 70 - - - - - 0 - 0 - - - - Camera LEDs - - - - 12 - - - - - 4095 - - - 4 - - - Qt::Orientation::Horizontal - - - - - - - 0 - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 10 - 20 - - - - - - - - 1 - - - - - - - 2 - - - - - - - 3 - - - - - - - 4 - - - - - - - - - 795 - 460 - 204 - 70 - - - - - 0 - 0 - - - - Telemetry - - - - 12 - - - 12 - - - - - - 0 - 0 - - - - Battery: - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - volts - - - - - - - - - Sensors - - - - - 462 - 20 - 195 - 110 - - - - Microswitches - - - - - - - 0 - 0 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Front-L - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Back-L - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Front-R - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Back-R - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - - 245 - 215 - 195 - 305 - - - - IMU - - - - - - - - - 11 - - - - Accel. X - - - Qt::AlignmentFlag::AlignCenter - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 5 - 20 - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - m/s - - - - - - - - - - - - 11 - - - - Accel. Y - - - Qt::AlignmentFlag::AlignCenter - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 5 - 20 - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - m/s - - - - - - - - - - - - 11 - - - - Accel. Z - - - Qt::AlignmentFlag::AlignCenter - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 5 - 20 - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - m/s - - - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 8 - - - - - - - - - - - 11 - - - - Gyro. X - - - Qt::AlignmentFlag::AlignCenter - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 5 - 20 - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - rad/s - - - - - - - - - - - - 11 - - - - Gyro. Y - - - Qt::AlignmentFlag::AlignCenter - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 5 - 20 - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - rad/s - - - - - - - - - - - - 11 - - - - Gyro. Z - - - Qt::AlignmentFlag::AlignCenter - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 5 - 20 - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - rad/s - - - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 8 - - - - - - - - - - - 11 - - - - Comp. X - - - Qt::AlignmentFlag::AlignCenter - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 5 - 20 - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - ° - - - - - - - - - - - - 11 - - - - Comp. Y - - - Qt::AlignmentFlag::AlignCenter - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 5 - 20 - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - ° - - - - - - - - - - - - 11 - - - - Comp. Z - - - Qt::AlignmentFlag::AlignCenter - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 5 - 20 - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - ° - - - - - - - - - - - 28 - 185 - 195 - 210 - - - - - 0 - 0 - - - - Environment - - - - - - - - - 0 - 0 - - - - DHT Temp - - - - - - - DHT Hum - - - - - - - IMU Temp - - - - - - - Pico A Temp - - - - - - - Pico B Temp - - - - - - - Pi 5 Temp - - - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 2 - 20 - - - - - - - - QLayout::SizeConstraint::SetDefaultConstraint - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - - - - ° - - - - - - - % - - - - - - - ° - - - - - - - ° - - - - - - - ° - - - - - - - ° - - - - - - - - - - - 245 - 20 - 195 - 180 - - - - - 0 - 0 - - - - Cliff Sensors - - - - - - - 0 - 0 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Front 2 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Back 2 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Front 3 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Back 1 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Back 3 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Front 1 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Back 4 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Front 4 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - - 28 - 20 - 195 - 150 - - - - - 0 - 0 - - - - Ultrasonic - - - - - - - - Front - - - - - - - Back - - - - - - - Right - - - - - - - Left - - - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 8 - 20 - - - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - - - - m - - - - - - - m - - - - - - - m - - - - - - - m - - - - - - - - - - - 28 - 410 - 195 - 110 - - - - Battery - - - - - - - - - 0 - 0 - - - - Voltage - - - - - - - - 0 - 0 - - - - Current - - - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 8 - 20 - - - - - - - - - - - 0 - 0 - - - - - 11 - - - - 6 - - - QLCDNumber::SegmentStyle::Flat - - - 12.458000000000000 - - - - - - - - 0 - 0 - - - - - 11 - - - - 6 - - - QLCDNumber::SegmentStyle::Flat - - - 3.284000000000000 - - - - - - - - - - - 462 - 145 - 195 - 110 - - - - Enable/Disable - - - - - - - 0 - 0 - - - - Emitters - - - true - - - true - - - - - - - - 0 - 0 - - - - Pico A Relay - - - true - - - false - - - - - - - - - Motor Controllers - - - - - 28 - 20 - 200 - 185 - - - - - 0 - 0 - - - - Encoder Odometry - - - - - - - - - 0 - 0 - - - - Pos. X - - - - - - - Pos. Y - - - - - - - Yaw - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - Lin. Vel. - - - - - - - Ang. Vel. - - - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 4 - 20 - - - - - - - - QLayout::SizeConstraint::SetDefaultConstraint - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - - - - m - - - - - - - m - - - - - - - ° - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - m/s - - - - - - - r/s - - - - - - - - - - - 687 - 20 - 200 - 120 - - - - Motor Controllers - - - - - - - - - 0 - 0 - - - - Enable - - - false - - - false - - - - - - - - 0 - 0 - - - - Disable - - - false - - - false - - - - - - - - - - - - 0 - 0 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Left - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Right - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - - - - 247 - 20 - 200 - 165 - - - - - 0 - 0 - - - - RPMs - Measured - - - - - - - - - 0 - 0 - - - - Front-R - - - - - - - Front-L - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - Back-R - - - - - - - Back-L - - - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 4 - 20 - - - - - - - - QLayout::SizeConstraint::SetDefaultConstraint - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - - - - rpm - - - - - - - rpm - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - rpm - - - - - - - rpm - - - - - - - - - - - 247 - 200 - 200 - 165 - - - - - 0 - 0 - - - - RPMs - Target - - - - - - - - - 0 - 0 - - - - Front-R - - - - - - - Front-L - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - Back-R - - - - - - - Back-L - - - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 4 - 20 - - - - - - - - QLayout::SizeConstraint::SetDefaultConstraint - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - - - - rpm - - - - - - - rpm - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - rpm - - - - - - - rpm - - - - - - - - - - - 28 - 220 - 200 - 165 - - - - - 0 - 0 - - - - Encoder Pulse Counters - - - - - - - - - 0 - 0 - - - - Front-R - - - - - - - Front-L - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - Back-R - - - - - - - Back-L - - - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 4 - 20 - - - - - - - - QLayout::SizeConstraint::SetDefaultConstraint - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - - - - 467 - 20 - 200 - 165 - - - - - 0 - 0 - - - - Left Controller PID - - - - - - - - - 0 - 0 - - - - PID (P) - - - - - - - PID (I) - - - - - - - PID (D) - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - PID Out - - - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 4 - 20 - - - - - - - - QLayout::SizeConstraint::SetDefaultConstraint - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - - - - 467 - 200 - 200 - 165 - - - - - 0 - 0 - - - - Right Controller PID - - - - - - - - - 0 - 0 - - - - PID (P) - - - - - - - PID (I) - - - - - - - PID (D) - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - PID Out - - - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 4 - 20 - - - - - - - - QLayout::SizeConstraint::SetDefaultConstraint - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - - - - Power - - - - - 28 - 20 - 195 - 110 - - - - Battery - - - - - - - - - 0 - 0 - - - - Voltage - - - - - - - - 0 - 0 - - - - Current - - - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 8 - 20 - - - - - - - - - - - 0 - 0 - - - - - 11 - - - - 6 - - - QLCDNumber::SegmentStyle::Flat - - - 12.458000000000000 - - - - - - - - 0 - 0 - - - - - 11 - - - - 6 - - - QLCDNumber::SegmentStyle::Flat - - - 3.284000000000000 - - - - - - - - - - - 20 - 510 - 251 - 18 - - - - This page is for ROS Robot version 2. - - - - - - Diagnostics - - - - - 305 - 20 - 695 - 505 - - - - - 0 - 0 - - - - Diagnostic Messages - - - - - - - 0 - 0 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Segoe UI'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu Sans'; font-size:11pt;"><br /></p></body></html> - - - - - - - 5 - - - 5 - - - - - - 0 - 0 - - - - Auto-scroll - - - true - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 10 - 20 - - - - - - - - - 0 - 0 - - - - Show timestamps - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 10 - 20 - - - - - - - - - 0 - 0 - - - - Show key-values - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - 28 - 20 - 255 - 170 - - - - Calibration - - - - 7 - - - - - PID Auto-tune (Left) - - - - - - - PID Auto-tune (Right) - - - - - - - Cliff Sensors Offset - - - - - - - IMU - Compass - - - - - - - - - 28 - 210 - 255 - 110 - - - - Self-Test - - - - 7 - - - - - Pico A Routine - - - - - - - Pico B Routine - - - - - - - - - - - true - - - - 0 - 0 - 1024 - 21 - - - - - CrossCursor - - - Power - - - - - - - - - CrossCursor - - - Connection - - - - - - - - - CrossCursor - - - Configuration - - - - - - - - - - - - - Restart Application - - - - - Restart System - - - - - Shutdown System - - - - - Check Robot Connection - - - - - Check Wi-Fi Connection - - - - - Check WAN Connection - - - - - Configure Joystick - - - - - Test Buttons - - - - - About - - - - - - \ No newline at end of file + + + MainWindow + + + + 0 + 0 + 1024 + 600 + + + + + 0 + 0 + + + + + 1024 + 600 + + + + + 1024 + 600 + + + + ROS Remote UI + + + + true + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + ArrowCursor + + + 0 + + + false + + + false + + + false + + + + Main + + + + + 20 + 20 + 980 + 430 + + + + + 0 + 0 + + + + + 980 + 430 + + + + + 980 + 430 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Sunken + + + + + + Qt::AlignmentFlag::AlignCenter + + + + + + 20 + 460 + 360 + 70 + + + + Viewport + + + + + + FPS: + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + CrossCursor + + + Camera View + + + + Camera View + + + + + Camera View (Overlay) + + + + + LiDAR View + + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 10 + 20 + + + + + + + + + + 400 + 460 + 375 + 70 + + + + + 0 + 0 + + + + Camera LEDs + + + + 12 + + + + + 4095 + + + 4 + + + Qt::Orientation::Horizontal + + + + + + + 0 + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 10 + 20 + + + + + + + + 1 + + + + + + + 2 + + + + + + + 3 + + + + + + + 4 + + + + + + + + + 795 + 460 + 204 + 70 + + + + + 0 + 0 + + + + Telemetry + + + + 12 + + + 12 + + + + + + 0 + 0 + + + + Battery: + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + volts + + + + + + + + + Sensors + + + + + 462 + 20 + 195 + 110 + + + + Microswitches + + + + + + + 0 + 0 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Front-L + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Back-L + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Front-R + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Back-R + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + 245 + 215 + 195 + 305 + + + + IMU + + + + + + + + + 11 + + + + Accel. X + + + Qt::AlignmentFlag::AlignCenter + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 5 + 20 + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + m/s + + + + + + + + + + + + 11 + + + + Accel. Y + + + Qt::AlignmentFlag::AlignCenter + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 5 + 20 + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + m/s + + + + + + + + + + + + 11 + + + + Accel. Z + + + Qt::AlignmentFlag::AlignCenter + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 5 + 20 + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + m/s + + + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 8 + + + + + + + + + + + 11 + + + + Gyro. X + + + Qt::AlignmentFlag::AlignCenter + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 5 + 20 + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + °/s + + + + + + + + + + + + 11 + + + + Gyro. Y + + + Qt::AlignmentFlag::AlignCenter + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 5 + 20 + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + °/s + + + + + + + + + + + + 11 + + + + Gyro. Z + + + Qt::AlignmentFlag::AlignCenter + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 5 + 20 + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + °/s + + + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 8 + + + + + + + + + + + 11 + + + + Comp. X + + + Qt::AlignmentFlag::AlignCenter + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 5 + 20 + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + ° + + + + + + + + + + + + 11 + + + + Comp. Y + + + Qt::AlignmentFlag::AlignCenter + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 5 + 20 + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + ° + + + + + + + + + + + + 11 + + + + Comp. Z + + + Qt::AlignmentFlag::AlignCenter + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 5 + 20 + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + ° + + + + + + + + + + + 28 + 185 + 195 + 210 + + + + + 0 + 0 + + + + Environment + + + + + + + + + 0 + 0 + + + + DHT Temp + + + + + + + DHT Hum + + + + + + + IMU Temp + + + + + + + Pico A Temp + + + + + + + Pico B Temp + + + + + + + Pi 5 Temp + + + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 2 + 20 + + + + + + + + QLayout::SizeConstraint::SetDefaultConstraint + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + + + + ° + + + + + + + % + + + + + + + ° + + + + + + + ° + + + + + + + ° + + + + + + + ° + + + + + + + + + + + 245 + 20 + 195 + 180 + + + + + 0 + 0 + + + + Cliff Sensors + + + + + + + 0 + 0 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Front 2 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Back 2 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Front 3 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Back 1 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Back 3 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Front 1 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Back 4 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Front 4 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + 28 + 20 + 195 + 150 + + + + + 0 + 0 + + + + Ultrasonic + + + + + + + + Front + + + + + + + Back + + + + + + + Right + + + + + + + Left + + + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 8 + 20 + + + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + + + + m + + + + + + + m + + + + + + + m + + + + + + + m + + + + + + + + + + + 28 + 410 + 195 + 110 + + + + Battery + + + + + + + + + 0 + 0 + + + + Voltage + + + + + + + + 0 + 0 + + + + Current + + + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 8 + 20 + + + + + + + + + + + 0 + 0 + + + + + 11 + + + + 6 + + + QLCDNumber::SegmentStyle::Flat + + + 12.458000000000000 + + + + + + + + 0 + 0 + + + + + 11 + + + + 6 + + + QLCDNumber::SegmentStyle::Flat + + + 3.284000000000000 + + + + + + + + + + + 462 + 145 + 195 + 110 + + + + Enable/Disable + + + + + + + 0 + 0 + + + + Emitters + + + true + + + true + + + + + + + + 0 + 0 + + + + Pico A Relay + + + true + + + false + + + + + + + + + Motor Controllers + + + + + 28 + 20 + 200 + 185 + + + + + 0 + 0 + + + + Encoder Odometry + + + + + + + + + 0 + 0 + + + + Pos. X + + + + + + + Pos. Y + + + + + + + Yaw + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + Lin. Vel. + + + + + + + Ang. Vel. + + + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 4 + 20 + + + + + + + + QLayout::SizeConstraint::SetDefaultConstraint + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + + + + m + + + + + + + m + + + + + + + ° + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + m/s + + + + + + + r/s + + + + + + + + + + + 687 + 20 + 200 + 120 + + + + Motor Controllers + + + + + + + + + 0 + 0 + + + + Enable + + + false + + + false + + + + + + + + 0 + 0 + + + + Disable + + + false + + + false + + + + + + + + + + + + 0 + 0 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Left + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Right + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + + + 247 + 20 + 200 + 165 + + + + + 0 + 0 + + + + RPMs - Measured + + + + + + + + + 0 + 0 + + + + Front-R + + + + + + + Front-L + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + Back-R + + + + + + + Back-L + + + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 4 + 20 + + + + + + + + QLayout::SizeConstraint::SetDefaultConstraint + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + + + + rpm + + + + + + + rpm + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + rpm + + + + + + + rpm + + + + + + + + + + + 247 + 200 + 200 + 165 + + + + + 0 + 0 + + + + RPMs - Target + + + + + + + + + 0 + 0 + + + + Front-R + + + + + + + Front-L + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + Back-R + + + + + + + Back-L + + + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 4 + 20 + + + + + + + + QLayout::SizeConstraint::SetDefaultConstraint + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + + + + rpm + + + + + + + rpm + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + rpm + + + + + + + rpm + + + + + + + + + + + 28 + 220 + 200 + 165 + + + + + 0 + 0 + + + + Encoder Pulse Counters + + + + + + + + + 0 + 0 + + + + Front-R + + + + + + + Front-L + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + Back-R + + + + + + + Back-L + + + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 4 + 20 + + + + + + + + QLayout::SizeConstraint::SetDefaultConstraint + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + + + + 467 + 20 + 200 + 165 + + + + + 0 + 0 + + + + Left Controller PID + + + + + + + + + 0 + 0 + + + + PID (P) + + + + + + + PID (I) + + + + + + + PID (D) + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + PID Out + + + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 4 + 20 + + + + + + + + QLayout::SizeConstraint::SetDefaultConstraint + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + + + + 467 + 200 + 200 + 165 + + + + + 0 + 0 + + + + Right Controller PID + + + + + + + + + 0 + 0 + + + + PID (P) + + + + + + + PID (I) + + + + + + + PID (D) + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + PID Out + + + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 4 + 20 + + + + + + + + QLayout::SizeConstraint::SetDefaultConstraint + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + + + + Power + + + + + 28 + 20 + 195 + 110 + + + + Battery + + + + + + + + + 0 + 0 + + + + Voltage + + + + + + + + 0 + 0 + + + + Current + + + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 8 + 20 + + + + + + + + + + + 0 + 0 + + + + + 11 + + + + 6 + + + QLCDNumber::SegmentStyle::Flat + + + 12.458000000000000 + + + + + + + + 0 + 0 + + + + + 11 + + + + 6 + + + QLCDNumber::SegmentStyle::Flat + + + 3.284000000000000 + + + + + + + + + + + 20 + 510 + 251 + 18 + + + + This page is for ROS Robot version 2. + + + + + + Diagnostics + + + + + 305 + 20 + 695 + 505 + + + + + 0 + 0 + + + + Diagnostic Messages + + + + + + + 0 + 0 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu Sans'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + + + 5 + + + 5 + + + + + + 0 + 0 + + + + Auto-scroll + + + true + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 10 + 20 + + + + + + + + + 0 + 0 + + + + Show timestamps + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 10 + 20 + + + + + + + + + 0 + 0 + + + + Show key-values + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 28 + 20 + 255 + 170 + + + + Calibration + + + + 7 + + + + + PID Auto-tune (Left) + + + + + + + PID Auto-tune (Right) + + + + + + + Cliff Sensors Offset + + + + + + + IMU - Compass + + + + + + + + + 28 + 210 + 255 + 110 + + + + Self-Test + + + + 7 + + + + + Pico A Routine + + + + + + + Pico B Routine + + + + + + + + + + + + + true + + + + 0 + 0 + 1024 + 23 + + + + true + + + + CrossCursor + + + Power + + + + + + + + + CrossCursor + + + Connection + + + + + + + + + CrossCursor + + + Configuration + + + + + + + + + + + + + Restart Application + + + + + Restart System + + + + + Shutdown System + + + + + Check Robot Connection + + + + + Check Wi-Fi Connection + + + + + Check WAN Connection + + + + + Configure Joystick + + + + + Test Buttons + + + + + About + + + + + + diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/selftest_result_dialog.ui b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/selftest_result_dialog.ui index e134236..f577fa4 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/selftest_result_dialog.ui +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/selftest_result_dialog.ui @@ -1,176 +1,176 @@ - - - Dialog - - - - 0 - 0 - 800 - 450 - - - - Self-Test Result - - - - 20 - - - 20 - - - 20 - - - 15 - - - - - 0 - - - - - **Result:** - - - Qt::TextFormat::MarkdownText - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 5 - 20 - - - - - - - - - 0 - 0 - - - - QFrame::Shape::Box - - - STATUS - - - Qt::AlignmentFlag::AlignCenter - - - 3 - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - QFrame::Shape::Box - - - SOURCE - - - 3 - - - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - Qt::Orientation::Horizontal - - - QDialogButtonBox::StandardButton::Ok - - - - - - - - - buttonBox - accepted() - Dialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - + + + Dialog + + + + 0 + 0 + 800 + 450 + + + + Self-Test Result + + + + 20 + + + 20 + + + 20 + + + 15 + + + + + 0 + + + + + **Result:** + + + Qt::TextFormat::MarkdownText + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 5 + 20 + + + + + + + + + 0 + 0 + + + + QFrame::Shape::Box + + + STATUS + + + Qt::AlignmentFlag::AlignCenter + + + 3 + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + QFrame::Shape::Box + + + SOURCE + + + 3 + + + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + Qt::Orientation::Horizontal + + + QDialogButtonBox::StandardButton::Ok + + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/test_remote_buttons_dialog.ui b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/test_remote_buttons_dialog.ui index bd6d3dc..b7a0ce7 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/test_remote_buttons_dialog.ui +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/test_remote_buttons_dialog.ui @@ -1,748 +1,748 @@ - - - Dialog - - - - 0 - 0 - 800 - 458 - - - - Test Buttons & Switches - - - - - 434 - 412 - 341 - 32 - - - - Qt::Orientation::Horizontal - - - QDialogButtonBox::StandardButton::Ok - - - - - - 25 - 25 - 750 - 375 - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - 375 - 0 - 2 - 415 - - - - Qt::Orientation::Vertical - - - - - - 12 - 12 - 351 - 351 - - - - - - - 10 - - - - - - 0 - 0 - - - - - 0 - 55 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Key Switch - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - - 0 - 55 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Switch - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - - 32 - - - - - - 0 - 0 - - - - - 0 - 55 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Button - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - - 0 - 55 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Button - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - - - - - 0 - 0 - - - - - 0 - 55 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Switch - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - - 0 - 55 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Switch - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - - 0 - 55 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Switch - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Expanding - - - - 20 - 70 - - - - - - - - - 0 - 0 - - - - - 0 - 55 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Button - - - Qt::AlignmentFlag::AlignCenter - - - - - - - 8 - - - - - - - Encoder - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - - 0 - 55 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Button - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - - 0 - 55 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Button - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - - - - 388 - 12 - 351 - 351 - - - - - - - 8 - - - - - - 0 - 0 - - - - - 0 - 55 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - E-Stop - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - - 0 - 55 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Switch - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - 8 - - - - - - - Potentiometer - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - - 12 - - - - Qt::FocusPolicy::NoFocus - - - 0 - - - true - - - true - - - true - - - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Fixed - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - - 0 - 55 - - - - false - - - QFrame::Shape::Box - - - QFrame::Shadow::Plain - - - 1 - - - Button - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - - - - - 25 - 410 - 130 - 30 - - - - Test LEDs - - - - - - - buttonBox - accepted() - Dialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - + + + Dialog + + + + 0 + 0 + 800 + 458 + + + + Test Buttons & Switches + + + + + 434 + 412 + 341 + 32 + + + + Qt::Orientation::Horizontal + + + QDialogButtonBox::StandardButton::Ok + + + + + + 25 + 25 + 750 + 375 + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + + 375 + 0 + 2 + 415 + + + + Qt::Orientation::Vertical + + + + + + 12 + 12 + 351 + 351 + + + + + + + 10 + + + + + + 0 + 0 + + + + + 0 + 55 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Key Switch + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + + 0 + 55 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Switch + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + 32 + + + + + + 0 + 0 + + + + + 0 + 55 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Button + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + + 0 + 55 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Button + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + + + + 0 + 0 + + + + + 0 + 55 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Switch + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + + 0 + 55 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Switch + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + + 0 + 55 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Switch + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Expanding + + + + 20 + 70 + + + + + + + + + 0 + 0 + + + + + 0 + 55 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Button + + + Qt::AlignmentFlag::AlignCenter + + + + + + + 8 + + + + + + + Encoder + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 0 + 55 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Button + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + + 0 + 55 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Button + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + + + 388 + 12 + 351 + 351 + + + + + + + 8 + + + + + + 0 + 0 + + + + + 0 + 55 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + E-Stop + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + + 0 + 55 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Switch + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + 8 + + + + + + + Potentiometer + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 0 + 0 + + + + + 12 + + + + Qt::FocusPolicy::NoFocus + + + 0 + + + true + + + true + + + true + + + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Fixed + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 0 + 55 + + + + false + + + QFrame::Shape::Box + + + QFrame::Shadow::Plain + + + 1 + + + Button + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + + + + 25 + 410 + 130 + 30 + + + + Test LEDs + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_about_dialog.py b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_about_dialog.py index 7306c01..d0343cd 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_about_dialog.py +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_about_dialog.py @@ -1,80 +1,80 @@ -# -*- coding: utf-8 -*- - -################################################################################ -## Form generated from reading UI file 'about_dialog.ui' -## -## Created by: Qt User Interface Compiler version 6.7.2 -## -## WARNING! All changes made in this file will be lost when recompiling UI file! -################################################################################ - -from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, - QMetaObject, QObject, QPoint, QRect, - QSize, QTime, QUrl, Qt) -from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, - QFont, QFontDatabase, QGradient, QIcon, - QImage, QKeySequence, QLinearGradient, QPainter, - QPalette, QPixmap, QRadialGradient, QTransform) -from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, - QFrame, QSizePolicy, QTextBrowser, QVBoxLayout, - QWidget) - -class Ui_Dialog(object): - def setupUi(self, Dialog): - if not Dialog.objectName(): - Dialog.setObjectName(u"Dialog") - Dialog.resize(493, 350) - self.verticalLayout_1 = QVBoxLayout(Dialog) - self.verticalLayout_1.setObjectName(u"verticalLayout_1") - self.textBrowser = QTextBrowser(Dialog) - self.textBrowser.setObjectName(u"textBrowser") - self.textBrowser.setFrameShape(QFrame.Shape.StyledPanel) - self.textBrowser.setOpenExternalLinks(True) - - self.verticalLayout_1.addWidget(self.textBrowser) - - self.buttonBox = QDialogButtonBox(Dialog) - self.buttonBox.setObjectName(u"buttonBox") - self.buttonBox.setOrientation(Qt.Orientation.Horizontal) - self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Ok) - - self.verticalLayout_1.addWidget(self.buttonBox) - - - self.retranslateUi(Dialog) - self.buttonBox.accepted.connect(Dialog.accept) - - QMetaObject.connectSlotsByName(Dialog) - # setupUi - - def retranslateUi(self, Dialog): - Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"About", None)) - self.textBrowser.setHtml(QCoreApplication.translate("Dialog", u"\n" -"\n" -"

The ROS Remote Project

\n" -"

Created by Samyar Sadat Akhavi, 2024" - "

\n" -"


\n" -"


\n" -"


\n" -"

User interface created using QT and PySide6.

\n" -"

PySide6 Version: {pyside_version}

\n" -"

QT Version: {qt_version}

\n" -"

Interface Version: {version}

\n" -"

Creation Date: {date}

\n" -"


\n" -"

samyarsadat@gigawhat.net

\n" -"

github.com/samyarsadat/ROS-Remote

\n" -"


\n" -"

Copyright (c) 2024, Samyar Sadat Akhavi.

\n" -"

Licensed under the General Public License V3.

", None)) - # retranslateUi - +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'about_dialog.ui' +## +## Created by: Qt User Interface Compiler version 6.7.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, + QFrame, QSizePolicy, QTextBrowser, QVBoxLayout, + QWidget) + +class Ui_Dialog(object): + def setupUi(self, Dialog): + if not Dialog.objectName(): + Dialog.setObjectName(u"Dialog") + Dialog.resize(493, 350) + self.verticalLayout_1 = QVBoxLayout(Dialog) + self.verticalLayout_1.setObjectName(u"verticalLayout_1") + self.textBrowser = QTextBrowser(Dialog) + self.textBrowser.setObjectName(u"textBrowser") + self.textBrowser.setFrameShape(QFrame.Shape.StyledPanel) + self.textBrowser.setOpenExternalLinks(True) + + self.verticalLayout_1.addWidget(self.textBrowser) + + self.buttonBox = QDialogButtonBox(Dialog) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setOrientation(Qt.Orientation.Horizontal) + self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Ok) + + self.verticalLayout_1.addWidget(self.buttonBox) + + + self.retranslateUi(Dialog) + self.buttonBox.accepted.connect(Dialog.accept) + + QMetaObject.connectSlotsByName(Dialog) + # setupUi + + def retranslateUi(self, Dialog): + Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"About", None)) + self.textBrowser.setHtml(QCoreApplication.translate("Dialog", u"\n" +"\n" +"

The ROS Remote Project

\n" +"

Created by Samyar Sadat Akhavi, 2024" + "

\n" +"


\n" +"


\n" +"


\n" +"

User interface created using QT and PySide6.

\n" +"

PySide6 Version: {pyside_version}

\n" +"

QT Version: {qt_version}

\n" +"

Interface Version: {version}

\n" +"

Creation Date: {date}

\n" +"


\n" +"

samyarsadat@gigawhat.net

\n" +"

github.com/samyarsadat/ROS-Remote

\n" +"


\n" +"

Copyright (c) 2024, Samyar Sadat Akhavi.

\n" +"

Licensed under the General Public License V3.

", None)) + # retranslateUi + diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_calibration_result_dialog.py b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_calibration_result_dialog.py index a8cd702..4e7041a 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_calibration_result_dialog.py +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_calibration_result_dialog.py @@ -1,95 +1,95 @@ -# -*- coding: utf-8 -*- - -################################################################################ -## Form generated from reading UI file 'calibration_result_dialog.ui' -## -## Created by: Qt User Interface Compiler version 6.7.2 -## -## WARNING! All changes made in this file will be lost when recompiling UI file! -################################################################################ - -from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, - QMetaObject, QObject, QPoint, QRect, - QSize, QTime, QUrl, Qt) -from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, - QFont, QFontDatabase, QGradient, QIcon, - QImage, QKeySequence, QLinearGradient, QPainter, - QPalette, QPixmap, QRadialGradient, QTransform) -from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, - QFrame, QHBoxLayout, QLabel, QSizePolicy, - QSpacerItem, QTextBrowser, QVBoxLayout, QWidget) - -class Ui_Dialog(object): - def setupUi(self, Dialog): - if not Dialog.objectName(): - Dialog.setObjectName(u"Dialog") - Dialog.resize(600, 360) - self.verticalLayout_1 = QVBoxLayout(Dialog) - self.verticalLayout_1.setObjectName(u"verticalLayout_1") - self.verticalLayout_1.setContentsMargins(20, 20, 20, 15) - self.resultBox = QHBoxLayout() - self.resultBox.setObjectName(u"resultBox") - self.resultBox.setContentsMargins(-1, -1, -1, 0) - self.resultLabel = QLabel(Dialog) - self.resultLabel.setObjectName(u"resultLabel") - self.resultLabel.setTextFormat(Qt.TextFormat.MarkdownText) - - self.resultBox.addWidget(self.resultLabel) - - self.horizontalSpacer_1 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.resultBox.addItem(self.horizontalSpacer_1) - - self.resultStatusLabel = QLabel(Dialog) - self.resultStatusLabel.setObjectName(u"resultStatusLabel") - sizePolicy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.resultStatusLabel.sizePolicy().hasHeightForWidth()) - self.resultStatusLabel.setSizePolicy(sizePolicy) - self.resultStatusLabel.setFrameShape(QFrame.Shape.Box) - self.resultStatusLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - self.resultStatusLabel.setMargin(3) - - self.resultBox.addWidget(self.resultStatusLabel) - - self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) - - self.resultBox.addItem(self.horizontalSpacer_2) - - - self.verticalLayout_1.addLayout(self.resultBox) - - self.verticalSpacer_1 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.verticalLayout_1.addItem(self.verticalSpacer_1) - - self.resultMessage = QTextBrowser(Dialog) - self.resultMessage.setObjectName(u"resultMessage") - - self.verticalLayout_1.addWidget(self.resultMessage) - - self.verticalSpacer_2 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.verticalLayout_1.addItem(self.verticalSpacer_2) - - self.buttonBox = QDialogButtonBox(Dialog) - self.buttonBox.setObjectName(u"buttonBox") - self.buttonBox.setOrientation(Qt.Orientation.Horizontal) - self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Ok) - - self.verticalLayout_1.addWidget(self.buttonBox) - - - self.retranslateUi(Dialog) - self.buttonBox.accepted.connect(Dialog.accept) - - QMetaObject.connectSlotsByName(Dialog) - # setupUi - - def retranslateUi(self, Dialog): - Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Calibration Result", None)) - self.resultLabel.setText(QCoreApplication.translate("Dialog", u"**Result:**", None)) - self.resultStatusLabel.setText(QCoreApplication.translate("Dialog", u"STATUS", None)) - # retranslateUi - +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'calibration_result_dialog.ui' +## +## Created by: Qt User Interface Compiler version 6.7.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, + QFrame, QHBoxLayout, QLabel, QSizePolicy, + QSpacerItem, QTextBrowser, QVBoxLayout, QWidget) + +class Ui_Dialog(object): + def setupUi(self, Dialog): + if not Dialog.objectName(): + Dialog.setObjectName(u"Dialog") + Dialog.resize(600, 360) + self.verticalLayout_1 = QVBoxLayout(Dialog) + self.verticalLayout_1.setObjectName(u"verticalLayout_1") + self.verticalLayout_1.setContentsMargins(20, 20, 20, 15) + self.resultBox = QHBoxLayout() + self.resultBox.setObjectName(u"resultBox") + self.resultBox.setContentsMargins(-1, -1, -1, 0) + self.resultLabel = QLabel(Dialog) + self.resultLabel.setObjectName(u"resultLabel") + self.resultLabel.setTextFormat(Qt.TextFormat.MarkdownText) + + self.resultBox.addWidget(self.resultLabel) + + self.horizontalSpacer_1 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.resultBox.addItem(self.horizontalSpacer_1) + + self.resultStatusLabel = QLabel(Dialog) + self.resultStatusLabel.setObjectName(u"resultStatusLabel") + sizePolicy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.resultStatusLabel.sizePolicy().hasHeightForWidth()) + self.resultStatusLabel.setSizePolicy(sizePolicy) + self.resultStatusLabel.setFrameShape(QFrame.Shape.Box) + self.resultStatusLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + self.resultStatusLabel.setMargin(3) + + self.resultBox.addWidget(self.resultStatusLabel) + + self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.resultBox.addItem(self.horizontalSpacer_2) + + + self.verticalLayout_1.addLayout(self.resultBox) + + self.verticalSpacer_1 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_1.addItem(self.verticalSpacer_1) + + self.resultMessage = QTextBrowser(Dialog) + self.resultMessage.setObjectName(u"resultMessage") + + self.verticalLayout_1.addWidget(self.resultMessage) + + self.verticalSpacer_2 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_1.addItem(self.verticalSpacer_2) + + self.buttonBox = QDialogButtonBox(Dialog) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setOrientation(Qt.Orientation.Horizontal) + self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Ok) + + self.verticalLayout_1.addWidget(self.buttonBox) + + + self.retranslateUi(Dialog) + self.buttonBox.accepted.connect(Dialog.accept) + + QMetaObject.connectSlotsByName(Dialog) + # setupUi + + def retranslateUi(self, Dialog): + Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Calibration Result", None)) + self.resultLabel.setText(QCoreApplication.translate("Dialog", u"**Result:**", None)) + self.resultStatusLabel.setText(QCoreApplication.translate("Dialog", u"STATUS", None)) + # retranslateUi + diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_joystick_dialog.py b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_joystick_dialog.py index 311b0b4..64154b4 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_joystick_dialog.py +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_joystick_dialog.py @@ -1,215 +1,215 @@ -# -*- coding: utf-8 -*- - -################################################################################ -## Form generated from reading UI file 'joystick_dialog.ui' -## -## Created by: Qt User Interface Compiler version 6.7.2 -## -## WARNING! All changes made in this file will be lost when recompiling UI file! -################################################################################ - -from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, - QMetaObject, QObject, QPoint, QRect, - QSize, QTime, QUrl, Qt) -from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, - QFont, QFontDatabase, QGradient, QIcon, - QImage, QKeySequence, QLinearGradient, QPainter, - QPalette, QPixmap, QRadialGradient, QTransform) -from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, - QFrame, QHBoxLayout, QLabel, QProgressBar, - QSizePolicy, QSpacerItem, QSpinBox, QVBoxLayout, - QWidget) - -class Ui_Dialog(object): - def setupUi(self, Dialog): - if not Dialog.objectName(): - Dialog.setObjectName(u"Dialog") - Dialog.resize(635, 357) - self.verticalLayout_1 = QVBoxLayout(Dialog) - self.verticalLayout_1.setObjectName(u"verticalLayout_1") - self.mainBox = QVBoxLayout() - self.mainBox.setObjectName(u"mainBox") - self.mainBox.setContentsMargins(15, 20, 15, 5) - self.xAxisBox = QHBoxLayout() - self.xAxisBox.setSpacing(10) - self.xAxisBox.setObjectName(u"xAxisBox") - self.xAxisBox.setContentsMargins(0, -1, 0, -1) - self.xAxisLabel = QLabel(Dialog) - self.xAxisLabel.setObjectName(u"xAxisLabel") - self.xAxisLabel.setMinimumSize(QSize(100, 0)) - self.xAxisLabel.setBaseSize(QSize(0, 0)) - self.xAxisLabel.setFrameShape(QFrame.Shape.Box) - self.xAxisLabel.setFrameShadow(QFrame.Shadow.Plain) - self.xAxisLabel.setMidLineWidth(0) - self.xAxisLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.xAxisBox.addWidget(self.xAxisLabel) - - self.xAxisBar = QProgressBar(Dialog) - self.xAxisBar.setObjectName(u"xAxisBar") - self.xAxisBar.setMinimum(-512) - self.xAxisBar.setMaximum(512) - self.xAxisBar.setValue(-200) - - self.xAxisBox.addWidget(self.xAxisBar) - - - self.mainBox.addLayout(self.xAxisBox) - - self.yAxisBox = QHBoxLayout() - self.yAxisBox.setSpacing(10) - self.yAxisBox.setObjectName(u"yAxisBox") - self.yAxisBox.setContentsMargins(0, -1, 0, -1) - self.yAxisLabel = QLabel(Dialog) - self.yAxisLabel.setObjectName(u"yAxisLabel") - self.yAxisLabel.setMinimumSize(QSize(100, 0)) - self.yAxisLabel.setFrameShape(QFrame.Shape.Box) - self.yAxisLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.yAxisBox.addWidget(self.yAxisLabel) - - self.yAxisBar = QProgressBar(Dialog) - self.yAxisBar.setObjectName(u"yAxisBar") - self.yAxisBar.setMinimum(-512) - self.yAxisBar.setMaximum(512) - self.yAxisBar.setValue(-200) - - self.yAxisBox.addWidget(self.yAxisBar) - - - self.mainBox.addLayout(self.yAxisBox) - - self.verticalSpacer_1 = QSpacerItem(20, 25, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.mainBox.addItem(self.verticalSpacer_1) - - self.xDeadzoneBox = QHBoxLayout() - self.xDeadzoneBox.setSpacing(10) - self.xDeadzoneBox.setObjectName(u"xDeadzoneBox") - self.xDeadzoneBox.setContentsMargins(-1, 0, -1, -1) - self.xDeadzoneLabel = QLabel(Dialog) - self.xDeadzoneLabel.setObjectName(u"xDeadzoneLabel") - self.xDeadzoneLabel.setMaximumSize(QSize(100, 16777215)) - self.xDeadzoneLabel.setFrameShape(QFrame.Shape.Box) - self.xDeadzoneLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.xDeadzoneBox.addWidget(self.xDeadzoneLabel) - - self.xDeadzoneInput = QSpinBox(Dialog) - self.xDeadzoneInput.setObjectName(u"xDeadzoneInput") - self.xDeadzoneInput.setMinimum(-512) - self.xDeadzoneInput.setMaximum(512) - - self.xDeadzoneBox.addWidget(self.xDeadzoneInput) - - - self.mainBox.addLayout(self.xDeadzoneBox) - - self.yDeadzoneBox = QHBoxLayout() - self.yDeadzoneBox.setSpacing(10) - self.yDeadzoneBox.setObjectName(u"yDeadzoneBox") - self.yDeadzoneBox.setContentsMargins(0, -1, 0, -1) - self.yDeadzoneLabel = QLabel(Dialog) - self.yDeadzoneLabel.setObjectName(u"yDeadzoneLabel") - self.yDeadzoneLabel.setMinimumSize(QSize(100, 0)) - self.yDeadzoneLabel.setMaximumSize(QSize(100, 16777215)) - self.yDeadzoneLabel.setFrameShape(QFrame.Shape.Box) - self.yDeadzoneLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.yDeadzoneBox.addWidget(self.yDeadzoneLabel) - - self.yDeadzoneInput = QSpinBox(Dialog) - self.yDeadzoneInput.setObjectName(u"yDeadzoneInput") - self.yDeadzoneInput.setMinimum(-512) - self.yDeadzoneInput.setMaximum(512) - - self.yDeadzoneBox.addWidget(self.yDeadzoneInput) - - - self.mainBox.addLayout(self.yDeadzoneBox) - - self.verticalSpacer_2 = QSpacerItem(20, 8, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.mainBox.addItem(self.verticalSpacer_2) - - self.yOffsetBox = QHBoxLayout() - self.yOffsetBox.setSpacing(10) - self.yOffsetBox.setObjectName(u"yOffsetBox") - self.yOffsetBox.setContentsMargins(0, 0, -1, -1) - self.yOffsetLabel = QLabel(Dialog) - self.yOffsetLabel.setObjectName(u"yOffsetLabel") - self.yOffsetLabel.setMaximumSize(QSize(100, 16777215)) - self.yOffsetLabel.setFrameShape(QFrame.Shape.Box) - self.yOffsetLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.yOffsetBox.addWidget(self.yOffsetLabel) - - self.yOffsetInput = QSpinBox(Dialog) - self.yOffsetInput.setObjectName(u"yOffsetInput") - self.yOffsetInput.setMinimum(-512) - self.yOffsetInput.setMaximum(512) - - self.yOffsetBox.addWidget(self.yOffsetInput) - - - self.mainBox.addLayout(self.yOffsetBox) - - self.xOffsetBox = QHBoxLayout() - self.xOffsetBox.setSpacing(10) - self.xOffsetBox.setObjectName(u"xOffsetBox") - self.xOffsetBox.setContentsMargins(-1, 0, -1, -1) - self.xOffsetLabel = QLabel(Dialog) - self.xOffsetLabel.setObjectName(u"xOffsetLabel") - self.xOffsetLabel.setMaximumSize(QSize(100, 16777215)) - self.xOffsetLabel.setFrameShape(QFrame.Shape.Box) - self.xOffsetLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.xOffsetBox.addWidget(self.xOffsetLabel) - - self.xOffsetInput = QSpinBox(Dialog) - self.xOffsetInput.setObjectName(u"xOffsetInput") - self.xOffsetInput.setMinimum(-512) - self.xOffsetInput.setMaximum(512) - - self.xOffsetBox.addWidget(self.xOffsetInput) - - - self.mainBox.addLayout(self.xOffsetBox) - - self.verticalSpacer_3 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) - - self.mainBox.addItem(self.verticalSpacer_3) - - self.buttonBox = QDialogButtonBox(Dialog) - self.buttonBox.setObjectName(u"buttonBox") - self.buttonBox.setOrientation(Qt.Orientation.Horizontal) - self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Ok) - - self.mainBox.addWidget(self.buttonBox) - - self.verticalSpacer_4 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.mainBox.addItem(self.verticalSpacer_4) - - - self.verticalLayout_1.addLayout(self.mainBox) - - - self.retranslateUi(Dialog) - self.buttonBox.accepted.connect(Dialog.accept) - - QMetaObject.connectSlotsByName(Dialog) - # setupUi - - def retranslateUi(self, Dialog): - Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Joystick Configuration", None)) - self.xAxisLabel.setText(QCoreApplication.translate("Dialog", u"X Axis", None)) - self.xAxisBar.setFormat(QCoreApplication.translate("Dialog", u"%p", None)) - self.yAxisLabel.setText(QCoreApplication.translate("Dialog", u"Y Axis", None)) - self.yAxisBar.setFormat(QCoreApplication.translate("Dialog", u"%p", None)) - self.xDeadzoneLabel.setText(QCoreApplication.translate("Dialog", u"X Deadzone", None)) - self.yDeadzoneLabel.setText(QCoreApplication.translate("Dialog", u"Y Deadzone", None)) - self.yOffsetLabel.setText(QCoreApplication.translate("Dialog", u"Y Offset", None)) - self.xOffsetLabel.setText(QCoreApplication.translate("Dialog", u"X Offset", None)) - # retranslateUi - +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'joystick_dialog.ui' +## +## Created by: Qt User Interface Compiler version 6.7.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, + QFrame, QHBoxLayout, QLabel, QProgressBar, + QSizePolicy, QSpacerItem, QSpinBox, QVBoxLayout, + QWidget) + +class Ui_Dialog(object): + def setupUi(self, Dialog): + if not Dialog.objectName(): + Dialog.setObjectName(u"Dialog") + Dialog.resize(635, 357) + self.verticalLayout_1 = QVBoxLayout(Dialog) + self.verticalLayout_1.setObjectName(u"verticalLayout_1") + self.mainBox = QVBoxLayout() + self.mainBox.setObjectName(u"mainBox") + self.mainBox.setContentsMargins(15, 20, 15, 5) + self.xAxisBox = QHBoxLayout() + self.xAxisBox.setSpacing(10) + self.xAxisBox.setObjectName(u"xAxisBox") + self.xAxisBox.setContentsMargins(0, -1, 0, -1) + self.xAxisLabel = QLabel(Dialog) + self.xAxisLabel.setObjectName(u"xAxisLabel") + self.xAxisLabel.setMinimumSize(QSize(100, 0)) + self.xAxisLabel.setBaseSize(QSize(0, 0)) + self.xAxisLabel.setFrameShape(QFrame.Shape.Box) + self.xAxisLabel.setFrameShadow(QFrame.Shadow.Plain) + self.xAxisLabel.setMidLineWidth(0) + self.xAxisLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.xAxisBox.addWidget(self.xAxisLabel) + + self.xAxisBar = QProgressBar(Dialog) + self.xAxisBar.setObjectName(u"xAxisBar") + self.xAxisBar.setMinimum(-512) + self.xAxisBar.setMaximum(512) + self.xAxisBar.setValue(-200) + + self.xAxisBox.addWidget(self.xAxisBar) + + + self.mainBox.addLayout(self.xAxisBox) + + self.yAxisBox = QHBoxLayout() + self.yAxisBox.setSpacing(10) + self.yAxisBox.setObjectName(u"yAxisBox") + self.yAxisBox.setContentsMargins(0, -1, 0, -1) + self.yAxisLabel = QLabel(Dialog) + self.yAxisLabel.setObjectName(u"yAxisLabel") + self.yAxisLabel.setMinimumSize(QSize(100, 0)) + self.yAxisLabel.setFrameShape(QFrame.Shape.Box) + self.yAxisLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.yAxisBox.addWidget(self.yAxisLabel) + + self.yAxisBar = QProgressBar(Dialog) + self.yAxisBar.setObjectName(u"yAxisBar") + self.yAxisBar.setMinimum(-512) + self.yAxisBar.setMaximum(512) + self.yAxisBar.setValue(-200) + + self.yAxisBox.addWidget(self.yAxisBar) + + + self.mainBox.addLayout(self.yAxisBox) + + self.verticalSpacer_1 = QSpacerItem(20, 25, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.mainBox.addItem(self.verticalSpacer_1) + + self.xDeadzoneBox = QHBoxLayout() + self.xDeadzoneBox.setSpacing(10) + self.xDeadzoneBox.setObjectName(u"xDeadzoneBox") + self.xDeadzoneBox.setContentsMargins(-1, 0, -1, -1) + self.xDeadzoneLabel = QLabel(Dialog) + self.xDeadzoneLabel.setObjectName(u"xDeadzoneLabel") + self.xDeadzoneLabel.setMaximumSize(QSize(100, 16777215)) + self.xDeadzoneLabel.setFrameShape(QFrame.Shape.Box) + self.xDeadzoneLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.xDeadzoneBox.addWidget(self.xDeadzoneLabel) + + self.xDeadzoneInput = QSpinBox(Dialog) + self.xDeadzoneInput.setObjectName(u"xDeadzoneInput") + self.xDeadzoneInput.setMinimum(-512) + self.xDeadzoneInput.setMaximum(512) + + self.xDeadzoneBox.addWidget(self.xDeadzoneInput) + + + self.mainBox.addLayout(self.xDeadzoneBox) + + self.yDeadzoneBox = QHBoxLayout() + self.yDeadzoneBox.setSpacing(10) + self.yDeadzoneBox.setObjectName(u"yDeadzoneBox") + self.yDeadzoneBox.setContentsMargins(0, -1, 0, -1) + self.yDeadzoneLabel = QLabel(Dialog) + self.yDeadzoneLabel.setObjectName(u"yDeadzoneLabel") + self.yDeadzoneLabel.setMinimumSize(QSize(100, 0)) + self.yDeadzoneLabel.setMaximumSize(QSize(100, 16777215)) + self.yDeadzoneLabel.setFrameShape(QFrame.Shape.Box) + self.yDeadzoneLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.yDeadzoneBox.addWidget(self.yDeadzoneLabel) + + self.yDeadzoneInput = QSpinBox(Dialog) + self.yDeadzoneInput.setObjectName(u"yDeadzoneInput") + self.yDeadzoneInput.setMinimum(-512) + self.yDeadzoneInput.setMaximum(512) + + self.yDeadzoneBox.addWidget(self.yDeadzoneInput) + + + self.mainBox.addLayout(self.yDeadzoneBox) + + self.verticalSpacer_2 = QSpacerItem(20, 8, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.mainBox.addItem(self.verticalSpacer_2) + + self.yOffsetBox = QHBoxLayout() + self.yOffsetBox.setSpacing(10) + self.yOffsetBox.setObjectName(u"yOffsetBox") + self.yOffsetBox.setContentsMargins(0, 0, -1, -1) + self.yOffsetLabel = QLabel(Dialog) + self.yOffsetLabel.setObjectName(u"yOffsetLabel") + self.yOffsetLabel.setMaximumSize(QSize(100, 16777215)) + self.yOffsetLabel.setFrameShape(QFrame.Shape.Box) + self.yOffsetLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.yOffsetBox.addWidget(self.yOffsetLabel) + + self.yOffsetInput = QSpinBox(Dialog) + self.yOffsetInput.setObjectName(u"yOffsetInput") + self.yOffsetInput.setMinimum(-512) + self.yOffsetInput.setMaximum(512) + + self.yOffsetBox.addWidget(self.yOffsetInput) + + + self.mainBox.addLayout(self.yOffsetBox) + + self.xOffsetBox = QHBoxLayout() + self.xOffsetBox.setSpacing(10) + self.xOffsetBox.setObjectName(u"xOffsetBox") + self.xOffsetBox.setContentsMargins(-1, 0, -1, -1) + self.xOffsetLabel = QLabel(Dialog) + self.xOffsetLabel.setObjectName(u"xOffsetLabel") + self.xOffsetLabel.setMaximumSize(QSize(100, 16777215)) + self.xOffsetLabel.setFrameShape(QFrame.Shape.Box) + self.xOffsetLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.xOffsetBox.addWidget(self.xOffsetLabel) + + self.xOffsetInput = QSpinBox(Dialog) + self.xOffsetInput.setObjectName(u"xOffsetInput") + self.xOffsetInput.setMinimum(-512) + self.xOffsetInput.setMaximum(512) + + self.xOffsetBox.addWidget(self.xOffsetInput) + + + self.mainBox.addLayout(self.xOffsetBox) + + self.verticalSpacer_3 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self.mainBox.addItem(self.verticalSpacer_3) + + self.buttonBox = QDialogButtonBox(Dialog) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setOrientation(Qt.Orientation.Horizontal) + self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Ok) + + self.mainBox.addWidget(self.buttonBox) + + self.verticalSpacer_4 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.mainBox.addItem(self.verticalSpacer_4) + + + self.verticalLayout_1.addLayout(self.mainBox) + + + self.retranslateUi(Dialog) + self.buttonBox.accepted.connect(Dialog.accept) + + QMetaObject.connectSlotsByName(Dialog) + # setupUi + + def retranslateUi(self, Dialog): + Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Joystick Configuration", None)) + self.xAxisLabel.setText(QCoreApplication.translate("Dialog", u"X Axis", None)) + self.xAxisBar.setFormat(QCoreApplication.translate("Dialog", u"%p", None)) + self.yAxisLabel.setText(QCoreApplication.translate("Dialog", u"Y Axis", None)) + self.yAxisBar.setFormat(QCoreApplication.translate("Dialog", u"%p", None)) + self.xDeadzoneLabel.setText(QCoreApplication.translate("Dialog", u"X Deadzone", None)) + self.yDeadzoneLabel.setText(QCoreApplication.translate("Dialog", u"Y Deadzone", None)) + self.yOffsetLabel.setText(QCoreApplication.translate("Dialog", u"Y Offset", None)) + self.xOffsetLabel.setText(QCoreApplication.translate("Dialog", u"X Offset", None)) + # retranslateUi + diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_main_window.py b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_main_window.py index e352898..c6c142f 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_main_window.py +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_main_window.py @@ -1,2233 +1,2238 @@ -# -*- coding: utf-8 -*- - -################################################################################ -## Form generated from reading UI file 'main_window.ui' -## -## Created by: Qt User Interface Compiler version 6.7.2 -## -## WARNING! All changes made in this file will be lost when recompiling UI file! -################################################################################ - -from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, - QMetaObject, QObject, QPoint, QRect, - QSize, QTime, QUrl, Qt) -from PySide6.QtGui import (QAction, QBrush, QColor, QConicalGradient, - QCursor, QFont, QFontDatabase, QGradient, - QIcon, QImage, QKeySequence, QLinearGradient, - QPainter, QPalette, QPixmap, QRadialGradient, - QTransform) -from PySide6.QtWidgets import (QApplication, QCheckBox, QComboBox, QFrame, - QGridLayout, QGroupBox, QHBoxLayout, QLCDNumber, - QLabel, QLayout, QLineEdit, QMainWindow, - QMenu, QMenuBar, QPushButton, QSizePolicy, - QSlider, QSpacerItem, QTabWidget, QTextBrowser, - QVBoxLayout, QWidget) - -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - if not MainWindow.objectName(): - MainWindow.setObjectName(u"MainWindow") - MainWindow.resize(1024, 600) - sizePolicy = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) - MainWindow.setSizePolicy(sizePolicy) - MainWindow.setMinimumSize(QSize(1024, 600)) - MainWindow.setMaximumSize(QSize(1024, 600)) - self.actionRestart_Application = QAction(MainWindow) - self.actionRestart_Application.setObjectName(u"actionRestart_Application") - self.actionRestart_RPi = QAction(MainWindow) - self.actionRestart_RPi.setObjectName(u"actionRestart_RPi") - self.actionShutdown_System = QAction(MainWindow) - self.actionShutdown_System.setObjectName(u"actionShutdown_System") - self.actionCheck_Robot_Connection = QAction(MainWindow) - self.actionCheck_Robot_Connection.setObjectName(u"actionCheck_Robot_Connection") - self.actionCheck_Wi_Fi_Connection = QAction(MainWindow) - self.actionCheck_Wi_Fi_Connection.setObjectName(u"actionCheck_Wi_Fi_Connection") - self.actionCheck_WAN_Connection = QAction(MainWindow) - self.actionCheck_WAN_Connection.setObjectName(u"actionCheck_WAN_Connection") - self.actionJoystick = QAction(MainWindow) - self.actionJoystick.setObjectName(u"actionJoystick") - self.actionTest_Buttons_Switches = QAction(MainWindow) - self.actionTest_Buttons_Switches.setObjectName(u"actionTest_Buttons_Switches") - self.actionAbout = QAction(MainWindow) - self.actionAbout.setObjectName(u"actionAbout") - self.centralWidget = QWidget(MainWindow) - self.centralWidget.setObjectName(u"centralWidget") - self.centralWidget.setEnabled(True) - self.pages = QTabWidget(self.centralWidget) - self.pages.setObjectName(u"pages") - self.pages.setGeometry(QRect(0, 0, 1024, 577)) - sizePolicy.setHeightForWidth(self.pages.sizePolicy().hasHeightForWidth()) - self.pages.setSizePolicy(sizePolicy) - self.pages.setMaximumSize(QSize(1024, 577)) - self.pages.setCursor(QCursor(Qt.CursorShape.ArrowCursor)) - self.pages.setTabsClosable(False) - self.pages.setMovable(False) - self.pages.setTabBarAutoHide(False) - self.mainTab = QWidget() - self.mainTab.setObjectName(u"mainTab") - self.viewport = QLabel(self.mainTab) - self.viewport.setObjectName(u"viewport") - self.viewport.setGeometry(QRect(20, 20, 980, 430)) - sizePolicy.setHeightForWidth(self.viewport.sizePolicy().hasHeightForWidth()) - self.viewport.setSizePolicy(sizePolicy) - self.viewport.setMinimumSize(QSize(980, 430)) - self.viewport.setMaximumSize(QSize(980, 430)) - self.viewport.setMouseTracking(False) - self.viewport.setFrameShape(QFrame.Shape.Box) - self.viewport.setFrameShadow(QFrame.Shadow.Sunken) - self.viewport.setAlignment(Qt.AlignmentFlag.AlignCenter) - self.viewportOptsBox = QGroupBox(self.mainTab) - self.viewportOptsBox.setObjectName(u"viewportOptsBox") - self.viewportOptsBox.setGeometry(QRect(20, 460, 360, 70)) - self.gridLayout = QGridLayout(self.viewportOptsBox) - self.gridLayout.setObjectName(u"gridLayout") - self.viewportFpsLabel = QLabel(self.viewportOptsBox) - self.viewportFpsLabel.setObjectName(u"viewportFpsLabel") - - self.gridLayout.addWidget(self.viewportFpsLabel, 0, 2, 1, 1) - - self.viewportFpsValue = QLineEdit(self.viewportOptsBox) - self.viewportFpsValue.setObjectName(u"viewportFpsValue") - sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) - sizePolicy1.setHorizontalStretch(0) - sizePolicy1.setVerticalStretch(0) - sizePolicy1.setHeightForWidth(self.viewportFpsValue.sizePolicy().hasHeightForWidth()) - self.viewportFpsValue.setSizePolicy(sizePolicy1) - font = QFont() - font.setPointSize(12) - self.viewportFpsValue.setFont(font) - self.viewportFpsValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.viewportFpsValue.setFrame(True) - self.viewportFpsValue.setDragEnabled(True) - self.viewportFpsValue.setReadOnly(True) - - self.gridLayout.addWidget(self.viewportFpsValue, 0, 3, 1, 1) - - self.viewportSelector = QComboBox(self.viewportOptsBox) - self.viewportSelector.addItem("") - self.viewportSelector.addItem("") - self.viewportSelector.addItem("") - self.viewportSelector.setObjectName(u"viewportSelector") - sizePolicy1.setHeightForWidth(self.viewportSelector.sizePolicy().hasHeightForWidth()) - self.viewportSelector.setSizePolicy(sizePolicy1) - self.viewportSelector.setCursor(QCursor(Qt.CursorShape.CrossCursor)) - - self.gridLayout.addWidget(self.viewportSelector, 0, 0, 1, 1) - - self.horizontalSpacer_1 = QSpacerItem(10, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.gridLayout.addItem(self.horizontalSpacer_1, 0, 1, 1, 1) - - self.camLedsBox = QGroupBox(self.mainTab) - self.camLedsBox.setObjectName(u"camLedsBox") - self.camLedsBox.setGeometry(QRect(400, 460, 375, 70)) - sizePolicy.setHeightForWidth(self.camLedsBox.sizePolicy().hasHeightForWidth()) - self.camLedsBox.setSizePolicy(sizePolicy) - self.horizontalLayout_1 = QHBoxLayout(self.camLedsBox) - self.horizontalLayout_1.setObjectName(u"horizontalLayout_1") - self.horizontalLayout_1.setContentsMargins(12, -1, -1, -1) - self.camLedsBrightnessSlider = QSlider(self.camLedsBox) - self.camLedsBrightnessSlider.setObjectName(u"camLedsBrightnessSlider") - self.camLedsBrightnessSlider.setMaximum(4095) - self.camLedsBrightnessSlider.setSingleStep(4) - self.camLedsBrightnessSlider.setOrientation(Qt.Orientation.Horizontal) - - self.horizontalLayout_1.addWidget(self.camLedsBrightnessSlider) - - self.camLedsBrightnessLabel = QLabel(self.camLedsBox) - self.camLedsBrightnessLabel.setObjectName(u"camLedsBrightnessLabel") - - self.horizontalLayout_1.addWidget(self.camLedsBrightnessLabel) - - self.horizontalSpacer_2 = QSpacerItem(10, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.horizontalLayout_1.addItem(self.horizontalSpacer_2) - - self.camLed1Check = QCheckBox(self.camLedsBox) - self.camLed1Check.setObjectName(u"camLed1Check") - - self.horizontalLayout_1.addWidget(self.camLed1Check) - - self.camLed2Check = QCheckBox(self.camLedsBox) - self.camLed2Check.setObjectName(u"camLed2Check") - - self.horizontalLayout_1.addWidget(self.camLed2Check) - - self.camLed3Check = QCheckBox(self.camLedsBox) - self.camLed3Check.setObjectName(u"camLed3Check") - - self.horizontalLayout_1.addWidget(self.camLed3Check) - - self.camLed4Check = QCheckBox(self.camLedsBox) - self.camLed4Check.setObjectName(u"camLed4Check") - - self.horizontalLayout_1.addWidget(self.camLed4Check) - - self.telemetryBox = QGroupBox(self.mainTab) - self.telemetryBox.setObjectName(u"telemetryBox") - self.telemetryBox.setGeometry(QRect(795, 460, 204, 70)) - sizePolicy.setHeightForWidth(self.telemetryBox.sizePolicy().hasHeightForWidth()) - self.telemetryBox.setSizePolicy(sizePolicy) - self.horizontalLayout_2 = QHBoxLayout(self.telemetryBox) - self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") - self.horizontalLayout_2.setContentsMargins(12, -1, 12, -1) - self.teleBatteryLabel = QLabel(self.telemetryBox) - self.teleBatteryLabel.setObjectName(u"teleBatteryLabel") - sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) - sizePolicy2.setHorizontalStretch(0) - sizePolicy2.setVerticalStretch(0) - sizePolicy2.setHeightForWidth(self.teleBatteryLabel.sizePolicy().hasHeightForWidth()) - self.teleBatteryLabel.setSizePolicy(sizePolicy2) - - self.horizontalLayout_2.addWidget(self.teleBatteryLabel) - - self.teleBatteryValue = QLineEdit(self.telemetryBox) - self.teleBatteryValue.setObjectName(u"teleBatteryValue") - sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - sizePolicy3.setHorizontalStretch(0) - sizePolicy3.setVerticalStretch(0) - sizePolicy3.setHeightForWidth(self.teleBatteryValue.sizePolicy().hasHeightForWidth()) - self.teleBatteryValue.setSizePolicy(sizePolicy3) - self.teleBatteryValue.setFont(font) - self.teleBatteryValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.teleBatteryValue.setFrame(True) - self.teleBatteryValue.setDragEnabled(True) - self.teleBatteryValue.setReadOnly(True) - - self.horizontalLayout_2.addWidget(self.teleBatteryValue) - - self.teleBatteryUnits = QLabel(self.telemetryBox) - self.teleBatteryUnits.setObjectName(u"teleBatteryUnits") - - self.horizontalLayout_2.addWidget(self.teleBatteryUnits) - - self.pages.addTab(self.mainTab, "") - self.sensorsTab = QWidget() - self.sensorsTab.setObjectName(u"sensorsTab") - self.microswSensBox = QGroupBox(self.sensorsTab) - self.microswSensBox.setObjectName(u"microswSensBox") - self.microswSensBox.setGeometry(QRect(462, 20, 195, 110)) - self.gridLayout_3 = QGridLayout(self.microswSensBox) - self.gridLayout_3.setObjectName(u"gridLayout_3") - self.microswSensIndicatorFL = QLabel(self.microswSensBox) - self.microswSensIndicatorFL.setObjectName(u"microswSensIndicatorFL") - sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) - sizePolicy4.setHorizontalStretch(0) - sizePolicy4.setVerticalStretch(0) - sizePolicy4.setHeightForWidth(self.microswSensIndicatorFL.sizePolicy().hasHeightForWidth()) - self.microswSensIndicatorFL.setSizePolicy(sizePolicy4) - self.microswSensIndicatorFL.setAutoFillBackground(False) - self.microswSensIndicatorFL.setFrameShape(QFrame.Shape.Box) - self.microswSensIndicatorFL.setFrameShadow(QFrame.Shadow.Plain) - self.microswSensIndicatorFL.setLineWidth(1) - self.microswSensIndicatorFL.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_3.addWidget(self.microswSensIndicatorFL, 0, 0, 1, 1) - - self.microswSensIndicatorBL = QLabel(self.microswSensBox) - self.microswSensIndicatorBL.setObjectName(u"microswSensIndicatorBL") - sizePolicy4.setHeightForWidth(self.microswSensIndicatorBL.sizePolicy().hasHeightForWidth()) - self.microswSensIndicatorBL.setSizePolicy(sizePolicy4) - self.microswSensIndicatorBL.setAutoFillBackground(False) - self.microswSensIndicatorBL.setFrameShape(QFrame.Shape.Box) - self.microswSensIndicatorBL.setFrameShadow(QFrame.Shadow.Plain) - self.microswSensIndicatorBL.setLineWidth(1) - self.microswSensIndicatorBL.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_3.addWidget(self.microswSensIndicatorBL, 2, 0, 1, 1) - - self.microswSensIndicatorFR = QLabel(self.microswSensBox) - self.microswSensIndicatorFR.setObjectName(u"microswSensIndicatorFR") - sizePolicy4.setHeightForWidth(self.microswSensIndicatorFR.sizePolicy().hasHeightForWidth()) - self.microswSensIndicatorFR.setSizePolicy(sizePolicy4) - self.microswSensIndicatorFR.setAutoFillBackground(False) - self.microswSensIndicatorFR.setFrameShape(QFrame.Shape.Box) - self.microswSensIndicatorFR.setFrameShadow(QFrame.Shadow.Plain) - self.microswSensIndicatorFR.setLineWidth(1) - self.microswSensIndicatorFR.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_3.addWidget(self.microswSensIndicatorFR, 0, 1, 1, 1) - - self.microswSensIndicatorBR = QLabel(self.microswSensBox) - self.microswSensIndicatorBR.setObjectName(u"microswSensIndicatorBR") - sizePolicy4.setHeightForWidth(self.microswSensIndicatorBR.sizePolicy().hasHeightForWidth()) - self.microswSensIndicatorBR.setSizePolicy(sizePolicy4) - self.microswSensIndicatorBR.setAutoFillBackground(False) - self.microswSensIndicatorBR.setFrameShape(QFrame.Shape.Box) - self.microswSensIndicatorBR.setFrameShadow(QFrame.Shadow.Plain) - self.microswSensIndicatorBR.setLineWidth(1) - self.microswSensIndicatorBR.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_3.addWidget(self.microswSensIndicatorBR, 2, 1, 1, 1) - - self.imuSensBox = QGroupBox(self.sensorsTab) - self.imuSensBox.setObjectName(u"imuSensBox") - self.imuSensBox.setGeometry(QRect(245, 215, 195, 305)) - self.verticalLayout_1 = QVBoxLayout(self.imuSensBox) - self.verticalLayout_1.setObjectName(u"verticalLayout_1") - self.imuSensAccelXBox = QHBoxLayout() - self.imuSensAccelXBox.setObjectName(u"imuSensAccelXBox") - self.imuSensAccelXLabel = QLabel(self.imuSensBox) - self.imuSensAccelXLabel.setObjectName(u"imuSensAccelXLabel") - font1 = QFont() - font1.setPointSize(11) - self.imuSensAccelXLabel.setFont(font1) - self.imuSensAccelXLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.imuSensAccelXBox.addWidget(self.imuSensAccelXLabel) - - self.horizontalSpacer_3 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.imuSensAccelXBox.addItem(self.horizontalSpacer_3) - - self.imuSensAccelXValue = QLineEdit(self.imuSensBox) - self.imuSensAccelXValue.setObjectName(u"imuSensAccelXValue") - sizePolicy3.setHeightForWidth(self.imuSensAccelXValue.sizePolicy().hasHeightForWidth()) - self.imuSensAccelXValue.setSizePolicy(sizePolicy3) - self.imuSensAccelXValue.setFont(font) - self.imuSensAccelXValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.imuSensAccelXValue.setFrame(True) - self.imuSensAccelXValue.setDragEnabled(True) - self.imuSensAccelXValue.setReadOnly(True) - - self.imuSensAccelXBox.addWidget(self.imuSensAccelXValue) - - self.imuSensAccelXUnit = QLabel(self.imuSensBox) - self.imuSensAccelXUnit.setObjectName(u"imuSensAccelXUnit") - - self.imuSensAccelXBox.addWidget(self.imuSensAccelXUnit) - - - self.verticalLayout_1.addLayout(self.imuSensAccelXBox) - - self.imuSensAccelYBox = QHBoxLayout() - self.imuSensAccelYBox.setObjectName(u"imuSensAccelYBox") - self.imuSensAccelYLabel = QLabel(self.imuSensBox) - self.imuSensAccelYLabel.setObjectName(u"imuSensAccelYLabel") - self.imuSensAccelYLabel.setFont(font1) - self.imuSensAccelYLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.imuSensAccelYBox.addWidget(self.imuSensAccelYLabel) - - self.horizontalSpacer_4 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.imuSensAccelYBox.addItem(self.horizontalSpacer_4) - - self.imuSensAccelYValue = QLineEdit(self.imuSensBox) - self.imuSensAccelYValue.setObjectName(u"imuSensAccelYValue") - sizePolicy3.setHeightForWidth(self.imuSensAccelYValue.sizePolicy().hasHeightForWidth()) - self.imuSensAccelYValue.setSizePolicy(sizePolicy3) - self.imuSensAccelYValue.setFont(font) - self.imuSensAccelYValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.imuSensAccelYValue.setFrame(True) - self.imuSensAccelYValue.setDragEnabled(True) - self.imuSensAccelYValue.setReadOnly(True) - - self.imuSensAccelYBox.addWidget(self.imuSensAccelYValue) - - self.imuSensAccelYUnit = QLabel(self.imuSensBox) - self.imuSensAccelYUnit.setObjectName(u"imuSensAccelYUnit") - - self.imuSensAccelYBox.addWidget(self.imuSensAccelYUnit) - - - self.verticalLayout_1.addLayout(self.imuSensAccelYBox) - - self.imuSensAccelZBox = QHBoxLayout() - self.imuSensAccelZBox.setObjectName(u"imuSensAccelZBox") - self.imuSensAccelZLabel = QLabel(self.imuSensBox) - self.imuSensAccelZLabel.setObjectName(u"imuSensAccelZLabel") - self.imuSensAccelZLabel.setFont(font1) - self.imuSensAccelZLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.imuSensAccelZBox.addWidget(self.imuSensAccelZLabel) - - self.horizontalSpacer_5 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.imuSensAccelZBox.addItem(self.horizontalSpacer_5) - - self.imuSensAccelZValue = QLineEdit(self.imuSensBox) - self.imuSensAccelZValue.setObjectName(u"imuSensAccelZValue") - sizePolicy3.setHeightForWidth(self.imuSensAccelZValue.sizePolicy().hasHeightForWidth()) - self.imuSensAccelZValue.setSizePolicy(sizePolicy3) - self.imuSensAccelZValue.setFont(font) - self.imuSensAccelZValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.imuSensAccelZValue.setFrame(True) - self.imuSensAccelZValue.setDragEnabled(True) - self.imuSensAccelZValue.setReadOnly(True) - - self.imuSensAccelZBox.addWidget(self.imuSensAccelZValue) - - self.imuSensAccelZUnit = QLabel(self.imuSensBox) - self.imuSensAccelZUnit.setObjectName(u"imuSensAccelZUnit") - - self.imuSensAccelZBox.addWidget(self.imuSensAccelZUnit) - - - self.verticalLayout_1.addLayout(self.imuSensAccelZBox) - - self.verticalSpacer_1 = QSpacerItem(20, 8, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.verticalLayout_1.addItem(self.verticalSpacer_1) - - self.imuSensGyroXBox = QHBoxLayout() - self.imuSensGyroXBox.setObjectName(u"imuSensGyroXBox") - self.imuSensGyroXLabel = QLabel(self.imuSensBox) - self.imuSensGyroXLabel.setObjectName(u"imuSensGyroXLabel") - self.imuSensGyroXLabel.setFont(font1) - self.imuSensGyroXLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.imuSensGyroXBox.addWidget(self.imuSensGyroXLabel) - - self.horizontalSpacer_6 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.imuSensGyroXBox.addItem(self.horizontalSpacer_6) - - self.imuSensGyroXValue = QLineEdit(self.imuSensBox) - self.imuSensGyroXValue.setObjectName(u"imuSensGyroXValue") - sizePolicy3.setHeightForWidth(self.imuSensGyroXValue.sizePolicy().hasHeightForWidth()) - self.imuSensGyroXValue.setSizePolicy(sizePolicy3) - self.imuSensGyroXValue.setFont(font) - self.imuSensGyroXValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.imuSensGyroXValue.setFrame(True) - self.imuSensGyroXValue.setDragEnabled(True) - self.imuSensGyroXValue.setReadOnly(True) - - self.imuSensGyroXBox.addWidget(self.imuSensGyroXValue) - - self.imuSensGyroXUnit = QLabel(self.imuSensBox) - self.imuSensGyroXUnit.setObjectName(u"imuSensGyroXUnit") - - self.imuSensGyroXBox.addWidget(self.imuSensGyroXUnit) - - - self.verticalLayout_1.addLayout(self.imuSensGyroXBox) - - self.imuSensGyroYBox = QHBoxLayout() - self.imuSensGyroYBox.setObjectName(u"imuSensGyroYBox") - self.imuSensGyroYLabel = QLabel(self.imuSensBox) - self.imuSensGyroYLabel.setObjectName(u"imuSensGyroYLabel") - self.imuSensGyroYLabel.setFont(font1) - self.imuSensGyroYLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.imuSensGyroYBox.addWidget(self.imuSensGyroYLabel) - - self.horizontalSpacer_7 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.imuSensGyroYBox.addItem(self.horizontalSpacer_7) - - self.imuSensGyroYValue = QLineEdit(self.imuSensBox) - self.imuSensGyroYValue.setObjectName(u"imuSensGyroYValue") - sizePolicy3.setHeightForWidth(self.imuSensGyroYValue.sizePolicy().hasHeightForWidth()) - self.imuSensGyroYValue.setSizePolicy(sizePolicy3) - self.imuSensGyroYValue.setFont(font) - self.imuSensGyroYValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.imuSensGyroYValue.setFrame(True) - self.imuSensGyroYValue.setDragEnabled(True) - self.imuSensGyroYValue.setReadOnly(True) - - self.imuSensGyroYBox.addWidget(self.imuSensGyroYValue) - - self.imuSensGyroYUnit = QLabel(self.imuSensBox) - self.imuSensGyroYUnit.setObjectName(u"imuSensGyroYUnit") - - self.imuSensGyroYBox.addWidget(self.imuSensGyroYUnit) - - - self.verticalLayout_1.addLayout(self.imuSensGyroYBox) - - self.imuSensGyroZBox = QHBoxLayout() - self.imuSensGyroZBox.setObjectName(u"imuSensGyroZBox") - self.imuSensGyroZLabel = QLabel(self.imuSensBox) - self.imuSensGyroZLabel.setObjectName(u"imuSensGyroZLabel") - self.imuSensGyroZLabel.setFont(font1) - self.imuSensGyroZLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.imuSensGyroZBox.addWidget(self.imuSensGyroZLabel) - - self.horizontalSpacer_8 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.imuSensGyroZBox.addItem(self.horizontalSpacer_8) - - self.imuSensGyroZValue = QLineEdit(self.imuSensBox) - self.imuSensGyroZValue.setObjectName(u"imuSensGyroZValue") - sizePolicy3.setHeightForWidth(self.imuSensGyroZValue.sizePolicy().hasHeightForWidth()) - self.imuSensGyroZValue.setSizePolicy(sizePolicy3) - self.imuSensGyroZValue.setFont(font) - self.imuSensGyroZValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.imuSensGyroZValue.setFrame(True) - self.imuSensGyroZValue.setDragEnabled(True) - self.imuSensGyroZValue.setReadOnly(True) - - self.imuSensGyroZBox.addWidget(self.imuSensGyroZValue) - - self.imuSensGyroZUnit = QLabel(self.imuSensBox) - self.imuSensGyroZUnit.setObjectName(u"imuSensGyroZUnit") - - self.imuSensGyroZBox.addWidget(self.imuSensGyroZUnit) - - - self.verticalLayout_1.addLayout(self.imuSensGyroZBox) - - self.verticalSpacer_2 = QSpacerItem(20, 8, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.verticalLayout_1.addItem(self.verticalSpacer_2) - - self.imuSensCompXBox = QHBoxLayout() - self.imuSensCompXBox.setObjectName(u"imuSensCompXBox") - self.imuSensCompXLabel = QLabel(self.imuSensBox) - self.imuSensCompXLabel.setObjectName(u"imuSensCompXLabel") - self.imuSensCompXLabel.setFont(font1) - self.imuSensCompXLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.imuSensCompXBox.addWidget(self.imuSensCompXLabel) - - self.horizontalSpacer_9 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.imuSensCompXBox.addItem(self.horizontalSpacer_9) - - self.imuSensCompXValue = QLineEdit(self.imuSensBox) - self.imuSensCompXValue.setObjectName(u"imuSensCompXValue") - sizePolicy3.setHeightForWidth(self.imuSensCompXValue.sizePolicy().hasHeightForWidth()) - self.imuSensCompXValue.setSizePolicy(sizePolicy3) - self.imuSensCompXValue.setFont(font) - self.imuSensCompXValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.imuSensCompXValue.setFrame(True) - self.imuSensCompXValue.setDragEnabled(True) - self.imuSensCompXValue.setReadOnly(True) - - self.imuSensCompXBox.addWidget(self.imuSensCompXValue) - - self.imuSensCompXUnit = QLabel(self.imuSensBox) - self.imuSensCompXUnit.setObjectName(u"imuSensCompXUnit") - - self.imuSensCompXBox.addWidget(self.imuSensCompXUnit) - - - self.verticalLayout_1.addLayout(self.imuSensCompXBox) - - self.imuSensCompYBox = QHBoxLayout() - self.imuSensCompYBox.setObjectName(u"imuSensCompYBox") - self.imuSensCompYLabel = QLabel(self.imuSensBox) - self.imuSensCompYLabel.setObjectName(u"imuSensCompYLabel") - self.imuSensCompYLabel.setFont(font1) - self.imuSensCompYLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.imuSensCompYBox.addWidget(self.imuSensCompYLabel) - - self.horizontalSpacer_10 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.imuSensCompYBox.addItem(self.horizontalSpacer_10) - - self.imuSensCompYValue = QLineEdit(self.imuSensBox) - self.imuSensCompYValue.setObjectName(u"imuSensCompYValue") - sizePolicy3.setHeightForWidth(self.imuSensCompYValue.sizePolicy().hasHeightForWidth()) - self.imuSensCompYValue.setSizePolicy(sizePolicy3) - self.imuSensCompYValue.setFont(font) - self.imuSensCompYValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.imuSensCompYValue.setFrame(True) - self.imuSensCompYValue.setDragEnabled(True) - self.imuSensCompYValue.setReadOnly(True) - - self.imuSensCompYBox.addWidget(self.imuSensCompYValue) - - self.imuSensCompYUnit = QLabel(self.imuSensBox) - self.imuSensCompYUnit.setObjectName(u"imuSensCompYUnit") - - self.imuSensCompYBox.addWidget(self.imuSensCompYUnit) - - - self.verticalLayout_1.addLayout(self.imuSensCompYBox) - - self.imuSensCompZBox = QHBoxLayout() - self.imuSensCompZBox.setObjectName(u"imuSensCompZBox") - self.imuSensCompZLabel = QLabel(self.imuSensBox) - self.imuSensCompZLabel.setObjectName(u"imuSensCompZLabel") - self.imuSensCompZLabel.setFont(font1) - self.imuSensCompZLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.imuSensCompZBox.addWidget(self.imuSensCompZLabel) - - self.horizontalSpacer_11 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.imuSensCompZBox.addItem(self.horizontalSpacer_11) - - self.imuSensCompZValue = QLineEdit(self.imuSensBox) - self.imuSensCompZValue.setObjectName(u"imuSensCompZValue") - sizePolicy3.setHeightForWidth(self.imuSensCompZValue.sizePolicy().hasHeightForWidth()) - self.imuSensCompZValue.setSizePolicy(sizePolicy3) - self.imuSensCompZValue.setFont(font) - self.imuSensCompZValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.imuSensCompZValue.setFrame(True) - self.imuSensCompZValue.setDragEnabled(True) - self.imuSensCompZValue.setReadOnly(True) - - self.imuSensCompZBox.addWidget(self.imuSensCompZValue) - - self.imuSensCompZUnit = QLabel(self.imuSensBox) - self.imuSensCompZUnit.setObjectName(u"imuSensCompZUnit") - - self.imuSensCompZBox.addWidget(self.imuSensCompZUnit) - - - self.verticalLayout_1.addLayout(self.imuSensCompZBox) - - self.envSensBox = QGroupBox(self.sensorsTab) - self.envSensBox.setObjectName(u"envSensBox") - self.envSensBox.setGeometry(QRect(28, 185, 195, 210)) - sizePolicy.setHeightForWidth(self.envSensBox.sizePolicy().hasHeightForWidth()) - self.envSensBox.setSizePolicy(sizePolicy) - self.horizontalLayout_3 = QHBoxLayout(self.envSensBox) - self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") - self.envSensLabelsBox = QVBoxLayout() - self.envSensLabelsBox.setObjectName(u"envSensLabelsBox") - self.envSensTempLabel = QLabel(self.envSensBox) - self.envSensTempLabel.setObjectName(u"envSensTempLabel") - sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred) - sizePolicy5.setHorizontalStretch(0) - sizePolicy5.setVerticalStretch(0) - sizePolicy5.setHeightForWidth(self.envSensTempLabel.sizePolicy().hasHeightForWidth()) - self.envSensTempLabel.setSizePolicy(sizePolicy5) - - self.envSensLabelsBox.addWidget(self.envSensTempLabel) - - self.envSensHumLabel = QLabel(self.envSensBox) - self.envSensHumLabel.setObjectName(u"envSensHumLabel") - - self.envSensLabelsBox.addWidget(self.envSensHumLabel) - - self.envSensImuTempLabel = QLabel(self.envSensBox) - self.envSensImuTempLabel.setObjectName(u"envSensImuTempLabel") - - self.envSensLabelsBox.addWidget(self.envSensImuTempLabel) - - self.envSensPicoATempLabel = QLabel(self.envSensBox) - self.envSensPicoATempLabel.setObjectName(u"envSensPicoATempLabel") - - self.envSensLabelsBox.addWidget(self.envSensPicoATempLabel) - - self.envSensPicoBTempLabel = QLabel(self.envSensBox) - self.envSensPicoBTempLabel.setObjectName(u"envSensPicoBTempLabel") - - self.envSensLabelsBox.addWidget(self.envSensPicoBTempLabel) - - self.envSensPiTempLabel = QLabel(self.envSensBox) - self.envSensPiTempLabel.setObjectName(u"envSensPiTempLabel") - - self.envSensLabelsBox.addWidget(self.envSensPiTempLabel) - - - self.horizontalLayout_3.addLayout(self.envSensLabelsBox) - - self.horizontalSpacer_12 = QSpacerItem(2, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.horizontalLayout_3.addItem(self.horizontalSpacer_12) - - self.envSensValuesBox = QVBoxLayout() - self.envSensValuesBox.setObjectName(u"envSensValuesBox") - self.envSensValuesBox.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) - self.envSensTempValue = QLineEdit(self.envSensBox) - self.envSensTempValue.setObjectName(u"envSensTempValue") - sizePolicy1.setHeightForWidth(self.envSensTempValue.sizePolicy().hasHeightForWidth()) - self.envSensTempValue.setSizePolicy(sizePolicy1) - self.envSensTempValue.setFont(font) - self.envSensTempValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.envSensTempValue.setFrame(True) - self.envSensTempValue.setDragEnabled(True) - self.envSensTempValue.setReadOnly(True) - - self.envSensValuesBox.addWidget(self.envSensTempValue) - - self.envSensHumValue = QLineEdit(self.envSensBox) - self.envSensHumValue.setObjectName(u"envSensHumValue") - sizePolicy1.setHeightForWidth(self.envSensHumValue.sizePolicy().hasHeightForWidth()) - self.envSensHumValue.setSizePolicy(sizePolicy1) - self.envSensHumValue.setFont(font) - self.envSensHumValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.envSensHumValue.setFrame(True) - self.envSensHumValue.setDragEnabled(True) - self.envSensHumValue.setReadOnly(True) - - self.envSensValuesBox.addWidget(self.envSensHumValue) - - self.envSensImuTempValue = QLineEdit(self.envSensBox) - self.envSensImuTempValue.setObjectName(u"envSensImuTempValue") - sizePolicy1.setHeightForWidth(self.envSensImuTempValue.sizePolicy().hasHeightForWidth()) - self.envSensImuTempValue.setSizePolicy(sizePolicy1) - self.envSensImuTempValue.setFont(font) - self.envSensImuTempValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.envSensImuTempValue.setFrame(True) - self.envSensImuTempValue.setDragEnabled(True) - self.envSensImuTempValue.setReadOnly(True) - - self.envSensValuesBox.addWidget(self.envSensImuTempValue) - - self.envSensPicoATempValue = QLineEdit(self.envSensBox) - self.envSensPicoATempValue.setObjectName(u"envSensPicoATempValue") - sizePolicy1.setHeightForWidth(self.envSensPicoATempValue.sizePolicy().hasHeightForWidth()) - self.envSensPicoATempValue.setSizePolicy(sizePolicy1) - self.envSensPicoATempValue.setFont(font) - self.envSensPicoATempValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.envSensPicoATempValue.setFrame(True) - self.envSensPicoATempValue.setDragEnabled(True) - self.envSensPicoATempValue.setReadOnly(True) - - self.envSensValuesBox.addWidget(self.envSensPicoATempValue) - - self.envSensPicoBTempValue = QLineEdit(self.envSensBox) - self.envSensPicoBTempValue.setObjectName(u"envSensPicoBTempValue") - sizePolicy1.setHeightForWidth(self.envSensPicoBTempValue.sizePolicy().hasHeightForWidth()) - self.envSensPicoBTempValue.setSizePolicy(sizePolicy1) - self.envSensPicoBTempValue.setFont(font) - self.envSensPicoBTempValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.envSensPicoBTempValue.setFrame(True) - self.envSensPicoBTempValue.setDragEnabled(True) - self.envSensPicoBTempValue.setReadOnly(True) - - self.envSensValuesBox.addWidget(self.envSensPicoBTempValue) - - self.envSensPiTempValue = QLineEdit(self.envSensBox) - self.envSensPiTempValue.setObjectName(u"envSensPiTempValue") - sizePolicy1.setHeightForWidth(self.envSensPiTempValue.sizePolicy().hasHeightForWidth()) - self.envSensPiTempValue.setSizePolicy(sizePolicy1) - self.envSensPiTempValue.setFont(font) - self.envSensPiTempValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.envSensPiTempValue.setFrame(True) - self.envSensPiTempValue.setDragEnabled(True) - self.envSensPiTempValue.setReadOnly(True) - - self.envSensValuesBox.addWidget(self.envSensPiTempValue) - - - self.horizontalLayout_3.addLayout(self.envSensValuesBox) - - self.envSensUnitsBox = QVBoxLayout() - self.envSensUnitsBox.setObjectName(u"envSensUnitsBox") - self.envSensTempUnit = QLabel(self.envSensBox) - self.envSensTempUnit.setObjectName(u"envSensTempUnit") - - self.envSensUnitsBox.addWidget(self.envSensTempUnit) - - self.envSensHumUnit = QLabel(self.envSensBox) - self.envSensHumUnit.setObjectName(u"envSensHumUnit") - - self.envSensUnitsBox.addWidget(self.envSensHumUnit) - - self.envSensImuTempUnit = QLabel(self.envSensBox) - self.envSensImuTempUnit.setObjectName(u"envSensImuTempUnit") - - self.envSensUnitsBox.addWidget(self.envSensImuTempUnit) - - self.envSensPicoATempUnit = QLabel(self.envSensBox) - self.envSensPicoATempUnit.setObjectName(u"envSensPicoATempUnit") - - self.envSensUnitsBox.addWidget(self.envSensPicoATempUnit) - - self.envSensPicoBTempUnit = QLabel(self.envSensBox) - self.envSensPicoBTempUnit.setObjectName(u"envSensPicoBTempUnit") - - self.envSensUnitsBox.addWidget(self.envSensPicoBTempUnit) - - self.envSensPiTempUnit = QLabel(self.envSensBox) - self.envSensPiTempUnit.setObjectName(u"envSensPiTempUnit") - - self.envSensUnitsBox.addWidget(self.envSensPiTempUnit) - - - self.horizontalLayout_3.addLayout(self.envSensUnitsBox) - - self.cliffSensBox = QGroupBox(self.sensorsTab) - self.cliffSensBox.setObjectName(u"cliffSensBox") - self.cliffSensBox.setGeometry(QRect(245, 20, 195, 180)) - sizePolicy5.setHeightForWidth(self.cliffSensBox.sizePolicy().hasHeightForWidth()) - self.cliffSensBox.setSizePolicy(sizePolicy5) - self.gridLayout_2 = QGridLayout(self.cliffSensBox) - self.gridLayout_2.setObjectName(u"gridLayout_2") - self.cliffSensIndicatorF2 = QLabel(self.cliffSensBox) - self.cliffSensIndicatorF2.setObjectName(u"cliffSensIndicatorF2") - sizePolicy4.setHeightForWidth(self.cliffSensIndicatorF2.sizePolicy().hasHeightForWidth()) - self.cliffSensIndicatorF2.setSizePolicy(sizePolicy4) - self.cliffSensIndicatorF2.setAutoFillBackground(False) - self.cliffSensIndicatorF2.setFrameShape(QFrame.Shape.Box) - self.cliffSensIndicatorF2.setFrameShadow(QFrame.Shadow.Plain) - self.cliffSensIndicatorF2.setLineWidth(1) - self.cliffSensIndicatorF2.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_2.addWidget(self.cliffSensIndicatorF2, 1, 1, 1, 1) - - self.cliffSensIndicatorB2 = QLabel(self.cliffSensBox) - self.cliffSensIndicatorB2.setObjectName(u"cliffSensIndicatorB2") - sizePolicy4.setHeightForWidth(self.cliffSensIndicatorB2.sizePolicy().hasHeightForWidth()) - self.cliffSensIndicatorB2.setSizePolicy(sizePolicy4) - self.cliffSensIndicatorB2.setAutoFillBackground(False) - self.cliffSensIndicatorB2.setFrameShape(QFrame.Shape.Box) - self.cliffSensIndicatorB2.setFrameShadow(QFrame.Shadow.Plain) - self.cliffSensIndicatorB2.setLineWidth(1) - self.cliffSensIndicatorB2.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_2.addWidget(self.cliffSensIndicatorB2, 1, 0, 1, 1) - - self.cliffSensIndicatorF3 = QLabel(self.cliffSensBox) - self.cliffSensIndicatorF3.setObjectName(u"cliffSensIndicatorF3") - sizePolicy4.setHeightForWidth(self.cliffSensIndicatorF3.sizePolicy().hasHeightForWidth()) - self.cliffSensIndicatorF3.setSizePolicy(sizePolicy4) - self.cliffSensIndicatorF3.setAutoFillBackground(False) - self.cliffSensIndicatorF3.setFrameShape(QFrame.Shape.Box) - self.cliffSensIndicatorF3.setFrameShadow(QFrame.Shadow.Plain) - self.cliffSensIndicatorF3.setLineWidth(1) - self.cliffSensIndicatorF3.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_2.addWidget(self.cliffSensIndicatorF3, 2, 1, 1, 1) - - self.cliffSensIndicatorB1 = QLabel(self.cliffSensBox) - self.cliffSensIndicatorB1.setObjectName(u"cliffSensIndicatorB1") - sizePolicy4.setHeightForWidth(self.cliffSensIndicatorB1.sizePolicy().hasHeightForWidth()) - self.cliffSensIndicatorB1.setSizePolicy(sizePolicy4) - self.cliffSensIndicatorB1.setAutoFillBackground(False) - self.cliffSensIndicatorB1.setFrameShape(QFrame.Shape.Box) - self.cliffSensIndicatorB1.setFrameShadow(QFrame.Shadow.Plain) - self.cliffSensIndicatorB1.setLineWidth(1) - self.cliffSensIndicatorB1.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_2.addWidget(self.cliffSensIndicatorB1, 0, 0, 1, 1) - - self.cliffSensIndicatorB3 = QLabel(self.cliffSensBox) - self.cliffSensIndicatorB3.setObjectName(u"cliffSensIndicatorB3") - sizePolicy4.setHeightForWidth(self.cliffSensIndicatorB3.sizePolicy().hasHeightForWidth()) - self.cliffSensIndicatorB3.setSizePolicy(sizePolicy4) - self.cliffSensIndicatorB3.setAutoFillBackground(False) - self.cliffSensIndicatorB3.setFrameShape(QFrame.Shape.Box) - self.cliffSensIndicatorB3.setFrameShadow(QFrame.Shadow.Plain) - self.cliffSensIndicatorB3.setLineWidth(1) - self.cliffSensIndicatorB3.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_2.addWidget(self.cliffSensIndicatorB3, 2, 0, 1, 1) - - self.cliffSensIndicatorF1 = QLabel(self.cliffSensBox) - self.cliffSensIndicatorF1.setObjectName(u"cliffSensIndicatorF1") - sizePolicy4.setHeightForWidth(self.cliffSensIndicatorF1.sizePolicy().hasHeightForWidth()) - self.cliffSensIndicatorF1.setSizePolicy(sizePolicy4) - self.cliffSensIndicatorF1.setAutoFillBackground(False) - self.cliffSensIndicatorF1.setFrameShape(QFrame.Shape.Box) - self.cliffSensIndicatorF1.setFrameShadow(QFrame.Shadow.Plain) - self.cliffSensIndicatorF1.setLineWidth(1) - self.cliffSensIndicatorF1.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_2.addWidget(self.cliffSensIndicatorF1, 0, 1, 1, 1) - - self.cliffSensIndicatorB4 = QLabel(self.cliffSensBox) - self.cliffSensIndicatorB4.setObjectName(u"cliffSensIndicatorB4") - sizePolicy4.setHeightForWidth(self.cliffSensIndicatorB4.sizePolicy().hasHeightForWidth()) - self.cliffSensIndicatorB4.setSizePolicy(sizePolicy4) - self.cliffSensIndicatorB4.setAutoFillBackground(False) - self.cliffSensIndicatorB4.setFrameShape(QFrame.Shape.Box) - self.cliffSensIndicatorB4.setFrameShadow(QFrame.Shadow.Plain) - self.cliffSensIndicatorB4.setLineWidth(1) - self.cliffSensIndicatorB4.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_2.addWidget(self.cliffSensIndicatorB4, 3, 0, 1, 1) - - self.cliffSensIndicatorF4 = QLabel(self.cliffSensBox) - self.cliffSensIndicatorF4.setObjectName(u"cliffSensIndicatorF4") - sizePolicy4.setHeightForWidth(self.cliffSensIndicatorF4.sizePolicy().hasHeightForWidth()) - self.cliffSensIndicatorF4.setSizePolicy(sizePolicy4) - self.cliffSensIndicatorF4.setAutoFillBackground(False) - self.cliffSensIndicatorF4.setFrameShape(QFrame.Shape.Box) - self.cliffSensIndicatorF4.setFrameShadow(QFrame.Shadow.Plain) - self.cliffSensIndicatorF4.setLineWidth(1) - self.cliffSensIndicatorF4.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_2.addWidget(self.cliffSensIndicatorF4, 3, 1, 1, 1) - - self.ultrasonicSensBox = QGroupBox(self.sensorsTab) - self.ultrasonicSensBox.setObjectName(u"ultrasonicSensBox") - self.ultrasonicSensBox.setGeometry(QRect(28, 20, 195, 150)) - sizePolicy.setHeightForWidth(self.ultrasonicSensBox.sizePolicy().hasHeightForWidth()) - self.ultrasonicSensBox.setSizePolicy(sizePolicy) - self.horizontalLayout_4 = QHBoxLayout(self.ultrasonicSensBox) - self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") - self.ultrasonicSensLabelsBox = QVBoxLayout() - self.ultrasonicSensLabelsBox.setObjectName(u"ultrasonicSensLabelsBox") - self.ultrasonicSensLabelF = QLabel(self.ultrasonicSensBox) - self.ultrasonicSensLabelF.setObjectName(u"ultrasonicSensLabelF") - - self.ultrasonicSensLabelsBox.addWidget(self.ultrasonicSensLabelF) - - self.ultrasonicSensLabelB = QLabel(self.ultrasonicSensBox) - self.ultrasonicSensLabelB.setObjectName(u"ultrasonicSensLabelB") - - self.ultrasonicSensLabelsBox.addWidget(self.ultrasonicSensLabelB) - - self.ultrasonicSensLabelR = QLabel(self.ultrasonicSensBox) - self.ultrasonicSensLabelR.setObjectName(u"ultrasonicSensLabelR") - - self.ultrasonicSensLabelsBox.addWidget(self.ultrasonicSensLabelR) - - self.ultrasonicSensLabelL = QLabel(self.ultrasonicSensBox) - self.ultrasonicSensLabelL.setObjectName(u"ultrasonicSensLabelL") - - self.ultrasonicSensLabelsBox.addWidget(self.ultrasonicSensLabelL) - - - self.horizontalLayout_4.addLayout(self.ultrasonicSensLabelsBox) - - self.horizontalSpacer_13 = QSpacerItem(8, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.horizontalLayout_4.addItem(self.horizontalSpacer_13) - - self.ultrasonicSensValuesBox = QVBoxLayout() - self.ultrasonicSensValuesBox.setObjectName(u"ultrasonicSensValuesBox") - self.ultrasonicSensValueF = QLineEdit(self.ultrasonicSensBox) - self.ultrasonicSensValueF.setObjectName(u"ultrasonicSensValueF") - sizePolicy3.setHeightForWidth(self.ultrasonicSensValueF.sizePolicy().hasHeightForWidth()) - self.ultrasonicSensValueF.setSizePolicy(sizePolicy3) - self.ultrasonicSensValueF.setFont(font) - self.ultrasonicSensValueF.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.ultrasonicSensValueF.setFrame(True) - self.ultrasonicSensValueF.setDragEnabled(True) - self.ultrasonicSensValueF.setReadOnly(True) - - self.ultrasonicSensValuesBox.addWidget(self.ultrasonicSensValueF) - - self.ultrasonicSensValueB = QLineEdit(self.ultrasonicSensBox) - self.ultrasonicSensValueB.setObjectName(u"ultrasonicSensValueB") - sizePolicy3.setHeightForWidth(self.ultrasonicSensValueB.sizePolicy().hasHeightForWidth()) - self.ultrasonicSensValueB.setSizePolicy(sizePolicy3) - self.ultrasonicSensValueB.setFont(font) - self.ultrasonicSensValueB.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.ultrasonicSensValueB.setFrame(True) - self.ultrasonicSensValueB.setDragEnabled(True) - self.ultrasonicSensValueB.setReadOnly(True) - - self.ultrasonicSensValuesBox.addWidget(self.ultrasonicSensValueB) - - self.ultrasonicSensValueR = QLineEdit(self.ultrasonicSensBox) - self.ultrasonicSensValueR.setObjectName(u"ultrasonicSensValueR") - sizePolicy3.setHeightForWidth(self.ultrasonicSensValueR.sizePolicy().hasHeightForWidth()) - self.ultrasonicSensValueR.setSizePolicy(sizePolicy3) - self.ultrasonicSensValueR.setFont(font) - self.ultrasonicSensValueR.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.ultrasonicSensValueR.setFrame(True) - self.ultrasonicSensValueR.setDragEnabled(True) - self.ultrasonicSensValueR.setReadOnly(True) - - self.ultrasonicSensValuesBox.addWidget(self.ultrasonicSensValueR) - - self.ultrasonicSensValueL = QLineEdit(self.ultrasonicSensBox) - self.ultrasonicSensValueL.setObjectName(u"ultrasonicSensValueL") - sizePolicy3.setHeightForWidth(self.ultrasonicSensValueL.sizePolicy().hasHeightForWidth()) - self.ultrasonicSensValueL.setSizePolicy(sizePolicy3) - self.ultrasonicSensValueL.setFont(font) - self.ultrasonicSensValueL.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.ultrasonicSensValueL.setFrame(True) - self.ultrasonicSensValueL.setDragEnabled(True) - self.ultrasonicSensValueL.setReadOnly(True) - - self.ultrasonicSensValuesBox.addWidget(self.ultrasonicSensValueL) - - - self.horizontalLayout_4.addLayout(self.ultrasonicSensValuesBox) - - self.ultrasonicSensUnitsBox = QVBoxLayout() - self.ultrasonicSensUnitsBox.setObjectName(u"ultrasonicSensUnitsBox") - self.ultrasonicSensUnitF = QLabel(self.ultrasonicSensBox) - self.ultrasonicSensUnitF.setObjectName(u"ultrasonicSensUnitF") - - self.ultrasonicSensUnitsBox.addWidget(self.ultrasonicSensUnitF) - - self.ultrasonicSensUnitB = QLabel(self.ultrasonicSensBox) - self.ultrasonicSensUnitB.setObjectName(u"ultrasonicSensUnitB") - - self.ultrasonicSensUnitsBox.addWidget(self.ultrasonicSensUnitB) - - self.ultrasonicSensUnitR = QLabel(self.ultrasonicSensBox) - self.ultrasonicSensUnitR.setObjectName(u"ultrasonicSensUnitR") - - self.ultrasonicSensUnitsBox.addWidget(self.ultrasonicSensUnitR) - - self.ultrasonicSensUnitL = QLabel(self.ultrasonicSensBox) - self.ultrasonicSensUnitL.setObjectName(u"ultrasonicSensUnitL") - - self.ultrasonicSensUnitsBox.addWidget(self.ultrasonicSensUnitL) - - - self.horizontalLayout_4.addLayout(self.ultrasonicSensUnitsBox) - - self.batterySensBox = QGroupBox(self.sensorsTab) - self.batterySensBox.setObjectName(u"batterySensBox") - self.batterySensBox.setGeometry(QRect(28, 410, 195, 110)) - self.horizontalLayout_5 = QHBoxLayout(self.batterySensBox) - self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") - self.batterySensLabelsBox = QVBoxLayout() - self.batterySensLabelsBox.setObjectName(u"batterySensLabelsBox") - self.batterySensVoltageLabel = QLabel(self.batterySensBox) - self.batterySensVoltageLabel.setObjectName(u"batterySensVoltageLabel") - sizePolicy6 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum) - sizePolicy6.setHorizontalStretch(0) - sizePolicy6.setVerticalStretch(0) - sizePolicy6.setHeightForWidth(self.batterySensVoltageLabel.sizePolicy().hasHeightForWidth()) - self.batterySensVoltageLabel.setSizePolicy(sizePolicy6) - - self.batterySensLabelsBox.addWidget(self.batterySensVoltageLabel) - - self.batterySensCurrentLabel = QLabel(self.batterySensBox) - self.batterySensCurrentLabel.setObjectName(u"batterySensCurrentLabel") - sizePolicy6.setHeightForWidth(self.batterySensCurrentLabel.sizePolicy().hasHeightForWidth()) - self.batterySensCurrentLabel.setSizePolicy(sizePolicy6) - - self.batterySensLabelsBox.addWidget(self.batterySensCurrentLabel) - - - self.horizontalLayout_5.addLayout(self.batterySensLabelsBox) - - self.horizontalSpacer_14 = QSpacerItem(8, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.horizontalLayout_5.addItem(self.horizontalSpacer_14) - - self.batterySensValuesBox = QVBoxLayout() - self.batterySensValuesBox.setObjectName(u"batterySensValuesBox") - self.batterySensVoltageValue = QLCDNumber(self.batterySensBox) - self.batterySensVoltageValue.setObjectName(u"batterySensVoltageValue") - sizePolicy4.setHeightForWidth(self.batterySensVoltageValue.sizePolicy().hasHeightForWidth()) - self.batterySensVoltageValue.setSizePolicy(sizePolicy4) - self.batterySensVoltageValue.setFont(font1) - self.batterySensVoltageValue.setDigitCount(6) - self.batterySensVoltageValue.setSegmentStyle(QLCDNumber.SegmentStyle.Flat) - self.batterySensVoltageValue.setProperty("value", 12.458000000000000) - - self.batterySensValuesBox.addWidget(self.batterySensVoltageValue) - - self.batterySensCurrentValue = QLCDNumber(self.batterySensBox) - self.batterySensCurrentValue.setObjectName(u"batterySensCurrentValue") - sizePolicy4.setHeightForWidth(self.batterySensCurrentValue.sizePolicy().hasHeightForWidth()) - self.batterySensCurrentValue.setSizePolicy(sizePolicy4) - self.batterySensCurrentValue.setFont(font1) - self.batterySensCurrentValue.setDigitCount(6) - self.batterySensCurrentValue.setSegmentStyle(QLCDNumber.SegmentStyle.Flat) - self.batterySensCurrentValue.setProperty("value", 3.284000000000000) - - self.batterySensValuesBox.addWidget(self.batterySensCurrentValue) - - - self.horizontalLayout_5.addLayout(self.batterySensValuesBox) - - self.enableDisableBox = QGroupBox(self.sensorsTab) - self.enableDisableBox.setObjectName(u"enableDisableBox") - self.enableDisableBox.setGeometry(QRect(462, 145, 195, 110)) - self.gridLayout_4 = QGridLayout(self.enableDisableBox) - self.gridLayout_4.setObjectName(u"gridLayout_4") - self.toggleEmittersEnabled = QPushButton(self.enableDisableBox) - self.toggleEmittersEnabled.setObjectName(u"toggleEmittersEnabled") - sizePolicy7 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Preferred) - sizePolicy7.setHorizontalStretch(0) - sizePolicy7.setVerticalStretch(0) - sizePolicy7.setHeightForWidth(self.toggleEmittersEnabled.sizePolicy().hasHeightForWidth()) - self.toggleEmittersEnabled.setSizePolicy(sizePolicy7) - self.toggleEmittersEnabled.setCheckable(True) - self.toggleEmittersEnabled.setChecked(True) - - self.gridLayout_4.addWidget(self.toggleEmittersEnabled, 0, 1, 1, 1) - - self.togglePicoARelaEnable = QPushButton(self.enableDisableBox) - self.togglePicoARelaEnable.setObjectName(u"togglePicoARelaEnable") - sizePolicy7.setHeightForWidth(self.togglePicoARelaEnable.sizePolicy().hasHeightForWidth()) - self.togglePicoARelaEnable.setSizePolicy(sizePolicy7) - self.togglePicoARelaEnable.setCheckable(True) - self.togglePicoARelaEnable.setChecked(False) - - self.gridLayout_4.addWidget(self.togglePicoARelaEnable, 1, 1, 1, 1) - - self.pages.addTab(self.sensorsTab, "") - self.motorCtrlTab = QWidget() - self.motorCtrlTab.setObjectName(u"motorCtrlTab") - self.encOdomBox = QGroupBox(self.motorCtrlTab) - self.encOdomBox.setObjectName(u"encOdomBox") - self.encOdomBox.setGeometry(QRect(28, 20, 200, 185)) - sizePolicy.setHeightForWidth(self.encOdomBox.sizePolicy().hasHeightForWidth()) - self.encOdomBox.setSizePolicy(sizePolicy) - self.horizontalLayout_6 = QHBoxLayout(self.encOdomBox) - self.horizontalLayout_6.setObjectName(u"horizontalLayout_6") - self.encOdomLabels = QVBoxLayout() - self.encOdomLabels.setObjectName(u"encOdomLabels") - self.encOdomPosXLabel = QLabel(self.encOdomBox) - self.encOdomPosXLabel.setObjectName(u"encOdomPosXLabel") - sizePolicy5.setHeightForWidth(self.encOdomPosXLabel.sizePolicy().hasHeightForWidth()) - self.encOdomPosXLabel.setSizePolicy(sizePolicy5) - - self.encOdomLabels.addWidget(self.encOdomPosXLabel) - - self.encOdomPosYLabel = QLabel(self.encOdomBox) - self.encOdomPosYLabel.setObjectName(u"encOdomPosYLabel") - - self.encOdomLabels.addWidget(self.encOdomPosYLabel) - - self.encOdomYawLabel = QLabel(self.encOdomBox) - self.encOdomYawLabel.setObjectName(u"encOdomYawLabel") - - self.encOdomLabels.addWidget(self.encOdomYawLabel) - - self.verticalSpacer_3 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.encOdomLabels.addItem(self.verticalSpacer_3) - - self.encOdomLinVelLabel = QLabel(self.encOdomBox) - self.encOdomLinVelLabel.setObjectName(u"encOdomLinVelLabel") - - self.encOdomLabels.addWidget(self.encOdomLinVelLabel) - - self.encOdomAngVelLabel = QLabel(self.encOdomBox) - self.encOdomAngVelLabel.setObjectName(u"encOdomAngVelLabel") - - self.encOdomLabels.addWidget(self.encOdomAngVelLabel) - - - self.horizontalLayout_6.addLayout(self.encOdomLabels) - - self.horizontalSpacer_15 = QSpacerItem(4, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.horizontalLayout_6.addItem(self.horizontalSpacer_15) - - self.encOdomValues = QVBoxLayout() - self.encOdomValues.setObjectName(u"encOdomValues") - self.encOdomValues.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) - self.encOdomPosXValue = QLineEdit(self.encOdomBox) - self.encOdomPosXValue.setObjectName(u"encOdomPosXValue") - sizePolicy1.setHeightForWidth(self.encOdomPosXValue.sizePolicy().hasHeightForWidth()) - self.encOdomPosXValue.setSizePolicy(sizePolicy1) - self.encOdomPosXValue.setFont(font) - self.encOdomPosXValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.encOdomPosXValue.setFrame(True) - self.encOdomPosXValue.setDragEnabled(True) - self.encOdomPosXValue.setReadOnly(True) - - self.encOdomValues.addWidget(self.encOdomPosXValue) - - self.encOdomPosYValue = QLineEdit(self.encOdomBox) - self.encOdomPosYValue.setObjectName(u"encOdomPosYValue") - sizePolicy1.setHeightForWidth(self.encOdomPosYValue.sizePolicy().hasHeightForWidth()) - self.encOdomPosYValue.setSizePolicy(sizePolicy1) - self.encOdomPosYValue.setFont(font) - self.encOdomPosYValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.encOdomPosYValue.setFrame(True) - self.encOdomPosYValue.setDragEnabled(True) - self.encOdomPosYValue.setReadOnly(True) - - self.encOdomValues.addWidget(self.encOdomPosYValue) - - self.encOdomYawValue = QLineEdit(self.encOdomBox) - self.encOdomYawValue.setObjectName(u"encOdomYawValue") - sizePolicy1.setHeightForWidth(self.encOdomYawValue.sizePolicy().hasHeightForWidth()) - self.encOdomYawValue.setSizePolicy(sizePolicy1) - self.encOdomYawValue.setFont(font) - self.encOdomYawValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.encOdomYawValue.setFrame(True) - self.encOdomYawValue.setDragEnabled(True) - self.encOdomYawValue.setReadOnly(True) - - self.encOdomValues.addWidget(self.encOdomYawValue) - - self.verticalSpacer_4 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.encOdomValues.addItem(self.verticalSpacer_4) - - self.encOdomLinVelValue = QLineEdit(self.encOdomBox) - self.encOdomLinVelValue.setObjectName(u"encOdomLinVelValue") - sizePolicy1.setHeightForWidth(self.encOdomLinVelValue.sizePolicy().hasHeightForWidth()) - self.encOdomLinVelValue.setSizePolicy(sizePolicy1) - self.encOdomLinVelValue.setFont(font) - self.encOdomLinVelValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.encOdomLinVelValue.setFrame(True) - self.encOdomLinVelValue.setDragEnabled(True) - self.encOdomLinVelValue.setReadOnly(True) - - self.encOdomValues.addWidget(self.encOdomLinVelValue) - - self.encOdomAngVelValue = QLineEdit(self.encOdomBox) - self.encOdomAngVelValue.setObjectName(u"encOdomAngVelValue") - sizePolicy1.setHeightForWidth(self.encOdomAngVelValue.sizePolicy().hasHeightForWidth()) - self.encOdomAngVelValue.setSizePolicy(sizePolicy1) - self.encOdomAngVelValue.setFont(font) - self.encOdomAngVelValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.encOdomAngVelValue.setFrame(True) - self.encOdomAngVelValue.setDragEnabled(True) - self.encOdomAngVelValue.setReadOnly(True) - - self.encOdomValues.addWidget(self.encOdomAngVelValue) - - - self.horizontalLayout_6.addLayout(self.encOdomValues) - - self.encOdomUnits = QVBoxLayout() - self.encOdomUnits.setObjectName(u"encOdomUnits") - self.encOdomPosXUnit = QLabel(self.encOdomBox) - self.encOdomPosXUnit.setObjectName(u"encOdomPosXUnit") - - self.encOdomUnits.addWidget(self.encOdomPosXUnit) - - self.encOdomPosYUnit = QLabel(self.encOdomBox) - self.encOdomPosYUnit.setObjectName(u"encOdomPosYUnit") - - self.encOdomUnits.addWidget(self.encOdomPosYUnit) - - self.encOdomYawUnit = QLabel(self.encOdomBox) - self.encOdomYawUnit.setObjectName(u"encOdomYawUnit") - - self.encOdomUnits.addWidget(self.encOdomYawUnit) - - self.verticalSpacer_5 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.encOdomUnits.addItem(self.verticalSpacer_5) - - self.encOdomLinVelUnit = QLabel(self.encOdomBox) - self.encOdomLinVelUnit.setObjectName(u"encOdomLinVelUnit") - - self.encOdomUnits.addWidget(self.encOdomLinVelUnit) - - self.encOdomAngVelUnit = QLabel(self.encOdomBox) - self.encOdomAngVelUnit.setObjectName(u"encOdomAngVelUnit") - - self.encOdomUnits.addWidget(self.encOdomAngVelUnit) - - - self.horizontalLayout_6.addLayout(self.encOdomUnits) - - self.mtrCtrlEnableBox = QGroupBox(self.motorCtrlTab) - self.mtrCtrlEnableBox.setObjectName(u"mtrCtrlEnableBox") - self.mtrCtrlEnableBox.setGeometry(QRect(687, 20, 200, 120)) - self.gridLayout_5 = QGridLayout(self.mtrCtrlEnableBox) - self.gridLayout_5.setObjectName(u"gridLayout_5") - self.mtrCtrlEnableButtonsBox = QHBoxLayout() - self.mtrCtrlEnableButtonsBox.setObjectName(u"mtrCtrlEnableButtonsBox") - self.mtrCtrlEnableButton = QPushButton(self.mtrCtrlEnableBox) - self.mtrCtrlEnableButton.setObjectName(u"mtrCtrlEnableButton") - sizePolicy5.setHeightForWidth(self.mtrCtrlEnableButton.sizePolicy().hasHeightForWidth()) - self.mtrCtrlEnableButton.setSizePolicy(sizePolicy5) - self.mtrCtrlEnableButton.setCheckable(False) - self.mtrCtrlEnableButton.setChecked(False) - - self.mtrCtrlEnableButtonsBox.addWidget(self.mtrCtrlEnableButton) - - self.mtrCtrlDisableButton = QPushButton(self.mtrCtrlEnableBox) - self.mtrCtrlDisableButton.setObjectName(u"mtrCtrlDisableButton") - sizePolicy5.setHeightForWidth(self.mtrCtrlDisableButton.sizePolicy().hasHeightForWidth()) - self.mtrCtrlDisableButton.setSizePolicy(sizePolicy5) - self.mtrCtrlDisableButton.setCheckable(False) - self.mtrCtrlDisableButton.setChecked(False) - - self.mtrCtrlEnableButtonsBox.addWidget(self.mtrCtrlDisableButton) - - - self.gridLayout_5.addLayout(self.mtrCtrlEnableButtonsBox, 0, 0, 1, 1) - - self.mtrCtrlEnableIndicatorsBox = QHBoxLayout() - self.mtrCtrlEnableIndicatorsBox.setObjectName(u"mtrCtrlEnableIndicatorsBox") - self.mtrCtrlEnableLIndicator = QLabel(self.mtrCtrlEnableBox) - self.mtrCtrlEnableLIndicator.setObjectName(u"mtrCtrlEnableLIndicator") - sizePolicy2.setHeightForWidth(self.mtrCtrlEnableLIndicator.sizePolicy().hasHeightForWidth()) - self.mtrCtrlEnableLIndicator.setSizePolicy(sizePolicy2) - self.mtrCtrlEnableLIndicator.setAutoFillBackground(False) - self.mtrCtrlEnableLIndicator.setFrameShape(QFrame.Shape.Box) - self.mtrCtrlEnableLIndicator.setFrameShadow(QFrame.Shadow.Plain) - self.mtrCtrlEnableLIndicator.setLineWidth(1) - self.mtrCtrlEnableLIndicator.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.mtrCtrlEnableIndicatorsBox.addWidget(self.mtrCtrlEnableLIndicator) - - self.mtrCtrlEnableRIndicator = QLabel(self.mtrCtrlEnableBox) - self.mtrCtrlEnableRIndicator.setObjectName(u"mtrCtrlEnableRIndicator") - sizePolicy2.setHeightForWidth(self.mtrCtrlEnableRIndicator.sizePolicy().hasHeightForWidth()) - self.mtrCtrlEnableRIndicator.setSizePolicy(sizePolicy2) - self.mtrCtrlEnableRIndicator.setAutoFillBackground(False) - self.mtrCtrlEnableRIndicator.setFrameShape(QFrame.Shape.Box) - self.mtrCtrlEnableRIndicator.setFrameShadow(QFrame.Shadow.Plain) - self.mtrCtrlEnableRIndicator.setLineWidth(1) - self.mtrCtrlEnableRIndicator.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.mtrCtrlEnableIndicatorsBox.addWidget(self.mtrCtrlEnableRIndicator) - - - self.gridLayout_5.addLayout(self.mtrCtrlEnableIndicatorsBox, 1, 0, 1, 1) - - self.rpmMeasuredBox = QGroupBox(self.motorCtrlTab) - self.rpmMeasuredBox.setObjectName(u"rpmMeasuredBox") - self.rpmMeasuredBox.setGeometry(QRect(247, 20, 200, 165)) - sizePolicy.setHeightForWidth(self.rpmMeasuredBox.sizePolicy().hasHeightForWidth()) - self.rpmMeasuredBox.setSizePolicy(sizePolicy) - self.horizontalLayout_7 = QHBoxLayout(self.rpmMeasuredBox) - self.horizontalLayout_7.setObjectName(u"horizontalLayout_7") - self.rpmMeasuredLabelsBox = QVBoxLayout() - self.rpmMeasuredLabelsBox.setObjectName(u"rpmMeasuredLabelsBox") - self.rpmMeasuredFRLabel = QLabel(self.rpmMeasuredBox) - self.rpmMeasuredFRLabel.setObjectName(u"rpmMeasuredFRLabel") - sizePolicy5.setHeightForWidth(self.rpmMeasuredFRLabel.sizePolicy().hasHeightForWidth()) - self.rpmMeasuredFRLabel.setSizePolicy(sizePolicy5) - - self.rpmMeasuredLabelsBox.addWidget(self.rpmMeasuredFRLabel) - - self.rpmMeasuredFLLabel = QLabel(self.rpmMeasuredBox) - self.rpmMeasuredFLLabel.setObjectName(u"rpmMeasuredFLLabel") - - self.rpmMeasuredLabelsBox.addWidget(self.rpmMeasuredFLLabel) - - self.verticalSpacer_6 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.rpmMeasuredLabelsBox.addItem(self.verticalSpacer_6) - - self.rpmMeasuredBRLabel = QLabel(self.rpmMeasuredBox) - self.rpmMeasuredBRLabel.setObjectName(u"rpmMeasuredBRLabel") - - self.rpmMeasuredLabelsBox.addWidget(self.rpmMeasuredBRLabel) - - self.rpmMeasuredBLLabel = QLabel(self.rpmMeasuredBox) - self.rpmMeasuredBLLabel.setObjectName(u"rpmMeasuredBLLabel") - - self.rpmMeasuredLabelsBox.addWidget(self.rpmMeasuredBLLabel) - - - self.horizontalLayout_7.addLayout(self.rpmMeasuredLabelsBox) - - self.horizontalSpacer_16 = QSpacerItem(4, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.horizontalLayout_7.addItem(self.horizontalSpacer_16) - - self.rpmMeasuredValuesBox = QVBoxLayout() - self.rpmMeasuredValuesBox.setObjectName(u"rpmMeasuredValuesBox") - self.rpmMeasuredValuesBox.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) - self.rpmMeasuredFRValue = QLineEdit(self.rpmMeasuredBox) - self.rpmMeasuredFRValue.setObjectName(u"rpmMeasuredFRValue") - sizePolicy1.setHeightForWidth(self.rpmMeasuredFRValue.sizePolicy().hasHeightForWidth()) - self.rpmMeasuredFRValue.setSizePolicy(sizePolicy1) - self.rpmMeasuredFRValue.setFont(font) - self.rpmMeasuredFRValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.rpmMeasuredFRValue.setFrame(True) - self.rpmMeasuredFRValue.setDragEnabled(True) - self.rpmMeasuredFRValue.setReadOnly(True) - - self.rpmMeasuredValuesBox.addWidget(self.rpmMeasuredFRValue) - - self.rpmMeasuredFLValue = QLineEdit(self.rpmMeasuredBox) - self.rpmMeasuredFLValue.setObjectName(u"rpmMeasuredFLValue") - sizePolicy1.setHeightForWidth(self.rpmMeasuredFLValue.sizePolicy().hasHeightForWidth()) - self.rpmMeasuredFLValue.setSizePolicy(sizePolicy1) - self.rpmMeasuredFLValue.setFont(font) - self.rpmMeasuredFLValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.rpmMeasuredFLValue.setFrame(True) - self.rpmMeasuredFLValue.setDragEnabled(True) - self.rpmMeasuredFLValue.setReadOnly(True) - - self.rpmMeasuredValuesBox.addWidget(self.rpmMeasuredFLValue) - - self.verticalSpacer_7 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.rpmMeasuredValuesBox.addItem(self.verticalSpacer_7) - - self.rpmMeasuredBRValue = QLineEdit(self.rpmMeasuredBox) - self.rpmMeasuredBRValue.setObjectName(u"rpmMeasuredBRValue") - sizePolicy1.setHeightForWidth(self.rpmMeasuredBRValue.sizePolicy().hasHeightForWidth()) - self.rpmMeasuredBRValue.setSizePolicy(sizePolicy1) - self.rpmMeasuredBRValue.setFont(font) - self.rpmMeasuredBRValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.rpmMeasuredBRValue.setFrame(True) - self.rpmMeasuredBRValue.setDragEnabled(True) - self.rpmMeasuredBRValue.setReadOnly(True) - - self.rpmMeasuredValuesBox.addWidget(self.rpmMeasuredBRValue) - - self.rpmMeasuredBlValue = QLineEdit(self.rpmMeasuredBox) - self.rpmMeasuredBlValue.setObjectName(u"rpmMeasuredBlValue") - sizePolicy1.setHeightForWidth(self.rpmMeasuredBlValue.sizePolicy().hasHeightForWidth()) - self.rpmMeasuredBlValue.setSizePolicy(sizePolicy1) - self.rpmMeasuredBlValue.setFont(font) - self.rpmMeasuredBlValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.rpmMeasuredBlValue.setFrame(True) - self.rpmMeasuredBlValue.setDragEnabled(True) - self.rpmMeasuredBlValue.setReadOnly(True) - - self.rpmMeasuredValuesBox.addWidget(self.rpmMeasuredBlValue) - - - self.horizontalLayout_7.addLayout(self.rpmMeasuredValuesBox) - - self.rpmMeasuredUnitsBox = QVBoxLayout() - self.rpmMeasuredUnitsBox.setObjectName(u"rpmMeasuredUnitsBox") - self.rpmMeasuredFRUnit = QLabel(self.rpmMeasuredBox) - self.rpmMeasuredFRUnit.setObjectName(u"rpmMeasuredFRUnit") - - self.rpmMeasuredUnitsBox.addWidget(self.rpmMeasuredFRUnit) - - self.rpmMeasuredFLUnit = QLabel(self.rpmMeasuredBox) - self.rpmMeasuredFLUnit.setObjectName(u"rpmMeasuredFLUnit") - - self.rpmMeasuredUnitsBox.addWidget(self.rpmMeasuredFLUnit) - - self.verticalSpacer_8 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.rpmMeasuredUnitsBox.addItem(self.verticalSpacer_8) - - self.rpmMeasuredBRUnit = QLabel(self.rpmMeasuredBox) - self.rpmMeasuredBRUnit.setObjectName(u"rpmMeasuredBRUnit") - - self.rpmMeasuredUnitsBox.addWidget(self.rpmMeasuredBRUnit) - - self.rpmMeasuredBLUnit = QLabel(self.rpmMeasuredBox) - self.rpmMeasuredBLUnit.setObjectName(u"rpmMeasuredBLUnit") - - self.rpmMeasuredUnitsBox.addWidget(self.rpmMeasuredBLUnit) - - - self.horizontalLayout_7.addLayout(self.rpmMeasuredUnitsBox) - - self.rpmTargetBox = QGroupBox(self.motorCtrlTab) - self.rpmTargetBox.setObjectName(u"rpmTargetBox") - self.rpmTargetBox.setGeometry(QRect(247, 200, 200, 165)) - sizePolicy.setHeightForWidth(self.rpmTargetBox.sizePolicy().hasHeightForWidth()) - self.rpmTargetBox.setSizePolicy(sizePolicy) - self.horizontalLayout_8 = QHBoxLayout(self.rpmTargetBox) - self.horizontalLayout_8.setObjectName(u"horizontalLayout_8") - self.rpmTargetLabelsBox = QVBoxLayout() - self.rpmTargetLabelsBox.setObjectName(u"rpmTargetLabelsBox") - self.rpmTargetFRLabel = QLabel(self.rpmTargetBox) - self.rpmTargetFRLabel.setObjectName(u"rpmTargetFRLabel") - sizePolicy5.setHeightForWidth(self.rpmTargetFRLabel.sizePolicy().hasHeightForWidth()) - self.rpmTargetFRLabel.setSizePolicy(sizePolicy5) - - self.rpmTargetLabelsBox.addWidget(self.rpmTargetFRLabel) - - self.rpmTargetFLLabel = QLabel(self.rpmTargetBox) - self.rpmTargetFLLabel.setObjectName(u"rpmTargetFLLabel") - - self.rpmTargetLabelsBox.addWidget(self.rpmTargetFLLabel) - - self.verticalSpacer_9 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.rpmTargetLabelsBox.addItem(self.verticalSpacer_9) - - self.rpmTargetBRLabel = QLabel(self.rpmTargetBox) - self.rpmTargetBRLabel.setObjectName(u"rpmTargetBRLabel") - - self.rpmTargetLabelsBox.addWidget(self.rpmTargetBRLabel) - - self.rpmTargetBLLabel = QLabel(self.rpmTargetBox) - self.rpmTargetBLLabel.setObjectName(u"rpmTargetBLLabel") - - self.rpmTargetLabelsBox.addWidget(self.rpmTargetBLLabel) - - - self.horizontalLayout_8.addLayout(self.rpmTargetLabelsBox) - - self.horizontalSpacer_17 = QSpacerItem(4, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.horizontalLayout_8.addItem(self.horizontalSpacer_17) - - self.rpmTargetValuesBox = QVBoxLayout() - self.rpmTargetValuesBox.setObjectName(u"rpmTargetValuesBox") - self.rpmTargetValuesBox.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) - self.rpmTargetFRValue = QLineEdit(self.rpmTargetBox) - self.rpmTargetFRValue.setObjectName(u"rpmTargetFRValue") - sizePolicy1.setHeightForWidth(self.rpmTargetFRValue.sizePolicy().hasHeightForWidth()) - self.rpmTargetFRValue.setSizePolicy(sizePolicy1) - self.rpmTargetFRValue.setFont(font) - self.rpmTargetFRValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.rpmTargetFRValue.setFrame(True) - self.rpmTargetFRValue.setDragEnabled(True) - self.rpmTargetFRValue.setReadOnly(True) - - self.rpmTargetValuesBox.addWidget(self.rpmTargetFRValue) - - self.rpmTargetFLValue = QLineEdit(self.rpmTargetBox) - self.rpmTargetFLValue.setObjectName(u"rpmTargetFLValue") - sizePolicy1.setHeightForWidth(self.rpmTargetFLValue.sizePolicy().hasHeightForWidth()) - self.rpmTargetFLValue.setSizePolicy(sizePolicy1) - self.rpmTargetFLValue.setFont(font) - self.rpmTargetFLValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.rpmTargetFLValue.setFrame(True) - self.rpmTargetFLValue.setDragEnabled(True) - self.rpmTargetFLValue.setReadOnly(True) - - self.rpmTargetValuesBox.addWidget(self.rpmTargetFLValue) - - self.verticalSpacer_10 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.rpmTargetValuesBox.addItem(self.verticalSpacer_10) - - self.rpmTargetBRValue = QLineEdit(self.rpmTargetBox) - self.rpmTargetBRValue.setObjectName(u"rpmTargetBRValue") - sizePolicy1.setHeightForWidth(self.rpmTargetBRValue.sizePolicy().hasHeightForWidth()) - self.rpmTargetBRValue.setSizePolicy(sizePolicy1) - self.rpmTargetBRValue.setFont(font) - self.rpmTargetBRValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.rpmTargetBRValue.setFrame(True) - self.rpmTargetBRValue.setDragEnabled(True) - self.rpmTargetBRValue.setReadOnly(True) - - self.rpmTargetValuesBox.addWidget(self.rpmTargetBRValue) - - self.rpmTargetBLValue = QLineEdit(self.rpmTargetBox) - self.rpmTargetBLValue.setObjectName(u"rpmTargetBLValue") - sizePolicy1.setHeightForWidth(self.rpmTargetBLValue.sizePolicy().hasHeightForWidth()) - self.rpmTargetBLValue.setSizePolicy(sizePolicy1) - self.rpmTargetBLValue.setFont(font) - self.rpmTargetBLValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.rpmTargetBLValue.setFrame(True) - self.rpmTargetBLValue.setDragEnabled(True) - self.rpmTargetBLValue.setReadOnly(True) - - self.rpmTargetValuesBox.addWidget(self.rpmTargetBLValue) - - - self.horizontalLayout_8.addLayout(self.rpmTargetValuesBox) - - self.rpmTargetUnitsBox = QVBoxLayout() - self.rpmTargetUnitsBox.setObjectName(u"rpmTargetUnitsBox") - self.rpmTargetFRUnit = QLabel(self.rpmTargetBox) - self.rpmTargetFRUnit.setObjectName(u"rpmTargetFRUnit") - - self.rpmTargetUnitsBox.addWidget(self.rpmTargetFRUnit) - - self.rpmTargetFLUnit = QLabel(self.rpmTargetBox) - self.rpmTargetFLUnit.setObjectName(u"rpmTargetFLUnit") - - self.rpmTargetUnitsBox.addWidget(self.rpmTargetFLUnit) - - self.verticalSpacer_11 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.rpmTargetUnitsBox.addItem(self.verticalSpacer_11) - - self.rpmTargetBRUnit = QLabel(self.rpmTargetBox) - self.rpmTargetBRUnit.setObjectName(u"rpmTargetBRUnit") - - self.rpmTargetUnitsBox.addWidget(self.rpmTargetBRUnit) - - self.rpmTargetBLUnit = QLabel(self.rpmTargetBox) - self.rpmTargetBLUnit.setObjectName(u"rpmTargetBLUnit") - - self.rpmTargetUnitsBox.addWidget(self.rpmTargetBLUnit) - - - self.horizontalLayout_8.addLayout(self.rpmTargetUnitsBox) - - self.encPulseCtrsBox = QGroupBox(self.motorCtrlTab) - self.encPulseCtrsBox.setObjectName(u"encPulseCtrsBox") - self.encPulseCtrsBox.setGeometry(QRect(28, 220, 200, 165)) - sizePolicy.setHeightForWidth(self.encPulseCtrsBox.sizePolicy().hasHeightForWidth()) - self.encPulseCtrsBox.setSizePolicy(sizePolicy) - self.horizontalLayout_9 = QHBoxLayout(self.encPulseCtrsBox) - self.horizontalLayout_9.setObjectName(u"horizontalLayout_9") - self.encPulseCtrsLabelsBox = QVBoxLayout() - self.encPulseCtrsLabelsBox.setObjectName(u"encPulseCtrsLabelsBox") - self.encPulseCtrsFRLabel = QLabel(self.encPulseCtrsBox) - self.encPulseCtrsFRLabel.setObjectName(u"encPulseCtrsFRLabel") - sizePolicy5.setHeightForWidth(self.encPulseCtrsFRLabel.sizePolicy().hasHeightForWidth()) - self.encPulseCtrsFRLabel.setSizePolicy(sizePolicy5) - - self.encPulseCtrsLabelsBox.addWidget(self.encPulseCtrsFRLabel) - - self.encPulseCtrsFLLabel = QLabel(self.encPulseCtrsBox) - self.encPulseCtrsFLLabel.setObjectName(u"encPulseCtrsFLLabel") - - self.encPulseCtrsLabelsBox.addWidget(self.encPulseCtrsFLLabel) - - self.verticalSpacer_12 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.encPulseCtrsLabelsBox.addItem(self.verticalSpacer_12) - - self.encPulseCtrsBRLabel = QLabel(self.encPulseCtrsBox) - self.encPulseCtrsBRLabel.setObjectName(u"encPulseCtrsBRLabel") - - self.encPulseCtrsLabelsBox.addWidget(self.encPulseCtrsBRLabel) - - self.encPulseCtrsBLLabel = QLabel(self.encPulseCtrsBox) - self.encPulseCtrsBLLabel.setObjectName(u"encPulseCtrsBLLabel") - - self.encPulseCtrsLabelsBox.addWidget(self.encPulseCtrsBLLabel) - - - self.horizontalLayout_9.addLayout(self.encPulseCtrsLabelsBox) - - self.horizontalSpacer_18 = QSpacerItem(4, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.horizontalLayout_9.addItem(self.horizontalSpacer_18) - - self.encPulseCtrsValuesBox = QVBoxLayout() - self.encPulseCtrsValuesBox.setObjectName(u"encPulseCtrsValuesBox") - self.encPulseCtrsValuesBox.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) - self.encPulseCtrsFRValue = QLineEdit(self.encPulseCtrsBox) - self.encPulseCtrsFRValue.setObjectName(u"encPulseCtrsFRValue") - sizePolicy1.setHeightForWidth(self.encPulseCtrsFRValue.sizePolicy().hasHeightForWidth()) - self.encPulseCtrsFRValue.setSizePolicy(sizePolicy1) - self.encPulseCtrsFRValue.setFont(font) - self.encPulseCtrsFRValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.encPulseCtrsFRValue.setFrame(True) - self.encPulseCtrsFRValue.setDragEnabled(True) - self.encPulseCtrsFRValue.setReadOnly(True) - - self.encPulseCtrsValuesBox.addWidget(self.encPulseCtrsFRValue) - - self.encPulseCtrsFLValue = QLineEdit(self.encPulseCtrsBox) - self.encPulseCtrsFLValue.setObjectName(u"encPulseCtrsFLValue") - sizePolicy1.setHeightForWidth(self.encPulseCtrsFLValue.sizePolicy().hasHeightForWidth()) - self.encPulseCtrsFLValue.setSizePolicy(sizePolicy1) - self.encPulseCtrsFLValue.setFont(font) - self.encPulseCtrsFLValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.encPulseCtrsFLValue.setFrame(True) - self.encPulseCtrsFLValue.setDragEnabled(True) - self.encPulseCtrsFLValue.setReadOnly(True) - - self.encPulseCtrsValuesBox.addWidget(self.encPulseCtrsFLValue) - - self.verticalSpacer_13 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.encPulseCtrsValuesBox.addItem(self.verticalSpacer_13) - - self.encPulseCtrsBRValue = QLineEdit(self.encPulseCtrsBox) - self.encPulseCtrsBRValue.setObjectName(u"encPulseCtrsBRValue") - sizePolicy1.setHeightForWidth(self.encPulseCtrsBRValue.sizePolicy().hasHeightForWidth()) - self.encPulseCtrsBRValue.setSizePolicy(sizePolicy1) - self.encPulseCtrsBRValue.setFont(font) - self.encPulseCtrsBRValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.encPulseCtrsBRValue.setFrame(True) - self.encPulseCtrsBRValue.setDragEnabled(True) - self.encPulseCtrsBRValue.setReadOnly(True) - - self.encPulseCtrsValuesBox.addWidget(self.encPulseCtrsBRValue) - - self.encPulseCtrsBLValue = QLineEdit(self.encPulseCtrsBox) - self.encPulseCtrsBLValue.setObjectName(u"encPulseCtrsBLValue") - sizePolicy1.setHeightForWidth(self.encPulseCtrsBLValue.sizePolicy().hasHeightForWidth()) - self.encPulseCtrsBLValue.setSizePolicy(sizePolicy1) - self.encPulseCtrsBLValue.setFont(font) - self.encPulseCtrsBLValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.encPulseCtrsBLValue.setFrame(True) - self.encPulseCtrsBLValue.setDragEnabled(True) - self.encPulseCtrsBLValue.setReadOnly(True) - - self.encPulseCtrsValuesBox.addWidget(self.encPulseCtrsBLValue) - - - self.horizontalLayout_9.addLayout(self.encPulseCtrsValuesBox) - - self.leftPidBox = QGroupBox(self.motorCtrlTab) - self.leftPidBox.setObjectName(u"leftPidBox") - self.leftPidBox.setGeometry(QRect(467, 20, 200, 165)) - sizePolicy.setHeightForWidth(self.leftPidBox.sizePolicy().hasHeightForWidth()) - self.leftPidBox.setSizePolicy(sizePolicy) - self.horizontalLayout_10 = QHBoxLayout(self.leftPidBox) - self.horizontalLayout_10.setObjectName(u"horizontalLayout_10") - self.leftPidLabelsBox = QVBoxLayout() - self.leftPidLabelsBox.setObjectName(u"leftPidLabelsBox") - self.leftPidPLabel = QLabel(self.leftPidBox) - self.leftPidPLabel.setObjectName(u"leftPidPLabel") - sizePolicy5.setHeightForWidth(self.leftPidPLabel.sizePolicy().hasHeightForWidth()) - self.leftPidPLabel.setSizePolicy(sizePolicy5) - - self.leftPidLabelsBox.addWidget(self.leftPidPLabel) - - self.leftPidILabel = QLabel(self.leftPidBox) - self.leftPidILabel.setObjectName(u"leftPidILabel") - - self.leftPidLabelsBox.addWidget(self.leftPidILabel) - - self.leftPidDLabel = QLabel(self.leftPidBox) - self.leftPidDLabel.setObjectName(u"leftPidDLabel") - - self.leftPidLabelsBox.addWidget(self.leftPidDLabel) - - self.verticalSpacer_14 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.leftPidLabelsBox.addItem(self.verticalSpacer_14) - - self.leftPidOutLabel = QLabel(self.leftPidBox) - self.leftPidOutLabel.setObjectName(u"leftPidOutLabel") - - self.leftPidLabelsBox.addWidget(self.leftPidOutLabel) - - - self.horizontalLayout_10.addLayout(self.leftPidLabelsBox) - - self.horizontalSpacer_19 = QSpacerItem(4, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.horizontalLayout_10.addItem(self.horizontalSpacer_19) - - self.leftPidValuesBox = QVBoxLayout() - self.leftPidValuesBox.setObjectName(u"leftPidValuesBox") - self.leftPidValuesBox.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) - self.leftPidPValue = QLineEdit(self.leftPidBox) - self.leftPidPValue.setObjectName(u"leftPidPValue") - sizePolicy1.setHeightForWidth(self.leftPidPValue.sizePolicy().hasHeightForWidth()) - self.leftPidPValue.setSizePolicy(sizePolicy1) - self.leftPidPValue.setFont(font) - self.leftPidPValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.leftPidPValue.setFrame(True) - self.leftPidPValue.setDragEnabled(True) - self.leftPidPValue.setReadOnly(True) - - self.leftPidValuesBox.addWidget(self.leftPidPValue) - - self.leftPidIValue = QLineEdit(self.leftPidBox) - self.leftPidIValue.setObjectName(u"leftPidIValue") - sizePolicy1.setHeightForWidth(self.leftPidIValue.sizePolicy().hasHeightForWidth()) - self.leftPidIValue.setSizePolicy(sizePolicy1) - self.leftPidIValue.setFont(font) - self.leftPidIValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.leftPidIValue.setFrame(True) - self.leftPidIValue.setDragEnabled(True) - self.leftPidIValue.setReadOnly(True) - - self.leftPidValuesBox.addWidget(self.leftPidIValue) - - self.leftPidDValue = QLineEdit(self.leftPidBox) - self.leftPidDValue.setObjectName(u"leftPidDValue") - sizePolicy1.setHeightForWidth(self.leftPidDValue.sizePolicy().hasHeightForWidth()) - self.leftPidDValue.setSizePolicy(sizePolicy1) - self.leftPidDValue.setFont(font) - self.leftPidDValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.leftPidDValue.setFrame(True) - self.leftPidDValue.setDragEnabled(True) - self.leftPidDValue.setReadOnly(True) - - self.leftPidValuesBox.addWidget(self.leftPidDValue) - - self.verticalSpacer_15 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.leftPidValuesBox.addItem(self.verticalSpacer_15) - - self.leftPidOutValue = QLineEdit(self.leftPidBox) - self.leftPidOutValue.setObjectName(u"leftPidOutValue") - sizePolicy1.setHeightForWidth(self.leftPidOutValue.sizePolicy().hasHeightForWidth()) - self.leftPidOutValue.setSizePolicy(sizePolicy1) - self.leftPidOutValue.setFont(font) - self.leftPidOutValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.leftPidOutValue.setFrame(True) - self.leftPidOutValue.setDragEnabled(True) - self.leftPidOutValue.setReadOnly(True) - - self.leftPidValuesBox.addWidget(self.leftPidOutValue) - - - self.horizontalLayout_10.addLayout(self.leftPidValuesBox) - - self.rightPidBox = QGroupBox(self.motorCtrlTab) - self.rightPidBox.setObjectName(u"rightPidBox") - self.rightPidBox.setGeometry(QRect(467, 200, 200, 165)) - sizePolicy.setHeightForWidth(self.rightPidBox.sizePolicy().hasHeightForWidth()) - self.rightPidBox.setSizePolicy(sizePolicy) - self.horizontalLayout_11 = QHBoxLayout(self.rightPidBox) - self.horizontalLayout_11.setObjectName(u"horizontalLayout_11") - self.rightPidLabelsBox = QVBoxLayout() - self.rightPidLabelsBox.setObjectName(u"rightPidLabelsBox") - self.rightPidPLabel = QLabel(self.rightPidBox) - self.rightPidPLabel.setObjectName(u"rightPidPLabel") - sizePolicy5.setHeightForWidth(self.rightPidPLabel.sizePolicy().hasHeightForWidth()) - self.rightPidPLabel.setSizePolicy(sizePolicy5) - - self.rightPidLabelsBox.addWidget(self.rightPidPLabel) - - self.rightPidILabel = QLabel(self.rightPidBox) - self.rightPidILabel.setObjectName(u"rightPidILabel") - - self.rightPidLabelsBox.addWidget(self.rightPidILabel) - - self.rightPidDLabel = QLabel(self.rightPidBox) - self.rightPidDLabel.setObjectName(u"rightPidDLabel") - - self.rightPidLabelsBox.addWidget(self.rightPidDLabel) - - self.verticalSpacer_16 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.rightPidLabelsBox.addItem(self.verticalSpacer_16) - - self.rightPidOutLabel = QLabel(self.rightPidBox) - self.rightPidOutLabel.setObjectName(u"rightPidOutLabel") - - self.rightPidLabelsBox.addWidget(self.rightPidOutLabel) - - - self.horizontalLayout_11.addLayout(self.rightPidLabelsBox) - - self.horizontalSpacer_20 = QSpacerItem(4, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.horizontalLayout_11.addItem(self.horizontalSpacer_20) - - self.rightPidValuesBox = QVBoxLayout() - self.rightPidValuesBox.setObjectName(u"rightPidValuesBox") - self.rightPidValuesBox.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) - self.rightPidPValue = QLineEdit(self.rightPidBox) - self.rightPidPValue.setObjectName(u"rightPidPValue") - sizePolicy1.setHeightForWidth(self.rightPidPValue.sizePolicy().hasHeightForWidth()) - self.rightPidPValue.setSizePolicy(sizePolicy1) - self.rightPidPValue.setFont(font) - self.rightPidPValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.rightPidPValue.setFrame(True) - self.rightPidPValue.setDragEnabled(True) - self.rightPidPValue.setReadOnly(True) - - self.rightPidValuesBox.addWidget(self.rightPidPValue) - - self.rightPidIValue = QLineEdit(self.rightPidBox) - self.rightPidIValue.setObjectName(u"rightPidIValue") - sizePolicy1.setHeightForWidth(self.rightPidIValue.sizePolicy().hasHeightForWidth()) - self.rightPidIValue.setSizePolicy(sizePolicy1) - self.rightPidIValue.setFont(font) - self.rightPidIValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.rightPidIValue.setFrame(True) - self.rightPidIValue.setDragEnabled(True) - self.rightPidIValue.setReadOnly(True) - - self.rightPidValuesBox.addWidget(self.rightPidIValue) - - self.rightPidDValue = QLineEdit(self.rightPidBox) - self.rightPidDValue.setObjectName(u"rightPidDValue") - sizePolicy1.setHeightForWidth(self.rightPidDValue.sizePolicy().hasHeightForWidth()) - self.rightPidDValue.setSizePolicy(sizePolicy1) - self.rightPidDValue.setFont(font) - self.rightPidDValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.rightPidDValue.setFrame(True) - self.rightPidDValue.setDragEnabled(True) - self.rightPidDValue.setReadOnly(True) - - self.rightPidValuesBox.addWidget(self.rightPidDValue) - - self.verticalSpacer_17 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.rightPidValuesBox.addItem(self.verticalSpacer_17) - - self.rightPidOutValue = QLineEdit(self.rightPidBox) - self.rightPidOutValue.setObjectName(u"rightPidOutValue") - sizePolicy1.setHeightForWidth(self.rightPidOutValue.sizePolicy().hasHeightForWidth()) - self.rightPidOutValue.setSizePolicy(sizePolicy1) - self.rightPidOutValue.setFont(font) - self.rightPidOutValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.rightPidOutValue.setFrame(True) - self.rightPidOutValue.setDragEnabled(True) - self.rightPidOutValue.setReadOnly(True) - - self.rightPidValuesBox.addWidget(self.rightPidOutValue) - - - self.horizontalLayout_11.addLayout(self.rightPidValuesBox) - - self.pages.addTab(self.motorCtrlTab, "") - self.powerTab = QWidget() - self.powerTab.setObjectName(u"powerTab") - self.batteryInfoBox = QGroupBox(self.powerTab) - self.batteryInfoBox.setObjectName(u"batteryInfoBox") - self.batteryInfoBox.setGeometry(QRect(28, 20, 195, 110)) - self.horizontalLayout_12 = QHBoxLayout(self.batteryInfoBox) - self.horizontalLayout_12.setObjectName(u"horizontalLayout_12") - self.batteryInfoLabels = QVBoxLayout() - self.batteryInfoLabels.setObjectName(u"batteryInfoLabels") - self.batteryVoltageLabel = QLabel(self.batteryInfoBox) - self.batteryVoltageLabel.setObjectName(u"batteryVoltageLabel") - sizePolicy6.setHeightForWidth(self.batteryVoltageLabel.sizePolicy().hasHeightForWidth()) - self.batteryVoltageLabel.setSizePolicy(sizePolicy6) - - self.batteryInfoLabels.addWidget(self.batteryVoltageLabel) - - self.batteryCurrentLabel = QLabel(self.batteryInfoBox) - self.batteryCurrentLabel.setObjectName(u"batteryCurrentLabel") - sizePolicy6.setHeightForWidth(self.batteryCurrentLabel.sizePolicy().hasHeightForWidth()) - self.batteryCurrentLabel.setSizePolicy(sizePolicy6) - - self.batteryInfoLabels.addWidget(self.batteryCurrentLabel) - - - self.horizontalLayout_12.addLayout(self.batteryInfoLabels) - - self.horizontalSpacer_21 = QSpacerItem(8, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.horizontalLayout_12.addItem(self.horizontalSpacer_21) - - self.batteryInfoValues = QVBoxLayout() - self.batteryInfoValues.setObjectName(u"batteryInfoValues") - self.batteryVoltageValue = QLCDNumber(self.batteryInfoBox) - self.batteryVoltageValue.setObjectName(u"batteryVoltageValue") - sizePolicy4.setHeightForWidth(self.batteryVoltageValue.sizePolicy().hasHeightForWidth()) - self.batteryVoltageValue.setSizePolicy(sizePolicy4) - self.batteryVoltageValue.setFont(font1) - self.batteryVoltageValue.setDigitCount(6) - self.batteryVoltageValue.setSegmentStyle(QLCDNumber.SegmentStyle.Flat) - self.batteryVoltageValue.setProperty("value", 12.458000000000000) - - self.batteryInfoValues.addWidget(self.batteryVoltageValue) - - self.batteryVoltageCurrent = QLCDNumber(self.batteryInfoBox) - self.batteryVoltageCurrent.setObjectName(u"batteryVoltageCurrent") - sizePolicy4.setHeightForWidth(self.batteryVoltageCurrent.sizePolicy().hasHeightForWidth()) - self.batteryVoltageCurrent.setSizePolicy(sizePolicy4) - self.batteryVoltageCurrent.setFont(font1) - self.batteryVoltageCurrent.setDigitCount(6) - self.batteryVoltageCurrent.setSegmentStyle(QLCDNumber.SegmentStyle.Flat) - self.batteryVoltageCurrent.setProperty("value", 3.284000000000000) - - self.batteryInfoValues.addWidget(self.batteryVoltageCurrent) - - - self.horizontalLayout_12.addLayout(self.batteryInfoValues) - - self.powerTabNote = QLabel(self.powerTab) - self.powerTabNote.setObjectName(u"powerTabNote") - self.powerTabNote.setGeometry(QRect(20, 510, 251, 18)) - self.pages.addTab(self.powerTab, "") - self.diagTab = QWidget() - self.diagTab.setObjectName(u"diagTab") - self.diagMsgsBox = QGroupBox(self.diagTab) - self.diagMsgsBox.setObjectName(u"diagMsgsBox") - self.diagMsgsBox.setGeometry(QRect(305, 20, 695, 505)) - sizePolicy4.setHeightForWidth(self.diagMsgsBox.sizePolicy().hasHeightForWidth()) - self.diagMsgsBox.setSizePolicy(sizePolicy4) - self.verticalLayout_2 = QVBoxLayout(self.diagMsgsBox) - self.verticalLayout_2.setObjectName(u"verticalLayout_2") - self.diagMsgsText = QTextBrowser(self.diagMsgsBox) - self.diagMsgsText.setObjectName(u"diagMsgsText") - sizePolicy8 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Expanding) - sizePolicy8.setHorizontalStretch(0) - sizePolicy8.setVerticalStretch(0) - sizePolicy8.setHeightForWidth(self.diagMsgsText.sizePolicy().hasHeightForWidth()) - self.diagMsgsText.setSizePolicy(sizePolicy8) - - self.verticalLayout_2.addWidget(self.diagMsgsText) - - self.diagMsgsOptionsBox = QHBoxLayout() - self.diagMsgsOptionsBox.setObjectName(u"diagMsgsOptionsBox") - self.diagMsgsOptionsBox.setContentsMargins(5, -1, 5, -1) - self.diagMsgOptsAutoScrollCheck = QCheckBox(self.diagMsgsBox) - self.diagMsgOptsAutoScrollCheck.setObjectName(u"diagMsgOptsAutoScrollCheck") - sizePolicy1.setHeightForWidth(self.diagMsgOptsAutoScrollCheck.sizePolicy().hasHeightForWidth()) - self.diagMsgOptsAutoScrollCheck.setSizePolicy(sizePolicy1) - self.diagMsgOptsAutoScrollCheck.setChecked(True) - - self.diagMsgsOptionsBox.addWidget(self.diagMsgOptsAutoScrollCheck) - - self.horizontalSpacer_22 = QSpacerItem(10, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.diagMsgsOptionsBox.addItem(self.horizontalSpacer_22) - - self.diagMsgOptsShowTimeCheck = QCheckBox(self.diagMsgsBox) - self.diagMsgOptsShowTimeCheck.setObjectName(u"diagMsgOptsShowTimeCheck") - sizePolicy1.setHeightForWidth(self.diagMsgOptsShowTimeCheck.sizePolicy().hasHeightForWidth()) - self.diagMsgOptsShowTimeCheck.setSizePolicy(sizePolicy1) - - self.diagMsgsOptionsBox.addWidget(self.diagMsgOptsShowTimeCheck) - - self.horizontalSpacer_23 = QSpacerItem(10, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.diagMsgsOptionsBox.addItem(self.horizontalSpacer_23) - - self.diagMsgOptsShowKeyValCheck = QCheckBox(self.diagMsgsBox) - self.diagMsgOptsShowKeyValCheck.setObjectName(u"diagMsgOptsShowKeyValCheck") - sizePolicy1.setHeightForWidth(self.diagMsgOptsShowKeyValCheck.sizePolicy().hasHeightForWidth()) - self.diagMsgOptsShowKeyValCheck.setSizePolicy(sizePolicy1) - - self.diagMsgsOptionsBox.addWidget(self.diagMsgOptsShowKeyValCheck) - - self.horizontalSpacer_24 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) - - self.diagMsgsOptionsBox.addItem(self.horizontalSpacer_24) - - - self.verticalLayout_2.addLayout(self.diagMsgsOptionsBox) - - self.calibBox = QGroupBox(self.diagTab) - self.calibBox.setObjectName(u"calibBox") - self.calibBox.setGeometry(QRect(28, 20, 255, 170)) - self.verticalLayout_3 = QVBoxLayout(self.calibBox) - self.verticalLayout_3.setObjectName(u"verticalLayout_3") - self.verticalLayout_3.setContentsMargins(-1, -1, -1, 7) - self.calibPidTuneButtonL = QPushButton(self.calibBox) - self.calibPidTuneButtonL.setObjectName(u"calibPidTuneButtonL") - - self.verticalLayout_3.addWidget(self.calibPidTuneButtonL) - - self.calibPidTuneButtonR = QPushButton(self.calibBox) - self.calibPidTuneButtonR.setObjectName(u"calibPidTuneButtonR") - - self.verticalLayout_3.addWidget(self.calibPidTuneButtonR) - - self.calibCliffOffsetButton = QPushButton(self.calibBox) - self.calibCliffOffsetButton.setObjectName(u"calibCliffOffsetButton") - - self.verticalLayout_3.addWidget(self.calibCliffOffsetButton) - - self.calibImuCompassButton = QPushButton(self.calibBox) - self.calibImuCompassButton.setObjectName(u"calibImuCompassButton") - - self.verticalLayout_3.addWidget(self.calibImuCompassButton) - - self.selftestBox = QGroupBox(self.diagTab) - self.selftestBox.setObjectName(u"selftestBox") - self.selftestBox.setGeometry(QRect(28, 210, 255, 110)) - self.verticalLayout_4 = QVBoxLayout(self.selftestBox) - self.verticalLayout_4.setObjectName(u"verticalLayout_4") - self.verticalLayout_4.setContentsMargins(-1, -1, -1, 7) - self.selftestPicoAButton = QPushButton(self.selftestBox) - self.selftestPicoAButton.setObjectName(u"selftestPicoAButton") - - self.verticalLayout_4.addWidget(self.selftestPicoAButton) - - self.selftestPicoBButton = QPushButton(self.selftestBox) - self.selftestPicoBButton.setObjectName(u"selftestPicoBButton") - - self.verticalLayout_4.addWidget(self.selftestPicoBButton) - - self.pages.addTab(self.diagTab, "") - MainWindow.setCentralWidget(self.centralWidget) - self.menubar = QMenuBar(MainWindow) - self.menubar.setObjectName(u"menubar") - self.menubar.setEnabled(True) - self.menubar.setGeometry(QRect(0, 0, 1024, 21)) - self.menuFile = QMenu(self.menubar) - self.menuFile.setObjectName(u"menuFile") - self.menuFile.setCursor(QCursor(Qt.CursorShape.CrossCursor)) - self.menuConnection = QMenu(self.menubar) - self.menuConnection.setObjectName(u"menuConnection") - self.menuConnection.setCursor(QCursor(Qt.CursorShape.CrossCursor)) - self.menuConfiguration = QMenu(self.menubar) - self.menuConfiguration.setObjectName(u"menuConfiguration") - self.menuConfiguration.setCursor(QCursor(Qt.CursorShape.CrossCursor)) - MainWindow.setMenuBar(self.menubar) - - self.menubar.addAction(self.menuFile.menuAction()) - self.menubar.addAction(self.menuConnection.menuAction()) - self.menubar.addAction(self.menuConfiguration.menuAction()) - self.menuFile.addAction(self.actionRestart_Application) - self.menuFile.addSeparator() - self.menuFile.addAction(self.actionRestart_RPi) - self.menuFile.addAction(self.actionShutdown_System) - self.menuConnection.addAction(self.actionCheck_Robot_Connection) - self.menuConnection.addSeparator() - self.menuConnection.addAction(self.actionCheck_Wi_Fi_Connection) - self.menuConnection.addAction(self.actionCheck_WAN_Connection) - self.menuConfiguration.addAction(self.actionJoystick) - self.menuConfiguration.addAction(self.actionTest_Buttons_Switches) - self.menuConfiguration.addSeparator() - self.menuConfiguration.addAction(self.actionAbout) - - self.retranslateUi(MainWindow) - - self.pages.setCurrentIndex(0) - - - QMetaObject.connectSlotsByName(MainWindow) - # setupUi - - def retranslateUi(self, MainWindow): - MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"ROS Remote UI", None)) - self.actionRestart_Application.setText(QCoreApplication.translate("MainWindow", u"Restart Application", None)) - self.actionRestart_RPi.setText(QCoreApplication.translate("MainWindow", u"Restart System", None)) - self.actionShutdown_System.setText(QCoreApplication.translate("MainWindow", u"Shutdown System", None)) - self.actionCheck_Robot_Connection.setText(QCoreApplication.translate("MainWindow", u"Check Robot Connection", None)) - self.actionCheck_Wi_Fi_Connection.setText(QCoreApplication.translate("MainWindow", u"Check Wi-Fi Connection", None)) - self.actionCheck_WAN_Connection.setText(QCoreApplication.translate("MainWindow", u"Check WAN Connection", None)) - self.actionJoystick.setText(QCoreApplication.translate("MainWindow", u"Configure Joystick", None)) - self.actionTest_Buttons_Switches.setText(QCoreApplication.translate("MainWindow", u"Test Buttons", None)) - self.actionAbout.setText(QCoreApplication.translate("MainWindow", u"About", None)) - self.viewport.setText("") - self.viewportOptsBox.setTitle(QCoreApplication.translate("MainWindow", u"Viewport", None)) - self.viewportFpsLabel.setText(QCoreApplication.translate("MainWindow", u"FPS:", None)) - self.viewportFpsValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.viewportSelector.setItemText(0, QCoreApplication.translate("MainWindow", u"Camera View", None)) - self.viewportSelector.setItemText(1, QCoreApplication.translate("MainWindow", u"Camera View (Overlay)", None)) - self.viewportSelector.setItemText(2, QCoreApplication.translate("MainWindow", u"LiDAR View", None)) - - self.viewportSelector.setCurrentText(QCoreApplication.translate("MainWindow", u"Camera View", None)) - self.camLedsBox.setTitle(QCoreApplication.translate("MainWindow", u"Camera LEDs", None)) - self.camLedsBrightnessLabel.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.camLed1Check.setText(QCoreApplication.translate("MainWindow", u"1", None)) - self.camLed2Check.setText(QCoreApplication.translate("MainWindow", u"2", None)) - self.camLed3Check.setText(QCoreApplication.translate("MainWindow", u"3", None)) - self.camLed4Check.setText(QCoreApplication.translate("MainWindow", u"4", None)) - self.telemetryBox.setTitle(QCoreApplication.translate("MainWindow", u"Telemetry", None)) - self.teleBatteryLabel.setText(QCoreApplication.translate("MainWindow", u"Battery:", None)) - self.teleBatteryValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.teleBatteryUnits.setText(QCoreApplication.translate("MainWindow", u"volts", None)) - self.pages.setTabText(self.pages.indexOf(self.mainTab), QCoreApplication.translate("MainWindow", u"Main", None)) - self.microswSensBox.setTitle(QCoreApplication.translate("MainWindow", u"Microswitches", None)) - self.microswSensIndicatorFL.setText(QCoreApplication.translate("MainWindow", u"Front-L", None)) - self.microswSensIndicatorBL.setText(QCoreApplication.translate("MainWindow", u"Back-L", None)) - self.microswSensIndicatorFR.setText(QCoreApplication.translate("MainWindow", u"Front-R", None)) - self.microswSensIndicatorBR.setText(QCoreApplication.translate("MainWindow", u"Back-R", None)) - self.imuSensBox.setTitle(QCoreApplication.translate("MainWindow", u"IMU", None)) - self.imuSensAccelXLabel.setText(QCoreApplication.translate("MainWindow", u"Accel. X", None)) - self.imuSensAccelXValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.imuSensAccelXUnit.setText(QCoreApplication.translate("MainWindow", u"m/s", None)) - self.imuSensAccelYLabel.setText(QCoreApplication.translate("MainWindow", u"Accel. Y", None)) - self.imuSensAccelYValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.imuSensAccelYUnit.setText(QCoreApplication.translate("MainWindow", u"m/s", None)) - self.imuSensAccelZLabel.setText(QCoreApplication.translate("MainWindow", u"Accel. Z", None)) - self.imuSensAccelZValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.imuSensAccelZUnit.setText(QCoreApplication.translate("MainWindow", u"m/s", None)) - self.imuSensGyroXLabel.setText(QCoreApplication.translate("MainWindow", u"Gyro. X", None)) - self.imuSensGyroXValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.imuSensGyroXUnit.setText(QCoreApplication.translate("MainWindow", u"rad/s", None)) - self.imuSensGyroYLabel.setText(QCoreApplication.translate("MainWindow", u"Gyro. Y", None)) - self.imuSensGyroYValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.imuSensGyroYUnit.setText(QCoreApplication.translate("MainWindow", u"rad/s", None)) - self.imuSensGyroZLabel.setText(QCoreApplication.translate("MainWindow", u"Gyro. Z", None)) - self.imuSensGyroZValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.imuSensGyroZUnit.setText(QCoreApplication.translate("MainWindow", u"rad/s", None)) - self.imuSensCompXLabel.setText(QCoreApplication.translate("MainWindow", u"Comp. X", None)) - self.imuSensCompXValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.imuSensCompXUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) - self.imuSensCompYLabel.setText(QCoreApplication.translate("MainWindow", u"Comp. Y", None)) - self.imuSensCompYValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.imuSensCompYUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) - self.imuSensCompZLabel.setText(QCoreApplication.translate("MainWindow", u"Comp. Z", None)) - self.imuSensCompZValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.imuSensCompZUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) - self.envSensBox.setTitle(QCoreApplication.translate("MainWindow", u"Environment", None)) - self.envSensTempLabel.setText(QCoreApplication.translate("MainWindow", u"DHT Temp", None)) - self.envSensHumLabel.setText(QCoreApplication.translate("MainWindow", u"DHT Hum", None)) - self.envSensImuTempLabel.setText(QCoreApplication.translate("MainWindow", u"IMU Temp", None)) - self.envSensPicoATempLabel.setText(QCoreApplication.translate("MainWindow", u"Pico A Temp", None)) - self.envSensPicoBTempLabel.setText(QCoreApplication.translate("MainWindow", u"Pico B Temp", None)) - self.envSensPiTempLabel.setText(QCoreApplication.translate("MainWindow", u"Pi 5 Temp", None)) - self.envSensTempValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.envSensHumValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.envSensImuTempValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.envSensPicoATempValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.envSensPicoBTempValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.envSensPiTempValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.envSensTempUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) - self.envSensHumUnit.setText(QCoreApplication.translate("MainWindow", u"%", None)) - self.envSensImuTempUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) - self.envSensPicoATempUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) - self.envSensPicoBTempUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) - self.envSensPiTempUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) - self.cliffSensBox.setTitle(QCoreApplication.translate("MainWindow", u"Cliff Sensors", None)) - self.cliffSensIndicatorF2.setText(QCoreApplication.translate("MainWindow", u"Front 2", None)) - self.cliffSensIndicatorB2.setText(QCoreApplication.translate("MainWindow", u"Back 2", None)) - self.cliffSensIndicatorF3.setText(QCoreApplication.translate("MainWindow", u"Front 3", None)) - self.cliffSensIndicatorB1.setText(QCoreApplication.translate("MainWindow", u"Back 1", None)) - self.cliffSensIndicatorB3.setText(QCoreApplication.translate("MainWindow", u"Back 3", None)) - self.cliffSensIndicatorF1.setText(QCoreApplication.translate("MainWindow", u"Front 1", None)) - self.cliffSensIndicatorB4.setText(QCoreApplication.translate("MainWindow", u"Back 4", None)) - self.cliffSensIndicatorF4.setText(QCoreApplication.translate("MainWindow", u"Front 4", None)) - self.ultrasonicSensBox.setTitle(QCoreApplication.translate("MainWindow", u"Ultrasonic", None)) - self.ultrasonicSensLabelF.setText(QCoreApplication.translate("MainWindow", u"Front", None)) - self.ultrasonicSensLabelB.setText(QCoreApplication.translate("MainWindow", u"Back", None)) - self.ultrasonicSensLabelR.setText(QCoreApplication.translate("MainWindow", u"Right", None)) - self.ultrasonicSensLabelL.setText(QCoreApplication.translate("MainWindow", u"Left", None)) - self.ultrasonicSensValueF.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.ultrasonicSensValueB.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.ultrasonicSensValueR.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.ultrasonicSensValueL.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.ultrasonicSensUnitF.setText(QCoreApplication.translate("MainWindow", u"m", None)) - self.ultrasonicSensUnitB.setText(QCoreApplication.translate("MainWindow", u"m", None)) - self.ultrasonicSensUnitR.setText(QCoreApplication.translate("MainWindow", u"m", None)) - self.ultrasonicSensUnitL.setText(QCoreApplication.translate("MainWindow", u"m", None)) - self.batterySensBox.setTitle(QCoreApplication.translate("MainWindow", u"Battery", None)) - self.batterySensVoltageLabel.setText(QCoreApplication.translate("MainWindow", u"Voltage", None)) - self.batterySensCurrentLabel.setText(QCoreApplication.translate("MainWindow", u"Current", None)) - self.enableDisableBox.setTitle(QCoreApplication.translate("MainWindow", u"Enable/Disable", None)) - self.toggleEmittersEnabled.setText(QCoreApplication.translate("MainWindow", u"Emitters", None)) - self.togglePicoARelaEnable.setText(QCoreApplication.translate("MainWindow", u"Pico A Relay", None)) - self.pages.setTabText(self.pages.indexOf(self.sensorsTab), QCoreApplication.translate("MainWindow", u"Sensors", None)) - self.encOdomBox.setTitle(QCoreApplication.translate("MainWindow", u"Encoder Odometry", None)) - self.encOdomPosXLabel.setText(QCoreApplication.translate("MainWindow", u"Pos. X", None)) - self.encOdomPosYLabel.setText(QCoreApplication.translate("MainWindow", u"Pos. Y", None)) - self.encOdomYawLabel.setText(QCoreApplication.translate("MainWindow", u"Yaw", None)) - self.encOdomLinVelLabel.setText(QCoreApplication.translate("MainWindow", u"Lin. Vel.", None)) - self.encOdomAngVelLabel.setText(QCoreApplication.translate("MainWindow", u"Ang. Vel.", None)) - self.encOdomPosXValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.encOdomPosYValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.encOdomYawValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.encOdomLinVelValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.encOdomAngVelValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.encOdomPosXUnit.setText(QCoreApplication.translate("MainWindow", u"m", None)) - self.encOdomPosYUnit.setText(QCoreApplication.translate("MainWindow", u"m", None)) - self.encOdomYawUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) - self.encOdomLinVelUnit.setText(QCoreApplication.translate("MainWindow", u"m/s", None)) - self.encOdomAngVelUnit.setText(QCoreApplication.translate("MainWindow", u"r/s", None)) - self.mtrCtrlEnableBox.setTitle(QCoreApplication.translate("MainWindow", u"Motor Controllers", None)) - self.mtrCtrlEnableButton.setText(QCoreApplication.translate("MainWindow", u"Enable", None)) - self.mtrCtrlDisableButton.setText(QCoreApplication.translate("MainWindow", u"Disable", None)) - self.mtrCtrlEnableLIndicator.setText(QCoreApplication.translate("MainWindow", u"Left", None)) - self.mtrCtrlEnableRIndicator.setText(QCoreApplication.translate("MainWindow", u"Right", None)) - self.rpmMeasuredBox.setTitle(QCoreApplication.translate("MainWindow", u"RPMs - Measured", None)) - self.rpmMeasuredFRLabel.setText(QCoreApplication.translate("MainWindow", u"Front-R", None)) - self.rpmMeasuredFLLabel.setText(QCoreApplication.translate("MainWindow", u"Front-L", None)) - self.rpmMeasuredBRLabel.setText(QCoreApplication.translate("MainWindow", u"Back-R", None)) - self.rpmMeasuredBLLabel.setText(QCoreApplication.translate("MainWindow", u"Back-L", None)) - self.rpmMeasuredFRValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.rpmMeasuredFLValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.rpmMeasuredBRValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.rpmMeasuredBlValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.rpmMeasuredFRUnit.setText(QCoreApplication.translate("MainWindow", u"rpm", None)) - self.rpmMeasuredFLUnit.setText(QCoreApplication.translate("MainWindow", u"rpm", None)) - self.rpmMeasuredBRUnit.setText(QCoreApplication.translate("MainWindow", u"rpm", None)) - self.rpmMeasuredBLUnit.setText(QCoreApplication.translate("MainWindow", u"rpm", None)) - self.rpmTargetBox.setTitle(QCoreApplication.translate("MainWindow", u"RPMs - Target", None)) - self.rpmTargetFRLabel.setText(QCoreApplication.translate("MainWindow", u"Front-R", None)) - self.rpmTargetFLLabel.setText(QCoreApplication.translate("MainWindow", u"Front-L", None)) - self.rpmTargetBRLabel.setText(QCoreApplication.translate("MainWindow", u"Back-R", None)) - self.rpmTargetBLLabel.setText(QCoreApplication.translate("MainWindow", u"Back-L", None)) - self.rpmTargetFRValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.rpmTargetFLValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.rpmTargetBRValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.rpmTargetBLValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.rpmTargetFRUnit.setText(QCoreApplication.translate("MainWindow", u"rpm", None)) - self.rpmTargetFLUnit.setText(QCoreApplication.translate("MainWindow", u"rpm", None)) - self.rpmTargetBRUnit.setText(QCoreApplication.translate("MainWindow", u"rpm", None)) - self.rpmTargetBLUnit.setText(QCoreApplication.translate("MainWindow", u"rpm", None)) - self.encPulseCtrsBox.setTitle(QCoreApplication.translate("MainWindow", u"Encoder Pulse Counters", None)) - self.encPulseCtrsFRLabel.setText(QCoreApplication.translate("MainWindow", u"Front-R", None)) - self.encPulseCtrsFLLabel.setText(QCoreApplication.translate("MainWindow", u"Front-L", None)) - self.encPulseCtrsBRLabel.setText(QCoreApplication.translate("MainWindow", u"Back-R", None)) - self.encPulseCtrsBLLabel.setText(QCoreApplication.translate("MainWindow", u"Back-L", None)) - self.encPulseCtrsFRValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.encPulseCtrsFLValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.encPulseCtrsBRValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.encPulseCtrsBLValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.leftPidBox.setTitle(QCoreApplication.translate("MainWindow", u"Left Controller PID", None)) - self.leftPidPLabel.setText(QCoreApplication.translate("MainWindow", u"PID (P)", None)) - self.leftPidILabel.setText(QCoreApplication.translate("MainWindow", u"PID (I)", None)) - self.leftPidDLabel.setText(QCoreApplication.translate("MainWindow", u"PID (D)", None)) - self.leftPidOutLabel.setText(QCoreApplication.translate("MainWindow", u"PID Out", None)) - self.leftPidPValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.leftPidIValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.leftPidDValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.leftPidOutValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.rightPidBox.setTitle(QCoreApplication.translate("MainWindow", u"Right Controller PID", None)) - self.rightPidPLabel.setText(QCoreApplication.translate("MainWindow", u"PID (P)", None)) - self.rightPidILabel.setText(QCoreApplication.translate("MainWindow", u"PID (I)", None)) - self.rightPidDLabel.setText(QCoreApplication.translate("MainWindow", u"PID (D)", None)) - self.rightPidOutLabel.setText(QCoreApplication.translate("MainWindow", u"PID Out", None)) - self.rightPidPValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.rightPidIValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.rightPidDValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.rightPidOutValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.pages.setTabText(self.pages.indexOf(self.motorCtrlTab), QCoreApplication.translate("MainWindow", u"Motor Controllers", None)) - self.batteryInfoBox.setTitle(QCoreApplication.translate("MainWindow", u"Battery", None)) - self.batteryVoltageLabel.setText(QCoreApplication.translate("MainWindow", u"Voltage", None)) - self.batteryCurrentLabel.setText(QCoreApplication.translate("MainWindow", u"Current", None)) - self.powerTabNote.setText(QCoreApplication.translate("MainWindow", u"This page is for ROS Robot version 2.", None)) - self.pages.setTabText(self.pages.indexOf(self.powerTab), QCoreApplication.translate("MainWindow", u"Power", None)) - self.diagMsgsBox.setTitle(QCoreApplication.translate("MainWindow", u"Diagnostic Messages", None)) - self.diagMsgsText.setHtml(QCoreApplication.translate("MainWindow", u"\n" -"\n" -"


", None)) - self.diagMsgOptsAutoScrollCheck.setText(QCoreApplication.translate("MainWindow", u"Auto-scroll", None)) - self.diagMsgOptsShowTimeCheck.setText(QCoreApplication.translate("MainWindow", u"Show timestamps", None)) - self.diagMsgOptsShowKeyValCheck.setText(QCoreApplication.translate("MainWindow", u"Show key-values", None)) - self.calibBox.setTitle(QCoreApplication.translate("MainWindow", u"Calibration", None)) - self.calibPidTuneButtonL.setText(QCoreApplication.translate("MainWindow", u"PID Auto-tune (Left)", None)) - self.calibPidTuneButtonR.setText(QCoreApplication.translate("MainWindow", u"PID Auto-tune (Right)", None)) - self.calibCliffOffsetButton.setText(QCoreApplication.translate("MainWindow", u"Cliff Sensors Offset", None)) - self.calibImuCompassButton.setText(QCoreApplication.translate("MainWindow", u"IMU - Compass", None)) - self.selftestBox.setTitle(QCoreApplication.translate("MainWindow", u"Self-Test", None)) - self.selftestPicoAButton.setText(QCoreApplication.translate("MainWindow", u"Pico A Routine", None)) - self.selftestPicoBButton.setText(QCoreApplication.translate("MainWindow", u"Pico B Routine", None)) - self.pages.setTabText(self.pages.indexOf(self.diagTab), QCoreApplication.translate("MainWindow", u"Diagnostics", None)) - self.menuFile.setTitle(QCoreApplication.translate("MainWindow", u"Power", None)) - self.menuConnection.setTitle(QCoreApplication.translate("MainWindow", u"Connection", None)) - self.menuConfiguration.setTitle(QCoreApplication.translate("MainWindow", u"Configuration", None)) - # retranslateUi - +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'main_window.ui' +## +## Created by: Qt User Interface Compiler version 6.7.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QAction, QBrush, QColor, QConicalGradient, + QCursor, QFont, QFontDatabase, QGradient, + QIcon, QImage, QKeySequence, QLinearGradient, + QPainter, QPalette, QPixmap, QRadialGradient, + QTransform) +from PySide6.QtWidgets import (QApplication, QCheckBox, QComboBox, QFrame, + QGridLayout, QGroupBox, QHBoxLayout, QLCDNumber, + QLabel, QLayout, QLineEdit, QMainWindow, + QMenu, QMenuBar, QPushButton, QSizePolicy, + QSlider, QSpacerItem, QTabWidget, QTextBrowser, + QVBoxLayout, QWidget) + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + if not MainWindow.objectName(): + MainWindow.setObjectName(u"MainWindow") + MainWindow.resize(1024, 600) + sizePolicy = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) + MainWindow.setSizePolicy(sizePolicy) + MainWindow.setMinimumSize(QSize(1024, 600)) + MainWindow.setMaximumSize(QSize(1024, 600)) + self.actionRestart_Application = QAction(MainWindow) + self.actionRestart_Application.setObjectName(u"actionRestart_Application") + self.actionRestart_RPi = QAction(MainWindow) + self.actionRestart_RPi.setObjectName(u"actionRestart_RPi") + self.actionShutdown_System = QAction(MainWindow) + self.actionShutdown_System.setObjectName(u"actionShutdown_System") + self.actionCheck_Robot_Connection = QAction(MainWindow) + self.actionCheck_Robot_Connection.setObjectName(u"actionCheck_Robot_Connection") + self.actionCheck_Wi_Fi_Connection = QAction(MainWindow) + self.actionCheck_Wi_Fi_Connection.setObjectName(u"actionCheck_Wi_Fi_Connection") + self.actionCheck_WAN_Connection = QAction(MainWindow) + self.actionCheck_WAN_Connection.setObjectName(u"actionCheck_WAN_Connection") + self.actionJoystick = QAction(MainWindow) + self.actionJoystick.setObjectName(u"actionJoystick") + self.actionTest_Buttons_Switches = QAction(MainWindow) + self.actionTest_Buttons_Switches.setObjectName(u"actionTest_Buttons_Switches") + self.actionAbout = QAction(MainWindow) + self.actionAbout.setObjectName(u"actionAbout") + self.centralWidget = QWidget(MainWindow) + self.centralWidget.setObjectName(u"centralWidget") + self.centralWidget.setEnabled(True) + self.gridLayout_1 = QGridLayout(self.centralWidget) + self.gridLayout_1.setObjectName(u"gridLayout_1") + self.gridLayout_1.setContentsMargins(0, 0, 0, 0) + self.pages = QTabWidget(self.centralWidget) + self.pages.setObjectName(u"pages") + sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + sizePolicy1.setHorizontalStretch(0) + sizePolicy1.setVerticalStretch(0) + sizePolicy1.setHeightForWidth(self.pages.sizePolicy().hasHeightForWidth()) + self.pages.setSizePolicy(sizePolicy1) + self.pages.setCursor(QCursor(Qt.CursorShape.ArrowCursor)) + self.pages.setTabsClosable(False) + self.pages.setMovable(False) + self.pages.setTabBarAutoHide(False) + self.mainTab = QWidget() + self.mainTab.setObjectName(u"mainTab") + self.viewport = QLabel(self.mainTab) + self.viewport.setObjectName(u"viewport") + self.viewport.setGeometry(QRect(20, 20, 980, 430)) + sizePolicy.setHeightForWidth(self.viewport.sizePolicy().hasHeightForWidth()) + self.viewport.setSizePolicy(sizePolicy) + self.viewport.setMinimumSize(QSize(980, 430)) + self.viewport.setMaximumSize(QSize(980, 430)) + self.viewport.setMouseTracking(False) + self.viewport.setFrameShape(QFrame.Shape.Box) + self.viewport.setFrameShadow(QFrame.Shadow.Sunken) + self.viewport.setAlignment(Qt.AlignmentFlag.AlignCenter) + self.viewportOptsBox = QGroupBox(self.mainTab) + self.viewportOptsBox.setObjectName(u"viewportOptsBox") + self.viewportOptsBox.setGeometry(QRect(20, 460, 360, 70)) + self.gridLayout_2 = QGridLayout(self.viewportOptsBox) + self.gridLayout_2.setObjectName(u"gridLayout_2") + self.viewportFpsLabel = QLabel(self.viewportOptsBox) + self.viewportFpsLabel.setObjectName(u"viewportFpsLabel") + + self.gridLayout_2.addWidget(self.viewportFpsLabel, 0, 2, 1, 1) + + self.viewportFpsValue = QLineEdit(self.viewportOptsBox) + self.viewportFpsValue.setObjectName(u"viewportFpsValue") + sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) + sizePolicy2.setHorizontalStretch(0) + sizePolicy2.setVerticalStretch(0) + sizePolicy2.setHeightForWidth(self.viewportFpsValue.sizePolicy().hasHeightForWidth()) + self.viewportFpsValue.setSizePolicy(sizePolicy2) + font = QFont() + font.setPointSize(12) + self.viewportFpsValue.setFont(font) + self.viewportFpsValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.viewportFpsValue.setFrame(True) + self.viewportFpsValue.setDragEnabled(True) + self.viewportFpsValue.setReadOnly(True) + + self.gridLayout_2.addWidget(self.viewportFpsValue, 0, 3, 1, 1) + + self.viewportSelector = QComboBox(self.viewportOptsBox) + self.viewportSelector.addItem("") + self.viewportSelector.addItem("") + self.viewportSelector.addItem("") + self.viewportSelector.setObjectName(u"viewportSelector") + sizePolicy2.setHeightForWidth(self.viewportSelector.sizePolicy().hasHeightForWidth()) + self.viewportSelector.setSizePolicy(sizePolicy2) + self.viewportSelector.setCursor(QCursor(Qt.CursorShape.CrossCursor)) + + self.gridLayout_2.addWidget(self.viewportSelector, 0, 0, 1, 1) + + self.horizontalSpacer_1 = QSpacerItem(10, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.gridLayout_2.addItem(self.horizontalSpacer_1, 0, 1, 1, 1) + + self.camLedsBox = QGroupBox(self.mainTab) + self.camLedsBox.setObjectName(u"camLedsBox") + self.camLedsBox.setGeometry(QRect(400, 460, 375, 70)) + sizePolicy.setHeightForWidth(self.camLedsBox.sizePolicy().hasHeightForWidth()) + self.camLedsBox.setSizePolicy(sizePolicy) + self.horizontalLayout_1 = QHBoxLayout(self.camLedsBox) + self.horizontalLayout_1.setObjectName(u"horizontalLayout_1") + self.horizontalLayout_1.setContentsMargins(12, -1, -1, -1) + self.camLedsBrightnessSlider = QSlider(self.camLedsBox) + self.camLedsBrightnessSlider.setObjectName(u"camLedsBrightnessSlider") + self.camLedsBrightnessSlider.setMaximum(4095) + self.camLedsBrightnessSlider.setSingleStep(4) + self.camLedsBrightnessSlider.setOrientation(Qt.Orientation.Horizontal) + + self.horizontalLayout_1.addWidget(self.camLedsBrightnessSlider) + + self.camLedsBrightnessLabel = QLabel(self.camLedsBox) + self.camLedsBrightnessLabel.setObjectName(u"camLedsBrightnessLabel") + + self.horizontalLayout_1.addWidget(self.camLedsBrightnessLabel) + + self.horizontalSpacer_2 = QSpacerItem(10, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_1.addItem(self.horizontalSpacer_2) + + self.camLed1Check = QCheckBox(self.camLedsBox) + self.camLed1Check.setObjectName(u"camLed1Check") + + self.horizontalLayout_1.addWidget(self.camLed1Check) + + self.camLed2Check = QCheckBox(self.camLedsBox) + self.camLed2Check.setObjectName(u"camLed2Check") + + self.horizontalLayout_1.addWidget(self.camLed2Check) + + self.camLed3Check = QCheckBox(self.camLedsBox) + self.camLed3Check.setObjectName(u"camLed3Check") + + self.horizontalLayout_1.addWidget(self.camLed3Check) + + self.camLed4Check = QCheckBox(self.camLedsBox) + self.camLed4Check.setObjectName(u"camLed4Check") + + self.horizontalLayout_1.addWidget(self.camLed4Check) + + self.telemetryBox = QGroupBox(self.mainTab) + self.telemetryBox.setObjectName(u"telemetryBox") + self.telemetryBox.setGeometry(QRect(795, 460, 204, 70)) + sizePolicy.setHeightForWidth(self.telemetryBox.sizePolicy().hasHeightForWidth()) + self.telemetryBox.setSizePolicy(sizePolicy) + self.horizontalLayout_2 = QHBoxLayout(self.telemetryBox) + self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.horizontalLayout_2.setContentsMargins(12, -1, 12, -1) + self.teleBatteryLabel = QLabel(self.telemetryBox) + self.teleBatteryLabel.setObjectName(u"teleBatteryLabel") + sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) + sizePolicy3.setHorizontalStretch(0) + sizePolicy3.setVerticalStretch(0) + sizePolicy3.setHeightForWidth(self.teleBatteryLabel.sizePolicy().hasHeightForWidth()) + self.teleBatteryLabel.setSizePolicy(sizePolicy3) + + self.horizontalLayout_2.addWidget(self.teleBatteryLabel) + + self.teleBatteryValue = QLineEdit(self.telemetryBox) + self.teleBatteryValue.setObjectName(u"teleBatteryValue") + sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + sizePolicy4.setHorizontalStretch(0) + sizePolicy4.setVerticalStretch(0) + sizePolicy4.setHeightForWidth(self.teleBatteryValue.sizePolicy().hasHeightForWidth()) + self.teleBatteryValue.setSizePolicy(sizePolicy4) + self.teleBatteryValue.setFont(font) + self.teleBatteryValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.teleBatteryValue.setFrame(True) + self.teleBatteryValue.setDragEnabled(True) + self.teleBatteryValue.setReadOnly(True) + + self.horizontalLayout_2.addWidget(self.teleBatteryValue) + + self.teleBatteryUnits = QLabel(self.telemetryBox) + self.teleBatteryUnits.setObjectName(u"teleBatteryUnits") + + self.horizontalLayout_2.addWidget(self.teleBatteryUnits) + + self.pages.addTab(self.mainTab, "") + self.sensorsTab = QWidget() + self.sensorsTab.setObjectName(u"sensorsTab") + self.microswSensBox = QGroupBox(self.sensorsTab) + self.microswSensBox.setObjectName(u"microswSensBox") + self.microswSensBox.setGeometry(QRect(462, 20, 195, 110)) + self.gridLayout_3 = QGridLayout(self.microswSensBox) + self.gridLayout_3.setObjectName(u"gridLayout_3") + self.microswSensIndicatorFL = QLabel(self.microswSensBox) + self.microswSensIndicatorFL.setObjectName(u"microswSensIndicatorFL") + sizePolicy1.setHeightForWidth(self.microswSensIndicatorFL.sizePolicy().hasHeightForWidth()) + self.microswSensIndicatorFL.setSizePolicy(sizePolicy1) + self.microswSensIndicatorFL.setAutoFillBackground(False) + self.microswSensIndicatorFL.setFrameShape(QFrame.Shape.Box) + self.microswSensIndicatorFL.setFrameShadow(QFrame.Shadow.Plain) + self.microswSensIndicatorFL.setLineWidth(1) + self.microswSensIndicatorFL.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.gridLayout_3.addWidget(self.microswSensIndicatorFL, 0, 0, 1, 1) + + self.microswSensIndicatorBL = QLabel(self.microswSensBox) + self.microswSensIndicatorBL.setObjectName(u"microswSensIndicatorBL") + sizePolicy1.setHeightForWidth(self.microswSensIndicatorBL.sizePolicy().hasHeightForWidth()) + self.microswSensIndicatorBL.setSizePolicy(sizePolicy1) + self.microswSensIndicatorBL.setAutoFillBackground(False) + self.microswSensIndicatorBL.setFrameShape(QFrame.Shape.Box) + self.microswSensIndicatorBL.setFrameShadow(QFrame.Shadow.Plain) + self.microswSensIndicatorBL.setLineWidth(1) + self.microswSensIndicatorBL.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.gridLayout_3.addWidget(self.microswSensIndicatorBL, 2, 0, 1, 1) + + self.microswSensIndicatorFR = QLabel(self.microswSensBox) + self.microswSensIndicatorFR.setObjectName(u"microswSensIndicatorFR") + sizePolicy1.setHeightForWidth(self.microswSensIndicatorFR.sizePolicy().hasHeightForWidth()) + self.microswSensIndicatorFR.setSizePolicy(sizePolicy1) + self.microswSensIndicatorFR.setAutoFillBackground(False) + self.microswSensIndicatorFR.setFrameShape(QFrame.Shape.Box) + self.microswSensIndicatorFR.setFrameShadow(QFrame.Shadow.Plain) + self.microswSensIndicatorFR.setLineWidth(1) + self.microswSensIndicatorFR.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.gridLayout_3.addWidget(self.microswSensIndicatorFR, 0, 1, 1, 1) + + self.microswSensIndicatorBR = QLabel(self.microswSensBox) + self.microswSensIndicatorBR.setObjectName(u"microswSensIndicatorBR") + sizePolicy1.setHeightForWidth(self.microswSensIndicatorBR.sizePolicy().hasHeightForWidth()) + self.microswSensIndicatorBR.setSizePolicy(sizePolicy1) + self.microswSensIndicatorBR.setAutoFillBackground(False) + self.microswSensIndicatorBR.setFrameShape(QFrame.Shape.Box) + self.microswSensIndicatorBR.setFrameShadow(QFrame.Shadow.Plain) + self.microswSensIndicatorBR.setLineWidth(1) + self.microswSensIndicatorBR.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.gridLayout_3.addWidget(self.microswSensIndicatorBR, 2, 1, 1, 1) + + self.imuSensBox = QGroupBox(self.sensorsTab) + self.imuSensBox.setObjectName(u"imuSensBox") + self.imuSensBox.setGeometry(QRect(245, 215, 195, 305)) + self.verticalLayout_1 = QVBoxLayout(self.imuSensBox) + self.verticalLayout_1.setObjectName(u"verticalLayout_1") + self.imuSensAccelXBox = QHBoxLayout() + self.imuSensAccelXBox.setObjectName(u"imuSensAccelXBox") + self.imuSensAccelXLabel = QLabel(self.imuSensBox) + self.imuSensAccelXLabel.setObjectName(u"imuSensAccelXLabel") + font1 = QFont() + font1.setPointSize(11) + self.imuSensAccelXLabel.setFont(font1) + self.imuSensAccelXLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.imuSensAccelXBox.addWidget(self.imuSensAccelXLabel) + + self.horizontalSpacer_3 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.imuSensAccelXBox.addItem(self.horizontalSpacer_3) + + self.imuSensAccelXValue = QLineEdit(self.imuSensBox) + self.imuSensAccelXValue.setObjectName(u"imuSensAccelXValue") + sizePolicy4.setHeightForWidth(self.imuSensAccelXValue.sizePolicy().hasHeightForWidth()) + self.imuSensAccelXValue.setSizePolicy(sizePolicy4) + self.imuSensAccelXValue.setFont(font) + self.imuSensAccelXValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.imuSensAccelXValue.setFrame(True) + self.imuSensAccelXValue.setDragEnabled(True) + self.imuSensAccelXValue.setReadOnly(True) + + self.imuSensAccelXBox.addWidget(self.imuSensAccelXValue) + + self.imuSensAccelXUnit = QLabel(self.imuSensBox) + self.imuSensAccelXUnit.setObjectName(u"imuSensAccelXUnit") + + self.imuSensAccelXBox.addWidget(self.imuSensAccelXUnit) + + + self.verticalLayout_1.addLayout(self.imuSensAccelXBox) + + self.imuSensAccelYBox = QHBoxLayout() + self.imuSensAccelYBox.setObjectName(u"imuSensAccelYBox") + self.imuSensAccelYLabel = QLabel(self.imuSensBox) + self.imuSensAccelYLabel.setObjectName(u"imuSensAccelYLabel") + self.imuSensAccelYLabel.setFont(font1) + self.imuSensAccelYLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.imuSensAccelYBox.addWidget(self.imuSensAccelYLabel) + + self.horizontalSpacer_4 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.imuSensAccelYBox.addItem(self.horizontalSpacer_4) + + self.imuSensAccelYValue = QLineEdit(self.imuSensBox) + self.imuSensAccelYValue.setObjectName(u"imuSensAccelYValue") + sizePolicy4.setHeightForWidth(self.imuSensAccelYValue.sizePolicy().hasHeightForWidth()) + self.imuSensAccelYValue.setSizePolicy(sizePolicy4) + self.imuSensAccelYValue.setFont(font) + self.imuSensAccelYValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.imuSensAccelYValue.setFrame(True) + self.imuSensAccelYValue.setDragEnabled(True) + self.imuSensAccelYValue.setReadOnly(True) + + self.imuSensAccelYBox.addWidget(self.imuSensAccelYValue) + + self.imuSensAccelYUnit = QLabel(self.imuSensBox) + self.imuSensAccelYUnit.setObjectName(u"imuSensAccelYUnit") + + self.imuSensAccelYBox.addWidget(self.imuSensAccelYUnit) + + + self.verticalLayout_1.addLayout(self.imuSensAccelYBox) + + self.imuSensAccelZBox = QHBoxLayout() + self.imuSensAccelZBox.setObjectName(u"imuSensAccelZBox") + self.imuSensAccelZLabel = QLabel(self.imuSensBox) + self.imuSensAccelZLabel.setObjectName(u"imuSensAccelZLabel") + self.imuSensAccelZLabel.setFont(font1) + self.imuSensAccelZLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.imuSensAccelZBox.addWidget(self.imuSensAccelZLabel) + + self.horizontalSpacer_5 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.imuSensAccelZBox.addItem(self.horizontalSpacer_5) + + self.imuSensAccelZValue = QLineEdit(self.imuSensBox) + self.imuSensAccelZValue.setObjectName(u"imuSensAccelZValue") + sizePolicy4.setHeightForWidth(self.imuSensAccelZValue.sizePolicy().hasHeightForWidth()) + self.imuSensAccelZValue.setSizePolicy(sizePolicy4) + self.imuSensAccelZValue.setFont(font) + self.imuSensAccelZValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.imuSensAccelZValue.setFrame(True) + self.imuSensAccelZValue.setDragEnabled(True) + self.imuSensAccelZValue.setReadOnly(True) + + self.imuSensAccelZBox.addWidget(self.imuSensAccelZValue) + + self.imuSensAccelZUnit = QLabel(self.imuSensBox) + self.imuSensAccelZUnit.setObjectName(u"imuSensAccelZUnit") + + self.imuSensAccelZBox.addWidget(self.imuSensAccelZUnit) + + + self.verticalLayout_1.addLayout(self.imuSensAccelZBox) + + self.verticalSpacer_1 = QSpacerItem(20, 8, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_1.addItem(self.verticalSpacer_1) + + self.imuSensGyroXBox = QHBoxLayout() + self.imuSensGyroXBox.setObjectName(u"imuSensGyroXBox") + self.imuSensGyroXLabel = QLabel(self.imuSensBox) + self.imuSensGyroXLabel.setObjectName(u"imuSensGyroXLabel") + self.imuSensGyroXLabel.setFont(font1) + self.imuSensGyroXLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.imuSensGyroXBox.addWidget(self.imuSensGyroXLabel) + + self.horizontalSpacer_6 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.imuSensGyroXBox.addItem(self.horizontalSpacer_6) + + self.imuSensGyroXValue = QLineEdit(self.imuSensBox) + self.imuSensGyroXValue.setObjectName(u"imuSensGyroXValue") + sizePolicy4.setHeightForWidth(self.imuSensGyroXValue.sizePolicy().hasHeightForWidth()) + self.imuSensGyroXValue.setSizePolicy(sizePolicy4) + self.imuSensGyroXValue.setFont(font) + self.imuSensGyroXValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.imuSensGyroXValue.setFrame(True) + self.imuSensGyroXValue.setDragEnabled(True) + self.imuSensGyroXValue.setReadOnly(True) + + self.imuSensGyroXBox.addWidget(self.imuSensGyroXValue) + + self.imuSensGyroXUnit = QLabel(self.imuSensBox) + self.imuSensGyroXUnit.setObjectName(u"imuSensGyroXUnit") + + self.imuSensGyroXBox.addWidget(self.imuSensGyroXUnit) + + + self.verticalLayout_1.addLayout(self.imuSensGyroXBox) + + self.imuSensGyroYBox = QHBoxLayout() + self.imuSensGyroYBox.setObjectName(u"imuSensGyroYBox") + self.imuSensGyroYLabel = QLabel(self.imuSensBox) + self.imuSensGyroYLabel.setObjectName(u"imuSensGyroYLabel") + self.imuSensGyroYLabel.setFont(font1) + self.imuSensGyroYLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.imuSensGyroYBox.addWidget(self.imuSensGyroYLabel) + + self.horizontalSpacer_7 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.imuSensGyroYBox.addItem(self.horizontalSpacer_7) + + self.imuSensGyroYValue = QLineEdit(self.imuSensBox) + self.imuSensGyroYValue.setObjectName(u"imuSensGyroYValue") + sizePolicy4.setHeightForWidth(self.imuSensGyroYValue.sizePolicy().hasHeightForWidth()) + self.imuSensGyroYValue.setSizePolicy(sizePolicy4) + self.imuSensGyroYValue.setFont(font) + self.imuSensGyroYValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.imuSensGyroYValue.setFrame(True) + self.imuSensGyroYValue.setDragEnabled(True) + self.imuSensGyroYValue.setReadOnly(True) + + self.imuSensGyroYBox.addWidget(self.imuSensGyroYValue) + + self.imuSensGyroYUnit = QLabel(self.imuSensBox) + self.imuSensGyroYUnit.setObjectName(u"imuSensGyroYUnit") + + self.imuSensGyroYBox.addWidget(self.imuSensGyroYUnit) + + + self.verticalLayout_1.addLayout(self.imuSensGyroYBox) + + self.imuSensGyroZBox = QHBoxLayout() + self.imuSensGyroZBox.setObjectName(u"imuSensGyroZBox") + self.imuSensGyroZLabel = QLabel(self.imuSensBox) + self.imuSensGyroZLabel.setObjectName(u"imuSensGyroZLabel") + self.imuSensGyroZLabel.setFont(font1) + self.imuSensGyroZLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.imuSensGyroZBox.addWidget(self.imuSensGyroZLabel) + + self.horizontalSpacer_8 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.imuSensGyroZBox.addItem(self.horizontalSpacer_8) + + self.imuSensGyroZValue = QLineEdit(self.imuSensBox) + self.imuSensGyroZValue.setObjectName(u"imuSensGyroZValue") + sizePolicy4.setHeightForWidth(self.imuSensGyroZValue.sizePolicy().hasHeightForWidth()) + self.imuSensGyroZValue.setSizePolicy(sizePolicy4) + self.imuSensGyroZValue.setFont(font) + self.imuSensGyroZValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.imuSensGyroZValue.setFrame(True) + self.imuSensGyroZValue.setDragEnabled(True) + self.imuSensGyroZValue.setReadOnly(True) + + self.imuSensGyroZBox.addWidget(self.imuSensGyroZValue) + + self.imuSensGyroZUnit = QLabel(self.imuSensBox) + self.imuSensGyroZUnit.setObjectName(u"imuSensGyroZUnit") + + self.imuSensGyroZBox.addWidget(self.imuSensGyroZUnit) + + + self.verticalLayout_1.addLayout(self.imuSensGyroZBox) + + self.verticalSpacer_2 = QSpacerItem(20, 8, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_1.addItem(self.verticalSpacer_2) + + self.imuSensCompXBox = QHBoxLayout() + self.imuSensCompXBox.setObjectName(u"imuSensCompXBox") + self.imuSensCompXLabel = QLabel(self.imuSensBox) + self.imuSensCompXLabel.setObjectName(u"imuSensCompXLabel") + self.imuSensCompXLabel.setFont(font1) + self.imuSensCompXLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.imuSensCompXBox.addWidget(self.imuSensCompXLabel) + + self.horizontalSpacer_9 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.imuSensCompXBox.addItem(self.horizontalSpacer_9) + + self.imuSensCompXValue = QLineEdit(self.imuSensBox) + self.imuSensCompXValue.setObjectName(u"imuSensCompXValue") + sizePolicy4.setHeightForWidth(self.imuSensCompXValue.sizePolicy().hasHeightForWidth()) + self.imuSensCompXValue.setSizePolicy(sizePolicy4) + self.imuSensCompXValue.setFont(font) + self.imuSensCompXValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.imuSensCompXValue.setFrame(True) + self.imuSensCompXValue.setDragEnabled(True) + self.imuSensCompXValue.setReadOnly(True) + + self.imuSensCompXBox.addWidget(self.imuSensCompXValue) + + self.imuSensCompXUnit = QLabel(self.imuSensBox) + self.imuSensCompXUnit.setObjectName(u"imuSensCompXUnit") + + self.imuSensCompXBox.addWidget(self.imuSensCompXUnit) + + + self.verticalLayout_1.addLayout(self.imuSensCompXBox) + + self.imuSensCompYBox = QHBoxLayout() + self.imuSensCompYBox.setObjectName(u"imuSensCompYBox") + self.imuSensCompYLabel = QLabel(self.imuSensBox) + self.imuSensCompYLabel.setObjectName(u"imuSensCompYLabel") + self.imuSensCompYLabel.setFont(font1) + self.imuSensCompYLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.imuSensCompYBox.addWidget(self.imuSensCompYLabel) + + self.horizontalSpacer_10 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.imuSensCompYBox.addItem(self.horizontalSpacer_10) + + self.imuSensCompYValue = QLineEdit(self.imuSensBox) + self.imuSensCompYValue.setObjectName(u"imuSensCompYValue") + sizePolicy4.setHeightForWidth(self.imuSensCompYValue.sizePolicy().hasHeightForWidth()) + self.imuSensCompYValue.setSizePolicy(sizePolicy4) + self.imuSensCompYValue.setFont(font) + self.imuSensCompYValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.imuSensCompYValue.setFrame(True) + self.imuSensCompYValue.setDragEnabled(True) + self.imuSensCompYValue.setReadOnly(True) + + self.imuSensCompYBox.addWidget(self.imuSensCompYValue) + + self.imuSensCompYUnit = QLabel(self.imuSensBox) + self.imuSensCompYUnit.setObjectName(u"imuSensCompYUnit") + + self.imuSensCompYBox.addWidget(self.imuSensCompYUnit) + + + self.verticalLayout_1.addLayout(self.imuSensCompYBox) + + self.imuSensCompZBox = QHBoxLayout() + self.imuSensCompZBox.setObjectName(u"imuSensCompZBox") + self.imuSensCompZLabel = QLabel(self.imuSensBox) + self.imuSensCompZLabel.setObjectName(u"imuSensCompZLabel") + self.imuSensCompZLabel.setFont(font1) + self.imuSensCompZLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.imuSensCompZBox.addWidget(self.imuSensCompZLabel) + + self.horizontalSpacer_11 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.imuSensCompZBox.addItem(self.horizontalSpacer_11) + + self.imuSensCompZValue = QLineEdit(self.imuSensBox) + self.imuSensCompZValue.setObjectName(u"imuSensCompZValue") + sizePolicy4.setHeightForWidth(self.imuSensCompZValue.sizePolicy().hasHeightForWidth()) + self.imuSensCompZValue.setSizePolicy(sizePolicy4) + self.imuSensCompZValue.setFont(font) + self.imuSensCompZValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.imuSensCompZValue.setFrame(True) + self.imuSensCompZValue.setDragEnabled(True) + self.imuSensCompZValue.setReadOnly(True) + + self.imuSensCompZBox.addWidget(self.imuSensCompZValue) + + self.imuSensCompZUnit = QLabel(self.imuSensBox) + self.imuSensCompZUnit.setObjectName(u"imuSensCompZUnit") + + self.imuSensCompZBox.addWidget(self.imuSensCompZUnit) + + + self.verticalLayout_1.addLayout(self.imuSensCompZBox) + + self.envSensBox = QGroupBox(self.sensorsTab) + self.envSensBox.setObjectName(u"envSensBox") + self.envSensBox.setGeometry(QRect(28, 185, 195, 210)) + sizePolicy.setHeightForWidth(self.envSensBox.sizePolicy().hasHeightForWidth()) + self.envSensBox.setSizePolicy(sizePolicy) + self.horizontalLayout_3 = QHBoxLayout(self.envSensBox) + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.envSensLabelsBox = QVBoxLayout() + self.envSensLabelsBox.setObjectName(u"envSensLabelsBox") + self.envSensTempLabel = QLabel(self.envSensBox) + self.envSensTempLabel.setObjectName(u"envSensTempLabel") + sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred) + sizePolicy5.setHorizontalStretch(0) + sizePolicy5.setVerticalStretch(0) + sizePolicy5.setHeightForWidth(self.envSensTempLabel.sizePolicy().hasHeightForWidth()) + self.envSensTempLabel.setSizePolicy(sizePolicy5) + + self.envSensLabelsBox.addWidget(self.envSensTempLabel) + + self.envSensHumLabel = QLabel(self.envSensBox) + self.envSensHumLabel.setObjectName(u"envSensHumLabel") + + self.envSensLabelsBox.addWidget(self.envSensHumLabel) + + self.envSensImuTempLabel = QLabel(self.envSensBox) + self.envSensImuTempLabel.setObjectName(u"envSensImuTempLabel") + + self.envSensLabelsBox.addWidget(self.envSensImuTempLabel) + + self.envSensPicoATempLabel = QLabel(self.envSensBox) + self.envSensPicoATempLabel.setObjectName(u"envSensPicoATempLabel") + + self.envSensLabelsBox.addWidget(self.envSensPicoATempLabel) + + self.envSensPicoBTempLabel = QLabel(self.envSensBox) + self.envSensPicoBTempLabel.setObjectName(u"envSensPicoBTempLabel") + + self.envSensLabelsBox.addWidget(self.envSensPicoBTempLabel) + + self.envSensPiTempLabel = QLabel(self.envSensBox) + self.envSensPiTempLabel.setObjectName(u"envSensPiTempLabel") + + self.envSensLabelsBox.addWidget(self.envSensPiTempLabel) + + + self.horizontalLayout_3.addLayout(self.envSensLabelsBox) + + self.horizontalSpacer_12 = QSpacerItem(2, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_3.addItem(self.horizontalSpacer_12) + + self.envSensValuesBox = QVBoxLayout() + self.envSensValuesBox.setObjectName(u"envSensValuesBox") + self.envSensValuesBox.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) + self.envSensTempValue = QLineEdit(self.envSensBox) + self.envSensTempValue.setObjectName(u"envSensTempValue") + sizePolicy2.setHeightForWidth(self.envSensTempValue.sizePolicy().hasHeightForWidth()) + self.envSensTempValue.setSizePolicy(sizePolicy2) + self.envSensTempValue.setFont(font) + self.envSensTempValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.envSensTempValue.setFrame(True) + self.envSensTempValue.setDragEnabled(True) + self.envSensTempValue.setReadOnly(True) + + self.envSensValuesBox.addWidget(self.envSensTempValue) + + self.envSensHumValue = QLineEdit(self.envSensBox) + self.envSensHumValue.setObjectName(u"envSensHumValue") + sizePolicy2.setHeightForWidth(self.envSensHumValue.sizePolicy().hasHeightForWidth()) + self.envSensHumValue.setSizePolicy(sizePolicy2) + self.envSensHumValue.setFont(font) + self.envSensHumValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.envSensHumValue.setFrame(True) + self.envSensHumValue.setDragEnabled(True) + self.envSensHumValue.setReadOnly(True) + + self.envSensValuesBox.addWidget(self.envSensHumValue) + + self.envSensImuTempValue = QLineEdit(self.envSensBox) + self.envSensImuTempValue.setObjectName(u"envSensImuTempValue") + sizePolicy2.setHeightForWidth(self.envSensImuTempValue.sizePolicy().hasHeightForWidth()) + self.envSensImuTempValue.setSizePolicy(sizePolicy2) + self.envSensImuTempValue.setFont(font) + self.envSensImuTempValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.envSensImuTempValue.setFrame(True) + self.envSensImuTempValue.setDragEnabled(True) + self.envSensImuTempValue.setReadOnly(True) + + self.envSensValuesBox.addWidget(self.envSensImuTempValue) + + self.envSensPicoATempValue = QLineEdit(self.envSensBox) + self.envSensPicoATempValue.setObjectName(u"envSensPicoATempValue") + sizePolicy2.setHeightForWidth(self.envSensPicoATempValue.sizePolicy().hasHeightForWidth()) + self.envSensPicoATempValue.setSizePolicy(sizePolicy2) + self.envSensPicoATempValue.setFont(font) + self.envSensPicoATempValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.envSensPicoATempValue.setFrame(True) + self.envSensPicoATempValue.setDragEnabled(True) + self.envSensPicoATempValue.setReadOnly(True) + + self.envSensValuesBox.addWidget(self.envSensPicoATempValue) + + self.envSensPicoBTempValue = QLineEdit(self.envSensBox) + self.envSensPicoBTempValue.setObjectName(u"envSensPicoBTempValue") + sizePolicy2.setHeightForWidth(self.envSensPicoBTempValue.sizePolicy().hasHeightForWidth()) + self.envSensPicoBTempValue.setSizePolicy(sizePolicy2) + self.envSensPicoBTempValue.setFont(font) + self.envSensPicoBTempValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.envSensPicoBTempValue.setFrame(True) + self.envSensPicoBTempValue.setDragEnabled(True) + self.envSensPicoBTempValue.setReadOnly(True) + + self.envSensValuesBox.addWidget(self.envSensPicoBTempValue) + + self.envSensPiTempValue = QLineEdit(self.envSensBox) + self.envSensPiTempValue.setObjectName(u"envSensPiTempValue") + sizePolicy2.setHeightForWidth(self.envSensPiTempValue.sizePolicy().hasHeightForWidth()) + self.envSensPiTempValue.setSizePolicy(sizePolicy2) + self.envSensPiTempValue.setFont(font) + self.envSensPiTempValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.envSensPiTempValue.setFrame(True) + self.envSensPiTempValue.setDragEnabled(True) + self.envSensPiTempValue.setReadOnly(True) + + self.envSensValuesBox.addWidget(self.envSensPiTempValue) + + + self.horizontalLayout_3.addLayout(self.envSensValuesBox) + + self.envSensUnitsBox = QVBoxLayout() + self.envSensUnitsBox.setObjectName(u"envSensUnitsBox") + self.envSensTempUnit = QLabel(self.envSensBox) + self.envSensTempUnit.setObjectName(u"envSensTempUnit") + + self.envSensUnitsBox.addWidget(self.envSensTempUnit) + + self.envSensHumUnit = QLabel(self.envSensBox) + self.envSensHumUnit.setObjectName(u"envSensHumUnit") + + self.envSensUnitsBox.addWidget(self.envSensHumUnit) + + self.envSensImuTempUnit = QLabel(self.envSensBox) + self.envSensImuTempUnit.setObjectName(u"envSensImuTempUnit") + + self.envSensUnitsBox.addWidget(self.envSensImuTempUnit) + + self.envSensPicoATempUnit = QLabel(self.envSensBox) + self.envSensPicoATempUnit.setObjectName(u"envSensPicoATempUnit") + + self.envSensUnitsBox.addWidget(self.envSensPicoATempUnit) + + self.envSensPicoBTempUnit = QLabel(self.envSensBox) + self.envSensPicoBTempUnit.setObjectName(u"envSensPicoBTempUnit") + + self.envSensUnitsBox.addWidget(self.envSensPicoBTempUnit) + + self.envSensPiTempUnit = QLabel(self.envSensBox) + self.envSensPiTempUnit.setObjectName(u"envSensPiTempUnit") + + self.envSensUnitsBox.addWidget(self.envSensPiTempUnit) + + + self.horizontalLayout_3.addLayout(self.envSensUnitsBox) + + self.cliffSensBox = QGroupBox(self.sensorsTab) + self.cliffSensBox.setObjectName(u"cliffSensBox") + self.cliffSensBox.setGeometry(QRect(245, 20, 195, 180)) + sizePolicy5.setHeightForWidth(self.cliffSensBox.sizePolicy().hasHeightForWidth()) + self.cliffSensBox.setSizePolicy(sizePolicy5) + self.gridLayout_4 = QGridLayout(self.cliffSensBox) + self.gridLayout_4.setObjectName(u"gridLayout_4") + self.cliffSensIndicatorF2 = QLabel(self.cliffSensBox) + self.cliffSensIndicatorF2.setObjectName(u"cliffSensIndicatorF2") + sizePolicy1.setHeightForWidth(self.cliffSensIndicatorF2.sizePolicy().hasHeightForWidth()) + self.cliffSensIndicatorF2.setSizePolicy(sizePolicy1) + self.cliffSensIndicatorF2.setAutoFillBackground(False) + self.cliffSensIndicatorF2.setFrameShape(QFrame.Shape.Box) + self.cliffSensIndicatorF2.setFrameShadow(QFrame.Shadow.Plain) + self.cliffSensIndicatorF2.setLineWidth(1) + self.cliffSensIndicatorF2.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.gridLayout_4.addWidget(self.cliffSensIndicatorF2, 1, 1, 1, 1) + + self.cliffSensIndicatorB2 = QLabel(self.cliffSensBox) + self.cliffSensIndicatorB2.setObjectName(u"cliffSensIndicatorB2") + sizePolicy1.setHeightForWidth(self.cliffSensIndicatorB2.sizePolicy().hasHeightForWidth()) + self.cliffSensIndicatorB2.setSizePolicy(sizePolicy1) + self.cliffSensIndicatorB2.setAutoFillBackground(False) + self.cliffSensIndicatorB2.setFrameShape(QFrame.Shape.Box) + self.cliffSensIndicatorB2.setFrameShadow(QFrame.Shadow.Plain) + self.cliffSensIndicatorB2.setLineWidth(1) + self.cliffSensIndicatorB2.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.gridLayout_4.addWidget(self.cliffSensIndicatorB2, 1, 0, 1, 1) + + self.cliffSensIndicatorF3 = QLabel(self.cliffSensBox) + self.cliffSensIndicatorF3.setObjectName(u"cliffSensIndicatorF3") + sizePolicy1.setHeightForWidth(self.cliffSensIndicatorF3.sizePolicy().hasHeightForWidth()) + self.cliffSensIndicatorF3.setSizePolicy(sizePolicy1) + self.cliffSensIndicatorF3.setAutoFillBackground(False) + self.cliffSensIndicatorF3.setFrameShape(QFrame.Shape.Box) + self.cliffSensIndicatorF3.setFrameShadow(QFrame.Shadow.Plain) + self.cliffSensIndicatorF3.setLineWidth(1) + self.cliffSensIndicatorF3.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.gridLayout_4.addWidget(self.cliffSensIndicatorF3, 2, 1, 1, 1) + + self.cliffSensIndicatorB1 = QLabel(self.cliffSensBox) + self.cliffSensIndicatorB1.setObjectName(u"cliffSensIndicatorB1") + sizePolicy1.setHeightForWidth(self.cliffSensIndicatorB1.sizePolicy().hasHeightForWidth()) + self.cliffSensIndicatorB1.setSizePolicy(sizePolicy1) + self.cliffSensIndicatorB1.setAutoFillBackground(False) + self.cliffSensIndicatorB1.setFrameShape(QFrame.Shape.Box) + self.cliffSensIndicatorB1.setFrameShadow(QFrame.Shadow.Plain) + self.cliffSensIndicatorB1.setLineWidth(1) + self.cliffSensIndicatorB1.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.gridLayout_4.addWidget(self.cliffSensIndicatorB1, 0, 0, 1, 1) + + self.cliffSensIndicatorB3 = QLabel(self.cliffSensBox) + self.cliffSensIndicatorB3.setObjectName(u"cliffSensIndicatorB3") + sizePolicy1.setHeightForWidth(self.cliffSensIndicatorB3.sizePolicy().hasHeightForWidth()) + self.cliffSensIndicatorB3.setSizePolicy(sizePolicy1) + self.cliffSensIndicatorB3.setAutoFillBackground(False) + self.cliffSensIndicatorB3.setFrameShape(QFrame.Shape.Box) + self.cliffSensIndicatorB3.setFrameShadow(QFrame.Shadow.Plain) + self.cliffSensIndicatorB3.setLineWidth(1) + self.cliffSensIndicatorB3.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.gridLayout_4.addWidget(self.cliffSensIndicatorB3, 2, 0, 1, 1) + + self.cliffSensIndicatorF1 = QLabel(self.cliffSensBox) + self.cliffSensIndicatorF1.setObjectName(u"cliffSensIndicatorF1") + sizePolicy1.setHeightForWidth(self.cliffSensIndicatorF1.sizePolicy().hasHeightForWidth()) + self.cliffSensIndicatorF1.setSizePolicy(sizePolicy1) + self.cliffSensIndicatorF1.setAutoFillBackground(False) + self.cliffSensIndicatorF1.setFrameShape(QFrame.Shape.Box) + self.cliffSensIndicatorF1.setFrameShadow(QFrame.Shadow.Plain) + self.cliffSensIndicatorF1.setLineWidth(1) + self.cliffSensIndicatorF1.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.gridLayout_4.addWidget(self.cliffSensIndicatorF1, 0, 1, 1, 1) + + self.cliffSensIndicatorB4 = QLabel(self.cliffSensBox) + self.cliffSensIndicatorB4.setObjectName(u"cliffSensIndicatorB4") + sizePolicy1.setHeightForWidth(self.cliffSensIndicatorB4.sizePolicy().hasHeightForWidth()) + self.cliffSensIndicatorB4.setSizePolicy(sizePolicy1) + self.cliffSensIndicatorB4.setAutoFillBackground(False) + self.cliffSensIndicatorB4.setFrameShape(QFrame.Shape.Box) + self.cliffSensIndicatorB4.setFrameShadow(QFrame.Shadow.Plain) + self.cliffSensIndicatorB4.setLineWidth(1) + self.cliffSensIndicatorB4.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.gridLayout_4.addWidget(self.cliffSensIndicatorB4, 3, 0, 1, 1) + + self.cliffSensIndicatorF4 = QLabel(self.cliffSensBox) + self.cliffSensIndicatorF4.setObjectName(u"cliffSensIndicatorF4") + sizePolicy1.setHeightForWidth(self.cliffSensIndicatorF4.sizePolicy().hasHeightForWidth()) + self.cliffSensIndicatorF4.setSizePolicy(sizePolicy1) + self.cliffSensIndicatorF4.setAutoFillBackground(False) + self.cliffSensIndicatorF4.setFrameShape(QFrame.Shape.Box) + self.cliffSensIndicatorF4.setFrameShadow(QFrame.Shadow.Plain) + self.cliffSensIndicatorF4.setLineWidth(1) + self.cliffSensIndicatorF4.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.gridLayout_4.addWidget(self.cliffSensIndicatorF4, 3, 1, 1, 1) + + self.ultrasonicSensBox = QGroupBox(self.sensorsTab) + self.ultrasonicSensBox.setObjectName(u"ultrasonicSensBox") + self.ultrasonicSensBox.setGeometry(QRect(28, 20, 195, 150)) + sizePolicy.setHeightForWidth(self.ultrasonicSensBox.sizePolicy().hasHeightForWidth()) + self.ultrasonicSensBox.setSizePolicy(sizePolicy) + self.horizontalLayout_4 = QHBoxLayout(self.ultrasonicSensBox) + self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") + self.ultrasonicSensLabelsBox = QVBoxLayout() + self.ultrasonicSensLabelsBox.setObjectName(u"ultrasonicSensLabelsBox") + self.ultrasonicSensLabelF = QLabel(self.ultrasonicSensBox) + self.ultrasonicSensLabelF.setObjectName(u"ultrasonicSensLabelF") + + self.ultrasonicSensLabelsBox.addWidget(self.ultrasonicSensLabelF) + + self.ultrasonicSensLabelB = QLabel(self.ultrasonicSensBox) + self.ultrasonicSensLabelB.setObjectName(u"ultrasonicSensLabelB") + + self.ultrasonicSensLabelsBox.addWidget(self.ultrasonicSensLabelB) + + self.ultrasonicSensLabelR = QLabel(self.ultrasonicSensBox) + self.ultrasonicSensLabelR.setObjectName(u"ultrasonicSensLabelR") + + self.ultrasonicSensLabelsBox.addWidget(self.ultrasonicSensLabelR) + + self.ultrasonicSensLabelL = QLabel(self.ultrasonicSensBox) + self.ultrasonicSensLabelL.setObjectName(u"ultrasonicSensLabelL") + + self.ultrasonicSensLabelsBox.addWidget(self.ultrasonicSensLabelL) + + + self.horizontalLayout_4.addLayout(self.ultrasonicSensLabelsBox) + + self.horizontalSpacer_13 = QSpacerItem(8, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_4.addItem(self.horizontalSpacer_13) + + self.ultrasonicSensValuesBox = QVBoxLayout() + self.ultrasonicSensValuesBox.setObjectName(u"ultrasonicSensValuesBox") + self.ultrasonicSensValueF = QLineEdit(self.ultrasonicSensBox) + self.ultrasonicSensValueF.setObjectName(u"ultrasonicSensValueF") + sizePolicy4.setHeightForWidth(self.ultrasonicSensValueF.sizePolicy().hasHeightForWidth()) + self.ultrasonicSensValueF.setSizePolicy(sizePolicy4) + self.ultrasonicSensValueF.setFont(font) + self.ultrasonicSensValueF.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.ultrasonicSensValueF.setFrame(True) + self.ultrasonicSensValueF.setDragEnabled(True) + self.ultrasonicSensValueF.setReadOnly(True) + + self.ultrasonicSensValuesBox.addWidget(self.ultrasonicSensValueF) + + self.ultrasonicSensValueB = QLineEdit(self.ultrasonicSensBox) + self.ultrasonicSensValueB.setObjectName(u"ultrasonicSensValueB") + sizePolicy4.setHeightForWidth(self.ultrasonicSensValueB.sizePolicy().hasHeightForWidth()) + self.ultrasonicSensValueB.setSizePolicy(sizePolicy4) + self.ultrasonicSensValueB.setFont(font) + self.ultrasonicSensValueB.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.ultrasonicSensValueB.setFrame(True) + self.ultrasonicSensValueB.setDragEnabled(True) + self.ultrasonicSensValueB.setReadOnly(True) + + self.ultrasonicSensValuesBox.addWidget(self.ultrasonicSensValueB) + + self.ultrasonicSensValueR = QLineEdit(self.ultrasonicSensBox) + self.ultrasonicSensValueR.setObjectName(u"ultrasonicSensValueR") + sizePolicy4.setHeightForWidth(self.ultrasonicSensValueR.sizePolicy().hasHeightForWidth()) + self.ultrasonicSensValueR.setSizePolicy(sizePolicy4) + self.ultrasonicSensValueR.setFont(font) + self.ultrasonicSensValueR.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.ultrasonicSensValueR.setFrame(True) + self.ultrasonicSensValueR.setDragEnabled(True) + self.ultrasonicSensValueR.setReadOnly(True) + + self.ultrasonicSensValuesBox.addWidget(self.ultrasonicSensValueR) + + self.ultrasonicSensValueL = QLineEdit(self.ultrasonicSensBox) + self.ultrasonicSensValueL.setObjectName(u"ultrasonicSensValueL") + sizePolicy4.setHeightForWidth(self.ultrasonicSensValueL.sizePolicy().hasHeightForWidth()) + self.ultrasonicSensValueL.setSizePolicy(sizePolicy4) + self.ultrasonicSensValueL.setFont(font) + self.ultrasonicSensValueL.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.ultrasonicSensValueL.setFrame(True) + self.ultrasonicSensValueL.setDragEnabled(True) + self.ultrasonicSensValueL.setReadOnly(True) + + self.ultrasonicSensValuesBox.addWidget(self.ultrasonicSensValueL) + + + self.horizontalLayout_4.addLayout(self.ultrasonicSensValuesBox) + + self.ultrasonicSensUnitsBox = QVBoxLayout() + self.ultrasonicSensUnitsBox.setObjectName(u"ultrasonicSensUnitsBox") + self.ultrasonicSensUnitF = QLabel(self.ultrasonicSensBox) + self.ultrasonicSensUnitF.setObjectName(u"ultrasonicSensUnitF") + + self.ultrasonicSensUnitsBox.addWidget(self.ultrasonicSensUnitF) + + self.ultrasonicSensUnitB = QLabel(self.ultrasonicSensBox) + self.ultrasonicSensUnitB.setObjectName(u"ultrasonicSensUnitB") + + self.ultrasonicSensUnitsBox.addWidget(self.ultrasonicSensUnitB) + + self.ultrasonicSensUnitR = QLabel(self.ultrasonicSensBox) + self.ultrasonicSensUnitR.setObjectName(u"ultrasonicSensUnitR") + + self.ultrasonicSensUnitsBox.addWidget(self.ultrasonicSensUnitR) + + self.ultrasonicSensUnitL = QLabel(self.ultrasonicSensBox) + self.ultrasonicSensUnitL.setObjectName(u"ultrasonicSensUnitL") + + self.ultrasonicSensUnitsBox.addWidget(self.ultrasonicSensUnitL) + + + self.horizontalLayout_4.addLayout(self.ultrasonicSensUnitsBox) + + self.batterySensBox = QGroupBox(self.sensorsTab) + self.batterySensBox.setObjectName(u"batterySensBox") + self.batterySensBox.setGeometry(QRect(28, 410, 195, 110)) + self.horizontalLayout_5 = QHBoxLayout(self.batterySensBox) + self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") + self.batterySensLabelsBox = QVBoxLayout() + self.batterySensLabelsBox.setObjectName(u"batterySensLabelsBox") + self.batterySensVoltageLabel = QLabel(self.batterySensBox) + self.batterySensVoltageLabel.setObjectName(u"batterySensVoltageLabel") + sizePolicy6 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum) + sizePolicy6.setHorizontalStretch(0) + sizePolicy6.setVerticalStretch(0) + sizePolicy6.setHeightForWidth(self.batterySensVoltageLabel.sizePolicy().hasHeightForWidth()) + self.batterySensVoltageLabel.setSizePolicy(sizePolicy6) + + self.batterySensLabelsBox.addWidget(self.batterySensVoltageLabel) + + self.batterySensCurrentLabel = QLabel(self.batterySensBox) + self.batterySensCurrentLabel.setObjectName(u"batterySensCurrentLabel") + sizePolicy6.setHeightForWidth(self.batterySensCurrentLabel.sizePolicy().hasHeightForWidth()) + self.batterySensCurrentLabel.setSizePolicy(sizePolicy6) + + self.batterySensLabelsBox.addWidget(self.batterySensCurrentLabel) + + + self.horizontalLayout_5.addLayout(self.batterySensLabelsBox) + + self.horizontalSpacer_14 = QSpacerItem(8, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_5.addItem(self.horizontalSpacer_14) + + self.batterySensValuesBox = QVBoxLayout() + self.batterySensValuesBox.setObjectName(u"batterySensValuesBox") + self.batterySensVoltageValue = QLCDNumber(self.batterySensBox) + self.batterySensVoltageValue.setObjectName(u"batterySensVoltageValue") + sizePolicy1.setHeightForWidth(self.batterySensVoltageValue.sizePolicy().hasHeightForWidth()) + self.batterySensVoltageValue.setSizePolicy(sizePolicy1) + self.batterySensVoltageValue.setFont(font1) + self.batterySensVoltageValue.setDigitCount(6) + self.batterySensVoltageValue.setSegmentStyle(QLCDNumber.SegmentStyle.Flat) + self.batterySensVoltageValue.setProperty("value", 12.458000000000000) + + self.batterySensValuesBox.addWidget(self.batterySensVoltageValue) + + self.batterySensCurrentValue = QLCDNumber(self.batterySensBox) + self.batterySensCurrentValue.setObjectName(u"batterySensCurrentValue") + sizePolicy1.setHeightForWidth(self.batterySensCurrentValue.sizePolicy().hasHeightForWidth()) + self.batterySensCurrentValue.setSizePolicy(sizePolicy1) + self.batterySensCurrentValue.setFont(font1) + self.batterySensCurrentValue.setDigitCount(6) + self.batterySensCurrentValue.setSegmentStyle(QLCDNumber.SegmentStyle.Flat) + self.batterySensCurrentValue.setProperty("value", 3.284000000000000) + + self.batterySensValuesBox.addWidget(self.batterySensCurrentValue) + + + self.horizontalLayout_5.addLayout(self.batterySensValuesBox) + + self.enableDisableBox = QGroupBox(self.sensorsTab) + self.enableDisableBox.setObjectName(u"enableDisableBox") + self.enableDisableBox.setGeometry(QRect(462, 145, 195, 110)) + self.gridLayout_5 = QGridLayout(self.enableDisableBox) + self.gridLayout_5.setObjectName(u"gridLayout_5") + self.toggleEmittersEnabled = QPushButton(self.enableDisableBox) + self.toggleEmittersEnabled.setObjectName(u"toggleEmittersEnabled") + sizePolicy7 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Preferred) + sizePolicy7.setHorizontalStretch(0) + sizePolicy7.setVerticalStretch(0) + sizePolicy7.setHeightForWidth(self.toggleEmittersEnabled.sizePolicy().hasHeightForWidth()) + self.toggleEmittersEnabled.setSizePolicy(sizePolicy7) + self.toggleEmittersEnabled.setCheckable(True) + self.toggleEmittersEnabled.setChecked(True) + + self.gridLayout_5.addWidget(self.toggleEmittersEnabled, 0, 1, 1, 1) + + self.togglePicoARelaEnable = QPushButton(self.enableDisableBox) + self.togglePicoARelaEnable.setObjectName(u"togglePicoARelaEnable") + sizePolicy7.setHeightForWidth(self.togglePicoARelaEnable.sizePolicy().hasHeightForWidth()) + self.togglePicoARelaEnable.setSizePolicy(sizePolicy7) + self.togglePicoARelaEnable.setCheckable(True) + self.togglePicoARelaEnable.setChecked(False) + + self.gridLayout_5.addWidget(self.togglePicoARelaEnable, 1, 1, 1, 1) + + self.pages.addTab(self.sensorsTab, "") + self.motorCtrlTab = QWidget() + self.motorCtrlTab.setObjectName(u"motorCtrlTab") + self.encOdomBox = QGroupBox(self.motorCtrlTab) + self.encOdomBox.setObjectName(u"encOdomBox") + self.encOdomBox.setGeometry(QRect(28, 20, 200, 185)) + sizePolicy.setHeightForWidth(self.encOdomBox.sizePolicy().hasHeightForWidth()) + self.encOdomBox.setSizePolicy(sizePolicy) + self.horizontalLayout_6 = QHBoxLayout(self.encOdomBox) + self.horizontalLayout_6.setObjectName(u"horizontalLayout_6") + self.encOdomLabels = QVBoxLayout() + self.encOdomLabels.setObjectName(u"encOdomLabels") + self.encOdomPosXLabel = QLabel(self.encOdomBox) + self.encOdomPosXLabel.setObjectName(u"encOdomPosXLabel") + sizePolicy5.setHeightForWidth(self.encOdomPosXLabel.sizePolicy().hasHeightForWidth()) + self.encOdomPosXLabel.setSizePolicy(sizePolicy5) + + self.encOdomLabels.addWidget(self.encOdomPosXLabel) + + self.encOdomPosYLabel = QLabel(self.encOdomBox) + self.encOdomPosYLabel.setObjectName(u"encOdomPosYLabel") + + self.encOdomLabels.addWidget(self.encOdomPosYLabel) + + self.encOdomYawLabel = QLabel(self.encOdomBox) + self.encOdomYawLabel.setObjectName(u"encOdomYawLabel") + + self.encOdomLabels.addWidget(self.encOdomYawLabel) + + self.verticalSpacer_3 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.encOdomLabels.addItem(self.verticalSpacer_3) + + self.encOdomLinVelLabel = QLabel(self.encOdomBox) + self.encOdomLinVelLabel.setObjectName(u"encOdomLinVelLabel") + + self.encOdomLabels.addWidget(self.encOdomLinVelLabel) + + self.encOdomAngVelLabel = QLabel(self.encOdomBox) + self.encOdomAngVelLabel.setObjectName(u"encOdomAngVelLabel") + + self.encOdomLabels.addWidget(self.encOdomAngVelLabel) + + + self.horizontalLayout_6.addLayout(self.encOdomLabels) + + self.horizontalSpacer_15 = QSpacerItem(4, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_6.addItem(self.horizontalSpacer_15) + + self.encOdomValues = QVBoxLayout() + self.encOdomValues.setObjectName(u"encOdomValues") + self.encOdomValues.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) + self.encOdomPosXValue = QLineEdit(self.encOdomBox) + self.encOdomPosXValue.setObjectName(u"encOdomPosXValue") + sizePolicy2.setHeightForWidth(self.encOdomPosXValue.sizePolicy().hasHeightForWidth()) + self.encOdomPosXValue.setSizePolicy(sizePolicy2) + self.encOdomPosXValue.setFont(font) + self.encOdomPosXValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.encOdomPosXValue.setFrame(True) + self.encOdomPosXValue.setDragEnabled(True) + self.encOdomPosXValue.setReadOnly(True) + + self.encOdomValues.addWidget(self.encOdomPosXValue) + + self.encOdomPosYValue = QLineEdit(self.encOdomBox) + self.encOdomPosYValue.setObjectName(u"encOdomPosYValue") + sizePolicy2.setHeightForWidth(self.encOdomPosYValue.sizePolicy().hasHeightForWidth()) + self.encOdomPosYValue.setSizePolicy(sizePolicy2) + self.encOdomPosYValue.setFont(font) + self.encOdomPosYValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.encOdomPosYValue.setFrame(True) + self.encOdomPosYValue.setDragEnabled(True) + self.encOdomPosYValue.setReadOnly(True) + + self.encOdomValues.addWidget(self.encOdomPosYValue) + + self.encOdomYawValue = QLineEdit(self.encOdomBox) + self.encOdomYawValue.setObjectName(u"encOdomYawValue") + sizePolicy2.setHeightForWidth(self.encOdomYawValue.sizePolicy().hasHeightForWidth()) + self.encOdomYawValue.setSizePolicy(sizePolicy2) + self.encOdomYawValue.setFont(font) + self.encOdomYawValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.encOdomYawValue.setFrame(True) + self.encOdomYawValue.setDragEnabled(True) + self.encOdomYawValue.setReadOnly(True) + + self.encOdomValues.addWidget(self.encOdomYawValue) + + self.verticalSpacer_4 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.encOdomValues.addItem(self.verticalSpacer_4) + + self.encOdomLinVelValue = QLineEdit(self.encOdomBox) + self.encOdomLinVelValue.setObjectName(u"encOdomLinVelValue") + sizePolicy2.setHeightForWidth(self.encOdomLinVelValue.sizePolicy().hasHeightForWidth()) + self.encOdomLinVelValue.setSizePolicy(sizePolicy2) + self.encOdomLinVelValue.setFont(font) + self.encOdomLinVelValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.encOdomLinVelValue.setFrame(True) + self.encOdomLinVelValue.setDragEnabled(True) + self.encOdomLinVelValue.setReadOnly(True) + + self.encOdomValues.addWidget(self.encOdomLinVelValue) + + self.encOdomAngVelValue = QLineEdit(self.encOdomBox) + self.encOdomAngVelValue.setObjectName(u"encOdomAngVelValue") + sizePolicy2.setHeightForWidth(self.encOdomAngVelValue.sizePolicy().hasHeightForWidth()) + self.encOdomAngVelValue.setSizePolicy(sizePolicy2) + self.encOdomAngVelValue.setFont(font) + self.encOdomAngVelValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.encOdomAngVelValue.setFrame(True) + self.encOdomAngVelValue.setDragEnabled(True) + self.encOdomAngVelValue.setReadOnly(True) + + self.encOdomValues.addWidget(self.encOdomAngVelValue) + + + self.horizontalLayout_6.addLayout(self.encOdomValues) + + self.encOdomUnits = QVBoxLayout() + self.encOdomUnits.setObjectName(u"encOdomUnits") + self.encOdomPosXUnit = QLabel(self.encOdomBox) + self.encOdomPosXUnit.setObjectName(u"encOdomPosXUnit") + + self.encOdomUnits.addWidget(self.encOdomPosXUnit) + + self.encOdomPosYUnit = QLabel(self.encOdomBox) + self.encOdomPosYUnit.setObjectName(u"encOdomPosYUnit") + + self.encOdomUnits.addWidget(self.encOdomPosYUnit) + + self.encOdomYawUnit = QLabel(self.encOdomBox) + self.encOdomYawUnit.setObjectName(u"encOdomYawUnit") + + self.encOdomUnits.addWidget(self.encOdomYawUnit) + + self.verticalSpacer_5 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.encOdomUnits.addItem(self.verticalSpacer_5) + + self.encOdomLinVelUnit = QLabel(self.encOdomBox) + self.encOdomLinVelUnit.setObjectName(u"encOdomLinVelUnit") + + self.encOdomUnits.addWidget(self.encOdomLinVelUnit) + + self.encOdomAngVelUnit = QLabel(self.encOdomBox) + self.encOdomAngVelUnit.setObjectName(u"encOdomAngVelUnit") + + self.encOdomUnits.addWidget(self.encOdomAngVelUnit) + + + self.horizontalLayout_6.addLayout(self.encOdomUnits) + + self.mtrCtrlEnableBox = QGroupBox(self.motorCtrlTab) + self.mtrCtrlEnableBox.setObjectName(u"mtrCtrlEnableBox") + self.mtrCtrlEnableBox.setGeometry(QRect(687, 20, 200, 120)) + self.gridLayout_6 = QGridLayout(self.mtrCtrlEnableBox) + self.gridLayout_6.setObjectName(u"gridLayout_6") + self.mtrCtrlEnableButtonsBox = QHBoxLayout() + self.mtrCtrlEnableButtonsBox.setObjectName(u"mtrCtrlEnableButtonsBox") + self.mtrCtrlEnableButton = QPushButton(self.mtrCtrlEnableBox) + self.mtrCtrlEnableButton.setObjectName(u"mtrCtrlEnableButton") + sizePolicy5.setHeightForWidth(self.mtrCtrlEnableButton.sizePolicy().hasHeightForWidth()) + self.mtrCtrlEnableButton.setSizePolicy(sizePolicy5) + self.mtrCtrlEnableButton.setCheckable(False) + self.mtrCtrlEnableButton.setChecked(False) + + self.mtrCtrlEnableButtonsBox.addWidget(self.mtrCtrlEnableButton) + + self.mtrCtrlDisableButton = QPushButton(self.mtrCtrlEnableBox) + self.mtrCtrlDisableButton.setObjectName(u"mtrCtrlDisableButton") + sizePolicy5.setHeightForWidth(self.mtrCtrlDisableButton.sizePolicy().hasHeightForWidth()) + self.mtrCtrlDisableButton.setSizePolicy(sizePolicy5) + self.mtrCtrlDisableButton.setCheckable(False) + self.mtrCtrlDisableButton.setChecked(False) + + self.mtrCtrlEnableButtonsBox.addWidget(self.mtrCtrlDisableButton) + + + self.gridLayout_6.addLayout(self.mtrCtrlEnableButtonsBox, 0, 0, 1, 1) + + self.mtrCtrlEnableIndicatorsBox = QHBoxLayout() + self.mtrCtrlEnableIndicatorsBox.setObjectName(u"mtrCtrlEnableIndicatorsBox") + self.mtrCtrlEnableLIndicator = QLabel(self.mtrCtrlEnableBox) + self.mtrCtrlEnableLIndicator.setObjectName(u"mtrCtrlEnableLIndicator") + sizePolicy3.setHeightForWidth(self.mtrCtrlEnableLIndicator.sizePolicy().hasHeightForWidth()) + self.mtrCtrlEnableLIndicator.setSizePolicy(sizePolicy3) + self.mtrCtrlEnableLIndicator.setAutoFillBackground(False) + self.mtrCtrlEnableLIndicator.setFrameShape(QFrame.Shape.Box) + self.mtrCtrlEnableLIndicator.setFrameShadow(QFrame.Shadow.Plain) + self.mtrCtrlEnableLIndicator.setLineWidth(1) + self.mtrCtrlEnableLIndicator.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.mtrCtrlEnableIndicatorsBox.addWidget(self.mtrCtrlEnableLIndicator) + + self.mtrCtrlEnableRIndicator = QLabel(self.mtrCtrlEnableBox) + self.mtrCtrlEnableRIndicator.setObjectName(u"mtrCtrlEnableRIndicator") + sizePolicy3.setHeightForWidth(self.mtrCtrlEnableRIndicator.sizePolicy().hasHeightForWidth()) + self.mtrCtrlEnableRIndicator.setSizePolicy(sizePolicy3) + self.mtrCtrlEnableRIndicator.setAutoFillBackground(False) + self.mtrCtrlEnableRIndicator.setFrameShape(QFrame.Shape.Box) + self.mtrCtrlEnableRIndicator.setFrameShadow(QFrame.Shadow.Plain) + self.mtrCtrlEnableRIndicator.setLineWidth(1) + self.mtrCtrlEnableRIndicator.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.mtrCtrlEnableIndicatorsBox.addWidget(self.mtrCtrlEnableRIndicator) + + + self.gridLayout_6.addLayout(self.mtrCtrlEnableIndicatorsBox, 1, 0, 1, 1) + + self.rpmMeasuredBox = QGroupBox(self.motorCtrlTab) + self.rpmMeasuredBox.setObjectName(u"rpmMeasuredBox") + self.rpmMeasuredBox.setGeometry(QRect(247, 20, 200, 165)) + sizePolicy.setHeightForWidth(self.rpmMeasuredBox.sizePolicy().hasHeightForWidth()) + self.rpmMeasuredBox.setSizePolicy(sizePolicy) + self.horizontalLayout_7 = QHBoxLayout(self.rpmMeasuredBox) + self.horizontalLayout_7.setObjectName(u"horizontalLayout_7") + self.rpmMeasuredLabelsBox = QVBoxLayout() + self.rpmMeasuredLabelsBox.setObjectName(u"rpmMeasuredLabelsBox") + self.rpmMeasuredFRLabel = QLabel(self.rpmMeasuredBox) + self.rpmMeasuredFRLabel.setObjectName(u"rpmMeasuredFRLabel") + sizePolicy5.setHeightForWidth(self.rpmMeasuredFRLabel.sizePolicy().hasHeightForWidth()) + self.rpmMeasuredFRLabel.setSizePolicy(sizePolicy5) + + self.rpmMeasuredLabelsBox.addWidget(self.rpmMeasuredFRLabel) + + self.rpmMeasuredFLLabel = QLabel(self.rpmMeasuredBox) + self.rpmMeasuredFLLabel.setObjectName(u"rpmMeasuredFLLabel") + + self.rpmMeasuredLabelsBox.addWidget(self.rpmMeasuredFLLabel) + + self.verticalSpacer_6 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.rpmMeasuredLabelsBox.addItem(self.verticalSpacer_6) + + self.rpmMeasuredBRLabel = QLabel(self.rpmMeasuredBox) + self.rpmMeasuredBRLabel.setObjectName(u"rpmMeasuredBRLabel") + + self.rpmMeasuredLabelsBox.addWidget(self.rpmMeasuredBRLabel) + + self.rpmMeasuredBLLabel = QLabel(self.rpmMeasuredBox) + self.rpmMeasuredBLLabel.setObjectName(u"rpmMeasuredBLLabel") + + self.rpmMeasuredLabelsBox.addWidget(self.rpmMeasuredBLLabel) + + + self.horizontalLayout_7.addLayout(self.rpmMeasuredLabelsBox) + + self.horizontalSpacer_16 = QSpacerItem(4, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_7.addItem(self.horizontalSpacer_16) + + self.rpmMeasuredValuesBox = QVBoxLayout() + self.rpmMeasuredValuesBox.setObjectName(u"rpmMeasuredValuesBox") + self.rpmMeasuredValuesBox.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) + self.rpmMeasuredFRValue = QLineEdit(self.rpmMeasuredBox) + self.rpmMeasuredFRValue.setObjectName(u"rpmMeasuredFRValue") + sizePolicy2.setHeightForWidth(self.rpmMeasuredFRValue.sizePolicy().hasHeightForWidth()) + self.rpmMeasuredFRValue.setSizePolicy(sizePolicy2) + self.rpmMeasuredFRValue.setFont(font) + self.rpmMeasuredFRValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.rpmMeasuredFRValue.setFrame(True) + self.rpmMeasuredFRValue.setDragEnabled(True) + self.rpmMeasuredFRValue.setReadOnly(True) + + self.rpmMeasuredValuesBox.addWidget(self.rpmMeasuredFRValue) + + self.rpmMeasuredFLValue = QLineEdit(self.rpmMeasuredBox) + self.rpmMeasuredFLValue.setObjectName(u"rpmMeasuredFLValue") + sizePolicy2.setHeightForWidth(self.rpmMeasuredFLValue.sizePolicy().hasHeightForWidth()) + self.rpmMeasuredFLValue.setSizePolicy(sizePolicy2) + self.rpmMeasuredFLValue.setFont(font) + self.rpmMeasuredFLValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.rpmMeasuredFLValue.setFrame(True) + self.rpmMeasuredFLValue.setDragEnabled(True) + self.rpmMeasuredFLValue.setReadOnly(True) + + self.rpmMeasuredValuesBox.addWidget(self.rpmMeasuredFLValue) + + self.verticalSpacer_7 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.rpmMeasuredValuesBox.addItem(self.verticalSpacer_7) + + self.rpmMeasuredBRValue = QLineEdit(self.rpmMeasuredBox) + self.rpmMeasuredBRValue.setObjectName(u"rpmMeasuredBRValue") + sizePolicy2.setHeightForWidth(self.rpmMeasuredBRValue.sizePolicy().hasHeightForWidth()) + self.rpmMeasuredBRValue.setSizePolicy(sizePolicy2) + self.rpmMeasuredBRValue.setFont(font) + self.rpmMeasuredBRValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.rpmMeasuredBRValue.setFrame(True) + self.rpmMeasuredBRValue.setDragEnabled(True) + self.rpmMeasuredBRValue.setReadOnly(True) + + self.rpmMeasuredValuesBox.addWidget(self.rpmMeasuredBRValue) + + self.rpmMeasuredBLValue = QLineEdit(self.rpmMeasuredBox) + self.rpmMeasuredBLValue.setObjectName(u"rpmMeasuredBLValue") + sizePolicy2.setHeightForWidth(self.rpmMeasuredBLValue.sizePolicy().hasHeightForWidth()) + self.rpmMeasuredBLValue.setSizePolicy(sizePolicy2) + self.rpmMeasuredBLValue.setFont(font) + self.rpmMeasuredBLValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.rpmMeasuredBLValue.setFrame(True) + self.rpmMeasuredBLValue.setDragEnabled(True) + self.rpmMeasuredBLValue.setReadOnly(True) + + self.rpmMeasuredValuesBox.addWidget(self.rpmMeasuredBLValue) + + + self.horizontalLayout_7.addLayout(self.rpmMeasuredValuesBox) + + self.rpmMeasuredUnitsBox = QVBoxLayout() + self.rpmMeasuredUnitsBox.setObjectName(u"rpmMeasuredUnitsBox") + self.rpmMeasuredFRUnit = QLabel(self.rpmMeasuredBox) + self.rpmMeasuredFRUnit.setObjectName(u"rpmMeasuredFRUnit") + + self.rpmMeasuredUnitsBox.addWidget(self.rpmMeasuredFRUnit) + + self.rpmMeasuredFLUnit = QLabel(self.rpmMeasuredBox) + self.rpmMeasuredFLUnit.setObjectName(u"rpmMeasuredFLUnit") + + self.rpmMeasuredUnitsBox.addWidget(self.rpmMeasuredFLUnit) + + self.verticalSpacer_8 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.rpmMeasuredUnitsBox.addItem(self.verticalSpacer_8) + + self.rpmMeasuredBRUnit = QLabel(self.rpmMeasuredBox) + self.rpmMeasuredBRUnit.setObjectName(u"rpmMeasuredBRUnit") + + self.rpmMeasuredUnitsBox.addWidget(self.rpmMeasuredBRUnit) + + self.rpmMeasuredBLUnit = QLabel(self.rpmMeasuredBox) + self.rpmMeasuredBLUnit.setObjectName(u"rpmMeasuredBLUnit") + + self.rpmMeasuredUnitsBox.addWidget(self.rpmMeasuredBLUnit) + + + self.horizontalLayout_7.addLayout(self.rpmMeasuredUnitsBox) + + self.rpmTargetBox = QGroupBox(self.motorCtrlTab) + self.rpmTargetBox.setObjectName(u"rpmTargetBox") + self.rpmTargetBox.setGeometry(QRect(247, 200, 200, 165)) + sizePolicy.setHeightForWidth(self.rpmTargetBox.sizePolicy().hasHeightForWidth()) + self.rpmTargetBox.setSizePolicy(sizePolicy) + self.horizontalLayout_8 = QHBoxLayout(self.rpmTargetBox) + self.horizontalLayout_8.setObjectName(u"horizontalLayout_8") + self.rpmTargetLabelsBox = QVBoxLayout() + self.rpmTargetLabelsBox.setObjectName(u"rpmTargetLabelsBox") + self.rpmTargetFRLabel = QLabel(self.rpmTargetBox) + self.rpmTargetFRLabel.setObjectName(u"rpmTargetFRLabel") + sizePolicy5.setHeightForWidth(self.rpmTargetFRLabel.sizePolicy().hasHeightForWidth()) + self.rpmTargetFRLabel.setSizePolicy(sizePolicy5) + + self.rpmTargetLabelsBox.addWidget(self.rpmTargetFRLabel) + + self.rpmTargetFLLabel = QLabel(self.rpmTargetBox) + self.rpmTargetFLLabel.setObjectName(u"rpmTargetFLLabel") + + self.rpmTargetLabelsBox.addWidget(self.rpmTargetFLLabel) + + self.verticalSpacer_9 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.rpmTargetLabelsBox.addItem(self.verticalSpacer_9) + + self.rpmTargetBRLabel = QLabel(self.rpmTargetBox) + self.rpmTargetBRLabel.setObjectName(u"rpmTargetBRLabel") + + self.rpmTargetLabelsBox.addWidget(self.rpmTargetBRLabel) + + self.rpmTargetBLLabel = QLabel(self.rpmTargetBox) + self.rpmTargetBLLabel.setObjectName(u"rpmTargetBLLabel") + + self.rpmTargetLabelsBox.addWidget(self.rpmTargetBLLabel) + + + self.horizontalLayout_8.addLayout(self.rpmTargetLabelsBox) + + self.horizontalSpacer_17 = QSpacerItem(4, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_8.addItem(self.horizontalSpacer_17) + + self.rpmTargetValuesBox = QVBoxLayout() + self.rpmTargetValuesBox.setObjectName(u"rpmTargetValuesBox") + self.rpmTargetValuesBox.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) + self.rpmTargetFRValue = QLineEdit(self.rpmTargetBox) + self.rpmTargetFRValue.setObjectName(u"rpmTargetFRValue") + sizePolicy2.setHeightForWidth(self.rpmTargetFRValue.sizePolicy().hasHeightForWidth()) + self.rpmTargetFRValue.setSizePolicy(sizePolicy2) + self.rpmTargetFRValue.setFont(font) + self.rpmTargetFRValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.rpmTargetFRValue.setFrame(True) + self.rpmTargetFRValue.setDragEnabled(True) + self.rpmTargetFRValue.setReadOnly(True) + + self.rpmTargetValuesBox.addWidget(self.rpmTargetFRValue) + + self.rpmTargetFLValue = QLineEdit(self.rpmTargetBox) + self.rpmTargetFLValue.setObjectName(u"rpmTargetFLValue") + sizePolicy2.setHeightForWidth(self.rpmTargetFLValue.sizePolicy().hasHeightForWidth()) + self.rpmTargetFLValue.setSizePolicy(sizePolicy2) + self.rpmTargetFLValue.setFont(font) + self.rpmTargetFLValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.rpmTargetFLValue.setFrame(True) + self.rpmTargetFLValue.setDragEnabled(True) + self.rpmTargetFLValue.setReadOnly(True) + + self.rpmTargetValuesBox.addWidget(self.rpmTargetFLValue) + + self.verticalSpacer_10 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.rpmTargetValuesBox.addItem(self.verticalSpacer_10) + + self.rpmTargetBRValue = QLineEdit(self.rpmTargetBox) + self.rpmTargetBRValue.setObjectName(u"rpmTargetBRValue") + sizePolicy2.setHeightForWidth(self.rpmTargetBRValue.sizePolicy().hasHeightForWidth()) + self.rpmTargetBRValue.setSizePolicy(sizePolicy2) + self.rpmTargetBRValue.setFont(font) + self.rpmTargetBRValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.rpmTargetBRValue.setFrame(True) + self.rpmTargetBRValue.setDragEnabled(True) + self.rpmTargetBRValue.setReadOnly(True) + + self.rpmTargetValuesBox.addWidget(self.rpmTargetBRValue) + + self.rpmTargetBLValue = QLineEdit(self.rpmTargetBox) + self.rpmTargetBLValue.setObjectName(u"rpmTargetBLValue") + sizePolicy2.setHeightForWidth(self.rpmTargetBLValue.sizePolicy().hasHeightForWidth()) + self.rpmTargetBLValue.setSizePolicy(sizePolicy2) + self.rpmTargetBLValue.setFont(font) + self.rpmTargetBLValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.rpmTargetBLValue.setFrame(True) + self.rpmTargetBLValue.setDragEnabled(True) + self.rpmTargetBLValue.setReadOnly(True) + + self.rpmTargetValuesBox.addWidget(self.rpmTargetBLValue) + + + self.horizontalLayout_8.addLayout(self.rpmTargetValuesBox) + + self.rpmTargetUnitsBox = QVBoxLayout() + self.rpmTargetUnitsBox.setObjectName(u"rpmTargetUnitsBox") + self.rpmTargetFRUnit = QLabel(self.rpmTargetBox) + self.rpmTargetFRUnit.setObjectName(u"rpmTargetFRUnit") + + self.rpmTargetUnitsBox.addWidget(self.rpmTargetFRUnit) + + self.rpmTargetFLUnit = QLabel(self.rpmTargetBox) + self.rpmTargetFLUnit.setObjectName(u"rpmTargetFLUnit") + + self.rpmTargetUnitsBox.addWidget(self.rpmTargetFLUnit) + + self.verticalSpacer_11 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.rpmTargetUnitsBox.addItem(self.verticalSpacer_11) + + self.rpmTargetBRUnit = QLabel(self.rpmTargetBox) + self.rpmTargetBRUnit.setObjectName(u"rpmTargetBRUnit") + + self.rpmTargetUnitsBox.addWidget(self.rpmTargetBRUnit) + + self.rpmTargetBLUnit = QLabel(self.rpmTargetBox) + self.rpmTargetBLUnit.setObjectName(u"rpmTargetBLUnit") + + self.rpmTargetUnitsBox.addWidget(self.rpmTargetBLUnit) + + + self.horizontalLayout_8.addLayout(self.rpmTargetUnitsBox) + + self.encPulseCtrsBox = QGroupBox(self.motorCtrlTab) + self.encPulseCtrsBox.setObjectName(u"encPulseCtrsBox") + self.encPulseCtrsBox.setGeometry(QRect(28, 220, 200, 165)) + sizePolicy.setHeightForWidth(self.encPulseCtrsBox.sizePolicy().hasHeightForWidth()) + self.encPulseCtrsBox.setSizePolicy(sizePolicy) + self.horizontalLayout_9 = QHBoxLayout(self.encPulseCtrsBox) + self.horizontalLayout_9.setObjectName(u"horizontalLayout_9") + self.encPulseCtrsLabelsBox = QVBoxLayout() + self.encPulseCtrsLabelsBox.setObjectName(u"encPulseCtrsLabelsBox") + self.encPulseCtrsFRLabel = QLabel(self.encPulseCtrsBox) + self.encPulseCtrsFRLabel.setObjectName(u"encPulseCtrsFRLabel") + sizePolicy5.setHeightForWidth(self.encPulseCtrsFRLabel.sizePolicy().hasHeightForWidth()) + self.encPulseCtrsFRLabel.setSizePolicy(sizePolicy5) + + self.encPulseCtrsLabelsBox.addWidget(self.encPulseCtrsFRLabel) + + self.encPulseCtrsFLLabel = QLabel(self.encPulseCtrsBox) + self.encPulseCtrsFLLabel.setObjectName(u"encPulseCtrsFLLabel") + + self.encPulseCtrsLabelsBox.addWidget(self.encPulseCtrsFLLabel) + + self.verticalSpacer_12 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.encPulseCtrsLabelsBox.addItem(self.verticalSpacer_12) + + self.encPulseCtrsBRLabel = QLabel(self.encPulseCtrsBox) + self.encPulseCtrsBRLabel.setObjectName(u"encPulseCtrsBRLabel") + + self.encPulseCtrsLabelsBox.addWidget(self.encPulseCtrsBRLabel) + + self.encPulseCtrsBLLabel = QLabel(self.encPulseCtrsBox) + self.encPulseCtrsBLLabel.setObjectName(u"encPulseCtrsBLLabel") + + self.encPulseCtrsLabelsBox.addWidget(self.encPulseCtrsBLLabel) + + + self.horizontalLayout_9.addLayout(self.encPulseCtrsLabelsBox) + + self.horizontalSpacer_18 = QSpacerItem(4, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_9.addItem(self.horizontalSpacer_18) + + self.encPulseCtrsValuesBox = QVBoxLayout() + self.encPulseCtrsValuesBox.setObjectName(u"encPulseCtrsValuesBox") + self.encPulseCtrsValuesBox.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) + self.encPulseCtrsFRValue = QLineEdit(self.encPulseCtrsBox) + self.encPulseCtrsFRValue.setObjectName(u"encPulseCtrsFRValue") + sizePolicy2.setHeightForWidth(self.encPulseCtrsFRValue.sizePolicy().hasHeightForWidth()) + self.encPulseCtrsFRValue.setSizePolicy(sizePolicy2) + self.encPulseCtrsFRValue.setFont(font) + self.encPulseCtrsFRValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.encPulseCtrsFRValue.setFrame(True) + self.encPulseCtrsFRValue.setDragEnabled(True) + self.encPulseCtrsFRValue.setReadOnly(True) + + self.encPulseCtrsValuesBox.addWidget(self.encPulseCtrsFRValue) + + self.encPulseCtrsFLValue = QLineEdit(self.encPulseCtrsBox) + self.encPulseCtrsFLValue.setObjectName(u"encPulseCtrsFLValue") + sizePolicy2.setHeightForWidth(self.encPulseCtrsFLValue.sizePolicy().hasHeightForWidth()) + self.encPulseCtrsFLValue.setSizePolicy(sizePolicy2) + self.encPulseCtrsFLValue.setFont(font) + self.encPulseCtrsFLValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.encPulseCtrsFLValue.setFrame(True) + self.encPulseCtrsFLValue.setDragEnabled(True) + self.encPulseCtrsFLValue.setReadOnly(True) + + self.encPulseCtrsValuesBox.addWidget(self.encPulseCtrsFLValue) + + self.verticalSpacer_13 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.encPulseCtrsValuesBox.addItem(self.verticalSpacer_13) + + self.encPulseCtrsBRValue = QLineEdit(self.encPulseCtrsBox) + self.encPulseCtrsBRValue.setObjectName(u"encPulseCtrsBRValue") + sizePolicy2.setHeightForWidth(self.encPulseCtrsBRValue.sizePolicy().hasHeightForWidth()) + self.encPulseCtrsBRValue.setSizePolicy(sizePolicy2) + self.encPulseCtrsBRValue.setFont(font) + self.encPulseCtrsBRValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.encPulseCtrsBRValue.setFrame(True) + self.encPulseCtrsBRValue.setDragEnabled(True) + self.encPulseCtrsBRValue.setReadOnly(True) + + self.encPulseCtrsValuesBox.addWidget(self.encPulseCtrsBRValue) + + self.encPulseCtrsBLValue = QLineEdit(self.encPulseCtrsBox) + self.encPulseCtrsBLValue.setObjectName(u"encPulseCtrsBLValue") + sizePolicy2.setHeightForWidth(self.encPulseCtrsBLValue.sizePolicy().hasHeightForWidth()) + self.encPulseCtrsBLValue.setSizePolicy(sizePolicy2) + self.encPulseCtrsBLValue.setFont(font) + self.encPulseCtrsBLValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.encPulseCtrsBLValue.setFrame(True) + self.encPulseCtrsBLValue.setDragEnabled(True) + self.encPulseCtrsBLValue.setReadOnly(True) + + self.encPulseCtrsValuesBox.addWidget(self.encPulseCtrsBLValue) + + + self.horizontalLayout_9.addLayout(self.encPulseCtrsValuesBox) + + self.leftPidBox = QGroupBox(self.motorCtrlTab) + self.leftPidBox.setObjectName(u"leftPidBox") + self.leftPidBox.setGeometry(QRect(467, 20, 200, 165)) + sizePolicy.setHeightForWidth(self.leftPidBox.sizePolicy().hasHeightForWidth()) + self.leftPidBox.setSizePolicy(sizePolicy) + self.horizontalLayout_10 = QHBoxLayout(self.leftPidBox) + self.horizontalLayout_10.setObjectName(u"horizontalLayout_10") + self.leftPidLabelsBox = QVBoxLayout() + self.leftPidLabelsBox.setObjectName(u"leftPidLabelsBox") + self.leftPidPLabel = QLabel(self.leftPidBox) + self.leftPidPLabel.setObjectName(u"leftPidPLabel") + sizePolicy5.setHeightForWidth(self.leftPidPLabel.sizePolicy().hasHeightForWidth()) + self.leftPidPLabel.setSizePolicy(sizePolicy5) + + self.leftPidLabelsBox.addWidget(self.leftPidPLabel) + + self.leftPidILabel = QLabel(self.leftPidBox) + self.leftPidILabel.setObjectName(u"leftPidILabel") + + self.leftPidLabelsBox.addWidget(self.leftPidILabel) + + self.leftPidDLabel = QLabel(self.leftPidBox) + self.leftPidDLabel.setObjectName(u"leftPidDLabel") + + self.leftPidLabelsBox.addWidget(self.leftPidDLabel) + + self.verticalSpacer_14 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.leftPidLabelsBox.addItem(self.verticalSpacer_14) + + self.leftPidOutLabel = QLabel(self.leftPidBox) + self.leftPidOutLabel.setObjectName(u"leftPidOutLabel") + + self.leftPidLabelsBox.addWidget(self.leftPidOutLabel) + + + self.horizontalLayout_10.addLayout(self.leftPidLabelsBox) + + self.horizontalSpacer_19 = QSpacerItem(4, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_10.addItem(self.horizontalSpacer_19) + + self.leftPidValuesBox = QVBoxLayout() + self.leftPidValuesBox.setObjectName(u"leftPidValuesBox") + self.leftPidValuesBox.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) + self.leftPidPValue = QLineEdit(self.leftPidBox) + self.leftPidPValue.setObjectName(u"leftPidPValue") + sizePolicy2.setHeightForWidth(self.leftPidPValue.sizePolicy().hasHeightForWidth()) + self.leftPidPValue.setSizePolicy(sizePolicy2) + self.leftPidPValue.setFont(font) + self.leftPidPValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.leftPidPValue.setFrame(True) + self.leftPidPValue.setDragEnabled(True) + self.leftPidPValue.setReadOnly(True) + + self.leftPidValuesBox.addWidget(self.leftPidPValue) + + self.leftPidIValue = QLineEdit(self.leftPidBox) + self.leftPidIValue.setObjectName(u"leftPidIValue") + sizePolicy2.setHeightForWidth(self.leftPidIValue.sizePolicy().hasHeightForWidth()) + self.leftPidIValue.setSizePolicy(sizePolicy2) + self.leftPidIValue.setFont(font) + self.leftPidIValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.leftPidIValue.setFrame(True) + self.leftPidIValue.setDragEnabled(True) + self.leftPidIValue.setReadOnly(True) + + self.leftPidValuesBox.addWidget(self.leftPidIValue) + + self.leftPidDValue = QLineEdit(self.leftPidBox) + self.leftPidDValue.setObjectName(u"leftPidDValue") + sizePolicy2.setHeightForWidth(self.leftPidDValue.sizePolicy().hasHeightForWidth()) + self.leftPidDValue.setSizePolicy(sizePolicy2) + self.leftPidDValue.setFont(font) + self.leftPidDValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.leftPidDValue.setFrame(True) + self.leftPidDValue.setDragEnabled(True) + self.leftPidDValue.setReadOnly(True) + + self.leftPidValuesBox.addWidget(self.leftPidDValue) + + self.verticalSpacer_15 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.leftPidValuesBox.addItem(self.verticalSpacer_15) + + self.leftPidOutValue = QLineEdit(self.leftPidBox) + self.leftPidOutValue.setObjectName(u"leftPidOutValue") + sizePolicy2.setHeightForWidth(self.leftPidOutValue.sizePolicy().hasHeightForWidth()) + self.leftPidOutValue.setSizePolicy(sizePolicy2) + self.leftPidOutValue.setFont(font) + self.leftPidOutValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.leftPidOutValue.setFrame(True) + self.leftPidOutValue.setDragEnabled(True) + self.leftPidOutValue.setReadOnly(True) + + self.leftPidValuesBox.addWidget(self.leftPidOutValue) + + + self.horizontalLayout_10.addLayout(self.leftPidValuesBox) + + self.rightPidBox = QGroupBox(self.motorCtrlTab) + self.rightPidBox.setObjectName(u"rightPidBox") + self.rightPidBox.setGeometry(QRect(467, 200, 200, 165)) + sizePolicy.setHeightForWidth(self.rightPidBox.sizePolicy().hasHeightForWidth()) + self.rightPidBox.setSizePolicy(sizePolicy) + self.horizontalLayout_11 = QHBoxLayout(self.rightPidBox) + self.horizontalLayout_11.setObjectName(u"horizontalLayout_11") + self.rightPidLabelsBox = QVBoxLayout() + self.rightPidLabelsBox.setObjectName(u"rightPidLabelsBox") + self.rightPidPLabel = QLabel(self.rightPidBox) + self.rightPidPLabel.setObjectName(u"rightPidPLabel") + sizePolicy5.setHeightForWidth(self.rightPidPLabel.sizePolicy().hasHeightForWidth()) + self.rightPidPLabel.setSizePolicy(sizePolicy5) + + self.rightPidLabelsBox.addWidget(self.rightPidPLabel) + + self.rightPidILabel = QLabel(self.rightPidBox) + self.rightPidILabel.setObjectName(u"rightPidILabel") + + self.rightPidLabelsBox.addWidget(self.rightPidILabel) + + self.rightPidDLabel = QLabel(self.rightPidBox) + self.rightPidDLabel.setObjectName(u"rightPidDLabel") + + self.rightPidLabelsBox.addWidget(self.rightPidDLabel) + + self.verticalSpacer_16 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.rightPidLabelsBox.addItem(self.verticalSpacer_16) + + self.rightPidOutLabel = QLabel(self.rightPidBox) + self.rightPidOutLabel.setObjectName(u"rightPidOutLabel") + + self.rightPidLabelsBox.addWidget(self.rightPidOutLabel) + + + self.horizontalLayout_11.addLayout(self.rightPidLabelsBox) + + self.horizontalSpacer_20 = QSpacerItem(4, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_11.addItem(self.horizontalSpacer_20) + + self.rightPidValuesBox = QVBoxLayout() + self.rightPidValuesBox.setObjectName(u"rightPidValuesBox") + self.rightPidValuesBox.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) + self.rightPidPValue = QLineEdit(self.rightPidBox) + self.rightPidPValue.setObjectName(u"rightPidPValue") + sizePolicy2.setHeightForWidth(self.rightPidPValue.sizePolicy().hasHeightForWidth()) + self.rightPidPValue.setSizePolicy(sizePolicy2) + self.rightPidPValue.setFont(font) + self.rightPidPValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.rightPidPValue.setFrame(True) + self.rightPidPValue.setDragEnabled(True) + self.rightPidPValue.setReadOnly(True) + + self.rightPidValuesBox.addWidget(self.rightPidPValue) + + self.rightPidIValue = QLineEdit(self.rightPidBox) + self.rightPidIValue.setObjectName(u"rightPidIValue") + sizePolicy2.setHeightForWidth(self.rightPidIValue.sizePolicy().hasHeightForWidth()) + self.rightPidIValue.setSizePolicy(sizePolicy2) + self.rightPidIValue.setFont(font) + self.rightPidIValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.rightPidIValue.setFrame(True) + self.rightPidIValue.setDragEnabled(True) + self.rightPidIValue.setReadOnly(True) + + self.rightPidValuesBox.addWidget(self.rightPidIValue) + + self.rightPidDValue = QLineEdit(self.rightPidBox) + self.rightPidDValue.setObjectName(u"rightPidDValue") + sizePolicy2.setHeightForWidth(self.rightPidDValue.sizePolicy().hasHeightForWidth()) + self.rightPidDValue.setSizePolicy(sizePolicy2) + self.rightPidDValue.setFont(font) + self.rightPidDValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.rightPidDValue.setFrame(True) + self.rightPidDValue.setDragEnabled(True) + self.rightPidDValue.setReadOnly(True) + + self.rightPidValuesBox.addWidget(self.rightPidDValue) + + self.verticalSpacer_17 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.rightPidValuesBox.addItem(self.verticalSpacer_17) + + self.rightPidOutValue = QLineEdit(self.rightPidBox) + self.rightPidOutValue.setObjectName(u"rightPidOutValue") + sizePolicy2.setHeightForWidth(self.rightPidOutValue.sizePolicy().hasHeightForWidth()) + self.rightPidOutValue.setSizePolicy(sizePolicy2) + self.rightPidOutValue.setFont(font) + self.rightPidOutValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.rightPidOutValue.setFrame(True) + self.rightPidOutValue.setDragEnabled(True) + self.rightPidOutValue.setReadOnly(True) + + self.rightPidValuesBox.addWidget(self.rightPidOutValue) + + + self.horizontalLayout_11.addLayout(self.rightPidValuesBox) + + self.pages.addTab(self.motorCtrlTab, "") + self.powerTab = QWidget() + self.powerTab.setObjectName(u"powerTab") + self.batteryInfoBox = QGroupBox(self.powerTab) + self.batteryInfoBox.setObjectName(u"batteryInfoBox") + self.batteryInfoBox.setGeometry(QRect(28, 20, 195, 110)) + self.horizontalLayout_12 = QHBoxLayout(self.batteryInfoBox) + self.horizontalLayout_12.setObjectName(u"horizontalLayout_12") + self.batteryInfoLabels = QVBoxLayout() + self.batteryInfoLabels.setObjectName(u"batteryInfoLabels") + self.batteryVoltageLabel = QLabel(self.batteryInfoBox) + self.batteryVoltageLabel.setObjectName(u"batteryVoltageLabel") + sizePolicy6.setHeightForWidth(self.batteryVoltageLabel.sizePolicy().hasHeightForWidth()) + self.batteryVoltageLabel.setSizePolicy(sizePolicy6) + + self.batteryInfoLabels.addWidget(self.batteryVoltageLabel) + + self.batteryCurrentLabel = QLabel(self.batteryInfoBox) + self.batteryCurrentLabel.setObjectName(u"batteryCurrentLabel") + sizePolicy6.setHeightForWidth(self.batteryCurrentLabel.sizePolicy().hasHeightForWidth()) + self.batteryCurrentLabel.setSizePolicy(sizePolicy6) + + self.batteryInfoLabels.addWidget(self.batteryCurrentLabel) + + + self.horizontalLayout_12.addLayout(self.batteryInfoLabels) + + self.horizontalSpacer_21 = QSpacerItem(8, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_12.addItem(self.horizontalSpacer_21) + + self.batteryInfoValues = QVBoxLayout() + self.batteryInfoValues.setObjectName(u"batteryInfoValues") + self.batteryVoltageValue = QLCDNumber(self.batteryInfoBox) + self.batteryVoltageValue.setObjectName(u"batteryVoltageValue") + sizePolicy1.setHeightForWidth(self.batteryVoltageValue.sizePolicy().hasHeightForWidth()) + self.batteryVoltageValue.setSizePolicy(sizePolicy1) + self.batteryVoltageValue.setFont(font1) + self.batteryVoltageValue.setDigitCount(6) + self.batteryVoltageValue.setSegmentStyle(QLCDNumber.SegmentStyle.Flat) + self.batteryVoltageValue.setProperty("value", 12.458000000000000) + + self.batteryInfoValues.addWidget(self.batteryVoltageValue) + + self.batteryCurrentValue = QLCDNumber(self.batteryInfoBox) + self.batteryCurrentValue.setObjectName(u"batteryCurrentValue") + sizePolicy1.setHeightForWidth(self.batteryCurrentValue.sizePolicy().hasHeightForWidth()) + self.batteryCurrentValue.setSizePolicy(sizePolicy1) + self.batteryCurrentValue.setFont(font1) + self.batteryCurrentValue.setDigitCount(6) + self.batteryCurrentValue.setSegmentStyle(QLCDNumber.SegmentStyle.Flat) + self.batteryCurrentValue.setProperty("value", 3.284000000000000) + + self.batteryInfoValues.addWidget(self.batteryCurrentValue) + + + self.horizontalLayout_12.addLayout(self.batteryInfoValues) + + self.powerTabNote = QLabel(self.powerTab) + self.powerTabNote.setObjectName(u"powerTabNote") + self.powerTabNote.setGeometry(QRect(20, 510, 251, 18)) + self.pages.addTab(self.powerTab, "") + self.diagTab = QWidget() + self.diagTab.setObjectName(u"diagTab") + self.diagMsgsBox = QGroupBox(self.diagTab) + self.diagMsgsBox.setObjectName(u"diagMsgsBox") + self.diagMsgsBox.setGeometry(QRect(305, 20, 695, 505)) + sizePolicy1.setHeightForWidth(self.diagMsgsBox.sizePolicy().hasHeightForWidth()) + self.diagMsgsBox.setSizePolicy(sizePolicy1) + self.verticalLayout_2 = QVBoxLayout(self.diagMsgsBox) + self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.diagMsgsText = QTextBrowser(self.diagMsgsBox) + self.diagMsgsText.setObjectName(u"diagMsgsText") + sizePolicy8 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Expanding) + sizePolicy8.setHorizontalStretch(0) + sizePolicy8.setVerticalStretch(0) + sizePolicy8.setHeightForWidth(self.diagMsgsText.sizePolicy().hasHeightForWidth()) + self.diagMsgsText.setSizePolicy(sizePolicy8) + + self.verticalLayout_2.addWidget(self.diagMsgsText) + + self.diagMsgsOptionsBox = QHBoxLayout() + self.diagMsgsOptionsBox.setObjectName(u"diagMsgsOptionsBox") + self.diagMsgsOptionsBox.setContentsMargins(5, -1, 5, -1) + self.diagMsgOptsAutoScrollCheck = QCheckBox(self.diagMsgsBox) + self.diagMsgOptsAutoScrollCheck.setObjectName(u"diagMsgOptsAutoScrollCheck") + sizePolicy2.setHeightForWidth(self.diagMsgOptsAutoScrollCheck.sizePolicy().hasHeightForWidth()) + self.diagMsgOptsAutoScrollCheck.setSizePolicy(sizePolicy2) + self.diagMsgOptsAutoScrollCheck.setChecked(True) + + self.diagMsgsOptionsBox.addWidget(self.diagMsgOptsAutoScrollCheck) + + self.horizontalSpacer_22 = QSpacerItem(10, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.diagMsgsOptionsBox.addItem(self.horizontalSpacer_22) + + self.diagMsgOptsShowTimeCheck = QCheckBox(self.diagMsgsBox) + self.diagMsgOptsShowTimeCheck.setObjectName(u"diagMsgOptsShowTimeCheck") + sizePolicy2.setHeightForWidth(self.diagMsgOptsShowTimeCheck.sizePolicy().hasHeightForWidth()) + self.diagMsgOptsShowTimeCheck.setSizePolicy(sizePolicy2) + + self.diagMsgsOptionsBox.addWidget(self.diagMsgOptsShowTimeCheck) + + self.horizontalSpacer_23 = QSpacerItem(10, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.diagMsgsOptionsBox.addItem(self.horizontalSpacer_23) + + self.diagMsgOptsShowKeyValCheck = QCheckBox(self.diagMsgsBox) + self.diagMsgOptsShowKeyValCheck.setObjectName(u"diagMsgOptsShowKeyValCheck") + sizePolicy2.setHeightForWidth(self.diagMsgOptsShowKeyValCheck.sizePolicy().hasHeightForWidth()) + self.diagMsgOptsShowKeyValCheck.setSizePolicy(sizePolicy2) + + self.diagMsgsOptionsBox.addWidget(self.diagMsgOptsShowKeyValCheck) + + self.horizontalSpacer_24 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.diagMsgsOptionsBox.addItem(self.horizontalSpacer_24) + + + self.verticalLayout_2.addLayout(self.diagMsgsOptionsBox) + + self.calibBox = QGroupBox(self.diagTab) + self.calibBox.setObjectName(u"calibBox") + self.calibBox.setGeometry(QRect(28, 20, 255, 170)) + self.verticalLayout_3 = QVBoxLayout(self.calibBox) + self.verticalLayout_3.setObjectName(u"verticalLayout_3") + self.verticalLayout_3.setContentsMargins(-1, -1, -1, 7) + self.calibPidTuneButtonL = QPushButton(self.calibBox) + self.calibPidTuneButtonL.setObjectName(u"calibPidTuneButtonL") + + self.verticalLayout_3.addWidget(self.calibPidTuneButtonL) + + self.calibPidTuneButtonR = QPushButton(self.calibBox) + self.calibPidTuneButtonR.setObjectName(u"calibPidTuneButtonR") + + self.verticalLayout_3.addWidget(self.calibPidTuneButtonR) + + self.calibCliffOffsetButton = QPushButton(self.calibBox) + self.calibCliffOffsetButton.setObjectName(u"calibCliffOffsetButton") + + self.verticalLayout_3.addWidget(self.calibCliffOffsetButton) + + self.calibImuCompassButton = QPushButton(self.calibBox) + self.calibImuCompassButton.setObjectName(u"calibImuCompassButton") + + self.verticalLayout_3.addWidget(self.calibImuCompassButton) + + self.selftestBox = QGroupBox(self.diagTab) + self.selftestBox.setObjectName(u"selftestBox") + self.selftestBox.setGeometry(QRect(28, 210, 255, 110)) + self.verticalLayout_4 = QVBoxLayout(self.selftestBox) + self.verticalLayout_4.setObjectName(u"verticalLayout_4") + self.verticalLayout_4.setContentsMargins(-1, -1, -1, 7) + self.selftestPicoAButton = QPushButton(self.selftestBox) + self.selftestPicoAButton.setObjectName(u"selftestPicoAButton") + + self.verticalLayout_4.addWidget(self.selftestPicoAButton) + + self.selftestPicoBButton = QPushButton(self.selftestBox) + self.selftestPicoBButton.setObjectName(u"selftestPicoBButton") + + self.verticalLayout_4.addWidget(self.selftestPicoBButton) + + self.pages.addTab(self.diagTab, "") + + self.gridLayout_1.addWidget(self.pages, 0, 0, 1, 1) + + MainWindow.setCentralWidget(self.centralWidget) + self.menubar = QMenuBar(MainWindow) + self.menubar.setObjectName(u"menubar") + self.menubar.setEnabled(True) + self.menubar.setGeometry(QRect(0, 0, 1024, 23)) + self.menubar.setNativeMenuBar(True) + self.menuFile = QMenu(self.menubar) + self.menuFile.setObjectName(u"menuFile") + self.menuFile.setCursor(QCursor(Qt.CursorShape.CrossCursor)) + self.menuConnection = QMenu(self.menubar) + self.menuConnection.setObjectName(u"menuConnection") + self.menuConnection.setCursor(QCursor(Qt.CursorShape.CrossCursor)) + self.menuConfiguration = QMenu(self.menubar) + self.menuConfiguration.setObjectName(u"menuConfiguration") + self.menuConfiguration.setCursor(QCursor(Qt.CursorShape.CrossCursor)) + MainWindow.setMenuBar(self.menubar) + + self.menubar.addAction(self.menuFile.menuAction()) + self.menubar.addAction(self.menuConnection.menuAction()) + self.menubar.addAction(self.menuConfiguration.menuAction()) + self.menuFile.addAction(self.actionRestart_Application) + self.menuFile.addSeparator() + self.menuFile.addAction(self.actionRestart_RPi) + self.menuFile.addAction(self.actionShutdown_System) + self.menuConnection.addAction(self.actionCheck_Robot_Connection) + self.menuConnection.addSeparator() + self.menuConnection.addAction(self.actionCheck_Wi_Fi_Connection) + self.menuConnection.addAction(self.actionCheck_WAN_Connection) + self.menuConfiguration.addAction(self.actionJoystick) + self.menuConfiguration.addAction(self.actionTest_Buttons_Switches) + self.menuConfiguration.addSeparator() + self.menuConfiguration.addAction(self.actionAbout) + + self.retranslateUi(MainWindow) + + self.pages.setCurrentIndex(0) + + + QMetaObject.connectSlotsByName(MainWindow) + # setupUi + + def retranslateUi(self, MainWindow): + MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"ROS Remote UI", None)) + self.actionRestart_Application.setText(QCoreApplication.translate("MainWindow", u"Restart Application", None)) + self.actionRestart_RPi.setText(QCoreApplication.translate("MainWindow", u"Restart System", None)) + self.actionShutdown_System.setText(QCoreApplication.translate("MainWindow", u"Shutdown System", None)) + self.actionCheck_Robot_Connection.setText(QCoreApplication.translate("MainWindow", u"Check Robot Connection", None)) + self.actionCheck_Wi_Fi_Connection.setText(QCoreApplication.translate("MainWindow", u"Check Wi-Fi Connection", None)) + self.actionCheck_WAN_Connection.setText(QCoreApplication.translate("MainWindow", u"Check WAN Connection", None)) + self.actionJoystick.setText(QCoreApplication.translate("MainWindow", u"Configure Joystick", None)) + self.actionTest_Buttons_Switches.setText(QCoreApplication.translate("MainWindow", u"Test Buttons", None)) + self.actionAbout.setText(QCoreApplication.translate("MainWindow", u"About", None)) + self.viewport.setText("") + self.viewportOptsBox.setTitle(QCoreApplication.translate("MainWindow", u"Viewport", None)) + self.viewportFpsLabel.setText(QCoreApplication.translate("MainWindow", u"FPS:", None)) + self.viewportFpsValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.viewportSelector.setItemText(0, QCoreApplication.translate("MainWindow", u"Camera View", None)) + self.viewportSelector.setItemText(1, QCoreApplication.translate("MainWindow", u"Camera View (Overlay)", None)) + self.viewportSelector.setItemText(2, QCoreApplication.translate("MainWindow", u"LiDAR View", None)) + + self.viewportSelector.setCurrentText(QCoreApplication.translate("MainWindow", u"Camera View", None)) + self.camLedsBox.setTitle(QCoreApplication.translate("MainWindow", u"Camera LEDs", None)) + self.camLedsBrightnessLabel.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.camLed1Check.setText(QCoreApplication.translate("MainWindow", u"1", None)) + self.camLed2Check.setText(QCoreApplication.translate("MainWindow", u"2", None)) + self.camLed3Check.setText(QCoreApplication.translate("MainWindow", u"3", None)) + self.camLed4Check.setText(QCoreApplication.translate("MainWindow", u"4", None)) + self.telemetryBox.setTitle(QCoreApplication.translate("MainWindow", u"Telemetry", None)) + self.teleBatteryLabel.setText(QCoreApplication.translate("MainWindow", u"Battery:", None)) + self.teleBatteryValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.teleBatteryUnits.setText(QCoreApplication.translate("MainWindow", u"volts", None)) + self.pages.setTabText(self.pages.indexOf(self.mainTab), QCoreApplication.translate("MainWindow", u"Main", None)) + self.microswSensBox.setTitle(QCoreApplication.translate("MainWindow", u"Microswitches", None)) + self.microswSensIndicatorFL.setText(QCoreApplication.translate("MainWindow", u"Front-L", None)) + self.microswSensIndicatorBL.setText(QCoreApplication.translate("MainWindow", u"Back-L", None)) + self.microswSensIndicatorFR.setText(QCoreApplication.translate("MainWindow", u"Front-R", None)) + self.microswSensIndicatorBR.setText(QCoreApplication.translate("MainWindow", u"Back-R", None)) + self.imuSensBox.setTitle(QCoreApplication.translate("MainWindow", u"IMU", None)) + self.imuSensAccelXLabel.setText(QCoreApplication.translate("MainWindow", u"Accel. X", None)) + self.imuSensAccelXValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.imuSensAccelXUnit.setText(QCoreApplication.translate("MainWindow", u"m/s", None)) + self.imuSensAccelYLabel.setText(QCoreApplication.translate("MainWindow", u"Accel. Y", None)) + self.imuSensAccelYValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.imuSensAccelYUnit.setText(QCoreApplication.translate("MainWindow", u"m/s", None)) + self.imuSensAccelZLabel.setText(QCoreApplication.translate("MainWindow", u"Accel. Z", None)) + self.imuSensAccelZValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.imuSensAccelZUnit.setText(QCoreApplication.translate("MainWindow", u"m/s", None)) + self.imuSensGyroXLabel.setText(QCoreApplication.translate("MainWindow", u"Gyro. X", None)) + self.imuSensGyroXValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.imuSensGyroXUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0/s", None)) + self.imuSensGyroYLabel.setText(QCoreApplication.translate("MainWindow", u"Gyro. Y", None)) + self.imuSensGyroYValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.imuSensGyroYUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0/s", None)) + self.imuSensGyroZLabel.setText(QCoreApplication.translate("MainWindow", u"Gyro. Z", None)) + self.imuSensGyroZValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.imuSensGyroZUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0/s", None)) + self.imuSensCompXLabel.setText(QCoreApplication.translate("MainWindow", u"Comp. X", None)) + self.imuSensCompXValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.imuSensCompXUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) + self.imuSensCompYLabel.setText(QCoreApplication.translate("MainWindow", u"Comp. Y", None)) + self.imuSensCompYValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.imuSensCompYUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) + self.imuSensCompZLabel.setText(QCoreApplication.translate("MainWindow", u"Comp. Z", None)) + self.imuSensCompZValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.imuSensCompZUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) + self.envSensBox.setTitle(QCoreApplication.translate("MainWindow", u"Environment", None)) + self.envSensTempLabel.setText(QCoreApplication.translate("MainWindow", u"DHT Temp", None)) + self.envSensHumLabel.setText(QCoreApplication.translate("MainWindow", u"DHT Hum", None)) + self.envSensImuTempLabel.setText(QCoreApplication.translate("MainWindow", u"IMU Temp", None)) + self.envSensPicoATempLabel.setText(QCoreApplication.translate("MainWindow", u"Pico A Temp", None)) + self.envSensPicoBTempLabel.setText(QCoreApplication.translate("MainWindow", u"Pico B Temp", None)) + self.envSensPiTempLabel.setText(QCoreApplication.translate("MainWindow", u"Pi 5 Temp", None)) + self.envSensTempValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.envSensHumValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.envSensImuTempValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.envSensPicoATempValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.envSensPicoBTempValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.envSensPiTempValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.envSensTempUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) + self.envSensHumUnit.setText(QCoreApplication.translate("MainWindow", u"%", None)) + self.envSensImuTempUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) + self.envSensPicoATempUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) + self.envSensPicoBTempUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) + self.envSensPiTempUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) + self.cliffSensBox.setTitle(QCoreApplication.translate("MainWindow", u"Cliff Sensors", None)) + self.cliffSensIndicatorF2.setText(QCoreApplication.translate("MainWindow", u"Front 2", None)) + self.cliffSensIndicatorB2.setText(QCoreApplication.translate("MainWindow", u"Back 2", None)) + self.cliffSensIndicatorF3.setText(QCoreApplication.translate("MainWindow", u"Front 3", None)) + self.cliffSensIndicatorB1.setText(QCoreApplication.translate("MainWindow", u"Back 1", None)) + self.cliffSensIndicatorB3.setText(QCoreApplication.translate("MainWindow", u"Back 3", None)) + self.cliffSensIndicatorF1.setText(QCoreApplication.translate("MainWindow", u"Front 1", None)) + self.cliffSensIndicatorB4.setText(QCoreApplication.translate("MainWindow", u"Back 4", None)) + self.cliffSensIndicatorF4.setText(QCoreApplication.translate("MainWindow", u"Front 4", None)) + self.ultrasonicSensBox.setTitle(QCoreApplication.translate("MainWindow", u"Ultrasonic", None)) + self.ultrasonicSensLabelF.setText(QCoreApplication.translate("MainWindow", u"Front", None)) + self.ultrasonicSensLabelB.setText(QCoreApplication.translate("MainWindow", u"Back", None)) + self.ultrasonicSensLabelR.setText(QCoreApplication.translate("MainWindow", u"Right", None)) + self.ultrasonicSensLabelL.setText(QCoreApplication.translate("MainWindow", u"Left", None)) + self.ultrasonicSensValueF.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.ultrasonicSensValueB.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.ultrasonicSensValueR.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.ultrasonicSensValueL.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.ultrasonicSensUnitF.setText(QCoreApplication.translate("MainWindow", u"m", None)) + self.ultrasonicSensUnitB.setText(QCoreApplication.translate("MainWindow", u"m", None)) + self.ultrasonicSensUnitR.setText(QCoreApplication.translate("MainWindow", u"m", None)) + self.ultrasonicSensUnitL.setText(QCoreApplication.translate("MainWindow", u"m", None)) + self.batterySensBox.setTitle(QCoreApplication.translate("MainWindow", u"Battery", None)) + self.batterySensVoltageLabel.setText(QCoreApplication.translate("MainWindow", u"Voltage", None)) + self.batterySensCurrentLabel.setText(QCoreApplication.translate("MainWindow", u"Current", None)) + self.enableDisableBox.setTitle(QCoreApplication.translate("MainWindow", u"Enable/Disable", None)) + self.toggleEmittersEnabled.setText(QCoreApplication.translate("MainWindow", u"Emitters", None)) + self.togglePicoARelaEnable.setText(QCoreApplication.translate("MainWindow", u"Pico A Relay", None)) + self.pages.setTabText(self.pages.indexOf(self.sensorsTab), QCoreApplication.translate("MainWindow", u"Sensors", None)) + self.encOdomBox.setTitle(QCoreApplication.translate("MainWindow", u"Encoder Odometry", None)) + self.encOdomPosXLabel.setText(QCoreApplication.translate("MainWindow", u"Pos. X", None)) + self.encOdomPosYLabel.setText(QCoreApplication.translate("MainWindow", u"Pos. Y", None)) + self.encOdomYawLabel.setText(QCoreApplication.translate("MainWindow", u"Yaw", None)) + self.encOdomLinVelLabel.setText(QCoreApplication.translate("MainWindow", u"Lin. Vel.", None)) + self.encOdomAngVelLabel.setText(QCoreApplication.translate("MainWindow", u"Ang. Vel.", None)) + self.encOdomPosXValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.encOdomPosYValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.encOdomYawValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.encOdomLinVelValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.encOdomAngVelValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.encOdomPosXUnit.setText(QCoreApplication.translate("MainWindow", u"m", None)) + self.encOdomPosYUnit.setText(QCoreApplication.translate("MainWindow", u"m", None)) + self.encOdomYawUnit.setText(QCoreApplication.translate("MainWindow", u"\u00b0", None)) + self.encOdomLinVelUnit.setText(QCoreApplication.translate("MainWindow", u"m/s", None)) + self.encOdomAngVelUnit.setText(QCoreApplication.translate("MainWindow", u"r/s", None)) + self.mtrCtrlEnableBox.setTitle(QCoreApplication.translate("MainWindow", u"Motor Controllers", None)) + self.mtrCtrlEnableButton.setText(QCoreApplication.translate("MainWindow", u"Enable", None)) + self.mtrCtrlDisableButton.setText(QCoreApplication.translate("MainWindow", u"Disable", None)) + self.mtrCtrlEnableLIndicator.setText(QCoreApplication.translate("MainWindow", u"Left", None)) + self.mtrCtrlEnableRIndicator.setText(QCoreApplication.translate("MainWindow", u"Right", None)) + self.rpmMeasuredBox.setTitle(QCoreApplication.translate("MainWindow", u"RPMs - Measured", None)) + self.rpmMeasuredFRLabel.setText(QCoreApplication.translate("MainWindow", u"Front-R", None)) + self.rpmMeasuredFLLabel.setText(QCoreApplication.translate("MainWindow", u"Front-L", None)) + self.rpmMeasuredBRLabel.setText(QCoreApplication.translate("MainWindow", u"Back-R", None)) + self.rpmMeasuredBLLabel.setText(QCoreApplication.translate("MainWindow", u"Back-L", None)) + self.rpmMeasuredFRValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.rpmMeasuredFLValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.rpmMeasuredBRValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.rpmMeasuredBLValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.rpmMeasuredFRUnit.setText(QCoreApplication.translate("MainWindow", u"rpm", None)) + self.rpmMeasuredFLUnit.setText(QCoreApplication.translate("MainWindow", u"rpm", None)) + self.rpmMeasuredBRUnit.setText(QCoreApplication.translate("MainWindow", u"rpm", None)) + self.rpmMeasuredBLUnit.setText(QCoreApplication.translate("MainWindow", u"rpm", None)) + self.rpmTargetBox.setTitle(QCoreApplication.translate("MainWindow", u"RPMs - Target", None)) + self.rpmTargetFRLabel.setText(QCoreApplication.translate("MainWindow", u"Front-R", None)) + self.rpmTargetFLLabel.setText(QCoreApplication.translate("MainWindow", u"Front-L", None)) + self.rpmTargetBRLabel.setText(QCoreApplication.translate("MainWindow", u"Back-R", None)) + self.rpmTargetBLLabel.setText(QCoreApplication.translate("MainWindow", u"Back-L", None)) + self.rpmTargetFRValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.rpmTargetFLValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.rpmTargetBRValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.rpmTargetBLValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.rpmTargetFRUnit.setText(QCoreApplication.translate("MainWindow", u"rpm", None)) + self.rpmTargetFLUnit.setText(QCoreApplication.translate("MainWindow", u"rpm", None)) + self.rpmTargetBRUnit.setText(QCoreApplication.translate("MainWindow", u"rpm", None)) + self.rpmTargetBLUnit.setText(QCoreApplication.translate("MainWindow", u"rpm", None)) + self.encPulseCtrsBox.setTitle(QCoreApplication.translate("MainWindow", u"Encoder Pulse Counters", None)) + self.encPulseCtrsFRLabel.setText(QCoreApplication.translate("MainWindow", u"Front-R", None)) + self.encPulseCtrsFLLabel.setText(QCoreApplication.translate("MainWindow", u"Front-L", None)) + self.encPulseCtrsBRLabel.setText(QCoreApplication.translate("MainWindow", u"Back-R", None)) + self.encPulseCtrsBLLabel.setText(QCoreApplication.translate("MainWindow", u"Back-L", None)) + self.encPulseCtrsFRValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.encPulseCtrsFLValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.encPulseCtrsBRValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.encPulseCtrsBLValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.leftPidBox.setTitle(QCoreApplication.translate("MainWindow", u"Left Controller PID", None)) + self.leftPidPLabel.setText(QCoreApplication.translate("MainWindow", u"PID (P)", None)) + self.leftPidILabel.setText(QCoreApplication.translate("MainWindow", u"PID (I)", None)) + self.leftPidDLabel.setText(QCoreApplication.translate("MainWindow", u"PID (D)", None)) + self.leftPidOutLabel.setText(QCoreApplication.translate("MainWindow", u"PID Out", None)) + self.leftPidPValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.leftPidIValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.leftPidDValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.leftPidOutValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.rightPidBox.setTitle(QCoreApplication.translate("MainWindow", u"Right Controller PID", None)) + self.rightPidPLabel.setText(QCoreApplication.translate("MainWindow", u"PID (P)", None)) + self.rightPidILabel.setText(QCoreApplication.translate("MainWindow", u"PID (I)", None)) + self.rightPidDLabel.setText(QCoreApplication.translate("MainWindow", u"PID (D)", None)) + self.rightPidOutLabel.setText(QCoreApplication.translate("MainWindow", u"PID Out", None)) + self.rightPidPValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.rightPidIValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.rightPidDValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.rightPidOutValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.pages.setTabText(self.pages.indexOf(self.motorCtrlTab), QCoreApplication.translate("MainWindow", u"Motor Controllers", None)) + self.batteryInfoBox.setTitle(QCoreApplication.translate("MainWindow", u"Battery", None)) + self.batteryVoltageLabel.setText(QCoreApplication.translate("MainWindow", u"Voltage", None)) + self.batteryCurrentLabel.setText(QCoreApplication.translate("MainWindow", u"Current", None)) + self.powerTabNote.setText(QCoreApplication.translate("MainWindow", u"This page is for ROS Robot version 2.", None)) + self.pages.setTabText(self.pages.indexOf(self.powerTab), QCoreApplication.translate("MainWindow", u"Power", None)) + self.diagMsgsBox.setTitle(QCoreApplication.translate("MainWindow", u"Diagnostic Messages", None)) + self.diagMsgsText.setHtml(QCoreApplication.translate("MainWindow", u"\n" +"\n" +"


", None)) + self.diagMsgOptsAutoScrollCheck.setText(QCoreApplication.translate("MainWindow", u"Auto-scroll", None)) + self.diagMsgOptsShowTimeCheck.setText(QCoreApplication.translate("MainWindow", u"Show timestamps", None)) + self.diagMsgOptsShowKeyValCheck.setText(QCoreApplication.translate("MainWindow", u"Show key-values", None)) + self.calibBox.setTitle(QCoreApplication.translate("MainWindow", u"Calibration", None)) + self.calibPidTuneButtonL.setText(QCoreApplication.translate("MainWindow", u"PID Auto-tune (Left)", None)) + self.calibPidTuneButtonR.setText(QCoreApplication.translate("MainWindow", u"PID Auto-tune (Right)", None)) + self.calibCliffOffsetButton.setText(QCoreApplication.translate("MainWindow", u"Cliff Sensors Offset", None)) + self.calibImuCompassButton.setText(QCoreApplication.translate("MainWindow", u"IMU - Compass", None)) + self.selftestBox.setTitle(QCoreApplication.translate("MainWindow", u"Self-Test", None)) + self.selftestPicoAButton.setText(QCoreApplication.translate("MainWindow", u"Pico A Routine", None)) + self.selftestPicoBButton.setText(QCoreApplication.translate("MainWindow", u"Pico B Routine", None)) + self.pages.setTabText(self.pages.indexOf(self.diagTab), QCoreApplication.translate("MainWindow", u"Diagnostics", None)) + self.menuFile.setTitle(QCoreApplication.translate("MainWindow", u"Power", None)) + self.menuConnection.setTitle(QCoreApplication.translate("MainWindow", u"Connection", None)) + self.menuConfiguration.setTitle(QCoreApplication.translate("MainWindow", u"Configuration", None)) + # retranslateUi + diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_selftest_result_dialog.py b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_selftest_result_dialog.py index cffc1ac..6904974 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_selftest_result_dialog.py +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_selftest_result_dialog.py @@ -1,103 +1,103 @@ -# -*- coding: utf-8 -*- - -################################################################################ -## Form generated from reading UI file 'selftest_result_dialog.ui' -## -## Created by: Qt User Interface Compiler version 6.7.2 -## -## WARNING! All changes made in this file will be lost when recompiling UI file! -################################################################################ - -from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, - QMetaObject, QObject, QPoint, QRect, - QSize, QTime, QUrl, Qt) -from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, - QFont, QFontDatabase, QGradient, QIcon, - QImage, QKeySequence, QLinearGradient, QPainter, - QPalette, QPixmap, QRadialGradient, QTransform) -from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, - QFrame, QHBoxLayout, QLabel, QSizePolicy, - QSpacerItem, QTextBrowser, QVBoxLayout, QWidget) - -class Ui_Dialog(object): - def setupUi(self, Dialog): - if not Dialog.objectName(): - Dialog.setObjectName(u"Dialog") - Dialog.resize(800, 450) - self.verticalLayout_1 = QVBoxLayout(Dialog) - self.verticalLayout_1.setObjectName(u"verticalLayout_1") - self.verticalLayout_1.setContentsMargins(20, 20, 20, 15) - self.resultBox = QHBoxLayout() - self.resultBox.setObjectName(u"resultBox") - self.resultBox.setContentsMargins(-1, -1, -1, 0) - self.resultLabel = QLabel(Dialog) - self.resultLabel.setObjectName(u"resultLabel") - self.resultLabel.setTextFormat(Qt.TextFormat.MarkdownText) - - self.resultBox.addWidget(self.resultLabel) - - self.horizontalSpacer_1 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.resultBox.addItem(self.horizontalSpacer_1) - - self.resultStatusLabel = QLabel(Dialog) - self.resultStatusLabel.setObjectName(u"resultStatusLabel") - sizePolicy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.resultStatusLabel.sizePolicy().hasHeightForWidth()) - self.resultStatusLabel.setSizePolicy(sizePolicy) - self.resultStatusLabel.setFrameShape(QFrame.Shape.Box) - self.resultStatusLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - self.resultStatusLabel.setMargin(3) - - self.resultBox.addWidget(self.resultStatusLabel) - - self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) - - self.resultBox.addItem(self.horizontalSpacer_2) - - self.sourceLabel = QLabel(Dialog) - self.sourceLabel.setObjectName(u"sourceLabel") - self.sourceLabel.setFrameShape(QFrame.Shape.Box) - self.sourceLabel.setMargin(3) - - self.resultBox.addWidget(self.sourceLabel) - - - self.verticalLayout_1.addLayout(self.resultBox) - - self.verticalSpacer_1 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.verticalLayout_1.addItem(self.verticalSpacer_1) - - self.resultMessage = QTextBrowser(Dialog) - self.resultMessage.setObjectName(u"resultMessage") - - self.verticalLayout_1.addWidget(self.resultMessage) - - self.verticalSpacer_2 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - - self.verticalLayout_1.addItem(self.verticalSpacer_2) - - self.buttonBox = QDialogButtonBox(Dialog) - self.buttonBox.setObjectName(u"buttonBox") - self.buttonBox.setOrientation(Qt.Orientation.Horizontal) - self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Ok) - - self.verticalLayout_1.addWidget(self.buttonBox) - - - self.retranslateUi(Dialog) - self.buttonBox.accepted.connect(Dialog.accept) - - QMetaObject.connectSlotsByName(Dialog) - # setupUi - - def retranslateUi(self, Dialog): - Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Self-Test Result", None)) - self.resultLabel.setText(QCoreApplication.translate("Dialog", u"**Result:**", None)) - self.resultStatusLabel.setText(QCoreApplication.translate("Dialog", u"STATUS", None)) - self.sourceLabel.setText(QCoreApplication.translate("Dialog", u"SOURCE", None)) - # retranslateUi - +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'selftest_result_dialog.ui' +## +## Created by: Qt User Interface Compiler version 6.7.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, + QFrame, QHBoxLayout, QLabel, QSizePolicy, + QSpacerItem, QTextBrowser, QVBoxLayout, QWidget) + +class Ui_Dialog(object): + def setupUi(self, Dialog): + if not Dialog.objectName(): + Dialog.setObjectName(u"Dialog") + Dialog.resize(800, 450) + self.verticalLayout_1 = QVBoxLayout(Dialog) + self.verticalLayout_1.setObjectName(u"verticalLayout_1") + self.verticalLayout_1.setContentsMargins(20, 20, 20, 15) + self.resultBox = QHBoxLayout() + self.resultBox.setObjectName(u"resultBox") + self.resultBox.setContentsMargins(-1, -1, -1, 0) + self.resultLabel = QLabel(Dialog) + self.resultLabel.setObjectName(u"resultLabel") + self.resultLabel.setTextFormat(Qt.TextFormat.MarkdownText) + + self.resultBox.addWidget(self.resultLabel) + + self.horizontalSpacer_1 = QSpacerItem(5, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.resultBox.addItem(self.horizontalSpacer_1) + + self.resultStatusLabel = QLabel(Dialog) + self.resultStatusLabel.setObjectName(u"resultStatusLabel") + sizePolicy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.resultStatusLabel.sizePolicy().hasHeightForWidth()) + self.resultStatusLabel.setSizePolicy(sizePolicy) + self.resultStatusLabel.setFrameShape(QFrame.Shape.Box) + self.resultStatusLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + self.resultStatusLabel.setMargin(3) + + self.resultBox.addWidget(self.resultStatusLabel) + + self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.resultBox.addItem(self.horizontalSpacer_2) + + self.sourceLabel = QLabel(Dialog) + self.sourceLabel.setObjectName(u"sourceLabel") + self.sourceLabel.setFrameShape(QFrame.Shape.Box) + self.sourceLabel.setMargin(3) + + self.resultBox.addWidget(self.sourceLabel) + + + self.verticalLayout_1.addLayout(self.resultBox) + + self.verticalSpacer_1 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_1.addItem(self.verticalSpacer_1) + + self.resultMessage = QTextBrowser(Dialog) + self.resultMessage.setObjectName(u"resultMessage") + + self.verticalLayout_1.addWidget(self.resultMessage) + + self.verticalSpacer_2 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_1.addItem(self.verticalSpacer_2) + + self.buttonBox = QDialogButtonBox(Dialog) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setOrientation(Qt.Orientation.Horizontal) + self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Ok) + + self.verticalLayout_1.addWidget(self.buttonBox) + + + self.retranslateUi(Dialog) + self.buttonBox.accepted.connect(Dialog.accept) + + QMetaObject.connectSlotsByName(Dialog) + # setupUi + + def retranslateUi(self, Dialog): + Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Self-Test Result", None)) + self.resultLabel.setText(QCoreApplication.translate("Dialog", u"**Result:**", None)) + self.resultStatusLabel.setText(QCoreApplication.translate("Dialog", u"STATUS", None)) + self.sourceLabel.setText(QCoreApplication.translate("Dialog", u"SOURCE", None)) + # retranslateUi + diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_test_remote_buttons_dialog.py b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_test_remote_buttons_dialog.py index 5347d91..579e629 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_test_remote_buttons_dialog.py +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/gui_files/ui_test_remote_buttons_dialog.py @@ -1,360 +1,360 @@ -# -*- coding: utf-8 -*- - -################################################################################ -## Form generated from reading UI file 'test_remote_buttons_dialog.ui' -## -## Created by: Qt User Interface Compiler version 6.7.2 -## -## WARNING! All changes made in this file will be lost when recompiling UI file! -################################################################################ - -from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, - QMetaObject, QObject, QPoint, QRect, - QSize, QTime, QUrl, Qt) -from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, - QFont, QFontDatabase, QGradient, QIcon, - QImage, QKeySequence, QLinearGradient, QPainter, - QPalette, QPixmap, QRadialGradient, QTransform) -from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, - QFrame, QHBoxLayout, QLabel, QLineEdit, - QPushButton, QSizePolicy, QSpacerItem, QVBoxLayout, - QWidget) - -class Ui_Dialog(object): - def setupUi(self, Dialog): - if not Dialog.objectName(): - Dialog.setObjectName(u"Dialog") - Dialog.resize(800, 458) - self.buttonBox = QDialogButtonBox(Dialog) - self.buttonBox.setObjectName(u"buttonBox") - self.buttonBox.setGeometry(QRect(434, 412, 341, 32)) - self.buttonBox.setOrientation(Qt.Orientation.Horizontal) - self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Ok) - self.mainFrame = QFrame(Dialog) - self.mainFrame.setObjectName(u"mainFrame") - self.mainFrame.setGeometry(QRect(25, 25, 750, 375)) - self.mainFrame.setFrameShape(QFrame.Shape.StyledPanel) - self.mainFrame.setFrameShadow(QFrame.Shadow.Raised) - self.middleDivisionLine = QFrame(self.mainFrame) - self.middleDivisionLine.setObjectName(u"middleDivisionLine") - self.middleDivisionLine.setGeometry(QRect(375, 0, 2, 415)) - self.middleDivisionLine.setFrameShape(QFrame.Shape.VLine) - self.middleDivisionLine.setFrameShadow(QFrame.Shadow.Sunken) - self.verticalLayout_1 = QWidget(self.mainFrame) - self.verticalLayout_1.setObjectName(u"verticalLayout_1") - self.verticalLayout_1.setGeometry(QRect(12, 12, 351, 351)) - self.rightSectionBox = QVBoxLayout(self.verticalLayout_1) - self.rightSectionBox.setObjectName(u"rightSectionBox") - self.rightSectionBox.setContentsMargins(0, 0, 0, 0) - self.rightInnerBox_4 = QHBoxLayout() - self.rightInnerBox_4.setSpacing(10) - self.rightInnerBox_4.setObjectName(u"rightInnerBox_4") - self.rightKeySwitchIndicator = QLabel(self.verticalLayout_1) - self.rightKeySwitchIndicator.setObjectName(u"rightKeySwitchIndicator") - sizePolicy = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.rightKeySwitchIndicator.sizePolicy().hasHeightForWidth()) - self.rightKeySwitchIndicator.setSizePolicy(sizePolicy) - self.rightKeySwitchIndicator.setMinimumSize(QSize(0, 55)) - self.rightKeySwitchIndicator.setAutoFillBackground(False) - self.rightKeySwitchIndicator.setFrameShape(QFrame.Shape.Box) - self.rightKeySwitchIndicator.setFrameShadow(QFrame.Shadow.Plain) - self.rightKeySwitchIndicator.setLineWidth(1) - self.rightKeySwitchIndicator.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.rightInnerBox_4.addWidget(self.rightKeySwitchIndicator) - - self.rightSwitchIndicator_4 = QLabel(self.verticalLayout_1) - self.rightSwitchIndicator_4.setObjectName(u"rightSwitchIndicator_4") - sizePolicy.setHeightForWidth(self.rightSwitchIndicator_4.sizePolicy().hasHeightForWidth()) - self.rightSwitchIndicator_4.setSizePolicy(sizePolicy) - self.rightSwitchIndicator_4.setMinimumSize(QSize(0, 55)) - self.rightSwitchIndicator_4.setAutoFillBackground(False) - self.rightSwitchIndicator_4.setFrameShape(QFrame.Shape.Box) - self.rightSwitchIndicator_4.setFrameShadow(QFrame.Shadow.Plain) - self.rightSwitchIndicator_4.setLineWidth(1) - self.rightSwitchIndicator_4.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.rightInnerBox_4.addWidget(self.rightSwitchIndicator_4) - - - self.rightSectionBox.addLayout(self.rightInnerBox_4) - - self.rightInnerBox_3 = QHBoxLayout() - self.rightInnerBox_3.setSpacing(32) - self.rightInnerBox_3.setObjectName(u"rightInnerBox_3") - self.rightButtonIndicator_4 = QLabel(self.verticalLayout_1) - self.rightButtonIndicator_4.setObjectName(u"rightButtonIndicator_4") - sizePolicy.setHeightForWidth(self.rightButtonIndicator_4.sizePolicy().hasHeightForWidth()) - self.rightButtonIndicator_4.setSizePolicy(sizePolicy) - self.rightButtonIndicator_4.setMinimumSize(QSize(0, 55)) - self.rightButtonIndicator_4.setAutoFillBackground(False) - self.rightButtonIndicator_4.setFrameShape(QFrame.Shape.Box) - self.rightButtonIndicator_4.setFrameShadow(QFrame.Shadow.Plain) - self.rightButtonIndicator_4.setLineWidth(1) - self.rightButtonIndicator_4.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.rightInnerBox_3.addWidget(self.rightButtonIndicator_4) - - self.rightButtonIndicator_5 = QLabel(self.verticalLayout_1) - self.rightButtonIndicator_5.setObjectName(u"rightButtonIndicator_5") - sizePolicy.setHeightForWidth(self.rightButtonIndicator_5.sizePolicy().hasHeightForWidth()) - self.rightButtonIndicator_5.setSizePolicy(sizePolicy) - self.rightButtonIndicator_5.setMinimumSize(QSize(0, 55)) - self.rightButtonIndicator_5.setAutoFillBackground(False) - self.rightButtonIndicator_5.setFrameShape(QFrame.Shape.Box) - self.rightButtonIndicator_5.setFrameShadow(QFrame.Shadow.Plain) - self.rightButtonIndicator_5.setLineWidth(1) - self.rightButtonIndicator_5.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.rightInnerBox_3.addWidget(self.rightButtonIndicator_5) - - - self.rightSectionBox.addLayout(self.rightInnerBox_3) - - self.rightInnerBox_2 = QHBoxLayout() - self.rightInnerBox_2.setObjectName(u"rightInnerBox_2") - self.rightSwitchIndicator_1 = QLabel(self.verticalLayout_1) - self.rightSwitchIndicator_1.setObjectName(u"rightSwitchIndicator_1") - sizePolicy.setHeightForWidth(self.rightSwitchIndicator_1.sizePolicy().hasHeightForWidth()) - self.rightSwitchIndicator_1.setSizePolicy(sizePolicy) - self.rightSwitchIndicator_1.setMinimumSize(QSize(0, 55)) - self.rightSwitchIndicator_1.setAutoFillBackground(False) - self.rightSwitchIndicator_1.setFrameShape(QFrame.Shape.Box) - self.rightSwitchIndicator_1.setFrameShadow(QFrame.Shadow.Plain) - self.rightSwitchIndicator_1.setLineWidth(1) - self.rightSwitchIndicator_1.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.rightInnerBox_2.addWidget(self.rightSwitchIndicator_1) - - self.rightSwitchIndicator_2 = QLabel(self.verticalLayout_1) - self.rightSwitchIndicator_2.setObjectName(u"rightSwitchIndicator_2") - sizePolicy.setHeightForWidth(self.rightSwitchIndicator_2.sizePolicy().hasHeightForWidth()) - self.rightSwitchIndicator_2.setSizePolicy(sizePolicy) - self.rightSwitchIndicator_2.setMinimumSize(QSize(0, 55)) - self.rightSwitchIndicator_2.setAutoFillBackground(False) - self.rightSwitchIndicator_2.setFrameShape(QFrame.Shape.Box) - self.rightSwitchIndicator_2.setFrameShadow(QFrame.Shadow.Plain) - self.rightSwitchIndicator_2.setLineWidth(1) - self.rightSwitchIndicator_2.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.rightInnerBox_2.addWidget(self.rightSwitchIndicator_2) - - self.rightSwitchIndicator_3 = QLabel(self.verticalLayout_1) - self.rightSwitchIndicator_3.setObjectName(u"rightSwitchIndicator_3") - sizePolicy.setHeightForWidth(self.rightSwitchIndicator_3.sizePolicy().hasHeightForWidth()) - self.rightSwitchIndicator_3.setSizePolicy(sizePolicy) - self.rightSwitchIndicator_3.setMinimumSize(QSize(0, 55)) - self.rightSwitchIndicator_3.setAutoFillBackground(False) - self.rightSwitchIndicator_3.setFrameShape(QFrame.Shape.Box) - self.rightSwitchIndicator_3.setFrameShadow(QFrame.Shadow.Plain) - self.rightSwitchIndicator_3.setLineWidth(1) - self.rightSwitchIndicator_3.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.rightInnerBox_2.addWidget(self.rightSwitchIndicator_3) - - - self.rightSectionBox.addLayout(self.rightInnerBox_2) - - self.verticalSpacer_1 = QSpacerItem(20, 70, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) - - self.rightSectionBox.addItem(self.verticalSpacer_1) - - self.rightButtonIndicator_3 = QLabel(self.verticalLayout_1) - self.rightButtonIndicator_3.setObjectName(u"rightButtonIndicator_3") - sizePolicy.setHeightForWidth(self.rightButtonIndicator_3.sizePolicy().hasHeightForWidth()) - self.rightButtonIndicator_3.setSizePolicy(sizePolicy) - self.rightButtonIndicator_3.setMinimumSize(QSize(0, 55)) - self.rightButtonIndicator_3.setAutoFillBackground(False) - self.rightButtonIndicator_3.setFrameShape(QFrame.Shape.Box) - self.rightButtonIndicator_3.setFrameShadow(QFrame.Shadow.Plain) - self.rightButtonIndicator_3.setLineWidth(1) - self.rightButtonIndicator_3.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.rightSectionBox.addWidget(self.rightButtonIndicator_3) - - self.rightInnerBox_1 = QHBoxLayout() - self.rightInnerBox_1.setSpacing(8) - self.rightInnerBox_1.setObjectName(u"rightInnerBox_1") - self.encoderBox = QVBoxLayout() - self.encoderBox.setObjectName(u"encoderBox") - self.encoderLabel = QLabel(self.verticalLayout_1) - self.encoderLabel.setObjectName(u"encoderLabel") - self.encoderLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.encoderBox.addWidget(self.encoderLabel) - - self.encoderValue = QLineEdit(self.verticalLayout_1) - self.encoderValue.setObjectName(u"encoderValue") - sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) - sizePolicy1.setHorizontalStretch(0) - sizePolicy1.setVerticalStretch(0) - sizePolicy1.setHeightForWidth(self.encoderValue.sizePolicy().hasHeightForWidth()) - self.encoderValue.setSizePolicy(sizePolicy1) - font = QFont() - font.setPointSize(12) - self.encoderValue.setFont(font) - self.encoderValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.encoderValue.setFrame(True) - self.encoderValue.setDragEnabled(True) - self.encoderValue.setReadOnly(True) - - self.encoderBox.addWidget(self.encoderValue) - - - self.rightInnerBox_1.addLayout(self.encoderBox) - - self.horizontalSpacer_1 = QSpacerItem(40, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.rightInnerBox_1.addItem(self.horizontalSpacer_1) - - self.rightButtonIndicator_1 = QLabel(self.verticalLayout_1) - self.rightButtonIndicator_1.setObjectName(u"rightButtonIndicator_1") - sizePolicy.setHeightForWidth(self.rightButtonIndicator_1.sizePolicy().hasHeightForWidth()) - self.rightButtonIndicator_1.setSizePolicy(sizePolicy) - self.rightButtonIndicator_1.setMinimumSize(QSize(0, 55)) - self.rightButtonIndicator_1.setAutoFillBackground(False) - self.rightButtonIndicator_1.setFrameShape(QFrame.Shape.Box) - self.rightButtonIndicator_1.setFrameShadow(QFrame.Shadow.Plain) - self.rightButtonIndicator_1.setLineWidth(1) - self.rightButtonIndicator_1.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.rightInnerBox_1.addWidget(self.rightButtonIndicator_1) - - self.rightButtonIndicator_2 = QLabel(self.verticalLayout_1) - self.rightButtonIndicator_2.setObjectName(u"rightButtonIndicator_2") - sizePolicy.setHeightForWidth(self.rightButtonIndicator_2.sizePolicy().hasHeightForWidth()) - self.rightButtonIndicator_2.setSizePolicy(sizePolicy) - self.rightButtonIndicator_2.setMinimumSize(QSize(0, 55)) - self.rightButtonIndicator_2.setAutoFillBackground(False) - self.rightButtonIndicator_2.setFrameShape(QFrame.Shape.Box) - self.rightButtonIndicator_2.setFrameShadow(QFrame.Shadow.Plain) - self.rightButtonIndicator_2.setLineWidth(1) - self.rightButtonIndicator_2.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.rightInnerBox_1.addWidget(self.rightButtonIndicator_2) - - - self.rightSectionBox.addLayout(self.rightInnerBox_1) - - self.verticalLayout_2 = QWidget(self.mainFrame) - self.verticalLayout_2.setObjectName(u"verticalLayout_2") - self.verticalLayout_2.setGeometry(QRect(388, 12, 351, 351)) - self.leftSectionBox = QVBoxLayout(self.verticalLayout_2) - self.leftSectionBox.setObjectName(u"leftSectionBox") - self.leftSectionBox.setContentsMargins(0, 0, 0, 0) - self.leftInnerBox_2 = QHBoxLayout() - self.leftInnerBox_2.setSpacing(8) - self.leftInnerBox_2.setObjectName(u"leftInnerBox_2") - self.eStopIndicator = QLabel(self.verticalLayout_2) - self.eStopIndicator.setObjectName(u"eStopIndicator") - sizePolicy.setHeightForWidth(self.eStopIndicator.sizePolicy().hasHeightForWidth()) - self.eStopIndicator.setSizePolicy(sizePolicy) - self.eStopIndicator.setMinimumSize(QSize(0, 55)) - self.eStopIndicator.setAutoFillBackground(False) - self.eStopIndicator.setFrameShape(QFrame.Shape.Box) - self.eStopIndicator.setFrameShadow(QFrame.Shadow.Plain) - self.eStopIndicator.setLineWidth(1) - self.eStopIndicator.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.leftInnerBox_2.addWidget(self.eStopIndicator) - - self.leftSwitchIndicator = QLabel(self.verticalLayout_2) - self.leftSwitchIndicator.setObjectName(u"leftSwitchIndicator") - sizePolicy.setHeightForWidth(self.leftSwitchIndicator.sizePolicy().hasHeightForWidth()) - self.leftSwitchIndicator.setSizePolicy(sizePolicy) - self.leftSwitchIndicator.setMinimumSize(QSize(0, 55)) - self.leftSwitchIndicator.setAutoFillBackground(False) - self.leftSwitchIndicator.setFrameShape(QFrame.Shape.Box) - self.leftSwitchIndicator.setFrameShadow(QFrame.Shadow.Plain) - self.leftSwitchIndicator.setLineWidth(1) - self.leftSwitchIndicator.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.leftInnerBox_2.addWidget(self.leftSwitchIndicator) - - - self.leftSectionBox.addLayout(self.leftInnerBox_2) - - self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) - - self.leftSectionBox.addItem(self.verticalSpacer_2) - - self.leftInnerBox_1 = QHBoxLayout() - self.leftInnerBox_1.setSpacing(8) - self.leftInnerBox_1.setObjectName(u"leftInnerBox_1") - self.potentiometerBox = QVBoxLayout() - self.potentiometerBox.setObjectName(u"potentiometerBox") - self.potentiometerLabel = QLabel(self.verticalLayout_2) - self.potentiometerLabel.setObjectName(u"potentiometerLabel") - self.potentiometerLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.potentiometerBox.addWidget(self.potentiometerLabel) - - self.potentiometerValue = QLineEdit(self.verticalLayout_2) - self.potentiometerValue.setObjectName(u"potentiometerValue") - sizePolicy1.setHeightForWidth(self.potentiometerValue.sizePolicy().hasHeightForWidth()) - self.potentiometerValue.setSizePolicy(sizePolicy1) - self.potentiometerValue.setFont(font) - self.potentiometerValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) - self.potentiometerValue.setFrame(True) - self.potentiometerValue.setDragEnabled(True) - self.potentiometerValue.setReadOnly(True) - - self.potentiometerBox.addWidget(self.potentiometerValue) - - - self.leftInnerBox_1.addLayout(self.potentiometerBox) - - self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) - - self.leftInnerBox_1.addItem(self.horizontalSpacer_2) - - self.leftButtonIndicator = QLabel(self.verticalLayout_2) - self.leftButtonIndicator.setObjectName(u"leftButtonIndicator") - sizePolicy.setHeightForWidth(self.leftButtonIndicator.sizePolicy().hasHeightForWidth()) - self.leftButtonIndicator.setSizePolicy(sizePolicy) - self.leftButtonIndicator.setMinimumSize(QSize(0, 55)) - self.leftButtonIndicator.setAutoFillBackground(False) - self.leftButtonIndicator.setFrameShape(QFrame.Shape.Box) - self.leftButtonIndicator.setFrameShadow(QFrame.Shadow.Plain) - self.leftButtonIndicator.setLineWidth(1) - self.leftButtonIndicator.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.leftInnerBox_1.addWidget(self.leftButtonIndicator) - - - self.leftSectionBox.addLayout(self.leftInnerBox_1) - - self.testLedsButton = QPushButton(Dialog) - self.testLedsButton.setObjectName(u"testLedsButton") - self.testLedsButton.setGeometry(QRect(25, 410, 130, 30)) - - self.retranslateUi(Dialog) - self.buttonBox.accepted.connect(Dialog.accept) - - QMetaObject.connectSlotsByName(Dialog) - # setupUi - - def retranslateUi(self, Dialog): - Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Test Buttons & Switches", None)) - self.rightKeySwitchIndicator.setText(QCoreApplication.translate("Dialog", u"Key Switch", None)) - self.rightSwitchIndicator_4.setText(QCoreApplication.translate("Dialog", u"Switch", None)) - self.rightButtonIndicator_4.setText(QCoreApplication.translate("Dialog", u"Button", None)) - self.rightButtonIndicator_5.setText(QCoreApplication.translate("Dialog", u"Button", None)) - self.rightSwitchIndicator_1.setText(QCoreApplication.translate("Dialog", u"Switch", None)) - self.rightSwitchIndicator_2.setText(QCoreApplication.translate("Dialog", u"Switch", None)) - self.rightSwitchIndicator_3.setText(QCoreApplication.translate("Dialog", u"Switch", None)) - self.rightButtonIndicator_3.setText(QCoreApplication.translate("Dialog", u"Button", None)) - self.encoderLabel.setText(QCoreApplication.translate("Dialog", u"Encoder", None)) - self.encoderValue.setText(QCoreApplication.translate("Dialog", u"0", None)) - self.rightButtonIndicator_1.setText(QCoreApplication.translate("Dialog", u"Button", None)) - self.rightButtonIndicator_2.setText(QCoreApplication.translate("Dialog", u"Button", None)) - self.eStopIndicator.setText(QCoreApplication.translate("Dialog", u"E-Stop", None)) - self.leftSwitchIndicator.setText(QCoreApplication.translate("Dialog", u"Switch", None)) - self.potentiometerLabel.setText(QCoreApplication.translate("Dialog", u"Potentiometer", None)) - self.potentiometerValue.setText(QCoreApplication.translate("Dialog", u"0", None)) - self.leftButtonIndicator.setText(QCoreApplication.translate("Dialog", u"Button", None)) - self.testLedsButton.setText(QCoreApplication.translate("Dialog", u"Test LEDs", None)) - # retranslateUi - +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'test_remote_buttons_dialog.ui' +## +## Created by: Qt User Interface Compiler version 6.7.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, + QFrame, QHBoxLayout, QLabel, QLineEdit, + QPushButton, QSizePolicy, QSpacerItem, QVBoxLayout, + QWidget) + +class Ui_Dialog(object): + def setupUi(self, Dialog): + if not Dialog.objectName(): + Dialog.setObjectName(u"Dialog") + Dialog.resize(800, 458) + self.buttonBox = QDialogButtonBox(Dialog) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setGeometry(QRect(434, 412, 341, 32)) + self.buttonBox.setOrientation(Qt.Orientation.Horizontal) + self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Ok) + self.mainFrame = QFrame(Dialog) + self.mainFrame.setObjectName(u"mainFrame") + self.mainFrame.setGeometry(QRect(25, 25, 750, 375)) + self.mainFrame.setFrameShape(QFrame.Shape.StyledPanel) + self.mainFrame.setFrameShadow(QFrame.Shadow.Raised) + self.middleDivisionLine = QFrame(self.mainFrame) + self.middleDivisionLine.setObjectName(u"middleDivisionLine") + self.middleDivisionLine.setGeometry(QRect(375, 0, 2, 415)) + self.middleDivisionLine.setFrameShape(QFrame.Shape.VLine) + self.middleDivisionLine.setFrameShadow(QFrame.Shadow.Sunken) + self.verticalLayout_1 = QWidget(self.mainFrame) + self.verticalLayout_1.setObjectName(u"verticalLayout_1") + self.verticalLayout_1.setGeometry(QRect(12, 12, 351, 351)) + self.rightSectionBox = QVBoxLayout(self.verticalLayout_1) + self.rightSectionBox.setObjectName(u"rightSectionBox") + self.rightSectionBox.setContentsMargins(0, 0, 0, 0) + self.rightInnerBox_4 = QHBoxLayout() + self.rightInnerBox_4.setSpacing(10) + self.rightInnerBox_4.setObjectName(u"rightInnerBox_4") + self.rightKeySwitchIndicator = QLabel(self.verticalLayout_1) + self.rightKeySwitchIndicator.setObjectName(u"rightKeySwitchIndicator") + sizePolicy = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.rightKeySwitchIndicator.sizePolicy().hasHeightForWidth()) + self.rightKeySwitchIndicator.setSizePolicy(sizePolicy) + self.rightKeySwitchIndicator.setMinimumSize(QSize(0, 55)) + self.rightKeySwitchIndicator.setAutoFillBackground(False) + self.rightKeySwitchIndicator.setFrameShape(QFrame.Shape.Box) + self.rightKeySwitchIndicator.setFrameShadow(QFrame.Shadow.Plain) + self.rightKeySwitchIndicator.setLineWidth(1) + self.rightKeySwitchIndicator.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.rightInnerBox_4.addWidget(self.rightKeySwitchIndicator) + + self.rightSwitchIndicator_4 = QLabel(self.verticalLayout_1) + self.rightSwitchIndicator_4.setObjectName(u"rightSwitchIndicator_4") + sizePolicy.setHeightForWidth(self.rightSwitchIndicator_4.sizePolicy().hasHeightForWidth()) + self.rightSwitchIndicator_4.setSizePolicy(sizePolicy) + self.rightSwitchIndicator_4.setMinimumSize(QSize(0, 55)) + self.rightSwitchIndicator_4.setAutoFillBackground(False) + self.rightSwitchIndicator_4.setFrameShape(QFrame.Shape.Box) + self.rightSwitchIndicator_4.setFrameShadow(QFrame.Shadow.Plain) + self.rightSwitchIndicator_4.setLineWidth(1) + self.rightSwitchIndicator_4.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.rightInnerBox_4.addWidget(self.rightSwitchIndicator_4) + + + self.rightSectionBox.addLayout(self.rightInnerBox_4) + + self.rightInnerBox_3 = QHBoxLayout() + self.rightInnerBox_3.setSpacing(32) + self.rightInnerBox_3.setObjectName(u"rightInnerBox_3") + self.rightButtonIndicator_4 = QLabel(self.verticalLayout_1) + self.rightButtonIndicator_4.setObjectName(u"rightButtonIndicator_4") + sizePolicy.setHeightForWidth(self.rightButtonIndicator_4.sizePolicy().hasHeightForWidth()) + self.rightButtonIndicator_4.setSizePolicy(sizePolicy) + self.rightButtonIndicator_4.setMinimumSize(QSize(0, 55)) + self.rightButtonIndicator_4.setAutoFillBackground(False) + self.rightButtonIndicator_4.setFrameShape(QFrame.Shape.Box) + self.rightButtonIndicator_4.setFrameShadow(QFrame.Shadow.Plain) + self.rightButtonIndicator_4.setLineWidth(1) + self.rightButtonIndicator_4.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.rightInnerBox_3.addWidget(self.rightButtonIndicator_4) + + self.rightButtonIndicator_5 = QLabel(self.verticalLayout_1) + self.rightButtonIndicator_5.setObjectName(u"rightButtonIndicator_5") + sizePolicy.setHeightForWidth(self.rightButtonIndicator_5.sizePolicy().hasHeightForWidth()) + self.rightButtonIndicator_5.setSizePolicy(sizePolicy) + self.rightButtonIndicator_5.setMinimumSize(QSize(0, 55)) + self.rightButtonIndicator_5.setAutoFillBackground(False) + self.rightButtonIndicator_5.setFrameShape(QFrame.Shape.Box) + self.rightButtonIndicator_5.setFrameShadow(QFrame.Shadow.Plain) + self.rightButtonIndicator_5.setLineWidth(1) + self.rightButtonIndicator_5.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.rightInnerBox_3.addWidget(self.rightButtonIndicator_5) + + + self.rightSectionBox.addLayout(self.rightInnerBox_3) + + self.rightInnerBox_2 = QHBoxLayout() + self.rightInnerBox_2.setObjectName(u"rightInnerBox_2") + self.rightSwitchIndicator_1 = QLabel(self.verticalLayout_1) + self.rightSwitchIndicator_1.setObjectName(u"rightSwitchIndicator_1") + sizePolicy.setHeightForWidth(self.rightSwitchIndicator_1.sizePolicy().hasHeightForWidth()) + self.rightSwitchIndicator_1.setSizePolicy(sizePolicy) + self.rightSwitchIndicator_1.setMinimumSize(QSize(0, 55)) + self.rightSwitchIndicator_1.setAutoFillBackground(False) + self.rightSwitchIndicator_1.setFrameShape(QFrame.Shape.Box) + self.rightSwitchIndicator_1.setFrameShadow(QFrame.Shadow.Plain) + self.rightSwitchIndicator_1.setLineWidth(1) + self.rightSwitchIndicator_1.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.rightInnerBox_2.addWidget(self.rightSwitchIndicator_1) + + self.rightSwitchIndicator_2 = QLabel(self.verticalLayout_1) + self.rightSwitchIndicator_2.setObjectName(u"rightSwitchIndicator_2") + sizePolicy.setHeightForWidth(self.rightSwitchIndicator_2.sizePolicy().hasHeightForWidth()) + self.rightSwitchIndicator_2.setSizePolicy(sizePolicy) + self.rightSwitchIndicator_2.setMinimumSize(QSize(0, 55)) + self.rightSwitchIndicator_2.setAutoFillBackground(False) + self.rightSwitchIndicator_2.setFrameShape(QFrame.Shape.Box) + self.rightSwitchIndicator_2.setFrameShadow(QFrame.Shadow.Plain) + self.rightSwitchIndicator_2.setLineWidth(1) + self.rightSwitchIndicator_2.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.rightInnerBox_2.addWidget(self.rightSwitchIndicator_2) + + self.rightSwitchIndicator_3 = QLabel(self.verticalLayout_1) + self.rightSwitchIndicator_3.setObjectName(u"rightSwitchIndicator_3") + sizePolicy.setHeightForWidth(self.rightSwitchIndicator_3.sizePolicy().hasHeightForWidth()) + self.rightSwitchIndicator_3.setSizePolicy(sizePolicy) + self.rightSwitchIndicator_3.setMinimumSize(QSize(0, 55)) + self.rightSwitchIndicator_3.setAutoFillBackground(False) + self.rightSwitchIndicator_3.setFrameShape(QFrame.Shape.Box) + self.rightSwitchIndicator_3.setFrameShadow(QFrame.Shadow.Plain) + self.rightSwitchIndicator_3.setLineWidth(1) + self.rightSwitchIndicator_3.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.rightInnerBox_2.addWidget(self.rightSwitchIndicator_3) + + + self.rightSectionBox.addLayout(self.rightInnerBox_2) + + self.verticalSpacer_1 = QSpacerItem(20, 70, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self.rightSectionBox.addItem(self.verticalSpacer_1) + + self.rightButtonIndicator_3 = QLabel(self.verticalLayout_1) + self.rightButtonIndicator_3.setObjectName(u"rightButtonIndicator_3") + sizePolicy.setHeightForWidth(self.rightButtonIndicator_3.sizePolicy().hasHeightForWidth()) + self.rightButtonIndicator_3.setSizePolicy(sizePolicy) + self.rightButtonIndicator_3.setMinimumSize(QSize(0, 55)) + self.rightButtonIndicator_3.setAutoFillBackground(False) + self.rightButtonIndicator_3.setFrameShape(QFrame.Shape.Box) + self.rightButtonIndicator_3.setFrameShadow(QFrame.Shadow.Plain) + self.rightButtonIndicator_3.setLineWidth(1) + self.rightButtonIndicator_3.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.rightSectionBox.addWidget(self.rightButtonIndicator_3) + + self.rightInnerBox_1 = QHBoxLayout() + self.rightInnerBox_1.setSpacing(8) + self.rightInnerBox_1.setObjectName(u"rightInnerBox_1") + self.encoderBox = QVBoxLayout() + self.encoderBox.setObjectName(u"encoderBox") + self.encoderLabel = QLabel(self.verticalLayout_1) + self.encoderLabel.setObjectName(u"encoderLabel") + self.encoderLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.encoderBox.addWidget(self.encoderLabel) + + self.encoderValue = QLineEdit(self.verticalLayout_1) + self.encoderValue.setObjectName(u"encoderValue") + sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) + sizePolicy1.setHorizontalStretch(0) + sizePolicy1.setVerticalStretch(0) + sizePolicy1.setHeightForWidth(self.encoderValue.sizePolicy().hasHeightForWidth()) + self.encoderValue.setSizePolicy(sizePolicy1) + font = QFont() + font.setPointSize(12) + self.encoderValue.setFont(font) + self.encoderValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.encoderValue.setFrame(True) + self.encoderValue.setDragEnabled(True) + self.encoderValue.setReadOnly(True) + + self.encoderBox.addWidget(self.encoderValue) + + + self.rightInnerBox_1.addLayout(self.encoderBox) + + self.horizontalSpacer_1 = QSpacerItem(40, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.rightInnerBox_1.addItem(self.horizontalSpacer_1) + + self.rightButtonIndicator_1 = QLabel(self.verticalLayout_1) + self.rightButtonIndicator_1.setObjectName(u"rightButtonIndicator_1") + sizePolicy.setHeightForWidth(self.rightButtonIndicator_1.sizePolicy().hasHeightForWidth()) + self.rightButtonIndicator_1.setSizePolicy(sizePolicy) + self.rightButtonIndicator_1.setMinimumSize(QSize(0, 55)) + self.rightButtonIndicator_1.setAutoFillBackground(False) + self.rightButtonIndicator_1.setFrameShape(QFrame.Shape.Box) + self.rightButtonIndicator_1.setFrameShadow(QFrame.Shadow.Plain) + self.rightButtonIndicator_1.setLineWidth(1) + self.rightButtonIndicator_1.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.rightInnerBox_1.addWidget(self.rightButtonIndicator_1) + + self.rightButtonIndicator_2 = QLabel(self.verticalLayout_1) + self.rightButtonIndicator_2.setObjectName(u"rightButtonIndicator_2") + sizePolicy.setHeightForWidth(self.rightButtonIndicator_2.sizePolicy().hasHeightForWidth()) + self.rightButtonIndicator_2.setSizePolicy(sizePolicy) + self.rightButtonIndicator_2.setMinimumSize(QSize(0, 55)) + self.rightButtonIndicator_2.setAutoFillBackground(False) + self.rightButtonIndicator_2.setFrameShape(QFrame.Shape.Box) + self.rightButtonIndicator_2.setFrameShadow(QFrame.Shadow.Plain) + self.rightButtonIndicator_2.setLineWidth(1) + self.rightButtonIndicator_2.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.rightInnerBox_1.addWidget(self.rightButtonIndicator_2) + + + self.rightSectionBox.addLayout(self.rightInnerBox_1) + + self.verticalLayout_2 = QWidget(self.mainFrame) + self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.verticalLayout_2.setGeometry(QRect(388, 12, 351, 351)) + self.leftSectionBox = QVBoxLayout(self.verticalLayout_2) + self.leftSectionBox.setObjectName(u"leftSectionBox") + self.leftSectionBox.setContentsMargins(0, 0, 0, 0) + self.leftInnerBox_2 = QHBoxLayout() + self.leftInnerBox_2.setSpacing(8) + self.leftInnerBox_2.setObjectName(u"leftInnerBox_2") + self.eStopIndicator = QLabel(self.verticalLayout_2) + self.eStopIndicator.setObjectName(u"eStopIndicator") + sizePolicy.setHeightForWidth(self.eStopIndicator.sizePolicy().hasHeightForWidth()) + self.eStopIndicator.setSizePolicy(sizePolicy) + self.eStopIndicator.setMinimumSize(QSize(0, 55)) + self.eStopIndicator.setAutoFillBackground(False) + self.eStopIndicator.setFrameShape(QFrame.Shape.Box) + self.eStopIndicator.setFrameShadow(QFrame.Shadow.Plain) + self.eStopIndicator.setLineWidth(1) + self.eStopIndicator.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.leftInnerBox_2.addWidget(self.eStopIndicator) + + self.leftSwitchIndicator = QLabel(self.verticalLayout_2) + self.leftSwitchIndicator.setObjectName(u"leftSwitchIndicator") + sizePolicy.setHeightForWidth(self.leftSwitchIndicator.sizePolicy().hasHeightForWidth()) + self.leftSwitchIndicator.setSizePolicy(sizePolicy) + self.leftSwitchIndicator.setMinimumSize(QSize(0, 55)) + self.leftSwitchIndicator.setAutoFillBackground(False) + self.leftSwitchIndicator.setFrameShape(QFrame.Shape.Box) + self.leftSwitchIndicator.setFrameShadow(QFrame.Shadow.Plain) + self.leftSwitchIndicator.setLineWidth(1) + self.leftSwitchIndicator.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.leftInnerBox_2.addWidget(self.leftSwitchIndicator) + + + self.leftSectionBox.addLayout(self.leftInnerBox_2) + + self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self.leftSectionBox.addItem(self.verticalSpacer_2) + + self.leftInnerBox_1 = QHBoxLayout() + self.leftInnerBox_1.setSpacing(8) + self.leftInnerBox_1.setObjectName(u"leftInnerBox_1") + self.potentiometerBox = QVBoxLayout() + self.potentiometerBox.setObjectName(u"potentiometerBox") + self.potentiometerLabel = QLabel(self.verticalLayout_2) + self.potentiometerLabel.setObjectName(u"potentiometerLabel") + self.potentiometerLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.potentiometerBox.addWidget(self.potentiometerLabel) + + self.potentiometerValue = QLineEdit(self.verticalLayout_2) + self.potentiometerValue.setObjectName(u"potentiometerValue") + sizePolicy1.setHeightForWidth(self.potentiometerValue.sizePolicy().hasHeightForWidth()) + self.potentiometerValue.setSizePolicy(sizePolicy1) + self.potentiometerValue.setFont(font) + self.potentiometerValue.setFocusPolicy(Qt.FocusPolicy.NoFocus) + self.potentiometerValue.setFrame(True) + self.potentiometerValue.setDragEnabled(True) + self.potentiometerValue.setReadOnly(True) + + self.potentiometerBox.addWidget(self.potentiometerValue) + + + self.leftInnerBox_1.addLayout(self.potentiometerBox) + + self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.leftInnerBox_1.addItem(self.horizontalSpacer_2) + + self.leftButtonIndicator = QLabel(self.verticalLayout_2) + self.leftButtonIndicator.setObjectName(u"leftButtonIndicator") + sizePolicy.setHeightForWidth(self.leftButtonIndicator.sizePolicy().hasHeightForWidth()) + self.leftButtonIndicator.setSizePolicy(sizePolicy) + self.leftButtonIndicator.setMinimumSize(QSize(0, 55)) + self.leftButtonIndicator.setAutoFillBackground(False) + self.leftButtonIndicator.setFrameShape(QFrame.Shape.Box) + self.leftButtonIndicator.setFrameShadow(QFrame.Shadow.Plain) + self.leftButtonIndicator.setLineWidth(1) + self.leftButtonIndicator.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.leftInnerBox_1.addWidget(self.leftButtonIndicator) + + + self.leftSectionBox.addLayout(self.leftInnerBox_1) + + self.testLedsButton = QPushButton(Dialog) + self.testLedsButton.setObjectName(u"testLedsButton") + self.testLedsButton.setGeometry(QRect(25, 410, 130, 30)) + + self.retranslateUi(Dialog) + self.buttonBox.accepted.connect(Dialog.accept) + + QMetaObject.connectSlotsByName(Dialog) + # setupUi + + def retranslateUi(self, Dialog): + Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Test Buttons & Switches", None)) + self.rightKeySwitchIndicator.setText(QCoreApplication.translate("Dialog", u"Key Switch", None)) + self.rightSwitchIndicator_4.setText(QCoreApplication.translate("Dialog", u"Switch", None)) + self.rightButtonIndicator_4.setText(QCoreApplication.translate("Dialog", u"Button", None)) + self.rightButtonIndicator_5.setText(QCoreApplication.translate("Dialog", u"Button", None)) + self.rightSwitchIndicator_1.setText(QCoreApplication.translate("Dialog", u"Switch", None)) + self.rightSwitchIndicator_2.setText(QCoreApplication.translate("Dialog", u"Switch", None)) + self.rightSwitchIndicator_3.setText(QCoreApplication.translate("Dialog", u"Switch", None)) + self.rightButtonIndicator_3.setText(QCoreApplication.translate("Dialog", u"Button", None)) + self.encoderLabel.setText(QCoreApplication.translate("Dialog", u"Encoder", None)) + self.encoderValue.setText(QCoreApplication.translate("Dialog", u"0", None)) + self.rightButtonIndicator_1.setText(QCoreApplication.translate("Dialog", u"Button", None)) + self.rightButtonIndicator_2.setText(QCoreApplication.translate("Dialog", u"Button", None)) + self.eStopIndicator.setText(QCoreApplication.translate("Dialog", u"E-Stop", None)) + self.leftSwitchIndicator.setText(QCoreApplication.translate("Dialog", u"Switch", None)) + self.potentiometerLabel.setText(QCoreApplication.translate("Dialog", u"Potentiometer", None)) + self.potentiometerValue.setText(QCoreApplication.translate("Dialog", u"0", None)) + self.leftButtonIndicator.setText(QCoreApplication.translate("Dialog", u"Button", None)) + self.testLedsButton.setText(QCoreApplication.translate("Dialog", u"Test LEDs", None)) + # retranslateUi + diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/main.py b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/main.py index b304773..93ba072 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/main.py +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/main.py @@ -18,32 +18,60 @@ import sys import threading -from PySide6.QtCore import QProcess +from PySide6.QtCore import QProcess, QTimer from ros_remote_gui.init import qt_app -from ros_remote_gui.main_window import qt_main_window -from ros_remote_gui.ros_main import ros_executor_thread +from ros_remote_gui.main_window import get_main_window +from ros_remote_gui.ros_main import ros_executor_thread, is_ros_node_initialized, get_ros_node +from ros_remote_gui.config import ProgramConfig + + + +# ---- Page-specific UI handlers ---- +main_tab_ui_handler = None + # ---- Run the program ---- +def init_ui_handlers(): + from ros_remote_gui.modules.main_tab import MainTab + + global main_tab_ui_handler + main_tab_ui_handler = MainTab() + + def main(): # Start the ROS thread stop_ros_thread = False ros_thread = threading.Thread(target=ros_executor_thread, args=(lambda: stop_ros_thread, ), name="ros_thread") ros_thread.start() + # Create a timer for checking ROS thread liveliness + def ros_liveliness_check() -> None: + if not ros_thread.is_alive(): + if is_ros_node_initialized(): + get_ros_node().get_logger().fatal("The ROS thread has died! Terminating program.") + else: + print("The ROS thread has died! Terminating program.") + qt_app.exit(1) + + ros_liveliness_timer = QTimer() + ros_liveliness_timer.timeout.connect(ros_liveliness_check) + ros_liveliness_timer.start(ProgramConfig.THREADS_LIVELINESS_CHECK_INTERVAL_S * 1000) + # Start the application - qt_main_window.show() + init_ui_handlers() + get_main_window().show() qt_ret_code = qt_app.exec() # Shutdown stop_ros_thread = True ros_thread.join() - if qt_main_window.restart_on_quit: - QProcess.startDetached(qt_app.arguments()[0], qt_app.arguments().pop(0)) - - sys.exit(qt_ret_code) + if is_ros_node_initialized(): + get_ros_node().get_logger().info(f"Program exiting with code {qt_ret_code}") + if get_main_window().restart_on_quit: + qt_app_args = qt_app.arguments(); qt_app_args.pop(0) + QProcess.startDetached(qt_app.arguments()[0], qt_app_args) -if __name__ == "__main__": - main() + sys.exit(qt_ret_code) diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/main_window.py b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/main_window.py index 351c7ca..4f619c9 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/main_window.py +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/main_window.py @@ -50,14 +50,20 @@ def show_about_dialog(self): @QtCore.Slot() def shutdown_host_rpi(self): + from ros_remote_gui.ros_main import get_ros_node + get_ros_node().get_logger().warn("System shutdown requested!") subprocess.run(["sudo", "shutdown", "now"]) @QtCore.Slot() def reboot_host_rpi(self): + from ros_remote_gui.ros_main import get_ros_node + get_ros_node().get_logger().warn("System reboot requested!") subprocess.run(["sudo", "reboot", "now"]) @QtCore.Slot() def restart_qt_app(self): + from ros_remote_gui.ros_main import get_ros_node + get_ros_node().get_logger().warn("Application restart requested!") self.restart_on_quit = True qt_app.quit() @@ -68,3 +74,7 @@ def slider_changed(self, value): # ---- Main window instance ---- qt_main_window = MainWindow() + +def get_main_window() -> MainWindow: + global qt_main_window + return qt_main_window diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/modules/diag_tab.py b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/modules/diag_tab.py index c04ad5a..47e8216 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/modules/diag_tab.py +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/modules/diag_tab.py @@ -13,4 +13,54 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . \ No newline at end of file +# along with this program. If not, see . + +from datetime import datetime +from enum import Enum +from diagnostic_msgs.msg import DiagnosticStatus + + +# Individual message object +class DiagMsgObj: + timestamp: datetime + level: "DiagMsgObj.Level" + name: str + message: str + hardware_id: str + key_values: dict + + def from_ros_message(self, report: DiagnosticStatus) -> None: + self.timestamp = datetime.now() + self.level = DiagMsgObj.Level(int.from_bytes(report.level, "big")) + self.name = report.name + self.message = report.message + self.hardware_id = report.hardware_id + self.key_values = {} + + for pair in report.values: + self.key_values.update({pair.key: pair.value}) + + def as_dict(self) -> dict: + return self.__dict__ + + def from_dict(self, data: dict): + self.timestamp = data["timestamp"] + self.level = data["level"] + + class Level(Enum): + OK = 0 + WARN = 1 + ERROR = 2 + STALE = 3 + + +# Message display handler +class DiagMsgDisplay: + show_timestamps: bool + show_keyvals: bool + auto_scroll: bool + + def __init__(self): + self.show_timestamps = False + self.show_keyvals = False + self.auto_scroll = False \ No newline at end of file diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/modules/main_tab.py b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/modules/main_tab.py index baf0b15..f4545ec 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/modules/main_tab.py +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/modules/main_tab.py @@ -15,11 +15,41 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from ros_remote_gui.init import qt_app -from ros_remote_gui.ros_main import gui_ros_node -from ros_remote_gui.main_window import qt_main_window +from PySide6.QtCore import QTimer, Slot +from ros_remote_gui.ros_main import get_ros_node +from ros_remote_gui.main_window import get_main_window +from ros_remote_gui.config import ProgramConfig +from typing import Any class MainTab: + _batt_voltage: float + _cv_image_cam: Any + _cv_image_cam_overlay: Any + def __init__(self): - gui_ros_node.create_client() \ No newline at end of file + self._batt_voltage = 0.0 + self._cv_image_cam = None + self._cv_image_cam_overlay = None + + get_main_window().ui.camLedsBrightnessSlider.valueChanged.connect(self._cam_led_slider_change) + + # UI data update timer + self._update_ui_tmr = QTimer() + self._update_ui_tmr.timeout.connect(self._update_ui_tmr_call) + self._update_ui_tmr.start(ProgramConfig.UI_DATA_UPDATE_INTERVAL_MS) + + # Viewport update timer + self._update_viewport_tmr = QTimer() + self._update_viewport_tmr.timeout.connect(self._update_viewport_tmr_call) + self._update_viewport_tmr.start(ProgramConfig.UI_VIEWPORT_UPDATE_INTERVAL_MS) + + def _update_ui_tmr_call(self): + pass + + def _update_viewport_tmr_call(self): + pass + + @Slot() + def _cam_led_slider_change(self, value): + print(str(value)) diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/modules/power_tab.py b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/modules/power_tab.py index 5430fb9..8b71aed 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/modules/power_tab.py +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/modules/power_tab.py @@ -13,4 +13,4 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . \ No newline at end of file +# along with this program. If not, see . diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/ros_main.py b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/ros_main.py index 921056e..288be55 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/ros_main.py +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/ros_main.py @@ -15,40 +15,275 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . -import sys +import threading import rclpy +from typing import Union +from rclpy import Context +from rclpy.client import Client, SrvTypeRequest, SrvTypeResponse from rclpy.executors import ExternalShutdownException from rclpy.executors import MultiThreadedExecutor from rclpy.node import Node -from ros_remote_gui.config import RosConfig +from ros_remote_gui.config import RosConfig, RosNames, RosFrameIds, RosNames +from ros_remote_gui.main_window import get_main_window +from diagnostic_msgs.msg import DiagnosticStatus +from diagnostic_msgs.srv import SelfTest +from nav_msgs.msg import Odometry +from rclpy.callback_groups import ReentrantCallbackGroup, MutuallyExclusiveCallbackGroup +from sensor_msgs.msg import BatteryState, Imu, Temperature, RelativeHumidity, Range +from std_msgs.msg import Empty +from std_srvs.srv import SetBool +from ros_robot_msgs.srv import SetCameraLeds, GetCameraLeds, SetPidTunings, RunCalibrationsA, GetBool +from ros_robot_msgs.msg import MotorCtrlState +from ros_remote_gui.utils.gui_utils import generate_indicator_stylesheet # ---- ROS Node ---- class RosNode(Node): - def __init__(self): - super().__init__(node_name=RosConfig.NODE_NAME, namespace=RosConfig.NODE_NAMESPACE) + # Client.call() implementation with timeout. + def srv_call_with_timeout(self, client: Client, request: SrvTypeRequest, timeout_s: int) -> Union[SrvTypeResponse, None]: + event = threading.Event() + + def unblock(ftr): + event.set() + + future = client.call_async(request) + future.add_done_callback(unblock) + + if not future.done(): + if not event.wait(float(timeout_s)): + self.get_logger().error(f"Service call failure [{client.srv_name}]: timed out! Cancelling.") + future.cancel() + return None + + if future.exception() is not None: + raise future.exception() + + return future.result() + + def __init__(self, context: Context): + super().__init__(node_name=RosConfig.NODE_NAME, namespace=RosConfig.NODE_NAMESPACE, context=context) + self.get_logger().info("Creating publishers, subscribers, and services servers...") + + self._reentrant_cb_group = ReentrantCallbackGroup() + self._selftest_calib_cb_group = MutuallyExclusiveCallbackGroup() + self._emer_stop_cb_group = MutuallyExclusiveCallbackGroup() + + self.diagnostics_sub = self.create_subscription(DiagnosticStatus, RosNames.DIAGNOSTICS_TOPIC, self.diagnostics_callback, qos_profile=RosConfig.QOS_RELIABLE, callback_group=self._reentrant_cb_group) + self.enable_relay_srvcl = self.create_client(SetBool, RosNames.ENABLE_RELAY_SRV, qos_profile=RosConfig.QOS_RELIABLE) + self.battery_info_sub = self.create_subscription(BatteryState, RosNames.BATTERY_INFO_TOPIC, self.battery_info_callback, qos_profile=RosConfig.QOS_BEST_EFFORT, callback_group=self._reentrant_cb_group) + self.encoder_odom_sub = self.create_subscription(Odometry, RosNames.ENCODER_ODOM_TOPIC, self.encoder_odom_callback, qos_profile=RosConfig.QOS_RELIABLE, callback_group=self._reentrant_cb_group) + self.set_camera_leds_srvcl = self.create_client(SetCameraLeds, RosNames.SET_CAMERA_LEDS_SRV, qos_profile=RosConfig.QOS_RELIABLE) + self.get_camera_leds_srvcl = self.create_client(GetCameraLeds, RosNames.GET_CAMERA_LEDS_SRV, qos_profile=RosConfig.QOS_RELIABLE) + self.imu_sens_sub = self.create_subscription(Imu, RosNames.IMU_SENS_TOPIC, self.imu_sens_callback, qos_profile=RosConfig.QOS_RELIABLE, callback_group=self._reentrant_cb_group) + self.env_temp_sens_sub = self.create_subscription(Temperature, RosNames.ENV_TEMP_SENS_TOPIC, self.env_temp_sens_callback, qos_profile=RosConfig.QOS_BEST_EFFORT, callback_group=self._reentrant_cb_group) + self.env_humidity_sens_sub = self.create_subscription(RelativeHumidity, RosNames.ENV_HUMIDITY_SENS_TOPIC, self.env_humidity_sens_callback, qos_profile=RosConfig.QOS_BEST_EFFORT, callback_group=self._reentrant_cb_group) + self.emergency_stop_pub = self.create_publisher(Empty, RosNames.EMERGENCY_STOP_TOPIC, qos_profile=RosConfig.QOS_RELIABLE, callback_group=self._emer_stop_cb_group) + self.pico_a_cpu_temp_sub = self.create_subscription(Temperature, RosNames.PICO_A_CPU_TEMP_TOPIC, self.pico_a_cpu_temp_callback, qos_profile=RosConfig.QOS_BEST_EFFORT, callback_group=self._reentrant_cb_group) + self.pico_b_cpu_temp_sub = self.create_subscription(Temperature, RosNames.PICO_B_CPU_TEMP_TOPIC, self.pico_b_cpu_temp_callback, qos_profile=RosConfig.QOS_BEST_EFFORT, callback_group=self._reentrant_cb_group) + self.pico_a_selftest_srvcl = self.create_client(SelfTest, RosNames.PICO_A_SELFTEST_SRV, qos_profile=RosConfig.QOS_RELIABLE, callback_group=self._selftest_calib_cb_group) + self.pico_b_selftest_srvcl = self.create_client(SelfTest, RosNames.PICO_B_SELFTEST_SRV, qos_profile=RosConfig.QOS_RELIABLE, callback_group=self._selftest_calib_cb_group) + self.pico_a_calibrate_srvcl = self.create_client(RunCalibrationsA, RosNames.PICO_A_CALIBRATE_SRV, qos_profile=RosConfig.QOS_RELIABLE, callback_group=self._selftest_calib_cb_group) + self.enable_emitters_srvcl = self.create_client(SetBool, RosNames.ENABLE_EMITTERS_SRV, qos_profile=RosConfig.QOS_RELIABLE) + self.get_emitters_enabled_srvcl = self.create_client(GetBool, RosNames.GET_EMITTERS_ENABLED_SRV, qos_profile=RosConfig.QOS_RELIABLE) + self.left_mtr_ctrl_sub = self.create_subscription(MotorCtrlState, RosNames.LEFT_MTR_CTRL_TOPIC, self.left_mtr_ctrl_callback, qos_profile=RosConfig.QOS_BEST_EFFORT, callback_group=self._reentrant_cb_group) + self.right_mtr_ctrl_sub = self.create_subscription(MotorCtrlState, RosNames.RIGHT_MTR_CTRL_TOPIC, self.right_mtr_ctrl_callback, qos_profile=RosConfig.QOS_BEST_EFFORT, callback_group=self._reentrant_cb_group) + self.mtr_ctrl_enable_srvcl = self.create_client(SetBool, RosNames.MTR_CTRL_ENABLE_SRV, qos_profile=RosConfig.QOS_RELIABLE) + self.mtr_ctrl_set_pid_srvcl = self.create_client(SetPidTunings, RosNames.MTR_CTRL_SET_PID_SRV, qos_profile=RosConfig.QOS_RELIABLE) + self.micro_switch_subs = [] + self.ultrasonic_sens_subs = [] + self.cliff_sens_subs = [] + + for i in range(0, 4): + t_name = RosNames.MICRO_SWITCH_TOPIC_BASE.format(RosNames.MICRO_SWITCH_TOPIC_NAMES[i]) + self.micro_switch_subs.append(self.create_subscription(Range, t_name, self.micro_switch_callback, qos_profile=RosConfig.QOS_RELIABLE, callback_group=self._reentrant_cb_group)) + + for i in range(0, 4): + t_name = RosNames.ULTRASONIC_SENS_TOPIC_BASE.format(RosNames.ULTRASONIC_SENS_TOPIC_NAMES[i]) + self.ultrasonic_sens_subs.append(self.create_subscription(Range, t_name, self.ultrasonic_sens_callback, qos_profile=RosConfig.QOS_RELIABLE, callback_group=self._reentrant_cb_group)) + + for i in range(0, 8): + t_name = RosNames.CLIFF_SENS_TOPIC_BASE.format(RosNames.CLIFF_SENS_TOPIC_NAMES[i]) + self.cliff_sens_subs.append(self.create_subscription(Range, t_name, self.cliff_sens_callback, qos_profile=RosConfig.QOS_RELIABLE, callback_group=self._reentrant_cb_group)) + + def diagnostics_callback(self, msg: DiagnosticStatus) -> None: + pass + + @staticmethod + def battery_info_callback(msg: BatteryState) -> None: + rounded_voltage = round(msg.voltage, 2) + rounded_current = round(msg.current, 3) + + if get_main_window().ui.pages.currentWidget().objectName() == get_main_window().ui.sensorsTab.objectName(): + get_main_window().ui.batterySensCurrentValue.display(rounded_current) + get_main_window().ui.batterySensVoltageValue.display(rounded_voltage) + + if get_main_window().ui.pages.currentWidget().objectName() == get_main_window().ui.powerTab.objectName(): + get_main_window().ui.batteryVoltageValue.display(rounded_voltage) + get_main_window().ui.batteryCurrentValue.display(rounded_current) + + if get_main_window().ui.pages.currentWidget().objectName() == get_main_window().ui.mainTab.objectName(): + get_main_window().ui.teleBatteryValue.setText(str(rounded_voltage)) + + @staticmethod + def encoder_odom_callback(msg: Odometry) -> None: + if get_main_window().ui.pages.currentWidget().objectName() == get_main_window().ui.motorCtrlTab.objectName(): + get_main_window().ui.encOdomPosXValue.setText(str(round(msg.pose.pose.position.x, 3))) + get_main_window().ui.encOdomPosYValue.setText(str(round(msg.pose.pose.position.y, 3))) + get_main_window().ui.encOdomYawValue.setText(str(round(msg.pose.pose.orientation.z, 1))) + get_main_window().ui.encOdomLinVelValue.setText(str(round(msg.twist.twist.linear.x, 2))) + get_main_window().ui.encOdomAngVelValue.setText(str(round(msg.twist.twist.angular.z, 2))) + + @staticmethod + def imu_sens_callback(msg: Imu) -> None: + if get_main_window().ui.pages.currentWidget().objectName() == get_main_window().ui.sensorsTab.objectName(): + get_main_window().ui.imuSensAccelXValue.setText(str(round(msg.linear_acceleration.x, 2))) + get_main_window().ui.imuSensAccelYValue.setText(str(round(msg.linear_acceleration.y, 2))) + get_main_window().ui.imuSensAccelZValue.setText(str(round(msg.linear_acceleration.z, 2))) + get_main_window().ui.imuSensGyroXValue.setText(str(round(msg.angular_velocity.x, 2))) + get_main_window().ui.imuSensGyroYValue.setText(str(round(msg.angular_velocity.y, 2))) + get_main_window().ui.imuSensGyroZValue.setText(str(round(msg.angular_velocity.z, 2))) + get_main_window().ui.imuSensCompXValue.setText(str(round(msg.orientation.x, 1))) + get_main_window().ui.imuSensCompYValue.setText(str(round(msg.orientation.y, 1))) + get_main_window().ui.imuSensCompZValue.setText(str(round(msg.orientation.z, 1))) + + @staticmethod + def env_temp_sens_callback(msg: Temperature) -> None: + if get_main_window().ui.pages.currentWidget().objectName() == get_main_window().ui.sensorsTab.objectName(): + get_main_window().ui.envSensTempValue.setText(str(round(msg.temperature, 2))) + + @staticmethod + def env_humidity_sens_callback(msg: RelativeHumidity) -> None: + if get_main_window().ui.pages.currentWidget().objectName() == get_main_window().ui.sensorsTab.objectName(): + get_main_window().ui.envSensHumValue.setText(str(round(msg.relative_humidity, 1))) + + @staticmethod + def pico_a_cpu_temp_callback(msg: Temperature) -> None: + if get_main_window().ui.pages.currentWidget().objectName() == get_main_window().ui.sensorsTab.objectName(): + get_main_window().ui.envSensPicoATempValue.setText(str(round(msg.temperature, 2))) + + @staticmethod + def pico_b_cpu_temp_callback(msg: Temperature) -> None: + if get_main_window().ui.pages.currentWidget().objectName() == get_main_window().ui.sensorsTab.objectName(): + get_main_window().ui.envSensPicoBTempValue.setText(str(round(msg.temperature, 2))) + + @staticmethod + def left_mtr_ctrl_callback(msg: MotorCtrlState) -> None: + if get_main_window().ui.pages.currentWidget().objectName() == get_main_window().ui.motorCtrlTab.objectName(): + get_main_window().ui.mtrCtrlEnableRIndicator.setStyleSheet(generate_indicator_stylesheet(msg.controller_enabled, "green")) + get_main_window().ui.rpmMeasuredFRValue.setText(str(round(msg.measured_rpms[0], 1))) + get_main_window().ui.rpmMeasuredBRValue.setText(str(round(msg.measured_rpms[1], 1))) + get_main_window().ui.rpmTargetFRValue.setText(str(round(msg.target_rpm, 1))) + get_main_window().ui.rpmTargetBRValue.setText(str(round(msg.target_rpm, 1))) + get_main_window().ui.rightPidOutValue.setText(str(msg.pid_output)) + get_main_window().ui.rightPidPValue.setText(str(round(msg.pid_tunings[0], 2))) + get_main_window().ui.rightPidIValue.setText(str(round(msg.pid_tunings[1], 2))) + get_main_window().ui.rightPidDValue.setText(str(round(msg.pid_tunings[2], 2))) + get_main_window().ui.encPulseCtrsFRValue.setText(str(msg.total_enc_counts[0])) + get_main_window().ui.encPulseCtrsBRValue.setText(str(msg.total_enc_counts[1])) + + @staticmethod + def right_mtr_ctrl_callback(msg: MotorCtrlState) -> None: + if get_main_window().ui.pages.currentWidget().objectName() == get_main_window().ui.motorCtrlTab.objectName(): + get_main_window().ui.mtrCtrlEnableLIndicator.setStyleSheet(generate_indicator_stylesheet(msg.controller_enabled, "green")) + get_main_window().ui.rpmMeasuredFLValue.setText(str(round(msg.measured_rpms[0], 1))) + get_main_window().ui.rpmMeasuredBLValue.setText(str(round(msg.measured_rpms[1], 1))) + get_main_window().ui.rpmTargetFLValue.setText(str(round(msg.target_rpm, 1))) + get_main_window().ui.rpmTargetBLValue.setText(str(round(msg.target_rpm, 1))) + get_main_window().ui.leftPidOutValue.setText(str(msg.pid_output)) + get_main_window().ui.leftPidPValue.setText(str(round(msg.pid_tunings[0], 2))) + get_main_window().ui.leftPidIValue.setText(str(round(msg.pid_tunings[1], 2))) + get_main_window().ui.leftPidDValue.setText(str(round(msg.pid_tunings[2], 2))) + get_main_window().ui.encPulseCtrsFLValue.setText(str(msg.total_enc_counts[0])) + get_main_window().ui.encPulseCtrsBLValue.setText(str(msg.total_enc_counts[1])) + + @staticmethod + def micro_switch_callback(msg: Range) -> None: + if get_main_window().ui.pages.currentWidget().objectName() == get_main_window().ui.sensorsTab.objectName(): + if msg.header.frame_id == RosFrameIds.MICRO_SW_SENS_BASE_FRAME_ID.format(RosNames.MICRO_SWITCH_TOPIC_NAMES[0]): + get_main_window().ui.microswSensIndicatorFR.setStyleSheet(generate_indicator_stylesheet(msg.range == float("-inf"))) + elif msg.header.frame_id == RosFrameIds.MICRO_SW_SENS_BASE_FRAME_ID.format(RosNames.MICRO_SWITCH_TOPIC_NAMES[1]): + get_main_window().ui.microswSensIndicatorFL.setStyleSheet(generate_indicator_stylesheet(msg.range == float("-inf"))) + elif msg.header.frame_id == RosFrameIds.MICRO_SW_SENS_BASE_FRAME_ID.format(RosNames.MICRO_SWITCH_TOPIC_NAMES[2]): + get_main_window().ui.microswSensIndicatorBR.setStyleSheet(generate_indicator_stylesheet(msg.range == float("-inf"))) + elif msg.header.frame_id == RosFrameIds.MICRO_SW_SENS_BASE_FRAME_ID.format(RosNames.MICRO_SWITCH_TOPIC_NAMES[3]): + get_main_window().ui.microswSensIndicatorBL.setStyleSheet(generate_indicator_stylesheet(msg.range == float("-inf"))) + else: + get_ros_node().get_logger().error("Received micro switch data for unknown sensor.") + + @staticmethod + def ultrasonic_sens_callback(msg: Range) -> None: + if get_main_window().ui.pages.currentWidget().objectName() == get_main_window().ui.sensorsTab.objectName(): + if msg.header.frame_id == RosFrameIds.ULTRASONIC_SENS_BASE_FRAME_ID.format(RosNames.ULTRASONIC_SENS_TOPIC_NAMES[0]): + get_main_window().ui.ultrasonicSensValueF.setText(str(round(msg.range, 2))) + elif msg.header.frame_id == RosFrameIds.ULTRASONIC_SENS_BASE_FRAME_ID.format(RosNames.ULTRASONIC_SENS_TOPIC_NAMES[1]): + get_main_window().ui.ultrasonicSensValueB.setText(str(round(msg.range, 2))) + elif msg.header.frame_id == RosFrameIds.ULTRASONIC_SENS_BASE_FRAME_ID.format(RosNames.ULTRASONIC_SENS_TOPIC_NAMES[2]): + get_main_window().ui.ultrasonicSensValueR.setText(str(round(msg.range, 2))) + elif msg.header.frame_id == RosFrameIds.ULTRASONIC_SENS_BASE_FRAME_ID.format(RosNames.ULTRASONIC_SENS_TOPIC_NAMES[3]): + get_main_window().ui.ultrasonicSensValueL.setText(str(round(msg.range, 2))) + else: + get_ros_node().get_logger().error("Received ultrasonic sensor data for unknown sensor.") + + @staticmethod + def cliff_sens_callback(msg: Range) -> None: + if get_main_window().ui.pages.currentWidget().objectName() == get_main_window().ui.sensorsTab.objectName(): + if msg.header.frame_id == RosFrameIds.CLIFF_SENS_BASE_FRAME_ID.format(RosNames.CLIFF_SENS_TOPIC_NAMES[0]): + get_main_window().ui.cliffSensIndicatorF1.setStyleSheet(generate_indicator_stylesheet(msg.range == float("inf"))) + elif msg.header.frame_id == RosFrameIds.CLIFF_SENS_BASE_FRAME_ID.format(RosNames.CLIFF_SENS_TOPIC_NAMES[1]): + get_main_window().ui.cliffSensIndicatorF2.setStyleSheet(generate_indicator_stylesheet(msg.range == float("inf"))) + elif msg.header.frame_id == RosFrameIds.CLIFF_SENS_BASE_FRAME_ID.format(RosNames.CLIFF_SENS_TOPIC_NAMES[2]): + get_main_window().ui.cliffSensIndicatorF3.setStyleSheet(generate_indicator_stylesheet(msg.range == float("inf"))) + elif msg.header.frame_id == RosFrameIds.CLIFF_SENS_BASE_FRAME_ID.format(RosNames.CLIFF_SENS_TOPIC_NAMES[3]): + get_main_window().ui.cliffSensIndicatorF4.setStyleSheet(generate_indicator_stylesheet(msg.range == float("inf"))) + elif msg.header.frame_id == RosFrameIds.CLIFF_SENS_BASE_FRAME_ID.format(RosNames.CLIFF_SENS_TOPIC_NAMES[4]): + get_main_window().ui.cliffSensIndicatorB1.setStyleSheet(generate_indicator_stylesheet(msg.range == float("inf"))) + elif msg.header.frame_id == RosFrameIds.CLIFF_SENS_BASE_FRAME_ID.format(RosNames.CLIFF_SENS_TOPIC_NAMES[5]): + get_main_window().ui.cliffSensIndicatorB2.setStyleSheet(generate_indicator_stylesheet(msg.range == float("inf"))) + elif msg.header.frame_id == RosFrameIds.CLIFF_SENS_BASE_FRAME_ID.format(RosNames.CLIFF_SENS_TOPIC_NAMES[6]): + get_main_window().ui.cliffSensIndicatorB3.setStyleSheet(generate_indicator_stylesheet(msg.range == float("inf"))) + elif msg.header.frame_id == RosFrameIds.CLIFF_SENS_BASE_FRAME_ID.format(RosNames.CLIFF_SENS_TOPIC_NAMES[7]): + get_main_window().ui.cliffSensIndicatorB4.setStyleSheet(generate_indicator_stylesheet(msg.range == float("inf"))) + else: + get_ros_node().get_logger().error("Received cliff sensor data for unknown sensor.") # ---- Node object ---- -gui_ros_node: RosNode +gui_ros_node = RosNode # ---- Executor ---- +def is_ros_node_initialized() -> bool: + global gui_ros_node + return isinstance(gui_ros_node, RosNode) + +def get_ros_node() -> RosNode: + global gui_ros_node + return gui_ros_node + def ros_executor_thread(stop_thread): try: - rclpy.init(domain_id=RosConfig.EXECUTOR_DOMAIN_ID) + internal_context = rclpy.Context() + rclpy.init(context=internal_context, domain_id=RosConfig.EXECUTOR_DOMAIN_ID) + global gui_ros_node - gui_ros_node = RosNode() - executor = MultiThreadedExecutor() + gui_ros_node = RosNode(context=internal_context) + gui_ros_node.get_logger().info("Node initialized!") + + executor = MultiThreadedExecutor(context=internal_context) executor.add_node(gui_ros_node) + gui_ros_node.get_logger().info("Executor initialized!") + + gui_ros_node.get_logger().info("Starting the executor...") while not stop_thread(): executor.spin_once(timeout_sec=RosConfig.EXECUTOR_TIMEOUT) # Cleanup + gui_ros_node.get_logger().warn("ROS thread stopping. Shutting the executor down.") executor.shutdown(timeout_sec=RosConfig.EXECUTOR_SHUTDOWN_TIMEOUT) + rclpy.shutdown(context=internal_context) except ExternalShutdownException: - # TODO: LOGGER - pass + if is_ros_node_initialized(): + get_ros_node().get_logger().warn("External shutdown exception!") diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/utils/gui_utils.py b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/utils/gui_utils.py new file mode 100644 index 0000000..c159c6e --- /dev/null +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/ros_remote_gui/utils/gui_utils.py @@ -0,0 +1,21 @@ +# The ROS remote project (GUI package) - GUI utilities. +# Copyright 2024 Samyar Sadat Akhavi +# Written by Samyar Sadat Akhavi, 2024. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# Generate stylesheet for an indicator label +def generate_indicator_stylesheet(enabled: bool, active_color="red") -> str: + return f"background-color: {active_color}" if enabled else "background-color: transparent" \ No newline at end of file diff --git a/Source Code/ros_ws_remote/src/ros_remote_gui/util_scripts/qt_index_rearranger.py b/Source Code/ros_ws_remote/src/ros_remote_gui/util_scripts/qt_index_rearranger.py index d4622bf..a2b8cd9 100644 --- a/Source Code/ros_ws_remote/src/ros_remote_gui/util_scripts/qt_index_rearranger.py +++ b/Source Code/ros_ws_remote/src/ros_remote_gui/util_scripts/qt_index_rearranger.py @@ -8,7 +8,7 @@ import sys -fix_name_array = ["horizontalSpacer", "verticalSpacer", "horizontalLayout", "verticalLayout"] +fix_name_array = ["horizontalSpacer", "verticalSpacer", "horizontalLayout", "verticalLayout", "gridLayout"] filename = sys.argv[1] print(f"Fixing indexes for: {filename}")