# The task launch is started only after navigation has stopped at the sign # recognition point and every other /cmd_vel source has released control. autostart: true control_rate: 20.0 cmd_vel_topic: /cmd_vel odom_topic: /odom lane_valid_topic: /line_follow_debug/lane_valid lookahead_target_topic: /line_follow_debug/lookahead_target sign_direction_topic: /traffic_sign/direction sign_confidence_topic: /traffic_sign/confidence sign_enable_service: /traffic_sign_recognition/set_enabled line_enable_service: /line_follow_control/set_enabled # A stable result from the recognition node is confirmed twice here before it # is locked for the rest of the task. STOP/NONE keep the vehicle stationary. sign_confirmations: 2 sign_topic_timeout: 3.0 minimum_sign_confidence: 0.25 camera_settle_time: 2.0 # Odometry and action safety. odom_timeout: 0.5 odom_jump_limit_m: 0.25 # Deliberately above a nominal 90-degree turn: yaw is only an over-turn guard; # calibrated odometry path length remains the maneuver completion condition. maximum_turn_yaw_rad: 2.20 wrong_way_yaw_tolerance_rad: 0.10 straight_yaw_limit_rad: 0.35 maneuver_timeout_scale: 2.0 maneuver_timeout_min: 3.0 transition_stop_time: 0.30 # Real-vehicle junction maneuver values. 0.10 m/s forward with 0.20 rad/s # turning was verified to keep both sides of the drivetrain moving. maneuver_linear_speed: 0.10 first_turn_angular_speed: 0.20 second_turn_angular_speed: 0.20 # REQUIRED CALIBRATION VALUES. The state machine refuses to move while any # value is zero or negative. Fill these using route_distance_calibrator.py. first_left_turn_distance_m: 0.5149 first_right_turn_distance_m: 0.5274 first_straight_entry_distance_m: 0.3584 direct_finish_distance_m: 2.5997 straight_to_second_distance_m: 0.6053 second_right_turn_distance_m: 0.35 after_second_finish_distance_m: 2.1104 # The finish segments do not use their old odometry distances. Once LEFT/RIGHT # has entered FOLLOW_DIRECT_FINISH, or STRAIGHT has completed the second fixed # right turn and entered FOLLOW_AFTER_SECOND, a continuous total loss of lane # boundaries is treated as the endpoint. The controller stops immediately and # confirms the loss before publishing FINISHED. use_finish_distance_limits: false finish_lane_loss_confirm_time: 1.0 # Reuse the speech_command node that is already running for task 1. This task # never launches a second speech node and sends this phrase exactly once. completion_announcement_topic: /speech_command/announce completion_announcement_text: "任务完成" # On the straight route, odometry no longer directly starts the second turn. # It only arms a lane-loss trigger near the measured 0.6053 m junction. Three # consecutive invalid-lane control cycles then start the fixed right maneuver. # Early lane loss uses ordinary recovery; passing the maximum without lane # loss stops in FAULT instead of driving indefinitely. second_junction_arm_distance_m: 0.45 second_junction_max_distance_m: 0.85 second_junction_lost_frames: 3 # After confirmed lane loss at the second junction, move farther into the # junction before starting the fixed right turn. second_junction_forward_speed: 0.10 second_junction_forward_duration: 3.0 # Keep false for the complete route: reacquire the lane after the calibrated # second right maneuver and continue with FOLLOW_AFTER_SECOND. stop_after_second_maneuver: false # line_follow_debug.py keeps lane_valid=true for up to 8.0 s while continuously # inferring the centre from one remaining boundary. If it finally publishes # false, stop and wait in place for a fresh target; never reverse or scan. lane_reacquire_timeout: 2.0 lane_stable_frames: 5 target_fresh_timeout: 0.5