From 2824f774507b8e2bf4eba84e0f6f9390023b0da8 Mon Sep 17 00:00:00 2001 From: "Marek S. Lukasiewicz" Date: Tue, 25 Feb 2025 14:36:57 +0100 Subject: [PATCH] Successful test with motion platform and VR together --- project/aircraft/aircraft.gd | 6 ++++-- project/aircraft/aircraft.tscn | 9 +++++++++ project/instruments.gd | 2 +- src/marshconnector.cpp | 8 ++++---- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/project/aircraft/aircraft.gd b/project/aircraft/aircraft.gd index 86702a4..f2e0921 100644 --- a/project/aircraft/aircraft.gd +++ b/project/aircraft/aircraft.gd @@ -2,9 +2,9 @@ extends Node3D ## Rotation of cyclic stick model for full control deflection, in degrees @export var range_cyclic: float = 30 - ## Main rotor speed, in revolutions per minute @export var rotor_rpm: float = 500 +@export var track_platform: bool = false ## Current angle of rotor rotation var _rotor_azimuth: float = 0 @@ -12,7 +12,8 @@ var _rotor_azimuth: float = 0 @onready var connector: MarshConnector = $MarshConnector @onready var skeleton: Skeleton3D = $"Mi-2/Armature/Skeleton3D" @onready var attitude_root: Node3D = $AttitudeRoot -@onready var tracker_mount: Node3D = $AttitudeRoot/PilotEyes/PilotFloor/TrackerMountChair +@onready var tracker_mount_chair: Node3D = $AttitudeRoot/PilotEyes/PilotFloor/TrackerMountChair +@onready var tracker_mount_platform: Node3D = $AttitudeRoot/PilotEyes/PilotFloor/TrackerMountPlatform @onready var xr_origin: XROrigin3D = $AttitudeRoot/PilotEyes/PilotFloor/XROrigin3D @onready var tracker: XRController3D = $AttitudeRoot/PilotEyes/PilotFloor/XROrigin3D/ViveTracker @@ -48,6 +49,7 @@ func _process(delta: float) -> void: skeleton.set_bone_pose_rotation(bone_rotor, rotor_rest * rotor_att) if tracker.get_has_tracking_data(): + var tracker_mount = tracker_mount_platform if track_platform else tracker_mount_chair xr_origin.transform = tracker_mount.transform * tracker.transform.affine_inverse() else: xr_origin.transform = Transform3D.IDENTITY diff --git a/project/aircraft/aircraft.tscn b/project/aircraft/aircraft.tscn index 4103f4c..455427b 100644 --- a/project/aircraft/aircraft.tscn +++ b/project/aircraft/aircraft.tscn @@ -9,6 +9,7 @@ [node name="Aircraft" type="Node3D"] script = ExtResource("1_l4uib") +track_platform = true [node name="Mi-2" parent="." instance=ExtResource("1_mrxe8")] @@ -33,6 +34,13 @@ transform = Transform3D(-1, 8.74228e-08, -3.82137e-15, 0, -4.37114e-08, -1, -8.7 [node name="ReferenceAxes" parent="AttitudeRoot/PilotEyes/PilotFloor/TrackerMountChair" instance=ExtResource("3_2bi7g")] transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0, 0) +[node name="TrackerMountPlatform" type="Node3D" parent="AttitudeRoot/PilotEyes/PilotFloor"] +transform = Transform3D(-0.891006, -0.453991, 1.98446e-08, 0, -4.37114e-08, -1, 0.453991, -0.891006, 3.89471e-08, 0.4, 0.5, -0.7) + +[node name="ReferenceAxes" parent="AttitudeRoot/PilotEyes/PilotFloor/TrackerMountPlatform" instance=ExtResource("3_2bi7g")] +transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0, 0) +visible = false + [node name="XROrigin3D" type="XROrigin3D" parent="AttitudeRoot/PilotEyes/PilotFloor"] [node name="XRCamera3D" type="XRCamera3D" parent="AttitudeRoot/PilotEyes/PilotFloor/XROrigin3D"] @@ -42,6 +50,7 @@ tracker = &"/user/vive_tracker_htcx/role/camera" [node name="ReferenceAxes" parent="AttitudeRoot/PilotEyes/PilotFloor/XROrigin3D/ViveTracker" instance=ExtResource("3_2bi7g")] transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0, 0) +visible = false [node name="Instruments" parent="AttitudeRoot" instance=ExtResource("3_5w717")] transform = Transform3D(-0.5, -1.27582e-08, 7.43353e-08, 4.33325e-10, 0.4923, 0.0874084, -7.5421e-08, 0.0874084, -0.4923, 0.00724897, -1.1581, 2.40391) diff --git a/project/instruments.gd b/project/instruments.gd index 1a8027c..bf0cbe8 100644 --- a/project/instruments.gd +++ b/project/instruments.gd @@ -1,7 +1,7 @@ extends Node @export var browser_name: String = "browser" -@export var url: String = "http://localhost:5555/pfd" +@export var url: String = "http://192.168.1.2:5555/pfd" # ============================================================================== # Create a single browser named "browser_name" that is attached as child node to $CEF. diff --git a/src/marshconnector.cpp b/src/marshconnector.cpp index a0364a1..cac39ae 100644 --- a/src/marshconnector.cpp +++ b/src/marshconnector.cpp @@ -85,7 +85,7 @@ void MarshConnector::_process(double delta) { time_passed += delta; if (!socket->is_socket_connected()) { - socket->connect_to_host("127.0.0.1", 24400); + socket->connect_to_host("192.168.1.2", 24400); } else { while (socket->get_available_packet_count() > 0) { const PackedByteArray data = socket->get_packet(); @@ -251,9 +251,9 @@ Vector3 MarshConnector::godot_location_from_mavlink(float north_meters, // See Godot documentation for axis conventions: // https://docs.godotengine.org/en/stable/classes/class_vector3.html#constants return Vector3{ - east_meters, // East is RIGHT = Vector3(1, 0, 0) - alt_meters, // Up is UP = Vector3(0, 1, 0) - north_meters, // North is FORWARD = Vector3(0, 0, -1) + -east_meters, // East is MODEL_RIGHT = Vector3(-1, 0, 0) + alt_meters, // Up is MODEL_TOP = Vector3(0, 1, 0) + north_meters, // North is MODEL_FRONT = Vector3(0, 0, 1) }; } Quaternion MarshConnector::godot_rotation_from_mavlink(float roll_rad,