From 17c70195c926b8ce7eab32368781da23550a063c Mon Sep 17 00:00:00 2001 From: Kai Junge <kai.junge@epfl.ch> Date: Thu, 6 Feb 2025 15:28:34 +0100 Subject: [PATCH] Added launch file and fixed some terminal output. --- launch/streamer.launch.py | 24 +++++++++ optitrack_streamer/optitrack_streamer_node.py | 2 +- optitrack_streamer/rigid_body_reader.py | 53 ------------------- optitrack_streamer/wrist_streamer_node.py | 5 +- setup.py | 1 + 5 files changed, 28 insertions(+), 57 deletions(-) create mode 100644 launch/streamer.launch.py delete mode 100644 optitrack_streamer/rigid_body_reader.py diff --git a/launch/streamer.launch.py b/launch/streamer.launch.py new file mode 100644 index 0000000..ad4ea52 --- /dev/null +++ b/launch/streamer.launch.py @@ -0,0 +1,24 @@ +from launch import LaunchDescription +from launch_ros.actions import Node + + +def generate_launch_description(): + + optitrack_streamer_node = Node( + package="optitrack_streamer", + executable="optitrack_streamer_node", + name="optitrack_streamer_node", + output="screen", + ) + + wrist_streamer_node = Node( + package="optitrack_streamer", + executable="wrist_streamer_node", + name="wrist_streamer_node", + output="screen", + ) + + return LaunchDescription([ + optitrack_streamer_node, + wrist_streamer_node, + ]) diff --git a/optitrack_streamer/optitrack_streamer_node.py b/optitrack_streamer/optitrack_streamer_node.py index 41ecc83..acb86e0 100644 --- a/optitrack_streamer/optitrack_streamer_node.py +++ b/optitrack_streamer/optitrack_streamer_node.py @@ -50,7 +50,7 @@ class OptitrackStreamerNode(Node): self.rigid_bodies[str(rigid_body_id)] = {"pos":position, "rot":rotation} def mainloop_callback(self): - self.get_logger().info("Received: " + str(list(self.rigid_bodies.keys())), throttle_duration_sec=10) + self.get_logger().info("Received RAW: " + str(list(self.rigid_bodies.keys())), throttle_duration_sec=2) for id, frame_id in self.rb_id_to_frame_id.items(): try: diff --git a/optitrack_streamer/rigid_body_reader.py b/optitrack_streamer/rigid_body_reader.py deleted file mode 100644 index 83155b0..0000000 --- a/optitrack_streamer/rigid_body_reader.py +++ /dev/null @@ -1,53 +0,0 @@ -import time -import threading -from NatNetClient import NatNetClient - -# Dictionary to store rigid body data -rigid_body_data = {} - -class CustomNatNetClient(NatNetClient): - def __init__(self, rigid_body_listener=None): - super().__init__() - self.rigid_body_listener = rigid_body_listener # Assign callback function - - def receive_rigid_body_list(self, rigid_body_list, stamp): - """Process rigid body data and call the listener if available.""" - global rigid_body_data - for rigid_body in rigid_body_list: - rigid_body_id = rigid_body[0] # ID of the rigid body - position = tuple(rigid_body[1]) # Position (x, y, z) - rotation = tuple(rigid_body[2]) # Rotation (qx, qy, qz, qw) - - new_data = {"position": position, "rotation": rotation} - - # Only print if data has changed - if rigid_body_id not in rigid_body_data or rigid_body_data[rigid_body_id] != new_data: - rigid_body_data[rigid_body_id] = new_data - print(f"Rigid Body {rigid_body_id} Updated: {new_data}") - - # Call the listener function if it exists - if self.rigid_body_listener: - self.rigid_body_listener(rigid_body_id, position, rotation) - -# Callback function to process rigid body data -def my_rigid_body_listener(rigid_body_id, position, rotation): - print(f"Listener received Rigid Body {rigid_body_id}: Position {position}, Rotation {rotation}") - -# Create a custom NatNet client and assign the listener -client = CustomNatNetClient(rigid_body_listener=my_rigid_body_listener) - -# Run the client in a separate thread -def start_natnet(): - client.run() - -natnet_thread = threading.Thread(target=start_natnet, daemon=True) -natnet_thread.start() - -print("Listening for OptiTrack rigid bodies... (Press Ctrl + C to stop)") - -# Keep main script running, but allow Ctrl + C to exit -try: - while True: - time.sleep(1) -except KeyboardInterrupt: - print("\nStopping...") diff --git a/optitrack_streamer/wrist_streamer_node.py b/optitrack_streamer/wrist_streamer_node.py index 31f8e4b..783f916 100644 --- a/optitrack_streamer/wrist_streamer_node.py +++ b/optitrack_streamer/wrist_streamer_node.py @@ -6,7 +6,6 @@ import json, os import numpy as np from scipy.spatial.transform import Rotation as R - class WristStreamerNode(Node): def __init__(self): @@ -116,8 +115,8 @@ class WristStreamerNode(Node): self.broadcast_tf("world", which_hand + "_ref", aligned_trans, aligned_quat) def mainloop_callback(self): - msg = "\n" - msg += "Right: " + self.state["right"] + msg = "\n\n" + msg += "Right: " + self.state["right"] + "\n" msg += "Left: " + self.state["left"] + "\n" self.get_logger().info(msg) diff --git a/setup.py b/setup.py index 7b808ec..2cb0da5 100644 --- a/setup.py +++ b/setup.py @@ -12,6 +12,7 @@ setup( ('share/ament_index/resource_index/packages', ['resource/' + package_name]), ('share/' + package_name, ['package.xml']), + (os.path.join('share', package_name, 'launch'), glob('launch/*.launch.py')), (os.path.join('share', package_name, 'calibration'), glob('*.calib.json')) ], install_requires=['setuptools'], -- GitLab