From cb2cf830dda2114e8854ace9060279a53e91ebe5 Mon Sep 17 00:00:00 2001 From: Luke Blommesteyn Date: Thu, 4 Jun 2026 23:07:18 -0400 Subject: [PATCH 1/2] feat: add software smoke test launch flags --- src/bringup/launch/full_system.launch.py | 37 ++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/src/bringup/launch/full_system.launch.py b/src/bringup/launch/full_system.launch.py index 1414764..7435b43 100644 --- a/src/bringup/launch/full_system.launch.py +++ b/src/bringup/launch/full_system.launch.py @@ -1,7 +1,10 @@ -import os +import os + from launch import LaunchDescription +from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, Shutdown +from launch.conditions import IfCondition +from launch.substitutions import LaunchConfiguration from launch_ros.actions import Node -from launch.actions import Shutdown, IncludeLaunchDescription from ament_index_python.packages import get_package_share_directory from launch.launch_description_sources import PythonLaunchDescriptionSource @@ -9,6 +12,11 @@ This file kinda works, but because of the logs of the other packages, it screws up the interface itself, not being able to click ''' def generate_launch_description(): + use_synthetic_actuation_feedback = LaunchConfiguration( + 'use_synthetic_actuation_feedback' + ) + use_synthetic_odometry = LaunchConfiguration('use_synthetic_odometry') + # Helper so that a failure in this node takes down all of AP1 instead of just continuing def CriticalNode(**kwargs): return Node(on_exit=Shutdown(), **kwargs) @@ -26,6 +34,13 @@ def CriticalNode(**kwargs): csv_file_path ], ) + synthetic_actuation_feedback = Node( + package='ap1_control', + executable='synthetic_actuation_feedback_node', + name='synthetic_actuation_feedback', + output='screen', + condition=IfCondition(use_synthetic_actuation_feedback), + ) # == PLANNER NODE == pkg_share = get_package_share_directory('ap1_planning') @@ -70,11 +85,27 @@ def CriticalNode(**kwargs): 'launch', 'mapping_pipeline.launch.py' ) - ) + ), + launch_arguments={ + 'use_synthetic_odometry': use_synthetic_odometry, + }.items(), ) return LaunchDescription([ + DeclareLaunchArgument( + 'use_synthetic_actuation_feedback', + default_value='false', + description=( + 'Publish fake /ap1/actuation feedback for smoke tests.' + ), + ), + DeclareLaunchArgument( + 'use_synthetic_odometry', + default_value='false', + description='Forward synthetic odometry flag to mapping launch.', + ), control, + synthetic_actuation_feedback, planner, yolo, ufld_ground, From 2b9e382ae89c4c8e6a9269de7823721de710017a Mon Sep 17 00:00:00 2001 From: Luke Blommesteyn Date: Thu, 4 Jun 2026 23:11:31 -0400 Subject: [PATCH 2/2] feat: add synthetic perception launch flag --- src/bringup/launch/full_system.launch.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/bringup/launch/full_system.launch.py b/src/bringup/launch/full_system.launch.py index 7435b43..10806b0 100644 --- a/src/bringup/launch/full_system.launch.py +++ b/src/bringup/launch/full_system.launch.py @@ -3,6 +3,7 @@ from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, Shutdown from launch.conditions import IfCondition +from launch.conditions import UnlessCondition from launch.substitutions import LaunchConfiguration from launch_ros.actions import Node from ament_index_python.packages import get_package_share_directory @@ -16,6 +17,7 @@ def generate_launch_description(): 'use_synthetic_actuation_feedback' ) use_synthetic_odometry = LaunchConfiguration('use_synthetic_odometry') + use_synthetic_perception = LaunchConfiguration('use_synthetic_perception') # Helper so that a failure in this node takes down all of AP1 instead of just continuing def CriticalNode(**kwargs): @@ -61,12 +63,14 @@ def CriticalNode(**kwargs): executable='yolo_node', name='ap1_yolo', output='log', + condition=UnlessCondition(use_synthetic_perception), ) ufld_ground = CriticalNode( package='ap1_perception', executable='ufld_ground_node', name='ap1_ufld_ground', output='log', + condition=UnlessCondition(use_synthetic_perception), ) # == CONSOLE NODE == @@ -87,6 +91,7 @@ def CriticalNode(**kwargs): ) ), launch_arguments={ + 'use_synthetic_perception': use_synthetic_perception, 'use_synthetic_odometry': use_synthetic_odometry, }.items(), ) @@ -104,6 +109,13 @@ def CriticalNode(**kwargs): default_value='false', description='Forward synthetic odometry flag to mapping launch.', ), + DeclareLaunchArgument( + 'use_synthetic_perception', + default_value='false', + description=( + 'Use mapping synthetic perception instead of real YOLO/UFLD.' + ), + ), control, synthetic_actuation_feedback, planner,