2222import threading
2323import traceback
2424
25- from geometry_msgs .msg import Point32 , Quaternion
25+ from geometry_msgs .msg import Point32
2626import nest_asyncio
2727import numpy as np
2828import rclpy
@@ -121,13 +121,6 @@ def __init__(self):
121121 self .prev_poses_left = np .zeros ((21 , 3 ))
122122 self .start_poses_left = False
123123
124- # Cached transform constants for hot paths
125- self .vr_to_ros_matrix = np .array ([
126- [0.0 , 0.0 , - 1.0 ],
127- [- 1.0 , 0.0 , 0.0 ],
128- [0.0 , 1.0 , 0.0 ],
129- ], dtype = np .float64 )
130-
131124 # VR data storage
132125 self .left_hand_data = None
133126 self .right_hand_data = None
@@ -139,7 +132,6 @@ def __init__(self):
139132
140133 # Low-pass filter settings
141134 self .low_pass_filter_alpha = 0.9
142- self .pose_filters = {}
143135
144136 self .hand_log_counter = 0
145137 self .wrist_debug_log_counter = 0
@@ -181,38 +173,12 @@ def _set_vr_publishing_enabled(self, new_state):
181173 self .start_poses_right = False
182174 self .prev_poses_left .fill (0.0 )
183175 self .prev_poses_right .fill (0.0 )
184- self .pose_filters .clear ()
185176
186177 def log_status (self ):
187178 """Log current system status for debugging."""
188179 vr_status = 'ENABLED' if self .vr_publishing_enabled else 'DISABLED'
189180 self .get_logger ().info (f'Status: VR={ vr_status } ' )
190181
191- def is_valid_float (self , value ):
192- """Check if value is valid float (excluding NaN, inf)."""
193- return isinstance (value , (int , float )) and np .isfinite (value )
194-
195- # Body head-relative frame from head_inverse @ world:
196- # +Y=forward, +Z=right, +X=down. Convert to ROS (+X forward, +Y left, +Z up).
197- BODY_HEAD_TO_ROS_POSITION = np .array ([
198- [0 , 1 , 0 ], # ROS X = head +Y (forward)
199- [0 , 0 , - 1 ], # ROS Y = -head Z (left)
200- [- 1 , 0 , 0 ] # ROS Z = -head X (up)
201- ])
202-
203- def quat_multiply (self , q1 , q2 ):
204- """Multiply two quaternions."""
205- w = q1 .w * q2 .w - q1 .x * q2 .x - q1 .y * q2 .y - q1 .z * q2 .z
206- x = q1 .w * q2 .x + q1 .x * q2 .w + q1 .y * q2 .z - q1 .z * q2 .y
207- y = q1 .w * q2 .y - q1 .x * q2 .z + q1 .y * q2 .w + q1 .z * q2 .x
208- z = q1 .w * q2 .z + q1 .x * q2 .y - q1 .y * q2 .x + q1 .z * q2 .w
209- msg = Quaternion ()
210- msg .x = x
211- msg .y = y
212- msg .z = z
213- msg .w = w
214- return msg
215-
216182 def process_hand_joints (self , hand_data , side = 'left' ):
217183 """Process VR hand data (retarget) and publish HandJoints."""
218184 if hand_data is None or len (hand_data ) != 400 :
0 commit comments