from launch import LaunchDescription from launch_ros.actions import Node from launch.actions import DeclareLaunchArgument from launch.substitutions import LaunchConfiguration def generate_launch_description(): # 声明启动参数 - 基本设置 send_frequency_arg = DeclareLaunchArgument( 'send_frequency', default_value='50.0', description='CAN 发送频率 (Hz)' ) tx_channel_arg = DeclareLaunchArgument( 'tx_channel', default_value='0', description='CAN 发送通道 (0 或 1)' ) rx_channel_arg = DeclareLaunchArgument( 'rx_channel', default_value='1', description='CAN 接收通道 (0 或 1)' ) # 声明启动参数 - CAN ID 设置 can_id_motion_arg = DeclareLaunchArgument( 'can_id_motion', default_value='329', # 0x149 = 329 description='运动控制 CAN ID (十进制,默认 0x149=329)' ) can_id_attack_arg = DeclareLaunchArgument( 'can_id_attack', default_value='393', # 0x189 = 393 description='攻击控制 CAN ID (十进制,默认 0x189=393)' ) # 声明启动参数 - CAN 帧格式 use_extended_frame_arg = DeclareLaunchArgument( 'use_extended_frame', default_value='false', description='是否使用扩展帧(29位ID),false=标准帧(11位)' ) use_canfd_arg = DeclareLaunchArgument( 'use_canfd', default_value='false', description='是否使用 CANFD,false=CAN2.0' ) use_brs_arg = DeclareLaunchArgument( 'use_brs', default_value='false', description='CANFD 是否启用波特率切换(BRS)' ) # 声明启动参数 - 接收过滤 rx_filter_enabled_arg = DeclareLaunchArgument( 'rx_filter_enabled', default_value='false', description='是否启用接收 ID 过滤' ) rx_filter_id_min_arg = DeclareLaunchArgument( 'rx_filter_id_min', default_value='0', description='接收过滤 ID 最小值' ) rx_filter_id_max_arg = DeclareLaunchArgument( 'rx_filter_id_max', default_value='2047', # 0x7FF description='接收过滤 ID 最大值' ) # 创建节点 transmitter_test_node = Node( package='amadeus_26', executable='transmitter_test_node', name='transmitter_test_node', output='screen', parameters=[{ 'send_frequency': LaunchConfiguration('send_frequency'), 'tx_channel': LaunchConfiguration('tx_channel'), 'rx_channel': LaunchConfiguration('rx_channel'), 'can_id_motion': LaunchConfiguration('can_id_motion'), 'can_id_attack': LaunchConfiguration('can_id_attack'), 'use_extended_frame': LaunchConfiguration('use_extended_frame'), 'use_canfd': LaunchConfiguration('use_canfd'), 'use_brs': LaunchConfiguration('use_brs'), 'rx_filter_enabled': LaunchConfiguration('rx_filter_enabled'), 'rx_filter_id_min': LaunchConfiguration('rx_filter_id_min'), 'rx_filter_id_max': LaunchConfiguration('rx_filter_id_max'), }], ) return LaunchDescription([ send_frequency_arg, tx_channel_arg, rx_channel_arg, can_id_motion_arg, can_id_attack_arg, use_extended_frame_arg, use_canfd_arg, use_brs_arg, rx_filter_enabled_arg, rx_filter_id_min_arg, rx_filter_id_max_arg, transmitter_test_node, ])