From 2e390f5aaeb67ae5e541b0639645577c03e55172 Mon Sep 17 00:00:00 2001 From: osu_uwrt_bot Date: Sun, 28 Sep 2025 16:05:34 -0400 Subject: [PATCH 01/33] Put uROS agent back in hardware launches --- riptide_hardware/launch/hardware.launch.py | 12 ++++++------ riptide_hardware/launch/hardware_fake_dvl.launch.py | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/riptide_hardware/launch/hardware.launch.py b/riptide_hardware/launch/hardware.launch.py index 1866813..58d6106 100644 --- a/riptide_hardware/launch/hardware.launch.py +++ b/riptide_hardware/launch/hardware.launch.py @@ -49,12 +49,12 @@ def generate_launch_description(): PushRosNamespace( LC("robot") ), - # IncludeLaunchDescription( - # AnyLaunchDescriptionSource(copro_agent_launch_file), - # launch_arguments=[ - # ('robot', LC('robot')), - # ] - # ), + IncludeLaunchDescription( + AnyLaunchDescriptionSource(copro_agent_launch_file), + launch_arguments=[ + ('robot', LC('robot')), + ] + ), IncludeLaunchDescription( AnyLaunchDescriptionSource(diagnostics_launch_file), launch_arguments=[ diff --git a/riptide_hardware/launch/hardware_fake_dvl.launch.py b/riptide_hardware/launch/hardware_fake_dvl.launch.py index ac887a1..408e9d0 100644 --- a/riptide_hardware/launch/hardware_fake_dvl.launch.py +++ b/riptide_hardware/launch/hardware_fake_dvl.launch.py @@ -56,12 +56,12 @@ def generate_launch_description(): # name='zenoh_router', # output='screen', # ), - # IncludeLaunchDescription( - # AnyLaunchDescriptionSource(copro_agent_launch_file), - # launch_arguments=[ - # ('robot', LC('robot')), - # ] - # ), + IncludeLaunchDescription( + AnyLaunchDescriptionSource(copro_agent_launch_file), + launch_arguments=[ + ('robot', LC('robot')), + ] + ), IncludeLaunchDescription( AnyLaunchDescriptionSource(diagnostics_launch_file), launch_arguments=[ From 15984d3e2cb2490010ba25f96a47e9b8a26f2e64 Mon Sep 17 00:00:00 2001 From: osu_uwrt_bot Date: Sat, 25 Oct 2025 00:06:06 -0400 Subject: [PATCH 02/33] Better FFC cal --- riptide_hardware/cfg/ffc_config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riptide_hardware/cfg/ffc_config.yaml b/riptide_hardware/cfg/ffc_config.yaml index cec331f..84bab14 100644 --- a/riptide_hardware/cfg/ffc_config.yaml +++ b/riptide_hardware/cfg/ffc_config.yaml @@ -5,7 +5,7 @@ pub_resolution: "NATIVE" # The resolution used for image and depth map publishing. 'NATIVE' to use the same `general.grab_resolution` - `CUSTOM` to apply the `general.pub_downscale_factor` downscale factory to reduce bandwidth in transmission pub_downscale_factor: 2.0 # rescale factor used to rescale image before publishing when 'pub_resolution' is 'CUSTOM' pub_frame_rate: 30.0 - optional_opencv_calibration_file: "/home/ros/zed_cals/taloszedxffc_cal5.yaml" + optional_opencv_calibration_file: "/home/ros/zed_cals/taloszedxffc_cal7.yaml" grab_resolution: 'HD1200' self_calib: false pos_tracking: From 07cb544d1d3a3834d6d961fe61dc0e9155f7fc50 Mon Sep 17 00:00:00 2001 From: osu_uwrt_bot Date: Fri, 31 Oct 2025 17:19:49 -0400 Subject: [PATCH 03/33] Post-Sean tunes --- riptide_descriptions/config/talos.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/riptide_descriptions/config/talos.yaml b/riptide_descriptions/config/talos.yaml index 72b149b..34db370 100644 --- a/riptide_descriptions/config/talos.yaml +++ b/riptide_descriptions/config/talos.yaml @@ -123,10 +123,10 @@ controller: #[x,y,z,r,p,y] #first order eta - eta_order_0: [1.8, 0.5, 10.0, 0.2, 0.2, 0.3] + eta_order_0: [1.8, 0.2, 10.0, 0.2, 0.2, 0.3] #second order eta - eta_order_1: [0.08, 0.08, 0.3, 0.0, 0.0, 0.0] + eta_order_1: [0.08, 0.04, 0.3, 0.0, 0.0, 0.0] #lambda lambda: [0.25, 0.25, 1.0, 10.0, 10.0, 0.35] @@ -152,9 +152,9 @@ controller: #linear unit are newtons per meter, angular are newton meter per radian #the default gains for normal operation - p_gains: [3.0, 18.0, 200.0, 3.5, 2.0, 2.5] + p_gains: [3.0, 18.0, 200.0, 3.0, 2.0, 1.0] i_gains: [0.0, 0.0, 0.0, 0.01, 1.0, 0.0] - d_gains: [5.0, 5.0, 90.0, 1.0, 0.05, 0.9] + d_gains: [5.0, 5.0, 90.0, 1.5, 0.05, 0.9] # the control value thresholds for each DOF -- body frame max_control_thresholds: [30, 30, 30, 15, 15, 15] From 2c3ceb6fb59037ff672a4283ec4ae50b686576da Mon Sep 17 00:00:00 2001 From: osu_uwrt_bot Date: Sun, 2 Nov 2025 17:54:35 -0500 Subject: [PATCH 04/33] Better tuning, zed picture taker enabled --- riptide_descriptions/config/talos.yaml | 19 +++++++------- riptide_hardware/launch/zed.launch.py | 26 ++++++++++--------- .../riptide_hardware2/picture_taker.py | 5 ++-- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/riptide_descriptions/config/talos.yaml b/riptide_descriptions/config/talos.yaml index 34db370..7e957c0 100644 --- a/riptide_descriptions/config/talos.yaml +++ b/riptide_descriptions/config/talos.yaml @@ -6,7 +6,7 @@ base_link: [-0.14, 0.03, -0.09] # Vehicle mass properties mass: 31.998 -com: [-0.159, 0.042, -0.056] +com: [-0.148, 0.040, -0.071] inertia: [0.72604692, 1.59322252, 1.65134701] # kg*m^2 hull_volume: .11 #make this real @@ -24,8 +24,8 @@ controller: drag_enable: [1, 1, 0, 0, 0, 0] feed_forward: - #base_wrench: [0.03, 0.01, -5.28, 0.57, 1.77, -0.020] - base_wrench: [-1.0, -1.0, 0.0, -0.95, 2.1, 0.0] + base_wrench: [-0.3, 0.16, -7.92, 0.03, 1.35, 0.3] + # base_wrench: [-1.0, -1.0, 0.0, 0.0, 0.0, 0.0] auto_tune: #positional error threshold to begin autotuning @@ -123,13 +123,14 @@ controller: #[x,y,z,r,p,y] #first order eta - eta_order_0: [1.8, 0.2, 10.0, 0.2, 0.2, 0.3] + eta_order_0: [0.8, 0.3, 4.5, 0.2, 0.2, 0.3] + #second order eta - eta_order_1: [0.08, 0.04, 0.3, 0.0, 0.0, 0.0] + eta_order_1: [0.08, 0.06, 0.3, 0.0, 0.0, 0.0] #lambda - lambda: [0.25, 0.25, 1.0, 10.0, 10.0, 0.35] + lambda: [0.2, 0.2, 1.0, 10.0, 10.0, 0.35] #format: 'a, m' for each degree of freedom #where: @@ -152,9 +153,9 @@ controller: #linear unit are newtons per meter, angular are newton meter per radian #the default gains for normal operation - p_gains: [3.0, 18.0, 200.0, 3.0, 2.0, 1.0] - i_gains: [0.0, 0.0, 0.0, 0.01, 1.0, 0.0] - d_gains: [5.0, 5.0, 90.0, 1.5, 0.05, 0.9] + p_gains: [3.0, 18.0, 200.0, 2.0, 2.0, 25.0] + i_gains: [0.0, 0.0, 0.0, 0.05, 1.0, 1.0] + d_gains: [5.0, 5.0, 90.0, 0.1, 0.1, 2.0] # the control value thresholds for each DOF -- body frame max_control_thresholds: [30, 30, 30, 15, 15, 15] diff --git a/riptide_hardware/launch/zed.launch.py b/riptide_hardware/launch/zed.launch.py index 651e436..873cab1 100644 --- a/riptide_hardware/launch/zed.launch.py +++ b/riptide_hardware/launch/zed.launch.py @@ -165,18 +165,20 @@ def generate_launch_description(): # output='screen' # ) - # Node( - # package='riptide_hardware2', - # executable='picture_taker.py', - # name='picture_taker', - # output='screen', - # parameters=[ - # {"robot_namespace": LC("robot")}, - # {"camera_name": "ffc"}, - # {"save_stereo": True}, - # {"save_split": True} - # ] - # ) + # Used for taking pictures, good for camera calibration + Node( + package='riptide_hardware2', + executable='picture_taker.py', + name='picture_taker', + output='screen', + parameters=[ + {"robot_namespace": LC("robot")}, + {"camera_name": "ffc"}, + {"subscription_enabled": True}, + {"save_stereo": True}, + {"save_split": True} + ] + ) ], scoped=True), diff --git a/riptide_hardware/riptide_hardware2/picture_taker.py b/riptide_hardware/riptide_hardware2/picture_taker.py index d41ed80..904730a 100644 --- a/riptide_hardware/riptide_hardware2/picture_taker.py +++ b/riptide_hardware/riptide_hardware2/picture_taker.py @@ -18,6 +18,7 @@ def __init__(self): self.declare_parameter('robot_namespace', 'talos') self.declare_parameter('camera_name', 'ffc') self.declare_parameter('save_directory', '/home/ros/cal_images') + self.declare_parameter('subscription_enabled', True) self.declare_parameter('save_stereo', False) self.declare_parameter('save_split', True) @@ -25,6 +26,7 @@ def __init__(self): robot_namespace = self.get_parameter('robot_namespace').get_parameter_value().string_value camera_name = self.get_parameter('camera_name').get_parameter_value().string_value self.save_directory = self.get_parameter('save_directory').get_parameter_value().string_value + self.subscription_enabled = self.get_parameter('subscription_enabled').get_parameter_value().bool_value self.save_stereo = self.get_parameter('save_stereo').get_parameter_value().bool_value self.save_split = self.get_parameter('save_split').get_parameter_value().bool_value @@ -44,7 +46,6 @@ def __init__(self): # Store the latest image and subscription state self.latest_image = None - self.subscription_enabled = True self.image_subscriber = None # Log the topic we're subscribing to @@ -100,7 +101,7 @@ def capture_image_callback(self, request, response): try: # Generate filename with timestamp - timestamp = datetime.now().strftime("%Y%m%d_%H%M%S_%f")[:-3] + timestamp = datetime.now().strftime("%Y_%m_%d_%H_%M_%S_%f")[:-3] camera_name = self.get_parameter('camera_name').get_parameter_value().string_value saved_files = [] From 8e76197ceb2ad4eb2ee1a3c779ae982f20fecb02 Mon Sep 17 00:00:00 2001 From: osu_uwrt_bot Date: Sun, 2 Nov 2025 19:40:32 -0500 Subject: [PATCH 05/33] Updated picture taker to handle param changes --- riptide_hardware/launch/zed.launch.py | 2 +- .../riptide_hardware2/picture_taker.py | 81 +++++++++++++++---- 2 files changed, 67 insertions(+), 16 deletions(-) diff --git a/riptide_hardware/launch/zed.launch.py b/riptide_hardware/launch/zed.launch.py index 873cab1..d7c588a 100644 --- a/riptide_hardware/launch/zed.launch.py +++ b/riptide_hardware/launch/zed.launch.py @@ -175,7 +175,7 @@ def generate_launch_description(): {"robot_namespace": LC("robot")}, {"camera_name": "ffc"}, {"subscription_enabled": True}, - {"save_stereo": True}, + {"save_stereo": False}, {"save_split": True} ] ) diff --git a/riptide_hardware/riptide_hardware2/picture_taker.py b/riptide_hardware/riptide_hardware2/picture_taker.py index 904730a..fbb3762 100644 --- a/riptide_hardware/riptide_hardware2/picture_taker.py +++ b/riptide_hardware/riptide_hardware2/picture_taker.py @@ -4,6 +4,7 @@ from rclpy.node import Node from sensor_msgs.msg import Image from std_srvs.srv import Trigger, SetBool +from rcl_interfaces.msg import SetParametersResult from cv_bridge import CvBridge import cv2 import os @@ -21,25 +22,20 @@ def __init__(self): self.declare_parameter('subscription_enabled', True) self.declare_parameter('save_stereo', False) self.declare_parameter('save_split', True) + self.add_on_set_parameters_callback(self.on_param_change) # Get parameter values - robot_namespace = self.get_parameter('robot_namespace').get_parameter_value().string_value - camera_name = self.get_parameter('camera_name').get_parameter_value().string_value + self.robot_namespace = self.get_parameter('robot_namespace').get_parameter_value().string_value + self.camera_name = self.get_parameter('camera_name').get_parameter_value().string_value self.save_directory = self.get_parameter('save_directory').get_parameter_value().string_value self.subscription_enabled = self.get_parameter('subscription_enabled').get_parameter_value().bool_value self.save_stereo = self.get_parameter('save_stereo').get_parameter_value().bool_value self.save_split = self.get_parameter('save_split').get_parameter_value().bool_value # Build the full image topic path - self.image_topic = f"/{robot_namespace}/{camera_name}/zed_node/stereo_raw/image_raw_color" + self.image_topic = f"/{self.robot_namespace}/{self.camera_name}/zed_node/stereo_raw/image_raw_color" - # Create save directory if it doesn't exist - os.makedirs(self.save_directory, exist_ok=True) - - # Create subdirectories for split images if needed - if self.save_split: - os.makedirs(os.path.join(self.save_directory, 'left'), exist_ok=True) - os.makedirs(os.path.join(self.save_directory, 'right'), exist_ok=True) + self.create_save_dir() # Initialize CV bridge for image conversion self.bridge = CvBridge() @@ -52,7 +48,8 @@ def __init__(self): self.get_logger().info(f"Image topic: {self.image_topic}") # Create initial subscriber for image topic - self.create_image_subscriber() + if self.subscription_enabled: + self.create_image_subscriber() # Create service for capturing images self.capture_service = self.create_service( @@ -68,6 +65,60 @@ def __init__(self): self.enable_subscription_callback ) + def create_save_dir(self): + # Create save directory if it doesn't exist + os.makedirs(self.save_directory, exist_ok=True) + + # Create subdirectories for split images if needed + if self.save_split: + os.makedirs(os.path.join(self.save_directory, 'left'), exist_ok=True) + os.makedirs(os.path.join(self.save_directory, 'right'), exist_ok=True) + + def on_param_change(self, params): + changed = [] + for p in params: + if hasattr(self, p.name): + current = getattr(self, p.name) + if current != p.value: + setattr(self, p.name, p.value) + self.get_logger().info(f"Parameter '{p.name}' changed: {current} -> {p.value}") + changed.append(p) + + + self.handle_param_update(changed) + return SetParametersResult(successful=True) + + def handle_param_update(self, params): + topic_changed = update_save = update_sub = False + for p in params: + if p.name in ['camera_name', 'robot_namespace']: + topic_changed = True + elif p.name in ['save_directory', 'save_split']: + update_save = True + elif p.name == 'subscription_enabled': + update_sub = True + + if update_save: + self.create_save_dir() + + if topic_changed: + self.image_topic = f"/{self.robot_namespace}/{self.camera_name}/zed_node/stereo_raw/image_raw_color" + + if update_sub: + if self.subscription_enabled: + if self.image_subscriber is None: + self.create_image_subscriber() + else: + if topic_changed: + self.destroy_image_subscriber() + self.create_image_subscriber() + else: + self.destroy_image_subscriber() + else: + if topic_changed: + self.destroy_image_subscriber() + self.create_image_subscriber() + def create_image_subscriber(self): """Create the image subscriber""" if self.image_subscriber is None: @@ -101,7 +152,7 @@ def capture_image_callback(self, request, response): try: # Generate filename with timestamp - timestamp = datetime.now().strftime("%Y_%m_%d_%H_%M_%S_%f")[:-3] + timestamp = datetime.now().strftime("%Y_%m_%d__%H_%M_%S_%f")[:-3] camera_name = self.get_parameter('camera_name').get_parameter_value().string_value saved_files = [] @@ -113,7 +164,7 @@ def capture_image_callback(self, request, response): success = cv2.imwrite(stereo_filepath, self.latest_image, [cv2.IMWRITE_PNG_COMPRESSION, 0]) if success: - saved_files.append(f"stereo: {stereo_filename}") + saved_files.append(f"\nStereo: {stereo_filepath}") self.get_logger().info(f"Stereo image saved: {stereo_filepath}") else: self.get_logger().error("Failed to save stereo image") @@ -138,13 +189,13 @@ def capture_image_callback(self, request, response): right_success = cv2.imwrite(right_filepath, right_image, [cv2.IMWRITE_PNG_COMPRESSION, 0]) if left_success: - saved_files.append(f"left: {left_filename}") + saved_files.append(f"\nLeft: {left_filepath}") self.get_logger().info(f"Left image saved: {left_filepath}") else: self.get_logger().error("Failed to save left image") if right_success: - saved_files.append(f"right: {right_filename}") + saved_files.append(f"\nRight: {right_filepath}") self.get_logger().info(f"Right image saved: {right_filepath}") else: self.get_logger().error("Failed to save right image") From b709a6f537f925b9fa77f43de5842074b8b99eea Mon Sep 17 00:00:00 2001 From: osu_uwrt_bot Date: Thu, 6 Nov 2025 17:43:59 -0500 Subject: [PATCH 06/33] ZED X mini for ffc --- riptide_descriptions/config/talos.yaml | 2 +- riptide_hardware/cfg/dfc_config.yaml | 3 ++- riptide_hardware/cfg/ffc_config.yaml | 4 +++- riptide_hardware/launch/zed.launch.py | 4 +++- riptide_hardware/riptide_hardware2/picture_taker.py | 6 ++++++ 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/riptide_descriptions/config/talos.yaml b/riptide_descriptions/config/talos.yaml index 7e957c0..da54281 100644 --- a/riptide_descriptions/config/talos.yaml +++ b/riptide_descriptions/config/talos.yaml @@ -303,7 +303,7 @@ cameras: [ { type: zed, name: ffc, - baseline: 0.12, # m. Distance between cameras (manually measured) + baseline: 0.045, # m. Distance between cameras (manually measured) pose: [-0.0195, -0.0889, 0, 0, 0, 0] }, { diff --git a/riptide_hardware/cfg/dfc_config.yaml b/riptide_hardware/cfg/dfc_config.yaml index a42807b..ad56f65 100644 --- a/riptide_hardware/cfg/dfc_config.yaml +++ b/riptide_hardware/cfg/dfc_config.yaml @@ -1,8 +1,9 @@ /**: ros__parameters: general: - camera_name: "talos/dfc" + camera_model: zedxm serial_number: 51491740 + camera_name: "talos/dfc" grab_resolution: 'HD1200' # For zedx/zedxm use HD1200, for zed2i use HD2K optional_opencv_calibration_file: "/home/ros/zed_cals/zed_dfc_calibration2.yaml" pub_resolution: "NATIVE" # The resolution used for image and depth map publishing. 'NATIVE' to use the same `general.grab_resolution` - `CUSTOM` to apply the `general.pub_downscale_factor` downscale factory to reduce bandwidth in transmission diff --git a/riptide_hardware/cfg/ffc_config.yaml b/riptide_hardware/cfg/ffc_config.yaml index 84bab14..ddedfc2 100644 --- a/riptide_hardware/cfg/ffc_config.yaml +++ b/riptide_hardware/cfg/ffc_config.yaml @@ -1,11 +1,13 @@ /**: ros__parameters: general: + camera_model: zedxm + serial_number: 55348591 camera_name: "talos/ffc" pub_resolution: "NATIVE" # The resolution used for image and depth map publishing. 'NATIVE' to use the same `general.grab_resolution` - `CUSTOM` to apply the `general.pub_downscale_factor` downscale factory to reduce bandwidth in transmission pub_downscale_factor: 2.0 # rescale factor used to rescale image before publishing when 'pub_resolution' is 'CUSTOM' pub_frame_rate: 30.0 - optional_opencv_calibration_file: "/home/ros/zed_cals/taloszedxffc_cal7.yaml" + optional_opencv_calibration_file: "/home/ros/zed_cals/ffc_zedxm_calibration.yaml" grab_resolution: 'HD1200' self_calib: false pos_tracking: diff --git a/riptide_hardware/launch/zed.launch.py b/riptide_hardware/launch/zed.launch.py index d7c588a..8950de3 100644 --- a/riptide_hardware/launch/zed.launch.py +++ b/riptide_hardware/launch/zed.launch.py @@ -94,8 +94,9 @@ def generate_launch_description(): name="zed_node", parameters=[ zed_config_path, - zedx_camera_path, + zedxm_camera_path, ffc_config_path, + {'general.serial_number': 55348591} ] ), ], @@ -121,6 +122,7 @@ def generate_launch_description(): zed_config_path, zedxm_camera_path, dfc_config_path, + {'general.serial_number': 51491740} ] ), ], diff --git a/riptide_hardware/riptide_hardware2/picture_taker.py b/riptide_hardware/riptide_hardware2/picture_taker.py index fbb3762..7514780 100644 --- a/riptide_hardware/riptide_hardware2/picture_taker.py +++ b/riptide_hardware/riptide_hardware2/picture_taker.py @@ -151,12 +151,18 @@ def capture_image_callback(self, request, response): return response try: + + # if not self.save_stereo or self.save_split: + # return + # Generate filename with timestamp timestamp = datetime.now().strftime("%Y_%m_%d__%H_%M_%S_%f")[:-3] camera_name = self.get_parameter('camera_name').get_parameter_value().string_value saved_files = [] + self.create_save_dir() + # Save stereo image if enabled if self.save_stereo: stereo_filename = f"captured_image_{camera_name}_{timestamp}.png" From 794571277feab7de64fae8675b2952471eda19ba Mon Sep 17 00:00:00 2001 From: osu_uwrt_bot Date: Mon, 10 Nov 2025 22:36:35 -0500 Subject: [PATCH 07/33] ZEDXm FFC --- riptide_hardware/launch/navigation.launch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riptide_hardware/launch/navigation.launch.py b/riptide_hardware/launch/navigation.launch.py index 30f3c1c..fad72ce 100644 --- a/riptide_hardware/launch/navigation.launch.py +++ b/riptide_hardware/launch/navigation.launch.py @@ -87,7 +87,7 @@ def evaluate_xacro(context, *args, **kwargs): # try: if robot == "talos": - nodes.append(get_zed_description("ffc", "zedx", robot, context, debug)) + nodes.append(get_zed_description("ffc", "zedxm", robot, context, debug)) nodes.append(get_zed_description("dfc", "zedxm", robot, context, debug)) if robot == "liltank": From 1e55bffffc04c7ef625c889452ef9f59ce7c6f80 Mon Sep 17 00:00:00 2001 From: osu_uwrt_bot Date: Mon, 10 Nov 2025 22:36:49 -0500 Subject: [PATCH 08/33] Disable DFC for now --- riptide_hardware/launch/zed.launch.py | 50 +++++++++++++-------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/riptide_hardware/launch/zed.launch.py b/riptide_hardware/launch/zed.launch.py index 8950de3..a88b7b4 100644 --- a/riptide_hardware/launch/zed.launch.py +++ b/riptide_hardware/launch/zed.launch.py @@ -104,31 +104,31 @@ def generate_launch_description(): PythonExpression(["'", LC("robot"), "' == 'talos'"])) ), - ComposableNodeContainer( - name="dfc_container", - namespace="", - package="rclcpp_components", - executable="component_container", - output="screen", - respawn=True, - composable_node_descriptions=[ - # Second ZED Node (DFC) - ComposableNode( - package="zed_components", - plugin="stereolabs::ZedCamera", - namespace="dfc", - name="zed_node", - parameters=[ - zed_config_path, - zedxm_camera_path, - dfc_config_path, - {'general.serial_number': 51491740} - ] - ), - ], - condition=IfCondition( - PythonExpression(["'", LC("robot"), "' == 'talos'"])) - ), + # ComposableNodeContainer( + # name="dfc_container", + # namespace="", + # package="rclcpp_components", + # executable="component_container", + # output="screen", + # respawn=True, + # composable_node_descriptions=[ + # # Second ZED Node (DFC) + # ComposableNode( + # package="zed_components", + # plugin="stereolabs::ZedCamera", + # namespace="dfc", + # name="zed_node", + # parameters=[ + # zed_config_path, + # zedxm_camera_path, + # dfc_config_path, + # {'general.serial_number': 51491740} + # ] + # ), + # ], + # condition=IfCondition( + # PythonExpression(["'", LC("robot"), "' == 'talos'"])) + # ), # ComposableNodeContainer( # name="ffc_container", From 4920a2fd35cdbadf6cef4992d97bc36240ad7fcb Mon Sep 17 00:00:00 2001 From: osu_uwrt_bot Date: Fri, 21 Nov 2025 15:11:41 -0500 Subject: [PATCH 09/33] Slightly better tunes --- riptide_descriptions/config/talos.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/riptide_descriptions/config/talos.yaml b/riptide_descriptions/config/talos.yaml index da54281..213e4bd 100644 --- a/riptide_descriptions/config/talos.yaml +++ b/riptide_descriptions/config/talos.yaml @@ -153,9 +153,9 @@ controller: #linear unit are newtons per meter, angular are newton meter per radian #the default gains for normal operation - p_gains: [3.0, 18.0, 200.0, 2.0, 2.0, 25.0] + p_gains: [3.0, 18.0, 200.0, 2.0, 2.0, 30.0] i_gains: [0.0, 0.0, 0.0, 0.05, 1.0, 1.0] - d_gains: [5.0, 5.0, 90.0, 0.1, 0.1, 2.0] + d_gains: [5.0, 5.0, 90.0, 0.1, 0.1, 0.1] # the control value thresholds for each DOF -- body frame max_control_thresholds: [30, 30, 30, 15, 15, 15] From d3cd486ad469beacfa6d9ced3d6458479c780812 Mon Sep 17 00:00:00 2001 From: osu_uwrt_bot Date: Fri, 21 Nov 2025 15:13:13 -0500 Subject: [PATCH 10/33] ZEDXm cal --- riptide_hardware/cfg/ffc_config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/riptide_hardware/cfg/ffc_config.yaml b/riptide_hardware/cfg/ffc_config.yaml index ddedfc2..c160ca0 100644 --- a/riptide_hardware/cfg/ffc_config.yaml +++ b/riptide_hardware/cfg/ffc_config.yaml @@ -5,9 +5,9 @@ serial_number: 55348591 camera_name: "talos/ffc" pub_resolution: "NATIVE" # The resolution used for image and depth map publishing. 'NATIVE' to use the same `general.grab_resolution` - `CUSTOM` to apply the `general.pub_downscale_factor` downscale factory to reduce bandwidth in transmission - pub_downscale_factor: 2.0 # rescale factor used to rescale image before publishing when 'pub_resolution' is 'CUSTOM' + # pub_downscale_factor: 2.0 # rescale factor used to rescale image before publishing when 'pub_resolution' is 'CUSTOM' pub_frame_rate: 30.0 - optional_opencv_calibration_file: "/home/ros/zed_cals/ffc_zedxm_calibration.yaml" + optional_opencv_calibration_file: "/home/ros/zed_cals/zedxmffc_calibration.yaml" grab_resolution: 'HD1200' self_calib: false pos_tracking: From 3141c9df9b15bc15a8d6e59c7945ce5df5a13e46 Mon Sep 17 00:00:00 2001 From: osu_uwrt_bot Date: Sat, 22 Nov 2025 17:21:52 -0500 Subject: [PATCH 11/33] Stable tunes with good convergence + good FF --- riptide_descriptions/config/talos.yaml | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/riptide_descriptions/config/talos.yaml b/riptide_descriptions/config/talos.yaml index 213e4bd..4ecb3b8 100644 --- a/riptide_descriptions/config/talos.yaml +++ b/riptide_descriptions/config/talos.yaml @@ -24,7 +24,7 @@ controller: drag_enable: [1, 1, 0, 0, 0, 0] feed_forward: - base_wrench: [-0.3, 0.16, -7.92, 0.03, 1.35, 0.3] + base_wrench: [-0.6, -1.0, -7.50, 0.03, 1.35, -0.2] # base_wrench: [-1.0, -1.0, 0.0, 0.0, 0.0, 0.0] auto_tune: @@ -123,14 +123,14 @@ controller: #[x,y,z,r,p,y] #first order eta - eta_order_0: [0.8, 0.3, 4.5, 0.2, 0.2, 0.3] + eta_order_0: [0.8, 0.8, 0.5, 0.2, 0.2, 0.3] #second order eta - eta_order_1: [0.08, 0.06, 0.3, 0.0, 0.0, 0.0] + eta_order_1: [0.1, 0.2, 0.08, 0.0, 0.0, 0.0] #lambda - lambda: [0.2, 0.2, 1.0, 10.0, 10.0, 0.35] + lambda: [0.6, 0.6, 1.0, 10.0, 10.0, 0.35] #format: 'a, m' for each degree of freedom #where: @@ -153,10 +153,14 @@ controller: #linear unit are newtons per meter, angular are newton meter per radian #the default gains for normal operation - p_gains: [3.0, 18.0, 200.0, 2.0, 2.0, 30.0] - i_gains: [0.0, 0.0, 0.0, 0.05, 1.0, 1.0] - d_gains: [5.0, 5.0, 90.0, 0.1, 0.1, 0.1] - + p_gains: [3.0, 18.0, 200.0, 2.0, 1.0, 20.0] + i_gains: [0.0, 0.0, 0.0, 0.05, 0.0, 0.03] + d_gains: [5.0, 5.0, 90.0, 0.1, 0.2, 0.1] + + # #the default gains for normal operation + # p_gains: [3.0, 18.0, 200.0, 2.0, 3.5, 8.0] + # i_gains: [0.0, 0.0, 0.0, 0.0, 0.0, 2.0] + # d_gains: [5.0, 5.0, 90.0, 0.25, 0.25, 0.2] # the control value thresholds for each DOF -- body frame max_control_thresholds: [30, 30, 30, 15, 15, 15] reset_threshold: 0.5 From 105d057add28b49f13983e8edbfc819e43234ff1 Mon Sep 17 00:00:00 2001 From: Effo12345 <4p7septipuses@gmail.com> Date: Fri, 5 Dec 2025 19:50:04 -0500 Subject: [PATCH 12/33] Updated COM --- riptide_descriptions/config/talos.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riptide_descriptions/config/talos.yaml b/riptide_descriptions/config/talos.yaml index 4ecb3b8..bc3bd82 100644 --- a/riptide_descriptions/config/talos.yaml +++ b/riptide_descriptions/config/talos.yaml @@ -6,7 +6,7 @@ base_link: [-0.14, 0.03, -0.09] # Vehicle mass properties mass: 31.998 -com: [-0.148, 0.040, -0.071] +com: [-0.151, 0.041, -0.044] inertia: [0.72604692, 1.59322252, 1.65134701] # kg*m^2 hull_volume: .11 #make this real From 03f2fa8a515b4f3df4ae0363225b3e096afc1c79 Mon Sep 17 00:00:00 2001 From: Effo12345 <4p7septipuses@gmail.com> Date: Sat, 6 Dec 2025 14:45:27 -0500 Subject: [PATCH 13/33] Cursed awful ff tune + controller tuning --- riptide_descriptions/config/talos.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/riptide_descriptions/config/talos.yaml b/riptide_descriptions/config/talos.yaml index bc3bd82..3b5a112 100644 --- a/riptide_descriptions/config/talos.yaml +++ b/riptide_descriptions/config/talos.yaml @@ -24,7 +24,7 @@ controller: drag_enable: [1, 1, 0, 0, 0, 0] feed_forward: - base_wrench: [-0.6, -1.0, -7.50, 0.03, 1.35, -0.2] + base_wrench: [-1.5, -0.4, -8.41, 0.45, 2.1, -0.1] # base_wrench: [-1.0, -1.0, 0.0, 0.0, 0.0, 0.0] auto_tune: @@ -123,14 +123,14 @@ controller: #[x,y,z,r,p,y] #first order eta - eta_order_0: [0.8, 0.8, 0.5, 0.2, 0.2, 0.3] - + eta_order_0: [1.2, 1.5, 5.0, 0.2, 0.2, 1.3] #second order eta - eta_order_1: [0.1, 0.2, 0.08, 0.0, 0.0, 0.0] + eta_order_1: [0.05, 0.04, 0.3, 0.0, 0.0, 0.2] #lambda - lambda: [0.6, 0.6, 1.0, 10.0, 10.0, 0.35] + lambda: [1.2, 0.2, 1.0, 10.0, 10.0, 0.35] + #format: 'a, m' for each degree of freedom #where: @@ -138,7 +138,7 @@ controller: # m = gravity well saturation error velocity_curve_params: [8.0, 0.8, #x 8.0, 0.8, #y - 10.0, 0.5, #z + 8.0, 0.5, #z 15.0, 1.0, #r 15.0, 1.0, #p 1.5, 0.3] #yaw @@ -153,9 +153,9 @@ controller: #linear unit are newtons per meter, angular are newton meter per radian #the default gains for normal operation - p_gains: [3.0, 18.0, 200.0, 2.0, 1.0, 20.0] - i_gains: [0.0, 0.0, 0.0, 0.05, 0.0, 0.03] - d_gains: [5.0, 5.0, 90.0, 0.1, 0.2, 0.1] + p_gains: [3.0, 18.0, 200.0, 6.0, 0.5, 10.0] + i_gains: [0.0, 0.0, 0.0, 0.01, 0.01, 1.0] + d_gains: [5.0, 5.0, 90.0, 1.2, 0.01, 0.03] # #the default gains for normal operation # p_gains: [3.0, 18.0, 200.0, 2.0, 3.5, 8.0] From 39279c5d569ddeba9e95b2ae595ca0ab73e79832 Mon Sep 17 00:00:00 2001 From: Effo12345 <4p7septipuses@gmail.com> Date: Mon, 12 Jan 2026 20:50:05 -0500 Subject: [PATCH 14/33] Really good RPAC tunes with fixed angular accumulators --- riptide_descriptions/config/talos.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/riptide_descriptions/config/talos.yaml b/riptide_descriptions/config/talos.yaml index 3b5a112..03c4c8f 100644 --- a/riptide_descriptions/config/talos.yaml +++ b/riptide_descriptions/config/talos.yaml @@ -24,7 +24,7 @@ controller: drag_enable: [1, 1, 0, 0, 0, 0] feed_forward: - base_wrench: [-1.5, -0.4, -8.41, 0.45, 2.1, -0.1] + base_wrench: [-1.5, -0.4, -8.41, 0.45, 2.1, 0.0] # base_wrench: [-1.0, -1.0, 0.0, 0.0, 0.0, 0.0] auto_tune: @@ -123,13 +123,13 @@ controller: #[x,y,z,r,p,y] #first order eta - eta_order_0: [1.2, 1.5, 5.0, 0.2, 0.2, 1.3] + eta_order_0: [0.8, 1.5, 5.0, 0.2, 0.2, 1.3] #second order eta - eta_order_1: [0.05, 0.04, 0.3, 0.0, 0.0, 0.2] + eta_order_1: [0.1, 0.04, 0.3, 0.0, 0.0, 0.2] #lambda - lambda: [1.2, 0.2, 1.0, 10.0, 10.0, 0.35] + lambda: [0.6, 0.2, 1.0, 10.0, 10.0, 0.35] #format: 'a, m' for each degree of freedom From 026b8b0a974153baf0238e4b1475e0a86581d73c Mon Sep 17 00:00:00 2001 From: zehdari Date: Tue, 20 Jan 2026 18:46:52 -0500 Subject: [PATCH 15/33] Tune w/ acoustics, 5/6 torps rpac --- riptide_descriptions/config/talos.yaml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/riptide_descriptions/config/talos.yaml b/riptide_descriptions/config/talos.yaml index 03c4c8f..984a56f 100644 --- a/riptide_descriptions/config/talos.yaml +++ b/riptide_descriptions/config/talos.yaml @@ -6,7 +6,11 @@ base_link: [-0.14, 0.03, -0.09] # Vehicle mass properties mass: 31.998 -com: [-0.151, 0.041, -0.044] +# COM no IVC +# com: [-0.151, 0.041, -0.044] + +# COM w/ IVC +com: [-0.157, 0.040, -0.048] inertia: [0.72604692, 1.59322252, 1.65134701] # kg*m^2 hull_volume: .11 #make this real @@ -24,7 +28,7 @@ controller: drag_enable: [1, 1, 0, 0, 0, 0] feed_forward: - base_wrench: [-1.5, -0.4, -8.41, 0.45, 2.1, 0.0] + base_wrench: [-1.5, -0.4, -4.01, 0.45, 2.4, 0.0] # base_wrench: [-1.0, -1.0, 0.0, 0.0, 0.0, 0.0] auto_tune: @@ -129,7 +133,7 @@ controller: eta_order_1: [0.1, 0.04, 0.3, 0.0, 0.0, 0.2] #lambda - lambda: [0.6, 0.2, 1.0, 10.0, 10.0, 0.35] + lambda: [0.8, 0.2, 1.0, 10.0, 10.0, 0.35] #format: 'a, m' for each degree of freedom @@ -153,9 +157,9 @@ controller: #linear unit are newtons per meter, angular are newton meter per radian #the default gains for normal operation - p_gains: [3.0, 18.0, 200.0, 6.0, 0.5, 10.0] - i_gains: [0.0, 0.0, 0.0, 0.01, 0.01, 1.0] - d_gains: [5.0, 5.0, 90.0, 1.2, 0.01, 0.03] + p_gains: [3.0, 18.0, 200.0, 10.0, 8.0, 15.0] + i_gains: [0.0, 0.0, 0.0, 0.01, 0.005, 0.5] + d_gains: [5.0, 5.0, 90.0, 0.02, 0.1, 0.02] # #the default gains for normal operation # p_gains: [3.0, 18.0, 200.0, 2.0, 3.5, 8.0] @@ -364,4 +368,4 @@ thrusters: [ type: 1, pose: [-0.134, 0.440, -0.244, 0.0, 0.0, 0.0] } -] +] \ No newline at end of file From b8b76947c0b95c123e127286472d96866d960726 Mon Sep 17 00:00:00 2001 From: osu-uwrt-bot2 Date: Sun, 8 Feb 2026 21:44:38 -0500 Subject: [PATCH 16/33] Fix logging level --- riptide_hardware/launch/apriltag.launch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riptide_hardware/launch/apriltag.launch.py b/riptide_hardware/launch/apriltag.launch.py index 41a034a..9b68174 100644 --- a/riptide_hardware/launch/apriltag.launch.py +++ b/riptide_hardware/launch/apriltag.launch.py @@ -25,7 +25,7 @@ def generate_launch_description(): namespace="apriltag", package='rclcpp_components', executable='component_container', - arguments=['--ros-args', '--log-level', 'error'], + arguments=['--ros-args', '--log-level', 'info'], composable_node_descriptions=[ ComposableNode( name='apriltag_36h11', From e120cbc26d7d4da698ead4c37d9433425dd0513c Mon Sep 17 00:00:00 2001 From: osu-uwrt-bot2 Date: Sun, 22 Feb 2026 23:06:59 -0500 Subject: [PATCH 17/33] FFC depth limit --- riptide_hardware/cfg/ffc_config.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/riptide_hardware/cfg/ffc_config.yaml b/riptide_hardware/cfg/ffc_config.yaml index c160ca0..a34abb3 100644 --- a/riptide_hardware/cfg/ffc_config.yaml +++ b/riptide_hardware/cfg/ffc_config.yaml @@ -10,6 +10,8 @@ optional_opencv_calibration_file: "/home/ros/zed_cals/zedxmffc_calibration.yaml" grab_resolution: 'HD1200' self_calib: false + depth: + max_depth: 4.0 pos_tracking: publish_tf: false debug: From 3bebfd47e5b7cf85e018aa8b9f232104bb1aa312 Mon Sep 17 00:00:00 2001 From: osu-uwrt-bot2 Date: Sun, 1 Mar 2026 19:40:17 -0500 Subject: [PATCH 18/33] Claw COM and frame --- riptide_descriptions/config/talos.yaml | 5 ++++- riptide_descriptions/urdf/robot_actuators.xacro | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/riptide_descriptions/config/talos.yaml b/riptide_descriptions/config/talos.yaml index 984a56f..d865420 100644 --- a/riptide_descriptions/config/talos.yaml +++ b/riptide_descriptions/config/talos.yaml @@ -10,7 +10,7 @@ mass: 31.998 # com: [-0.151, 0.041, -0.044] # COM w/ IVC -com: [-0.157, 0.040, -0.048] +com: [-0.152, 0.038, -0.065] inertia: [0.72604692, 1.59322252, 1.65134701] # kg*m^2 hull_volume: .11 #make this real @@ -307,6 +307,9 @@ droppers: hitch: pose: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +claw: + pose: [0.13335, 0.03175, -0.5588, 0.0, 0.0, 0.0] + cameras: [ { type: zed, diff --git a/riptide_descriptions/urdf/robot_actuators.xacro b/riptide_descriptions/urdf/robot_actuators.xacro index 75d6b92..010ba49 100644 --- a/riptide_descriptions/urdf/robot_actuators.xacro +++ b/riptide_descriptions/urdf/robot_actuators.xacro @@ -106,4 +106,12 @@ parent="${namespace}/origin" pose="${config['hitch']['pose']}" /> + + + + From b905e3e5ad9f74c21e74e95841d317a96a25308e Mon Sep 17 00:00:00 2001 From: osu-uwrt-bot2 Date: Sun, 1 Mar 2026 19:40:45 -0500 Subject: [PATCH 19/33] Updated zed launches --- riptide_hardware/cfg/dfc_config.yaml | 1 + riptide_hardware/cfg/ffc_config.yaml | 1 + riptide_hardware/launch/zed.launch.py | 177 ++++---------------------- 3 files changed, 29 insertions(+), 150 deletions(-) diff --git a/riptide_hardware/cfg/dfc_config.yaml b/riptide_hardware/cfg/dfc_config.yaml index ad56f65..fc846f2 100644 --- a/riptide_hardware/cfg/dfc_config.yaml +++ b/riptide_hardware/cfg/dfc_config.yaml @@ -3,6 +3,7 @@ general: camera_model: zedxm serial_number: 51491740 + camera_id: 1 camera_name: "talos/dfc" grab_resolution: 'HD1200' # For zedx/zedxm use HD1200, for zed2i use HD2K optional_opencv_calibration_file: "/home/ros/zed_cals/zed_dfc_calibration2.yaml" diff --git a/riptide_hardware/cfg/ffc_config.yaml b/riptide_hardware/cfg/ffc_config.yaml index a34abb3..4fedb9e 100644 --- a/riptide_hardware/cfg/ffc_config.yaml +++ b/riptide_hardware/cfg/ffc_config.yaml @@ -3,6 +3,7 @@ general: camera_model: zedxm serial_number: 55348591 + camera_id: 0 camera_name: "talos/ffc" pub_resolution: "NATIVE" # The resolution used for image and depth map publishing. 'NATIVE' to use the same `general.grab_resolution` - `CUSTOM` to apply the `general.pub_downscale_factor` downscale factory to reduce bandwidth in transmission # pub_downscale_factor: 2.0 # rescale factor used to rescale image before publishing when 'pub_resolution' is 'CUSTOM' diff --git a/riptide_hardware/launch/zed.launch.py b/riptide_hardware/launch/zed.launch.py index a88b7b4..3cd2ad0 100644 --- a/riptide_hardware/launch/zed.launch.py +++ b/riptide_hardware/launch/zed.launch.py @@ -1,173 +1,53 @@ from launch import LaunchDescription -from launch.actions import DeclareLaunchArgument, GroupAction, Shutdown +from launch.actions import DeclareLaunchArgument, GroupAction from launch_ros.actions import PushRosNamespace, ComposableNodeContainer, Node from launch_ros.descriptions import ComposableNode -from launch.conditions import IfCondition -from launch.substitutions import PythonExpression, LaunchConfiguration as LC +from launch.substitutions import LaunchConfiguration as LC from ament_index_python import get_package_share_directory import os - - def generate_launch_description(): + zed_wrapper_share = get_package_share_directory("zed_wrapper") + riptide_share = get_package_share_directory("riptide_hardware2") - # Define common configuration path - zed_config_path = os.path.join( - get_package_share_directory('zed_wrapper'), - "config", - "common_stereo.yaml" - ) - + zed_common = os.path.join(zed_wrapper_share, "config", "common_stereo.yaml") + zedxm = os.path.join(zed_wrapper_share, "config", "zedxm.yaml") - # Paths for individual camera configurations + ffc_cfg = os.path.join(riptide_share, "cfg", "ffc_config.yaml") + dfc_cfg = os.path.join(riptide_share, "cfg", "dfc_config.yaml") - # FFC Zed 2i - zed2i_camera_path = os.path.join( - get_package_share_directory('zed_wrapper'), - 'config', - 'zed2i.yaml' - ) - - # FFC Zed X - zedx_camera_path = os.path.join( - get_package_share_directory('zed_wrapper'), - 'config', - 'zedx.yaml' - ) - - # DFC Zed X Mini - zedxm_camera_path = os.path.join( - get_package_share_directory('zed_wrapper'), - 'config', - 'zedxm.yaml' - ) - - # FFC Overrides - ffc_config_path = os.path.join( - get_package_share_directory('riptide_hardware2'), - 'cfg', - 'ffc_config.yaml' + ffc_node = ComposableNode( + package="zed_components", + plugin="stereolabs::ZedCamera", + namespace="ffc", + name="zed_node", + parameters=[zed_common, zedxm, ffc_cfg], ) - # DFC Overrides - dfc_config_path = os.path.join( - get_package_share_directory('riptide_hardware2'), - 'cfg', - 'dfc_config.yaml' + dfc_node = ComposableNode( + package="zed_components", + plugin="stereolabs::ZedCamera", + namespace="dfc", + name="zed_node", + parameters=[zed_common, zedxm, dfc_cfg], ) - - tank_config_path = os.path.join( - get_package_share_directory('riptide_hardware2'), - 'cfg', - 'tank_ffc_config.yaml' - ) - - zed_compression_path = os.path.join( - get_package_share_directory('riptide_hardware2'), - 'cfg', - 'zed_compression.yaml' - ) - + return LaunchDescription([ - DeclareLaunchArgument( - name="robot", - default_value="tempest", - description="name of the robot" - ), - # Group actions under the robot namespace + DeclareLaunchArgument("robot", default_value="tempest"), + GroupAction([ PushRosNamespace(LC("robot")), ComposableNodeContainer( - name="ffc_container", + name="zed_container", namespace="", package="rclcpp_components", executable="component_container", output="screen", - respawn=True, - composable_node_descriptions=[ - # First ZED Node (FFC) - ComposableNode( - package="zed_components", - plugin="stereolabs::ZedCamera", - namespace="ffc", - name="zed_node", - parameters=[ - zed_config_path, - zedxm_camera_path, - ffc_config_path, - {'general.serial_number': 55348591} - ] - ), - ], - condition=IfCondition( - PythonExpression(["'", LC("robot"), "' == 'talos'"])) + respawn=False, + composable_node_descriptions=[ffc_node, dfc_node], ), - - # ComposableNodeContainer( - # name="dfc_container", - # namespace="", - # package="rclcpp_components", - # executable="component_container", - # output="screen", - # respawn=True, - # composable_node_descriptions=[ - # # Second ZED Node (DFC) - # ComposableNode( - # package="zed_components", - # plugin="stereolabs::ZedCamera", - # namespace="dfc", - # name="zed_node", - # parameters=[ - # zed_config_path, - # zedxm_camera_path, - # dfc_config_path, - # {'general.serial_number': 51491740} - # ] - # ), - # ], - # condition=IfCondition( - # PythonExpression(["'", LC("robot"), "' == 'talos'"])) - # ), - - # ComposableNodeContainer( - # name="ffc_container", - # namespace="/", - # package="rclcpp_components", - # executable="component_container", - # output="screen", - # respawn=True, - # composable_node_descriptions=[ - # # The tank camera - # ComposableNode( - # package="zed_components", - # plugin="stereolabs::ZedCamera", - # namespace="ffc", - # name="zed_node", - # parameters=[ - # # zedxm_camera_path, - # zed_config_path, - # tank_config_path, - # # zed_compression_path, - # {"general.camera_name": "liltank/ffc"}, - # {"mapping.clicked_point_topic": "/clicked_point"}, - # ] - # ), - # ], - # condition=IfCondition( - # PythonExpression(["'", LC("robot"), "' == 'liltank'"])) - # ), - - # Disabled for now as both are on by default - # # Launch the ZedManager node - # Node( - # package='riptide_hardware2', - # executable='zed_manager.py', - # name='ZedManager', - # output='screen' - # ) - - # Used for taking pictures, good for camera calibration + Node( package='riptide_hardware2', executable='picture_taker.py', @@ -181,8 +61,5 @@ def generate_launch_description(): {"save_split": True} ] ) - ], scoped=True), - - ]) \ No newline at end of file From 7b61ef8abc79879fafbad8ac563225af973a170f Mon Sep 17 00:00:00 2001 From: osu-uwrt-bot2 Date: Sun, 29 Mar 2026 18:45:48 -0400 Subject: [PATCH 20/33] Revert to pre-claw COM --- riptide_descriptions/config/talos.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riptide_descriptions/config/talos.yaml b/riptide_descriptions/config/talos.yaml index d865420..94fa740 100644 --- a/riptide_descriptions/config/talos.yaml +++ b/riptide_descriptions/config/talos.yaml @@ -10,7 +10,7 @@ mass: 31.998 # com: [-0.151, 0.041, -0.044] # COM w/ IVC -com: [-0.152, 0.038, -0.065] +com: [-0.157, 0.040, -0.048] inertia: [0.72604692, 1.59322252, 1.65134701] # kg*m^2 hull_volume: .11 #make this real From 37eb9006ddf5f6ca8c68273912c1f32e31695385 Mon Sep 17 00:00:00 2001 From: osu-uwrt-bot2 Date: Mon, 13 Apr 2026 14:28:10 -0400 Subject: [PATCH 21/33] Charuco board cal --- riptide_hardware/cfg/ffc_config.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/riptide_hardware/cfg/ffc_config.yaml b/riptide_hardware/cfg/ffc_config.yaml index 4fedb9e..d737a6e 100644 --- a/riptide_hardware/cfg/ffc_config.yaml +++ b/riptide_hardware/cfg/ffc_config.yaml @@ -8,9 +8,11 @@ pub_resolution: "NATIVE" # The resolution used for image and depth map publishing. 'NATIVE' to use the same `general.grab_resolution` - `CUSTOM` to apply the `general.pub_downscale_factor` downscale factory to reduce bandwidth in transmission # pub_downscale_factor: 2.0 # rescale factor used to rescale image before publishing when 'pub_resolution' is 'CUSTOM' pub_frame_rate: 30.0 - optional_opencv_calibration_file: "/home/ros/zed_cals/zedxmffc_calibration.yaml" + optional_opencv_calibration_file: "/home/ros/zed_cals/charuco_ffc_zedxm_cal.yaml" grab_resolution: 'HD1200' self_calib: false + # svo: + # svo_path: "/home/ros/svos/prequal/prequal1.svo2" depth: max_depth: 4.0 pos_tracking: From 1af94cb21c2f8a23f7d1eb1a603440710bc21a9b Mon Sep 17 00:00:00 2001 From: Effo12345 <4p7septipuses@gmail.com> Date: Mon, 13 Apr 2026 13:45:20 -0400 Subject: [PATCH 22/33] SetString service --- riptide_msgs/srv/SetString.srv | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 riptide_msgs/srv/SetString.srv diff --git a/riptide_msgs/srv/SetString.srv b/riptide_msgs/srv/SetString.srv new file mode 100644 index 0000000..7377b4c --- /dev/null +++ b/riptide_msgs/srv/SetString.srv @@ -0,0 +1,4 @@ +string data +--- +bool success +string message \ No newline at end of file From 931bc74240b9c5a36e3ff924d19b64d16f1c2249 Mon Sep 17 00:00:00 2001 From: zehdari Date: Sun, 7 Jun 2026 13:43:42 -0400 Subject: [PATCH 23/33] add StartBinaryClassifier srv --- riptide_msgs/srv/StartBinaryClassifier.srv | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 riptide_msgs/srv/StartBinaryClassifier.srv diff --git a/riptide_msgs/srv/StartBinaryClassifier.srv b/riptide_msgs/srv/StartBinaryClassifier.srv new file mode 100644 index 0000000..27c175b --- /dev/null +++ b/riptide_msgs/srv/StartBinaryClassifier.srv @@ -0,0 +1,6 @@ +string class_name +string frame1_name +string frame2_name +--- +bool success +string message \ No newline at end of file From aa39af2c8dbc7ebd592cb1871de12efa822c91f6 Mon Sep 17 00:00:00 2001 From: Effo12345 <4p7septipuses@gmail.com> Date: Thu, 11 Jun 2026 23:18:40 -0400 Subject: [PATCH 24/33] Fix classifier param names --- riptide_msgs/srv/StartBinaryClassifier.srv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/riptide_msgs/srv/StartBinaryClassifier.srv b/riptide_msgs/srv/StartBinaryClassifier.srv index 27c175b..0eb09cf 100644 --- a/riptide_msgs/srv/StartBinaryClassifier.srv +++ b/riptide_msgs/srv/StartBinaryClassifier.srv @@ -1,6 +1,6 @@ string class_name -string frame1_name -string frame2_name +string object1_name +string object2_name --- bool success string message \ No newline at end of file From 589f9a1174b1a5a8419241feebb8b82f7380a295 Mon Sep 17 00:00:00 2001 From: osu-uwrt-bot2 Date: Sun, 14 Jun 2026 22:19:14 -0400 Subject: [PATCH 25/33] Tirpak 1 claw frame --- riptide_descriptions/config/talos.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riptide_descriptions/config/talos.yaml b/riptide_descriptions/config/talos.yaml index 94fa740..a453ffd 100644 --- a/riptide_descriptions/config/talos.yaml +++ b/riptide_descriptions/config/talos.yaml @@ -308,7 +308,7 @@ hitch: pose: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] claw: - pose: [0.13335, 0.03175, -0.5588, 0.0, 0.0, 0.0] + pose: [0.19, 0.0655, -0.3712, 0.0, 0.0, 0.0] cameras: [ { From 36695d3ed1ccc3dc7b4b6335d8d0fd80ef6d3450 Mon Sep 17 00:00:00 2001 From: osu-uwrt-bot2 Date: Sun, 14 Jun 2026 22:19:24 -0400 Subject: [PATCH 26/33] Tirpak 1 DFC cal --- riptide_hardware/cfg/dfc_config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riptide_hardware/cfg/dfc_config.yaml b/riptide_hardware/cfg/dfc_config.yaml index fc846f2..a7a4d47 100644 --- a/riptide_hardware/cfg/dfc_config.yaml +++ b/riptide_hardware/cfg/dfc_config.yaml @@ -6,7 +6,7 @@ camera_id: 1 camera_name: "talos/dfc" grab_resolution: 'HD1200' # For zedx/zedxm use HD1200, for zed2i use HD2K - optional_opencv_calibration_file: "/home/ros/zed_cals/zed_dfc_calibration2.yaml" + optional_opencv_calibration_file: "/home/ros/zed_cals/dfc_charuco_cal.yaml" pub_resolution: "NATIVE" # The resolution used for image and depth map publishing. 'NATIVE' to use the same `general.grab_resolution` - `CUSTOM` to apply the `general.pub_downscale_factor` downscale factory to reduce bandwidth in transmission pub_downscale_factor: 2.0 # rescale factor used to rescale image before publishing when 'pub_resolution' is 'CUSTOM' pub_frame_rate: 30.0 From a289d0407571b60f36accac94db6266eac5eebbf Mon Sep 17 00:00:00 2001 From: Effo12345 <4p7septipuses@gmail.com> Date: Sun, 14 Jun 2026 22:19:34 -0400 Subject: [PATCH 27/33] Fix feedforward --- riptide_descriptions/config/talos.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/riptide_descriptions/config/talos.yaml b/riptide_descriptions/config/talos.yaml index 94fa740..725b70c 100644 --- a/riptide_descriptions/config/talos.yaml +++ b/riptide_descriptions/config/talos.yaml @@ -28,7 +28,7 @@ controller: drag_enable: [1, 1, 0, 0, 0, 0] feed_forward: - base_wrench: [-1.5, -0.4, -4.01, 0.45, 2.4, 0.0] + base_wrench: [-1.5, -0.4, 0.0, 0.45, 2.4, 0.0] # base_wrench: [-1.0, -1.0, 0.0, 0.0, 0.0, 0.0] auto_tune: @@ -302,7 +302,7 @@ torpedoes: baseline: 0.0365125 droppers: - pose: [0.048, 0.17200625, -0.1501, 0.0, 0.0, 0.0] + pose: [0.0, 0.17200625, -0.1501, 0.0, 0.0, 0.0] hitch: pose: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] From a989ec68ccb664a62c6bfc495d8c5d435538263c Mon Sep 17 00:00:00 2001 From: Effo12345 <4p7septipuses@gmail.com> Date: Sun, 14 Jun 2026 22:19:48 -0400 Subject: [PATCH 28/33] Take z from the IMU --- riptide_hardware/cfg/talos_ekf.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/riptide_hardware/cfg/talos_ekf.yaml b/riptide_hardware/cfg/talos_ekf.yaml index 9e80c86..8466bfb 100644 --- a/riptide_hardware/cfg/talos_ekf.yaml +++ b/riptide_hardware/cfg/talos_ekf.yaml @@ -9,7 +9,7 @@ publish_acceleration: true #make camera happy - # predict_to_current_time: true + predict_to_current_time: true # transform_time_offset: -0.1 @@ -36,7 +36,7 @@ true, true, false, false, false, false, true, true, false, # Taking out yaw from imu since fog rate is lower now - true, true, true] + true, true, false] # Imu comes in faster than the ekf runs so we need a queue imu0_queue_size: 14 From 175595fbfa31d9538d42e0f41bd93e03b832faa7 Mon Sep 17 00:00:00 2001 From: osu-uwrt-bot2 Date: Sun, 28 Jun 2026 09:03:31 -0400 Subject: [PATCH 29/33] Need IMU in the Z since depth is too slow --- riptide_hardware/cfg/talos_ekf.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riptide_hardware/cfg/talos_ekf.yaml b/riptide_hardware/cfg/talos_ekf.yaml index 8466bfb..90c2bc4 100644 --- a/riptide_hardware/cfg/talos_ekf.yaml +++ b/riptide_hardware/cfg/talos_ekf.yaml @@ -36,7 +36,7 @@ true, true, false, false, false, false, true, true, false, # Taking out yaw from imu since fog rate is lower now - true, true, false] + true, true, true] # Imu comes in faster than the ekf runs so we need a queue imu0_queue_size: 14 From 32e237f11084d9d4357eadb9b1985650fb953176 Mon Sep 17 00:00:00 2001 From: osu-uwrt-bot2 Date: Sun, 28 Jun 2026 09:03:56 -0400 Subject: [PATCH 30/33] Claw ff and ungaslight the torps --- riptide_descriptions/config/talos.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/riptide_descriptions/config/talos.yaml b/riptide_descriptions/config/talos.yaml index 9f512d3..e6cf37c 100644 --- a/riptide_descriptions/config/talos.yaml +++ b/riptide_descriptions/config/talos.yaml @@ -28,7 +28,7 @@ controller: drag_enable: [1, 1, 0, 0, 0, 0] feed_forward: - base_wrench: [-1.5, -0.4, 0.0, 0.45, 2.4, 0.0] + base_wrench: [-0.25, -0.1, -3.0, 0.0, 1.4, -0.005] # base_wrench: [-1.0, -1.0, 0.0, 0.0, 0.0, 0.0] auto_tune: @@ -298,7 +298,7 @@ poker: pose: [0.2286, 0.0127, -0.17145, 0, 0, 0] torpedoes: - pose: [0.048, 0.17200625, -0.0954, 0.0, 0.0, 0.0] #real z: -0.1524, real y: 0.17700625 + pose: [0.048, 0.17200625, -0.1524, 0.0, 0.0, 0.0] #real z: -0.1524, real y: 0.17700625 baseline: 0.0365125 droppers: From 722a8b50c8a71231a7d00d6fdea4b8eff8c98ed4 Mon Sep 17 00:00:00 2001 From: osu-uwrt-bot2 Date: Sun, 28 Jun 2026 09:04:23 -0400 Subject: [PATCH 31/33] Reduce orin load --- riptide_hardware/launch/diagnostics.launch.py | 2 +- riptide_hardware/launch/hardware.launch.py | 18 ----------------- .../launch/hardware_fake_dvl.launch.py | 20 +------------------ 3 files changed, 2 insertions(+), 38 deletions(-) diff --git a/riptide_hardware/launch/diagnostics.launch.py b/riptide_hardware/launch/diagnostics.launch.py index 3fc03d3..46a9b2a 100644 --- a/riptide_hardware/launch/diagnostics.launch.py +++ b/riptide_hardware/launch/diagnostics.launch.py @@ -77,7 +77,7 @@ def generate_launch_description(): electrical_monitor_node, firmware_monitor_node, voltage_monitor_node, - sensor_monitor_node, + # sensor_monitor_node, computer_monitor_node, aggregator ]) \ No newline at end of file diff --git a/riptide_hardware/launch/hardware.launch.py b/riptide_hardware/launch/hardware.launch.py index 58d6106..b656b9c 100644 --- a/riptide_hardware/launch/hardware.launch.py +++ b/riptide_hardware/launch/hardware.launch.py @@ -15,11 +15,6 @@ "launch", "copro_agent.launch.py", ) -diagnostics_launch_file = os.path.join( - get_package_share_directory('riptide_hardware2'), - "launch", "diagnostics.launch.py" -) - dvl_launch_file = os.path.join( get_package_share_directory('riptide_hardware2'), "launch", "dvl.launch.py" @@ -55,12 +50,6 @@ def generate_launch_description(): ('robot', LC('robot')), ] ), - IncludeLaunchDescription( - AnyLaunchDescriptionSource(diagnostics_launch_file), - launch_arguments=[ - ('robot', LC('robot')), - ] - ), IncludeLaunchDescription( AnyLaunchDescriptionSource(dvl_launch_file), launch_arguments=[ @@ -110,13 +99,6 @@ def generate_launch_description(): "imu_pwr_cycle.yaml" ) ] - ), - Node( - package='riptide_hardware2', - executable='pressure_monitor.py', - name='pressure_monitor', - output='screen', - parameters=[{"robot":LC('robot')}] ) ], scoped=True) ]) diff --git a/riptide_hardware/launch/hardware_fake_dvl.launch.py b/riptide_hardware/launch/hardware_fake_dvl.launch.py index 408e9d0..60f147e 100644 --- a/riptide_hardware/launch/hardware_fake_dvl.launch.py +++ b/riptide_hardware/launch/hardware_fake_dvl.launch.py @@ -15,11 +15,6 @@ "launch", "copro_agent.launch.py", ) -diagnostics_launch_file = os.path.join( - get_package_share_directory('riptide_hardware2'), - "launch", "diagnostics.launch.py" -) - imu_launch_file = os.path.join( get_package_share_directory('riptide_imu'), "launch", "imu.launch.py" @@ -62,12 +57,6 @@ def generate_launch_description(): ('robot', LC('robot')), ] ), - IncludeLaunchDescription( - AnyLaunchDescriptionSource(diagnostics_launch_file), - launch_arguments=[ - ('robot', LC('robot')), - ] - ), Node( package='riptide_hardware2', executable='fake_dvl.py', @@ -112,13 +101,6 @@ def generate_launch_description(): executable='imu_power_cycle.py', name='imu_power_cycle', output='screen', - ), - Node( - package='riptide_hardware2', - executable='pressure_monitor.py', - name='pressure_monitor', - output='screen', - parameters=[{"robot":LC('robot')}] - ) + ) ], scoped=True) ]) From bb6822abecb26cb8aba29d1aea5b6b8984da3b39 Mon Sep 17 00:00:00 2001 From: osu-uwrt-bot2 Date: Sun, 28 Jun 2026 09:04:37 -0400 Subject: [PATCH 32/33] Actually use firmware stamp --- riptide_hardware/riptide_hardware2/depth_converter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riptide_hardware/riptide_hardware2/depth_converter.py b/riptide_hardware/riptide_hardware2/depth_converter.py index 1de7402..42147fc 100755 --- a/riptide_hardware/riptide_hardware2/depth_converter.py +++ b/riptide_hardware/riptide_hardware2/depth_converter.py @@ -51,7 +51,7 @@ def depthCb(self, msg): outMsg.header.frame_id = "odom" outMsg.pose.pose.position.z = msg.depth + addedDepth outMsg.pose.covariance[14] = msg.variance - outMsg.header.stamp = self.get_clock().now().to_msg() + outMsg.header.stamp = msg.header.stamp self.pub.publish(outMsg) From 9a249b2de405eb23184d265d0199ccc0695dd71b Mon Sep 17 00:00:00 2001 From: osu-uwrt-bot2 Date: Sun, 28 Jun 2026 21:29:52 -0400 Subject: [PATCH 33/33] Working pose and resolution --- riptide_descriptions/config/talos.yaml | 9 +++++---- riptide_hardware/cfg/dfc_config.yaml | 9 +++++---- riptide_hardware/cfg/ffc_config.yaml | 10 +++++++--- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/riptide_descriptions/config/talos.yaml b/riptide_descriptions/config/talos.yaml index e6cf37c..6380591 100644 --- a/riptide_descriptions/config/talos.yaml +++ b/riptide_descriptions/config/talos.yaml @@ -298,7 +298,7 @@ poker: pose: [0.2286, 0.0127, -0.17145, 0, 0, 0] torpedoes: - pose: [0.048, 0.17200625, -0.1524, 0.0, 0.0, 0.0] #real z: -0.1524, real y: 0.17700625 + pose: [0.048, 0.18200625, -0.1524, 0.0, 0.0, 0.0] #real z: -0.1524, real y: 0.17700625 baseline: 0.0365125 droppers: @@ -314,14 +314,15 @@ cameras: [ { type: zed, name: ffc, - baseline: 0.045, # m. Distance between cameras (manually measured) - pose: [-0.0195, -0.0889, 0, 0, 0, 0] + baseline: 0.050, # m. Distance between cameras (manually measured) + pose: [-0.0195, -0.0889, 0.02, -0.01, 0.05, 0] }, { type: zed, name: dfc, baseline: 0.045, - pose: [-0.145, -0.080, -0.08, 1.5707, 1.5707, 0] + # pose: [-0.145, -0.080, -0.08, 1.5707, 1.5707, 0] + pose: [-0.24347, -0.065568, -0.15943, 1.5507, 1.5107, 0] } ] diff --git a/riptide_hardware/cfg/dfc_config.yaml b/riptide_hardware/cfg/dfc_config.yaml index a7a4d47..1502e50 100644 --- a/riptide_hardware/cfg/dfc_config.yaml +++ b/riptide_hardware/cfg/dfc_config.yaml @@ -5,11 +5,12 @@ serial_number: 51491740 camera_id: 1 camera_name: "talos/dfc" - grab_resolution: 'HD1200' # For zedx/zedxm use HD1200, for zed2i use HD2K - optional_opencv_calibration_file: "/home/ros/zed_cals/dfc_charuco_cal.yaml" + grab_resolution: "HD1200" # For zedx/zedxm use HD1200, for zed2i use HD2K + optional_opencv_calibration_file: "/home/ros/zed_cals/dfc_charuco_test.yaml" + self_calib: false pub_resolution: "NATIVE" # The resolution used for image and depth map publishing. 'NATIVE' to use the same `general.grab_resolution` - `CUSTOM` to apply the `general.pub_downscale_factor` downscale factory to reduce bandwidth in transmission - pub_downscale_factor: 2.0 # rescale factor used to rescale image before publishing when 'pub_resolution' is 'CUSTOM' - pub_frame_rate: 30.0 + #pub_downscale_factor: 2.0 # rescale factor used to rescale image before publishing when 'pub_resolution' is 'CUSTOM' + grab_frame_rate: 15 pos_tracking: publish_tf: false debug: diff --git a/riptide_hardware/cfg/ffc_config.yaml b/riptide_hardware/cfg/ffc_config.yaml index d737a6e..748cade 100644 --- a/riptide_hardware/cfg/ffc_config.yaml +++ b/riptide_hardware/cfg/ffc_config.yaml @@ -6,14 +6,18 @@ camera_id: 0 camera_name: "talos/ffc" pub_resolution: "NATIVE" # The resolution used for image and depth map publishing. 'NATIVE' to use the same `general.grab_resolution` - `CUSTOM` to apply the `general.pub_downscale_factor` downscale factory to reduce bandwidth in transmission - # pub_downscale_factor: 2.0 # rescale factor used to rescale image before publishing when 'pub_resolution' is 'CUSTOM' - pub_frame_rate: 30.0 - optional_opencv_calibration_file: "/home/ros/zed_cals/charuco_ffc_zedxm_cal.yaml" + pub_downscale_factor: 2.0 # rescale factor used to rescale image before publishing when 'pub_resolution' is 'CUSTOM' + # pub_frame_rate: 30.0 + optional_opencv_calibration_file: "/home/ros/zed_cals/tirpak_ffc_charuco_2_tan.yaml" grab_resolution: 'HD1200' + grab_frame_rate: 15 self_calib: false + sensors: + sensors_image_sync: true # svo: # svo_path: "/home/ros/svos/prequal/prequal1.svo2" depth: + depth_mode: "NEURAL_LIGHT" max_depth: 4.0 pos_tracking: publish_tf: false