From 012f9a608a08e1242b22150274f22923b7015c9d Mon Sep 17 00:00:00 2001 From: lyq Date: Thu, 26 Mar 2026 14:37:28 +0800 Subject: [PATCH] =?UTF-8?q?launch=E6=96=87=E4=BB=B6=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E4=B9=8B=E9=97=B4=E5=A2=9E=E5=8A=A0=E6=97=B6=E9=97=B4=E9=97=B4?= =?UTF-8?q?=E9=9A=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../launch_system/launch/start_all.launch.py | 299 +++++++++++------- 1 file changed, 188 insertions(+), 111 deletions(-) diff --git a/src/common/launch_system/launch/start_all.launch.py b/src/common/launch_system/launch/start_all.launch.py index 919411b..802c512 100644 --- a/src/common/launch_system/launch/start_all.launch.py +++ b/src/common/launch_system/launch/start_all.launch.py @@ -1,6 +1,6 @@ from launch import LaunchDescription from launch_ros.actions import Node -from launch.actions import IncludeLaunchDescription +from launch.actions import IncludeLaunchDescription, TimerAction from launch.launch_description_sources import PythonLaunchDescriptionSource from ament_index_python.packages import get_package_share_directory import os @@ -11,116 +11,193 @@ def generate_launch_description(): rslidar_sdk_path = get_package_share_directory("rslidar_sdk") fu_path = get_package_share_directory("fu") + # ===================== 按顺序延时启动所有节点 ===================== + # 1. 车辆参数节点 (立即启动) + vehicle_params_node = Node( + package="vehicle_params", + executable="vehicle_params_node", + name="vehicle_params_node", + output="screen", + respawn=True, + respawn_delay=2, + ) + + # 2. CAN遥控节点 (延时0.2s) + can_radio_ctrl_node = TimerAction( + period=0.2, + actions=[Node( + package="can_radio_ctrl", + executable="can_radio_ctrl_node", + name="can_radio_ctrl_node", + output="screen", + respawn=True, + respawn_delay=2, + )] + ) + # Node( + # package="radio_ctrl", + # executable="radio_ctrl_node", + # name="radio_ctrl_node", + # output="screen", + # respawn=True, + # respawn_delay=2, + # ), + + # 3. 远程控制节点 (延时0.4s) + remote_ctrl_node = TimerAction( + period=0.4, + actions=[Node( + package="remote_ctrl", + executable="remote_ctrl_node", + name="remote_ctrl_node", + output="screen", + respawn=True, + respawn_delay=2, + )] + ) + + # 4. MC电机控制节点 (延时0.6s) + mc_node = TimerAction( + period=0.6, + actions=[Node( + package="mc", + executable="mc_node", + name="mc_node", + output="screen", + respawn=True, + respawn_delay=2, + )] + ) + + # 5. 控制仲裁节点 (延时0.8s) + ctrl_arbiter_node = TimerAction( + period=0.8, + actions=[Node( + package="ctrl_arbiter", + executable="ctrl_arbiter_node", + name="ctrl_arbiter_node", + output="screen", + respawn=True, + respawn_delay=2, + )] + ) + + # 6. MQTT上报节点 (延时1.0s) —— 【关键:必须最后启动】 + mqtt_report_node = TimerAction( + period=1.0, + actions=[Node( + package="mqtt_report", + executable="mqtt_report_node", + name="mqtt_report_node", + output="screen", + respawn=True, + respawn_delay=2, + )] + ) + + # 7. 雷达启动 (延时1.5s) + lidar_launch = TimerAction( + period=1.5, + actions=[IncludeLaunchDescription( + PythonLaunchDescriptionSource( + os.path.join(rslidar_sdk_path, "launch", "start_double.launch.py") + ) + )] + ) + + # 8. RTK定位节点 (延时2.0s) + rtk_node = TimerAction( + period=2.0, + actions=[Node( + package="rtk", + executable="rtk_node", + name="rtk_node", + parameters=[ + os.path.join( + get_package_share_directory("rtk"), "config", "rtk_params.yaml" + ) + ], + output="screen", + )] + ) + + # 9. 路径节点 (延时2.5s) + route_node = TimerAction( + period=2.5, + actions=[Node( + package="route", + executable="route_node", + name="route_node", + output="screen", + respawn=True, + respawn_delay=2, + )] + ) + + # 10. 订阅节点 (延时3.0s) + sub_node = TimerAction( + period=3.0, + actions=[Node( + package="sub", + executable="sub_node", + name="sub_node", + output="screen", + respawn=True, + respawn_delay=2, + )] + ) + + # 11. 任务管理节点 (延时3.5s) + task_manager_node = TimerAction( + period=3.5, + actions=[Node( + package="task_manager", + executable="task_manager_node", + name="task_manager_node", + output="screen", + respawn=True, + respawn_delay=2, + )] + ) + + # 12. 规划控制节点 (延时4.0s) + pl_node = TimerAction( + period=4.0, + actions=[Node( + package="pl", + executable="pl_node", + name="pl_node", + output="screen", + respawn=True, + respawn_delay=2, + )] + ) + + # 13. FU功能节点 (延时4.5s) + fu_launch = TimerAction( + period=4.5, + actions=[IncludeLaunchDescription( + PythonLaunchDescriptionSource( + os.path.join(fu_path, "launch", "fu.launch.py") + ) + )] + ) + + # ===================== 组装启动列表 ===================== return LaunchDescription( [ - Node( - package="vehicle_params", - executable="vehicle_params_node", - name="vehicle_params_node", - output="screen", - respawn=True, - respawn_delay=2, - ), - # Node( - # package="radio_ctrl", - # executable="radio_ctrl_node", - # name="radio_ctrl_node", - # output="screen", - # respawn=True, - # respawn_delay=2, - # ), - Node( - package="can_radio_ctrl", - executable="can_radio_ctrl_node", - name="can_radio_ctrl_node", - output="screen", - respawn=True, - respawn_delay=2, - ), - Node( - package="remote_ctrl", - executable="remote_ctrl_node", - name="remote_ctrl_node", - output="screen", - respawn=True, - respawn_delay=2, - ), - Node( - package="mc", - executable="mc_node", - name="mc_node", - output="screen", - respawn=True, - respawn_delay=2, - ), - Node( - package="ctrl_arbiter", - executable="ctrl_arbiter_node", - name="ctrl_arbiter_node", - output="screen", - respawn=True, - respawn_delay=2, - ), - Node( - package="mqtt_report", - executable="mqtt_report_node", - name="mqtt_report_node", - output="screen", - respawn=True, - respawn_delay=2, - ), - IncludeLaunchDescription( - PythonLaunchDescriptionSource( - os.path.join(rslidar_sdk_path, "launch", "start_double.launch.py") - ) - ), - Node( - package="rtk", - executable="rtk_node", - name="rtk_node", - parameters=[ - os.path.join( - get_package_share_directory("rtk"), "config", "rtk_params.yaml" - ) - ], # 从YAML文件加载参数 - output="screen", - ), - Node( - package="route", - executable="route_node", - name="route_node", - output="screen", - respawn=True, - respawn_delay=2, - ), - Node( - package="sub", - executable="sub_node", - name="sub_node", - output="screen", - respawn=True, - respawn_delay=2, - ), - Node( - package="task_manager", - executable="task_manager_node", - name="task_manager_node", - output="screen", - respawn=True, - respawn_delay=2, - ), - Node( - package="pl", - executable="pl_node", - name="pl_node", - output="screen", - respawn=True, - respawn_delay=2, - ), - IncludeLaunchDescription( - PythonLaunchDescriptionSource( - os.path.join(fu_path, "launch", "fu.launch.py") - ) - ), + vehicle_params_node, + can_radio_ctrl_node, + remote_ctrl_node, + mc_node, + ctrl_arbiter_node, + mqtt_report_node, + lidar_launch, + rtk_node, + route_node, + sub_node, + task_manager_node, + pl_node, + fu_launch, ] - ) + ) \ No newline at end of file