ceres::Solver::Options options; options.linear_solver_type = ceres::DENSE_SCHUR; options.num_threads = 2; options.trust_region_strategy_type = ceres::DOGLEG; options.max_num_iterations = NUM_ITERATIONS; //options.use_explicit_schur_complement = true; //options.minimizer_progress_to_stdout = true; //options.use_nonmonotonic_steps = true; if (marginalization_flag == MARGIN_OLD) options.max_solver_time_in_seconds = SOLVER_TIME * 4.0 / 5.0; else options.max_solver_time_in_seconds = SOLVER_TIME; TicToc t_solver; ceres::Solver::Summary summary; ceres::Solve(options, &problem, &summary);怎么查看这个优化是否成功?

时间: 2025-07-24 07:20:44 AIGC 浏览: 31
<think>根据用户的问题,用户想知道如何验证Ceres优化结果是否成功。结合用户提供的引用内容,我们可以从以下几个方面来回答: 1. **检查求解器状态**:Ceres求解器在求解后会返回一个`Solver::Summary`对象,其中包含了优化的详细信息,如是否收敛、迭代次数、最终代价等。 2. **检查收敛情况**:通过查看`summary.termination_type`可以判断优化是否收敛。常见的收敛类型有`CONVERGENCE`(收敛)和`NO_CONVERGENCE`(未收敛)等。 3. **检查最终代价**:通过`summary.final_cost`可以查看优化后的残差,如果残差足够小,则说明优化效果较好。 4. **运行示例测试**:如引用[4]中提到,运行`helloworld.exe`等示例程序,如果输出显示收敛,则说明安装成功,同样可以借鉴这种方法来验证优化结果。 5. **检查优化参数的变化**:可以打印优化前后的参数值,观察参数是否发生了合理的变化。 结合引用内容: - 引用[2]中展示了Ceres求解问题的基本流程,包括添加参数块、残差函数,以及调用`ceres::Solve`进行求解,并获取`summary`对象。 - 引用[4]中提到运行示例程序并查看是否输出收敛信息,这也可以作为验证方法之一。 下面给出具体代码示例和步骤:</think>### 如何验证Ceres优化结果是否成功 在Ceres Solver中验证优化结果是否成功,可通过以下方法逐步检查: 1. **检查求解器摘要(Solver::Summary)** 求解后会返回`ceres::Solver::Summary`对象,关键属性包括: ```cpp ceres::Solver::Summary summary; ceres::Solve(options, &problem, &summary); // 检查终止类型 std::cout << "Termination: " << summary.termination_type << std::endl; // 成功时通常显示 CONVERGENCE // 检查最终代价值 std::cout << "Final cost: " << summary.final_cost << std::endl; // 值接近0表示残差极小 // 检查迭代次数 std::cout << "Iterations: " << summary.iterations.size() << std::endl; ``` 2. **验证收敛状态** 成功的优化通常满足以下条件: - `summary.termination_type == ceres::CONVERGENCE`(梯度收敛) - `summary.final_cost < tolerance`(残差小于设定阈值) - `summary.num_successful_steps > 0`(存在有效迭代步骤) 3. **手动验证参数合理性** 比较优化前后的参数值,检查是否符合物理/数学约束: ```cpp double initial_x = 5.0; // 初始值 double optimized_x = x; // 优化后值 std::cout << "Initial: " << initial_x << " Optimized: " << optimized_x << std::endl; ``` 4. **启用详细日志(推荐)** 在配置中开启详细输出: ```cpp ceres::Solver::Options options; options.minimizer_progress_to_stdout = true; // 打印迭代过程 options.logging_type = ceres::PER_MINIMIZER_ITERATION; ``` 5. **运行测试用例验证安装** 如引用[4]所述,运行示例程序验证基础功能: ```bash cd /path/to/ceres/bin ./helloworld # 应输出"convergence"字样 ``` --- ### 常见问题诊断表 | 现象 | 可能原因 | 解决方案 | |------|----------|----------| | `FAILURE` | 数值不稳定 | 检查雅可比矩阵条件数 | | `NO_CONVERGENCE` | 学习率过大 | 减小`options.max_trust_region_radius` | | 残差不降 | 局部最优 | 尝试不同初始值 | | 参数异常 | 雅可比计算错误 | 使用`ceres::CENTRAL`差分法验证 | > **重要提示**:如引用[2]所述,优化成功需确保残差函数和参数块正确定义,且梯度计算正确(推荐使用`AutoDiffCostFunction`自动微分)[^2]。
阅读全文

相关推荐

include "map_builder.lua" include "trajectory_builder.lua" options = { map_builder = MAP_BUILDER, trajectory_builder = TRAJECTORY_BUILDER, map_frame = "map", tracking_frame = "imu", published_frame = "base_footprint", odom_frame = "odom", provide_odom_frame = false, publish_frame_projected_to_2d = false, use_odometry = false, use_nav_sat = false, use_landmarks = false, num_laser_scans = 0, num_multi_echo_laser_scans = 0, num_subdivisions_per_laser_scan = 1, num_point_clouds = 1, lookup_transform_timeout_sec = 0.2, submap_publish_period_sec = 0.3, pose_publish_period_sec = 5e-3, trajectory_publish_period_sec = 30e-3, rangefinder_sampling_ratio = 1., odometry_sampling_ratio = 1., fixed_frame_pose_sampling_ratio = 1., imu_sampling_ratio = 1., landmarks_sampling_ratio = 1., } TRAJECTORY_BUILDER_3D.num_accumulated_range_data = 1 TRAJECTORY_BUILDER_3D.min_range = 0.2 TRAJECTORY_BUILDER_3D.max_range = 150 TRAJECTORY_BUILDER_2D.min_z = 0.1 TRAJECTORY_BUILDER_2D.max_z = 1.0 TRAJECTORY_BUILDER_3D.use_online_correlative_scan_matching = false MAP_BUILDER.use_trajectory_builder_3d = true MAP_BUILDER.num_background_threads = 4 POSE_GRAPH.optimization_problem.huber_scale = 5e2 POSE_GRAPH.optimize_every_n_nodes = 320 POSE_GRAPH.constraint_builder.sampling_ratio = 0.03 POSE_GRAPH.optimization_problem.ceres_solver_options.max_num_iterations = 20 POSE_GRAPH.constraint_builder.min_score = 0.5 POSE_GRAPH.constraint_builder.global_localization_min_score = 0.55 POSE_GRAPH.optimization_problem.odometry_translation_weight = 1e3 POSE_GRAPH.optimization_problem.odometry_rotation_weight = 1e3 return options这是我按照网上教程写的my_3d. launch文件,请问正确吗

wjs@wjs-desktop:~/Drone_Slam$ ros2 launch fishbot_grapher test_grapher_3.launch.py [INFO] [launch]: All log files can be found below /home/wjs/.ros/log/2025-07-27-21-26-18-750077-wjs-desktop-2603 [INFO] [launch]: Default logging verbosity is set to INFO pkg_share =/home/wjs/Drone_Slam/install/fishbot_grapher/share/fishbot_grapher<== model_path =/home/wjs/Drone_Slam/install/fishbot_grapher/share/fishbot_grapher/urdf/fishbot_base.urdf<== [INFO] [sllidar_node-1]: process started with pid [2604] [INFO] [wit_ros2_imu-2]: process started with pid [2606] [INFO] [test01-3]: process started with pid [2608] [INFO] [robot_state_publisher-4]: process started with pid [2610] [INFO] [cartographer_node-5]: process started with pid [2612] [INFO] [cartographer_occupancy_grid_node-6]: process started with pid [2616] [sllidar_node-1] [INFO] [1753622779.123428206] [sllidar_node]: SLLidar running on ROS2 package SLLidar.ROS2 SDK Version:1.0.1, SLLIDAR SDK Version:2.0.0 [sllidar_node-1] [ERROR] [1753622779.166949150] [sllidar_node]: Error, operation time out. SL_RESULT_OPERATION_TIMEOUT! [ERROR] [sllidar_node-1]: process has died [pid 2604, exit code 255, cmd '/home/wjs/Drone_Slam/install/sllidar_ros2/lib/sllidar_ros2/sllidar_node --ros-args -r __node:=sllidar_node --params-file /tmp/launch_params_09et7i92']. [robot_state_publisher-4] [WARN] [1753622779.340852788] [robot_state_publisher]: No robot_description parameter, but command-line argument available. Assuming argument is name of URDF file. This backwards compatibility fallback will be removed in the future. [robot_state_publisher-4] [INFO] [1753622779.403618429] [robot_state_publisher]: got segment base_link [robot_state_publisher-4] [INFO] [1753622779.404146730] [robot_state_publisher]: got segment imu_link [robot_state_publisher-4] [INFO] [1753622779.404233622] [robot_state_publisher]: got segment laser_link [cartographer_node-5] [INFO] [1753622779.592485766] [cartographer logger]: I0727 21:26:19.000000 2612 configuration_file_resolver.cc:41] Found '/home/wjs/Drone_Slam/install/fishbot_grapher/share/fishbot_grapher/config/test02.lua' for 'test02.lua'. [cartographer_node-5] [INFO] [1753622779.600612764] [cartographer logger]: I0727 21:26:19.000000 2612 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/map_builder.lua' for 'map_builder.lua'. [cartographer_node-5] [INFO] [1753622779.600914554] [cartographer logger]: I0727 21:26:19.000000 2612 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/map_builder.lua' for 'map_builder.lua'. [cartographer_node-5] [INFO] [1753622779.602523216] [cartographer logger]: I0727 21:26:19.000000 2612 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/pose_graph.lua' for 'pose_graph.lua'. [cartographer_node-5] [INFO] [1753622779.602795339] [cartographer logger]: I0727 21:26:19.000000 2612 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/pose_graph.lua' for 'pose_graph.lua'. [cartographer_node-5] [INFO] [1753622779.604405038] [cartographer logger]: I0727 21:26:19.000000 2612 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder.lua' for 'trajectory_builder.lua'. [cartographer_node-5] [INFO] [1753622779.604828741] [cartographer logger]: I0727 21:26:19.000000 2612 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder.lua' for 'trajectory_builder.lua'. [cartographer_node-5] [INFO] [1753622779.606033589] [cartographer logger]: I0727 21:26:19.000000 2612 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_2d.lua' for 'trajectory_builder_2d.lua'. [cartographer_node-5] [INFO] [1753622779.606329861] [cartographer logger]: I0727 21:26:19.000000 2612 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_2d.lua' for 'trajectory_builder_2d.lua'. [cartographer_node-5] [INFO] [1753622779.607970765] [cartographer logger]: I0727 21:26:19.000000 2612 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_3d.lua' for 'trajectory_builder_3d.lua'. [cartographer_node-5] [INFO] [1753622779.608301075] [cartographer logger]: I0727 21:26:19.000000 2612 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_3d.lua' for 'trajectory_builder_3d.lua'. [cartographer_node-5] F0727 21:26:19.623965 2612 lua_parameter_dictionary.cc:399] Check failed: HasKey(key) Key 'collate_landmarks' not in dictionary: [cartographer_node-5] { [cartographer_node-5] collate_fixed_frame = true, [cartographer_node-5] trajectory_builder_2d = { [cartographer_node-5] adaptive_voxel_filter = { [cartographer_node-5] max_length = 0.500000, [cartographer_node-5] max_range = 50.000000, [cartographer_node-5] min_num_points = 200.000000, [cartographer_node-5] }, [cartographer_node-5] ceres_scan_matcher = { [cartographer_node-5] ceres_solver_options = { [cartographer_node-5] max_num_iterations = 20.000000, [cartographer_node-5] num_threads = 1.000000, [cartographer_node-5] use_nonmonotonic_steps = false, [cartographer_node-5] }, [cartographer_node-5] occupied_space_weight = 1.000000, [cartographer_node-5] rotation_weight = 40.000000, [cartographer_node-5] translation_weight = 10.000000, [cartographer_node-5] }, [cartographer_node-5] imu_gravity_time_constant = 10.000000, [cartographer_node-5] loop_closure_adaptive_voxel_filter = { [cartographer_node-5] max_length = 0.900000, [cartographer_node-5] max_range = 50.000000, [cartographer_node-5] min_num_points = 100.000000, [cartographer_node-5] }, [cartographer_node-5] max_range = 8.000000, [cartographer_node-5] max_z = 2.000000, [cartographer_node-5] min_range = 0.300000, [cartographer_node-5] min_z = -0.800000, [cartographer_node-5] missing_data_ray_length = 1.000000, [cartographer_node-5] motion_filter = { [cartographer_node-5] max_angle_radians = 0.017453, [cartographer_node-5] max_distance_meters = 0.200000, [cartographer_node-5] max_time_seconds = 5.000000, [cartographer_node-5] }, [cartographer_node-5] num_accumulated_range_data = 1.000000, [cartographer_node-5] pose_extrapolator = { [cartographer_node-5] constant_velocity = { [cartographer_node-5] imu_gravity_time_constant = 10.000000, [cartographer_node-5] pose_queue_duration = 0.001000, [cartographer_node-5] }, [cartographer_node-5] imu_based = { [cartographer_node-5] gravity_constant = 9.806000, [cartographer_node-5] imu_acceleration_weight = 1.000000, [cartographer_node-5] imu_rotation_weight = 1.000000, [cartographer_node-5] odometry_rotation_weight = 1.000000, [cartographer_node-5] odometry_translation_weight = 1.000000, [cartographer_node-5] pose_queue_duration = 5.000000, [cartographer_node-5] pose_rotation_weight = 1.000000, [cartographer_node-5] pose_translation_weight = 1.000000, [cartographer_node-5] solver_options = { [cartographer_node-5] max_num_iterations = 10.000000, [cartographer_node-5] num_threads = 1.000000, [cartographer_node-5] use_nonmonotonic_steps = false, [cartographer_node-5] }, [cartographer_node-5] }, [cartographer_node-5] use_imu_based = false, [cartographer_node-5] }, [cartographer_node-5] real_time_correlative_scan_matcher = { [cartographer_node-5] angular_search_window = 0.349066, [cartographer_node-5] linear_search_window = 0.100000, [cartographer_node-5] rotation_delta_cost_weight = 0.100000, [cartographer_node-5] translation_delta_cost_weight = 10.000000, [cartographer_node-5] }, [cartographer_node-5] submaps = { [cartographer_node-5] grid_options_2d = { [cartographer_node-5] grid_type = "PROBABILITY_GRID", [cartographer_node-5] resolution = 0.050000, [cartographer_node-5] }, [cartographer_node-5] num_range_data = 35.000000, [cartographer_node-5] range_data_inserter = { [cartographer_node-5] probability_grid_range_data_inserter = { [cartographer_node-5] hit_probability = 0.550000, [cartographer_node-5] insert_free_space = true, [cartographer_node-5] miss_probability = 0.490000, [cartographer_node-5] }, [cartographer_node-5] range_data_inserter_type = "PROBABILITY_GRID_INSERTER_2D", [cartographer_node-5] tsdf_range_data_inserter = { [cartographer_node-5] maximum_weight = 10.000000, [cartographer_node-5] normal_estimation_options = { [cartographer_node-5] num_normal_samples = 4.000000, [cartographer_node-5] sample_radius = 0.500000, [cartographer_node-5] }, [cartographer_node-5] project_sdf_distance_to_scan_normal = true, [cartographer_node-5] truncation_distance = 0.300000, [cartographer_node-5] update_free_space = false, [cartographer_node-5] update_weight_angle_scan_normal_to_ray_kernel_bandwidth = 0.500000, [cartographer_node-5] update_weight_distance_cell_to_hit_kernel_bandwidth = 0.500000, [cartographer_node-5] update_weight_range_exponent = 0.000000, [cartographer_node-5] }, [cartographer_node-5] }, [cartographer_node-5] }, [cartographer_node-5] use_imu_data = true, [cartographer_node-5] use_online_correlative_scan_matching = true, [cartographer_node-5] voxel_filter_size = 0.025000, [cartographer_node-5] }, [cartographer_node-5] trajectory_builder_3d = { [cartographer_node-5] ceres_scan_matcher = { [cartographer_node-5] ceres_solver_options = { [cartographer_node-5] max_num_iterations = 12.000000, [cartographer_node-5] num_threads = 1.000000, [cartographer_node-5] use_nonmonotonic_steps = false, [cartographer_node-5] }, [cartographer_node-5] intensity_cost_function_options_0 = { [cartographer_node-5] huber_scale = 0.300000, [cartographer_node-5] intensity_threshold = 40.000000, [cartographer_node-5] weight = 0.500000, [cartographer_node-5] }, [cartographer_node-5] occupied_space_weight_0 = 1.000000, [cartographer_node-5] occupied_space_weight_1 = 6.000000, [cartographer_node-5] only_optimize_yaw = false, [cartographer_node-5] rotation_weight = 400.000000, [cartographer_node-5] translation_weight = 5.000000, [cartographer_node-5] }, [cartographer_node-5] high_resolution_adaptive_voxel_filter = { [cartographer_node-5] max_length = 2.000000, [cartographer_node-5] max_range = 15.000000, [cartographer_node-5] min_num_points = 150.000000, [cartographer_node-5] }, [cartographer_node-5] imu_gravity_time_constant = 10.000000, [cartographer_node-5] low_resolution_adaptive_voxel_filter = { [cartographer_node-5] max_length = 4.000000, [cartographer_node-5] max_range = 60.000000, [cartographer_node-5] min_num_points = 200.000000, [cartographer_node-5] }, [cartographer_node-5] max_range = 60.000000, [cartographer_node-5] min_range = 1.000000, [cartographer_node-5] motion_filter = { [cartographer_node-5] max_angle_radians = 0.004000, [cartographer_node-5] max_distance_meters = 0.100000, [cartographer_node-5] max_time_seconds = 0.500000, [cartographer_node-5] }, [cartographer_node-5] num_accumulated_range_data = 1.000000, [cartographer_node-5] pose_extrapolator = { [cartographer_node-5] constant_velocity = { [cartographer_node-5] imu_gravity_time_constant = 10.000000, [cartographer_node-5] pose_queue_duration = 0.001000, [cartographer_node-5] }, [cartographer_node-5] imu_based = { [cartographer_node-5] gravity_constant = 9.806000, [cartographer_node-5] imu_acceleration_weight = 1.000000, [cartographer_node-5] imu_rotation_weight = 1.000000, [cartographer_node-5] odometry_rotation_weight = 1.000000, [cartographer_node-5] odometry_translation_weight = 1.000000, [cartographer_node-5] pose_queue_duration = 5.000000, [cartographer_node-5] pose_rotation_weight = 1.000000, [cartographer_node-5] pose_translation_weight = 1.000000, [cartographer_node-5] solver_options = { [cartographer_node-5] max_num_iterations = 10.000000, [cartographer_node-5] num_threads = 1.000000, [cartographer_node-5] use_nonmonotonic_steps = false, [cartographer_node-5] }, [cartographer_node-5] }, [cartographer_node-5] use_imu_based = false, [cartographer_node-5] }, [cartographer_node-5] real_time_correlative_scan_matcher = { [cartographer_node-5] angular_search_window = 0.017453, [cartographer_node-5] linear_search_window = 0.150000, [cartographer_node-5] rotation_delta_cost_weight = 0.100000, [cartographer_node-5] translation_delta_cost_weight = 0.100000, [cartographer_node-5] }, [cartographer_node-5] rotational_histogram_size = 120.000000, [cartographer_node-5] submaps = { [cartographer_node-5] high_resolution = 0.100000, [cartographer_node-5] high_resolution_max_range = 20.000000, [cartographer_node-5] low_resolution = 0.450000, [cartographer_node-5] num_range_data = 160.000000, [cartographer_node-5] range_data_inserter = { [cartographer_node-5] hit_probability = 0.550000, [cartographer_node-5] intensity_threshold = 40.000000, [cartographer_node-5] miss_probability = 0.490000, [cartographer_node-5] num_free_space_voxels = 2.000000, [cartographer_node-5] }, [cartographer_node-5] }, [cartographer_node-5] use_intensities = false, [cartographer_node-5] use_online_correlative_scan_matching = false, [cartographer_node-5] voxel_filter_size = 0.150000, [cartographer_node-5] }, [cartographer_node-5] } [cartographer_node-5] [FATAL] [1753622779.626704366] [cartographer logger]: F0727 21:26:19.000000 2612 lua_parameter_dictionary.cc:399] Check failed: HasKey(key) Key 'collate_landmarks' not in dictionary: [cartographer_node-5] { [cartographer_node-5] collate_fixed_frame = true, [cartographer_node-5] trajectory_builder_2d = { [cartographer_node-5] adaptive_voxel_filter = { [cartographer_node-5] max_length = 0.500000, [cartographer_node-5] max_range = 50.000000, [cartographer_node-5] min_num_points = 200.000000, [cartographer_node-5] }, [cartographer_node-5] ceres_scan_matcher = { [cartographer_node-5] ceres_solver_options = { [cartographer_node-5] max_num_iterations = 20.000000, [cartographer_node-5] num_threads = 1.000000, [cartographer_node-5] use_nonmonotonic_steps = false, [cartographer_node-5] }, [cartographer_node-5] occupied_space_weight = 1.000000, [cartographer_node-5] rotation_weight = 40.000000, [cartographer_node-5] translation_weight = 10.000000, [cartographer_node-5] }, [cartographer_node-5] imu_gravity_time_constant = 10.000000, [cartographer_node-5] loop_closure_adaptive_voxel_filter = { [cartographer_node-5] max_length = 0.900000, [cartographer_node-5] max_range = 50.000000, [cartographer_node-5] min_num_points = 100.000000, [cartographer_node-5] }, [cartographer_node-5] max_range = 8.000000, [cartographer_node-5] max_z = 2.000000, [cartographer_node-5] min_range = 0.300000, [cartographer_node-5] min_z = -0.800000, [cartographer_node-5] missing_data_ray_length = 1.000000, [cartographer_node-5] motion_filter = { [cartographer_node-5] max_angle_radians = 0.017453, [cartographer_node-5] max_distance_meters = 0.200000, [cartographer_node-5] max_time_seconds = 5.000000, [cartographer_node-5] }, [cartographer_node-5] num_accumulated_range_data = 1.000000, [cartographer_node-5] pose_extrapolator = { [cartographer_node-5] constant_velocity = { [cartographer_node-5] imu_gravity_time_constant = 10.000000, [cartographer_node-5] pose_queue_duration = 0.001000, [cartographer_node-5] }, [cartographer_node-5] imu_based = { [cartographer_node-5] gravity_constant = 9.806000, [cartographer_node-5] imu_acceleration_weight = 1.000000, [cartographer_node-5] imu_rotation_weight = 1.000000, [cartographer_node-5] odometry_rotation_weight = 1.000000, [cartographer_node-5] odometry_translation_weight = 1.000000, [cartographer_node-5] pose_queue_duration = 5.000000, [cartographer_node-5] pose_rotation_weight = 1.000000, [cartographer_node-5] pose_translation_weight = 1.000000, [cartographer_node-5] solver_options = { [cartographer_node-5] max_num_iterations = 10.000000, [cartographer_node-5] num_threads = 1.000000, [cartographer_node-5] use_nonmonotonic_steps = false, [cartographer_node-5] }, [cartographer_node-5] }, [cartographer_node-5] use_imu_based = false, [cartographer_node-5] }, [cartographer_node-5] real_time_correlative_scan_matcher = { [cartographer_node-5] angular_search_window = 0.349066, [cartographer_node-5] linear_search_window = 0.100000, [cartographer_node-5] rotation_delta_cost_weight = 0.100000, [cartographer_node-5] translation_delta_cost_weight = 10.000000, [cartographer_node-5] }, [cartographer_node-5] submaps = { [cartographer_node-5] grid_options_2d = { [cartographer_node-5] grid_type = "PROBABILITY_GRID", [cartographer_node-5] resolution = 0.050000, [cartographer_node-5] }, [cartographer_node-5] num_range_data = 35.000000, [cartographer_node-5] range_data_inserter = { [cartographer_node-5] probability_grid_range_data_inserter = { [cartographer_node-5] hit_probability = 0.550000, [cartographer_node-5] insert_free_space = true, [cartographer_node-5] miss_probability = 0.490000, [cartographer_node-5] }, [cartographer_node-5] range_data_inserter_type = "PROBABILITY_GRID_INSERTER_2D", [cartographer_node-5] tsdf_range_data_inserter = { [cartographer_node-5] maximum_weight = 10.000000, [cartographer_node-5] normal_estimation_options = { [cartographer_node-5] num_normal_samples = 4.000000, [cartographer_node-5] sample_radius = 0.500000, [cartographer_node-5] }, [cartographer_node-5] project_sdf_distance_to_scan_normal = true, [cartographer_node-5] truncation_distance = 0.300000, [cartographer_node-5] update_free_space = false, [cartographer_node-5] update_weight_angle_scan_normal_to_ray_kernel_bandwidth = 0.500000, [cartographer_node-5] update_weight_distance_cell_to_hit_kernel_bandwidth = 0.500000, [cartographer_node-5] update_weight_range_exponent = 0.000000, [cartographer_node-5] }, [cartographer_node-5] }, [cartographer_node-5] }, [cartographer_node-5] use_imu_data = true, [cartographer_node-5] use_online_correlative_scan_matching = true, [cartographer_node-5] voxel_filter_size = 0.025000, [cartographer_node-5] }, [cartographer_node-5] trajectory_builder_3d = { [cartographer_node-5] ceres_scan_matcher = { [cartographer_node-5] ceres_solver_options = { [cartographer_node-5] max_num_iterations = 12.000000, [cartographer_node-5] num_threads = 1.000000, [cartographer_node-5] use_nonmonotonic_steps = false, [cartographer_node-5] }, [cartographer_node-5] intensity_cost_function_options_0 = { [cartographer_node-5] huber_scale = 0.300000, [cartographer_node-5] intensity_threshold = 40.000000, [cartographer_node-5] weight = 0.500000, [cartographer_node-5] }, [cartographer_node-5] occupied_space_weight_0 = 1.000000, [cartographer_node-5] occupied_space_weight_1 = 6.000000, [cartographer_node-5] only_optimize_yaw = false, [cartographer_node-5] rotation_weight = 400.000000, [cartographer_node-5] translation_weight = 5.000000, [cartographer_node-5] }, [cartographer_node-5] high_resolution_adaptive_voxel_filter = { [cartographer_node-5] max_length = 2.000000, [cartographer_node-5] max_range = 15.000000, [cartographer_node-5] min_num_points = 150.000000, [cartographer_node-5] }, [cartographer_node-5] imu_gravity_time_constant = 10.000000, [cartographer_node-5] low_resolution_adaptive_voxel_filter = { [cartographer_node-5] max_length = 4.000000, [cartographer_node-5] max_range = 60.000000, [cartographer_node-5] min_num_points = 200.000000, [cartographer_node-5] }, [cartographer_node-5] max_range = 60.000000, [cartographer_node-5] min_range = 1.000000, [cartographer_node-5] motion_filter = { [cartographer_node-5] max_angle_radians = 0.004000, [cartographer_node-5] max_distance_meters = 0.100000, [cartographer_node-5] max_time_seconds = 0.500000, [cartographer_node-5] }, [cartographer_node-5] num_accumulated_range_data = 1.000000, [cartographer_node-5] pose_extrapolator = { [cartographer_node-5] constant_velocity = { [cartographer_node-5] imu_gravity_time_constant = 10.000000, [cartographer_node-5] pose_queue_duration = 0.001000, [cartographer_node-5] }, [cartographer_node-5] imu_based = { [cartographer_node-5] gravity_constant = 9.806000, [cartographer_node-5] imu_acceleration_weight = 1.000000, [cartographer_node-5] imu_rotation_weight = 1.000000, [cartographer_node-5] odometry_rotation_weight = 1.000000, [cartographer_node-5] odometry_translation_weight = 1.000000, [cartographer_node-5] pose_queue_duration = 5.000000, [cartographer_node-5] pose_rotation_weight = 1.000000, [cartographer_node-5] pose_translation_weight = 1.000000, [cartographer_node-5] solver_options = { [cartographer_node-5] max_num_iterations = 10.000000, [cartographer_node-5] num_threads = 1.000000, [cartographer_node-5] use_nonmonotonic_steps = false, [cartographer_node-5] }, [cartographer_node-5] }, [cartographer_node-5] use_imu_based = false, [cartographer_node-5] }, [cartographer_node-5] real_time_correlative_scan_matcher = { [cartographer_node-5] angular_search_window = 0.017453, [cartographer_node-5] linear_search_window = 0.150000, [cartographer_node-5] rotation_delta_cost_weight = 0.100000, [cartographer_node-5] translation_delta_cost_weight = 0.100000, [cartographer_node-5] }, [cartographer_node-5] rotational_histogram_size = 120.000000, [cartographer_node-5] submaps = { [cartographer_node-5] high_resolution = 0.100000, [cartographer_node-5] high_resolution_max_range = 20.000000, [cartographer_node-5] low_resolution = 0.450000, [cartographer_node-5] num_range_data = 160.000000, [cartographer_node-5] range_data_inserter = { [cartographer_node-5] hit_probability = 0.550000, [cartographer_node-5] intensity_threshold = 40.000000, [cartographer_node-5] miss_probability = 0.490000, [cartographer_node-5] num_free_space_voxels = 2.000000, [cartographer_node-5] }, [cartographer_node-5] }, [cartographer_node-5] use_intensities = false, [cartographer_node-5] use_online_correlative_scan_matching = false, [cartographer_node-5] voxel_filter_size = 0.150000, [cartographer_node-5] }, [cartographer_node-5] } [cartographer_node-5] *** Check failure stack trace: *** [cartographer_node-5] @ 0xffff861dd41c google::LogMessage::Fail() [cartographer_node-5] @ 0xffff861e46d0 google::LogMessage::SendToLog() [cartographer_node-5] @ 0xffff861dd0f4 google::LogMessage::Flush() [cartographer_node-5] @ 0xffff861deebc google::LogMessageFatal::~LogMessageFatal() [cartographer_node-5] @ 0xaaaadf20392c (unknown) [cartographer_node-5] @ 0xaaaadf20398c (unknown) [cartographer_node-5] @ 0xaaaadf203dc8 (unknown) [cartographer_node-5] @ 0xaaaadf2210a8 (unknown) [cartographer_node-5] @ 0xaaaadf1eaeec (unknown) [cartographer_node-5] @ 0xaaaadf14743c (unknown) [cartographer_node-5] @ 0xffff857c73fc (unknown) [cartographer_node-5] @ 0xffff857c74cc __libc_start_main [cartographer_node-5] @ 0xaaaadf14abf0 (unknown) [test01-3] Traceback (most recent call last): [test01-3] File "/home/wjs/.local/lib/python3.10/site-packages/serial/serialposix.py", line 322, in open [test01-3] self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK) [test01-3] FileNotFoundError: [Errno 2] No such file or directory: '/dev/mcu_usb' [test01-3] [test01-3] During handling of the above exception, another exception occurred: [test01-3] [test01-3] Traceback (most recent call last): [test01-3] File "/home/wjs/Drone_Slam/install/fishbot_grapher/lib/fishbot_grapher/test01", line 33, in <module> [test01-3] sys.exit(load_entry_point('fishbot-grapher==0.0.0', 'console_scripts', 'test01')()) [test01-3] File "/home/wjs/Drone_Slam/build/fishbot_grapher/fishbot_grapher/test01.py", line 101, in main [test01-3] tf_subscriber = TFSubscriber() [test01-3] File "/home/wjs/Drone_Slam/build/fishbot_grapher/fishbot_grapher/test01.py", line 20, in __init__ [test01-3] self.ser = serial.Serial("/dev/mcu_usb", 115200) [test01-3] File "/home/wjs/.local/lib/python3.10/site-packages/serial/serialutil.py", line 244, in __init__ [test01-3] self.open() [test01-3] File "/home/wjs/.local/lib/python3.10/site-packages/serial/serialposix.py", line 325, in open [test01-3] raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg)) [test01-3] serial.serialutil.SerialException: [Errno 2] could not open port /dev/mcu_usb: [Errno 2] No such file or directory: '/dev/mcu_usb' [wit_ros2_imu-2] [INFO] [1753622781.380078547] [imu]: Serial port opening failure [ERROR] [test01-3]: process has died [pid 2608, exit code 1, cmd '/home/wjs/Drone_Slam/install/fishbot_grapher/lib/fishbot_grapher/test01 --ros-args']. [ERROR] [cartographer_node-5]: process has died [pid 2612, exit code -6, cmd '/opt/ros/humble/lib/cartographer_ros/cartographer_node -configuration_directory /home/wjs/Drone_Slam/install/fishbot_grapher/share/fishbot_grapher/config -configuration_basename test02.lua --ros-args -r __node:=cartographer_node --params-file /tmp/launch_params_clup20by'].

-- Copyright 2016 The Cartographer Authors -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. -- You may obtain a copy of the License at -- -- http://www.apache.org/licenses/LICENSE-2.0 -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and -- limitations under the License. include "map_builder.lua" include "trajectory_builder.lua" options = { map_builder = MAP_BUILDER, trajectory_builder = TRAJECTORY_BUILDER, map_frame = "map", tracking_frame = "imu_link", published_frame = "base_link", odom_frame = "odom", provide_odom_frame = true, publish_frame_projected_to_2d = false, -- use_pose_extrapolator = on, use_odometry = false, use_nav_sat = false, use_landmarks = false, num_laser_scans = 1, num_multi_echo_laser_scans = 0, num_subdivisions_per_laser_scan = 1, num_point_clouds = 0, lookup_transform_timeout_sec = 0.2, submap_publish_period_sec = 0.3, pose_publish_period_sec = 5e-3, trajectory_publish_period_sec = 30e-3, rangefinder_sampling_ratio = 1., odometry_sampling_ratio = 1., fixed_frame_pose_sampling_ratio = 1., imu_sampling_ratio = 1., landmarks_sampling_ratio = 1., } MAP_BUILDER.use_trajectory_builder_2d = true TRAJECTORY_BUILDER_2D.submaps.num_range_data = 35 TRAJECTORY_BUILDER_2D.min_range = 0.3 TRAJECTORY_BUILDER_2D.max_range = 8. TRAJECTORY_BUILDER_2D.missing_data_ray_length = 1. TRAJECTORY_BUILDER_2D.use_imu_data = true TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1 TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 10. TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1 TRAJECTORY_BUILDER.collate_landmarks = on POSE_GRAPH.optimization_problem.huber_scale = 1e2 POSE_GRAPH.optimize_every_n_nodes = 35 POSE_GRAPH.constraint_builder.min_score = 0.65 return options 给我改

include "map_builder.lua" include "trajectory_builder.lua" options = { map_builder = MAP_BUILDER, trajectory_builder = TRAJECTORY_BUILDER, map_frame = "map", tracking_frame = "laser_link", -- base_link改为odom,发布map到odom之间的位姿态 published_frame = "odom", odom_frame = "odom", -- true改为false,不用提供里程计数据 provide_odom_frame = false, -- false改为true,仅发布2D位资 publish_frame_projected_to_2d = true, -- false改为true,使用里程计数据 use_odometry = false, use_nav_sat = false, use_landmarks = false, -- 0改为1,使用一个雷达 num_laser_scans = 1, -- 1改为0,不使用多波雷达 num_multi_echo_laser_scans = 0, -- 10改为1,1/1=1等于不分割 num_subdivisions_per_laser_scan = 1, num_point_clouds = 0, lookup_transform_timeout_sec = 0.2, submap_publish_period_sec = 0.3, pose_publish_period_sec = 5e-3, trajectory_publish_period_sec = 30e-3, rangefinder_sampling_ratio = 1., odometry_sampling_ratio = 1., fixed_frame_pose_sampling_ratio = 1., imu_sampling_ratio = 1., landmarks_sampling_ratio = 1., } -- false改为true,启动2D SLAM MAP_BUILDER.use_trajectory_builder_2d = true -- 0改成0.10,比机器人半径小的都忽略 TRAJECTORY_BUILDER_2D.min_range = 0.10 -- 30改成3.5,限制在雷达最大扫描范围内,越小一般越精确些 TRAJECTORY_BUILDER_2D.max_range = 3.5 -- 5改成3,传感器数据超出有效范围最大值 TRAJECTORY_BUILDER_2D.missing_data_ray_length = 3. -- true改成false,不使用IMU数据,大家可以开启,然后对比下效果 TRAJECTORY_BUILDER_2D.use_imu_data = false -- false改成true,使用实时回环检测来进行前端的扫描匹配 TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true -- 1.0改成0.1,提高对运动的敏感度 TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians = math.rad(0.1) -- 0.55改成0.65,Fast csm的最低分数,高于此分数才进行优化。 POSE_GRAPH.constraint_builder.min_score = 0.65 --0.6改成0.7,全局定位最小分数,低于此分数则认为目前全局定位不准确 POSE_GRAPH.constraint_builder.global_localization_min_score = 0.7 -- 设置0可关闭全局SLAM -- POSE_GRAPH.optimize_every_n_nodes = 0 return options 这是第二个配置文件哪一个好?

void Mapserver::closed_loop_detection_graph(int max_frame_size, bool use_graph_pose) { // 更新进度 std::stringstream _mesg; _mesg << "开始优化位姿,截止帧ID:" << max_frame_size - 1; // ROS_INFO_STREAM(_mesg.str();); sendBuildMessageToPC(14, "信息", "建图程序", "更新地图过程中", _mesg, 0, 10); // 初始化闭环 //points_map_.loop_edge_size = 0; // 闭环的帧 frame _closed_frame; // 闭环的帧 int _closed_frame_index; // 最好i评分 double _best_score; // 距离平方 double _distance_sqr; // 级别差值 int _diffe_level; /// @brief 弧度差距 double _diffe_yaw; // 评分 double _score; // 先复位帧 // if (false) // { // // 用来恢复初值 // points_map_.frames[0].odom = points_map_.frames[0].pose; // for (int i = 0; i < max_frame_size && i < points_map_.frame_size; ++i) // { // // 没有固定的恢复初数值 // if (i > points_map_.fixed_frame_index) // points_map_.frames[i].odom = points_map_.frames[points_map_.frames_edge[i].seq_i].odom * points_map_.frames_edge[i].measure; // else // 固定的就算pose // points_map_.frames[i].odom = points_map_.frames[i].pose; // } // std::stringstream _mesg2; // _mesg2 << "位姿优化复位结束,截止帧ID:" << max_frame_size - 1; // sendBuildMessageToPC(14, "信息", "建图程序", "更新地图过程中", _mesg2, 0, 10); // } // int _diffe_level_min = (floor)(5.5 / mapping_params_.distance_step); // 6米内的都参与计算 double _max_sqr = mapping_params_.loop_search_range; //_max_sqr=6.9; //_max_sqr = 5.2; // 以下代码为小闭环用的代码 // int _diffe_level_min = (ceil)(_max_sqr / mapping_params_.distance_step * 1.1); // if (_diffe_level_min > 9) // _diffe_level_min = 9; int _diffe_level_min = mapping_params_.loop_min_level; //_diffe_level_min=3; //_diffe_level_min = 5; //// // double _max_sqr = 3.6; double _dis_max_sqr = _max_sqr * _max_sqr; std::vector<Eigen::Vector2i> _near_frames; bool small_close_loop=false; //for (int i_1 = 0; i_1 < max_frame_size && i_1 < points_map_.frame_size; i_1+=5) for (int i_1 = 0; i_1 < max_frame_size && i_1 < points_map_.frame_size; ++i_1) { if(i_1%2==0) small_close_loop=true; else small_close_loop=false; // 三级后再开始找回环,并且不是长巷道,帧也没有被弃用 if (points_map_.frames[i_1].level > _diffe_level_min && points_map_.frames[i_1].status != 3 && points_map_.frames[i_1].status != 7&&points_map_.frames[i_1].close_index==0) // points_map_.frames[i_1].num_links == 1 && { _near_frames.clear(); // 初始化评分 _best_score = 0; _score = 0; // 轮训其他帧,找到合适闭环的 int _i_2_max = std::min(max_frame_size, points_map_.frame_size); if(small_close_loop) _i_2_max=i_1-1; //_i_2_max = i_1 - _diffe_level_min+1; //for (int i_2 = 1; i_2 < _i_2_max; i_2+=5) if(points_map_.frames[i_1].closeloop_num<=3) for (int i_2 = 1; i_2 < _i_2_max; ++i_2) { // 同一个点跳过 if (i_1 == i_2) continue; // 弃用帧跳过 if (points_map_.frames[i_2].status == 7) continue; // 长巷道跳过 // if (points_map_.frames[i_2].status!=3) // continue; // 是取回环前的位子还是回环后的位子 if (!use_graph_pose) _distance_sqr = points_map_.frames[i_1].pose.getSquare(points_map_.frames[i_2].pose); else _distance_sqr = points_map_.frames[i_1].pose.getSquare(points_map_.frames[i_2].pose); _diffe_yaw = points_map_.frames[i_1].pose.getYaw() - points_map_.frames[i_2].pose.getYaw() ; /// 角度差异也加入运算 if(_diffe_yaw>M_PI)_diffe_yaw-=M_PI; else if(_diffe_yaw<=-M_PI)_diffe_yaw+=M_PI; _diffe_yaw=abs(_diffe_yaw); _diffe_level = points_map_.frames[i_1].level - points_map_.frames[i_2].level; /// 往前闭合 if (small_close_loop) _diffe_level_min = 4; else _diffe_level_min = mapping_params_.loop_min_level; if (small_close_loop) _dis_max_sqr = 4.5 * 4.5 ; else _dis_max_sqr = _max_sqr * _max_sqr; // 距离小于3.6米的才闭环,节点级别差N代 // ROS_INFO_STREAM("_distance_sqr"<<_distance_sqr<<"_diffe_level"<<_diffe_level); if (_distance_sqr < _dis_max_sqr && abs(_diffe_level) >= _diffe_level_min) { // 目标级别差越好,距离越近评分越高 // _score = abs(_diffe_level) * 13.0 + (_max_sqr - sqrt(_distance_sqr)) * 10.0-_diffe_yaw*20.0; _score = abs(_diffe_level) * 13.0 + (_max_sqr - sqrt(_distance_sqr)) * 50.0-_diffe_yaw*20.0; /// 单雷达最看重角度 if(mapping_params_.scanner_num==1) _score = abs(_diffe_level) * 13.0 + (_max_sqr - sqrt(_distance_sqr)) * 50.0-_diffe_yaw*40.0; /// 如果_diffe_level>0,表示目标级别低,时间早,精度高,闭环效果好,则增加个固定评分 if(_diffe_level>0) _score+=100.0; Eigen::Vector2i _near_frame = Eigen::Vector2i(i_2, (int)_score); _near_frames.push_back(_near_frame); if (_score > _best_score) { _closed_frame = points_map_.frames[i_2]; _closed_frame_index = i_2; _best_score = _score; } } } else if(points_map_.frames[i_1].close_index>=1) { _near_frames.push_back(Eigen::Vector2i(points_map_.frames[i_1].close_index,100)); } if (_near_frames.size() > 0) { // 降顺序排列 std::sort(_near_frames.begin(), _near_frames.end(), [](Eigen::Vector2i a, Eigen::Vector2i b) { return a(1) > b(1); }); bool _scan_matcher_ok = false; // 设置帧建匹配过来的关键帧作为点云 std::shared_ptr<frame> _source_cloud_ptr = std::make_shared<frame>(points_map_.frames[i_1]); scan_matcher_build_->setSourceCloud(_source_cloud_ptr); // 限制在10个以内 for (int i_2 = 0; i_2 < _near_frames.size() && i_2 <= 8; ++i_2) { scan_matcher_build_->initMatch(); _closed_frame_index = _near_frames[i_2](0); std::shared_ptr<frame> _target_cloud_ptr = std::make_shared<frame>(points_map_.frames[_closed_frame_index]); scan_matcher_build_->setTargetCloud(_target_cloud_ptr); PoseWithCov _deviation; // if (!use_graph_pose) // _deviation = points_map_.frames[_closed_frame_index].pose.getmeasurement(points_map_.frames[i_1].pose); // else //好像反了 _deviation = points_map_.frames[_closed_frame_index].pose.getmeasurement(points_map_.frames[i_1].pose); //_deviation = points_map_.frames[i_1].pose.getmeasurement(points_map_.frames[_closed_frame_index].pose); scan_matcher_build_->setInitialGuass(_deviation); /// 进行一次ICP的匹配 if(small_close_loop) scan_matcher_build_->match(); else scan_matcher_build_->match(true); // 长巷道,不进行闭环 if (scan_matcher_build_->result_.probability_straight < 0.92 && scan_matcher_build_->result_.success && scan_matcher_build_->result_.health > mapping_params_.loop_success_threshold*1.2) { if (points_map_.loop_edge_size < points_map_.frame_capacity && points_map_.loop_edge_size < points_map_.loop_edge.size()) { scan_matcher_build_small_->initMatch(); scan_matcher_build_small_->setSourceCloud(_source_cloud_ptr); scan_matcher_build_small_->setTargetCloud(_target_cloud_ptr); scan_matcher_build_small_->setInitialGuass(scan_matcher_build_->result_.pose); scan_matcher_build_small_->match(); if (scan_matcher_build_small_->result_.success && scan_matcher_build_small_->result_.health > mapping_params_.loop_success_threshold) { // 添加回环边 measurement edge_temp; edge_temp.seq_i = _closed_frame_index; edge_temp.seq_j = i_1; edge_temp.measure = scan_matcher_build_small_->result_.pose; //edge_temp.infoMatrix = Eigen::Matrix3d::Identity(); edge_temp.infoMatrix = scan_matcher_build_small_->result_.infoMatrix; points_map_.loop_edge[points_map_.loop_edge_size] = edge_temp; // points_map_.loop_edge[points_map_.loop_edge_size].infoMatrix = Eigen::Matrix3d::Identity();; points_map_.loop_edge_size++; _scan_matcher_ok = true; points_map_.frames[i_1].close_index = _closed_frame_index; // ROS_INFO_STREAM("建图程序,回环成功:ID:" << i_1 << " 与ID:" << _closed_frame_index << " ,匹配健康值:" << scan_matcher_build_->result_.health); break; } } else { ROS_ERROR_STREAM("建图:严重错误:闭环边数量超出容量"); } } // 释放 _target_cloud_ptr.reset(); } _source_cloud_ptr.reset(); if (points_map_.frames[i_1].closeloop_num < 1000) points_map_.frames[i_1].closeloop_num++; // if (!_scan_matcher_ok) // ROS_WARN_STREAM("建图程序,回环失败,两帧匹配不上:ID:" << i_1 << " 与ID:" << _closed_frame_index << " ,匹配健康值:" << scan_matcher_build_->result_.health); } //// 闭合后的点云不再进行闭合 // if (points_map_.frames[i_1].close_index == 0) // points_map_.frames[i_1].close_index = 99999; // // 有闭环的点 // if (_best_score > 0) // { // bool _scan_matcher_ok = false; // // 设置帧建匹配过来的关键帧作为点云 // boost::shared_ptr<frame> _source_cloud_ptr = boost::make_shared<frame>(points_map_.frames[i_1]); // scan_matcher_build_->setSourceCloud(_source_cloud_ptr); // boost::shared_ptr<frame> _target_cloud_ptr = boost::make_shared<frame>(points_map_.frames[_closed_frame_index]); // scan_matcher_build_->setTargetCloud(_target_cloud_ptr); // PoseWithCov _deviation = points_map_.frames[_closed_frame_index].pose.getmeasurement(points_map_.frames[i_1].pose); // scan_matcher_build_->setInitialGuass(_deviation); // /// 进行一次ICP的匹配 // scan_matcher_build_->match(); // if (scan_matcher_build_->result_.success && scan_matcher_build_->result_.health > mapping_params_.loop_success_threshold) // { // if (points_map_.loop_edge_size < points_map_.frame_capacity && points_map_.loop_edge_size < points_map_.loop_edge.size()) // { // // 添加回环边 // measurement edge_temp; // edge_temp.seq_i = _closed_frame_index; // edge_temp.seq_j = i_1; // edge_temp.measure = scan_matcher_build_->result_.result; // edge_temp.infoMatrix = Eigen::Matrix3d::Identity(); // points_map_.loop_edge[points_map_.loop_edge_size] = edge_temp; // points_map_.loop_edge_size++; // _scan_matcher_ok = true; // ROS_INFO_STREAM("建图程序,回环成功:ID:" << i_1 << " 与ID:" << _closed_frame_index << " ,匹配健康值:" << scan_matcher_build_->result_.health); // } // else // { // ROS_ERROR_STREAM("建图程序,回环严重错误:回环边数量:" << points_map_.loop_edge_size << " 大于等于预设容量:" << points_map_.frame_capacity << " ,或大于等于实际容量:" << points_map_.loop_edge.size()); // } // } // if (!_scan_matcher_ok) // ROS_WARN_STREAM("建图程序,回环失败,两帧匹配不上:ID:" << i_1 << " 与ID:" << _closed_frame_index << " ,匹配健康值:" << scan_matcher_build_->result_.health); // }; } if (i_1 > 50 && i_1 % 20 == 0) { // 进度从10到30 int _step = 10 + i_1 * 20 / max_frame_size; // 更新进度 std::stringstream _mesg2(""); //_mesg.clear(); _mesg2 << "优化位姿,预处理中,截止帧ID:" << max_frame_size - 1; sendBuildMessageToPC(14, "信息", "建图程序", "更新地图过程中", _mesg2, 0, _step); } } /// 有强制闭环的帧的ID输入,表示需要强制闭环 if (A_frame_ID_force_loop_ != B_frame_ID_force_loop_ && A_frame_ID_force_loop_ >= 0 && B_frame_ID_force_loop_ >= 0 && A_frame_ID_force_loop_ < points_map_.frame_size && B_frame_ID_force_loop_ < points_map_.frame_size) { int _A_frame_ID = A_frame_ID_force_loop_; int _B_frame_ID = B_frame_ID_force_loop_; double _search_range_force_loop = (double)search_range_force_loop_; A_frame_ID_force_loop_ = 0; B_frame_ID_force_loop_ = 0; forceLoop(_A_frame_ID, _B_frame_ID, _search_range_force_loop); // if(forceLoop(_A_frame_ID, _B_frame_ID)) // { // //扩大上限 // max_frame_size=std::max(max_frame_size, std::max(_A_frame_ID+1,_B_frame_ID+1)); // //max_loop_edge_size=std::max(max_loop_edge_size, points_map_.loop_edge_size); // } } if (points_map_.loop_edge_size > 0) { double graph_residual = 0; // 图优化 std::stringstream _mesg3; _mesg3 << "优化位姿,大量计算中,请耐心等待,截止帧ID:" << max_frame_size - 1; sendBuildMessageToPC(14, "信息", "建图程序", "更新地图过程中", _mesg3, 0, 40); bool _use_aruco = false; if (status_aruco_frame_ == 1) _use_aruco = true; ////帧间匹配 current_Iteration_ceres_ = 0; int _result = ceres_graph_method(points_map_.fixed_frame_index, graph_results_, points_map_, graph_residual, current_Iteration_ceres_, max_frame_size, points_map_.loop_edge_size, true, _use_aruco,auto_flat_k_,mapping_params_.num_threads); current_Iteration_ceres_ = -1; if (_result > 0) { std::stringstream _mesg4(""); _mesg4 << "位姿优化完成,截止帧ID:" << max_frame_size - 1; sendBuildMessageToPC(14, "信息", "建图程序", "更新地图过程中", _mesg4, 0, 60); } else { std::stringstream _mesg4(""); _mesg4 << "位姿优化失败!失败!失败!无法优化位姿,截止帧ID:" << max_frame_size - 1; sendBuildMessageToPC(14, "错误", "建图程序", "更新地图过程中", _mesg4, 0, 60); std::stringstream _mesg5(""); _mesg5 << "位姿优化失败!失败!失败!无法优化位姿,截止帧ID:" << max_frame_size - 1; sendBuildMessageToPC(0, "重要错误", "建图程序", "更新地图过程中", _mesg5, 30, 0); } new_graph_pose_input_update_ = true; // if (points_map_.fixed_frame_index < max_frame_size - 1) // { // ceres_graph_method(points_map_.fixed_frame_index, graph_results_, points_map_, graph_residual, max_frame_size, max_edge_size, use_graph_pose); // std::stringstream _mesg4(""); // _mesg4 << "建图程序,进度:60%,帧间优化完成"; // sendBuildMessageToPC(4, _mesg4); // new_graph_pose_input_update_ = true; // } // else // { // std::stringstream _mesg4(""); // _mesg4 << "建图程序,进度:60%,所有帧固定,不进行帧优化"; // sendBuildMessageToPC(4, _mesg4); // new_graph_pose_input_update_ = true; // } } else { std::stringstream _mesg4(""); _mesg4 << "没有回环,位姿优化失败"; sendBuildMessageToPC(14, "信息", "建图程序", "更新地图过程中", _mesg4, 0, 60); new_graph_pose_input_update_ = true; } // // 线程内处理上一次的结果,现移到外部 // if (new_graph_pose_input_update_) // { // // for (int i = 0; i < graph_results_.size() && i < points_map_.frame_size && i < points_map_.frames.size(); ++i) // // { // // PoseWithCov _measurement(graph_results_[i]); // // points_map_.frames[i].pose_graph = _measurement; // // } // // change_graph_ = false; // } return; }

wjs@wjs-desktop:~/Drone_Slam$ ros2 launch fishbot_grapher test_grapher_11.launch.py [INFO] [launch]: All log files can be found below /home/wjs/.ros/log/2025-07-31-22-36-21-063785-wjs-desktop-3401 [INFO] [launch]: Default logging verbosity is set to INFO URDF路径: /home/wjs/Drone_Slam/install/fishbot_grapher/share/fishbot_grapher/urdf/fishbot_base.urdf 配置文件目录: /home/wjs/Drone_Slam/install/fishbot_grapher/share/fishbot_grapher/config [INFO] [sllidar_node-1]: process started with pid [3402] [INFO] [ahrs_driver_node-2]: process started with pid [3404] [INFO] [robot_state_publisher-3]: process started with pid [3406] [INFO] [cartographer_node-4]: process started with pid [3408] [INFO] [cartographer_occupancy_grid_node-5]: process started with pid [3410] [INFO] [test01-6]: process started with pid [3414] [sllidar_node-1] [INFO] [1753972581.986391243] [sllidar_node]: SLLidar running on ROS2 package SLLidar.ROS2 SDK Version:1.0.1, SLLIDAR SDK Version:2.0.0 [robot_state_publisher-3] [WARN] [1753972581.996475307] [robot_state_publisher]: No robot_description parameter, but command-line argument available. Assuming argument is name of URDF file. This backwards compatibility fallback will be removed in the future. [cartographer_node-4] [INFO] [1753972582.011709333] [cartographer logger]: I0731 22:36:21.000000 3408 configuration_file_resolver.cc:41] Found '/home/wjs/Drone_Slam/install/fishbot_grapher/share/fishbot_grapher/config/test02.lua' for 'test02.lua'. [cartographer_node-4] [INFO] [1753972582.013333071] [cartographer logger]: I0731 22:36:22.000000 3408 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/map_builder.lua' for 'map_builder.lua'. [cartographer_node-4] [INFO] [1753972582.013688304] [cartographer logger]: I0731 22:36:22.000000 3408 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/map_builder.lua' for 'map_builder.lua'. [cartographer_node-4] [INFO] [1753972582.014082280] [cartographer logger]: I0731 22:36:22.000000 3408 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/pose_graph.lua' for 'pose_graph.lua'. [cartographer_node-4] [INFO] [1753972582.014301028] [cartographer logger]: I0731 22:36:22.000000 3408 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/pose_graph.lua' for 'pose_graph.lua'. [cartographer_node-4] [INFO] [1753972582.015024162] [cartographer logger]: I0731 22:36:22.000000 3408 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder.lua' for 'trajectory_builder.lua'. [cartographer_node-4] [INFO] [1753972582.015279911] [cartographer logger]: I0731 22:36:22.000000 3408 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder.lua' for 'trajectory_builder.lua'. [cartographer_node-4] [INFO] [1753972582.015654423] [cartographer logger]: I0731 22:36:22.000000 3408 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_2d.lua' for 'trajectory_builder_2d.lua'. [cartographer_node-4] [INFO] [1753972582.015846540] [cartographer logger]: I0731 22:36:22.000000 3408 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_2d.lua' for 'trajectory_builder_2d.lua'. [cartographer_node-4] [INFO] [1753972582.034546103] [cartographer logger]: I0731 22:36:22.000000 3408 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_3d.lua' for 'trajectory_builder_3d.lua'. [cartographer_node-4] [INFO] [1753972582.038440599] [cartographer logger]: I0731 22:36:22.000000 3408 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_3d.lua' for 'trajectory_builder_3d.lua'. [sllidar_node-1] [INFO] [1753972582.070328993] [sllidar_node]: SLLidar S/N: 7885EC95C1EA9ED1B2E49CF4FB594571 [sllidar_node-1] [INFO] [1753972582.070517165] [sllidar_node]: Firmware Ver: 1.01 [sllidar_node-1] [INFO] [1753972582.070583316] [sllidar_node]: Hardware Rev: 18 [sllidar_node-1] [INFO] [1753972582.123145614] [sllidar_node]: SLLidar health status : 0 [sllidar_node-1] [INFO] [1753972582.123298397] [sllidar_node]: SLLidar health status : OK. [robot_state_publisher-3] [INFO] [1753972582.128163423] [robot_state_publisher]: got segment base_link [robot_state_publisher-3] [INFO] [1753972582.128332151] [robot_state_publisher]: got segment imu_link [robot_state_publisher-3] [INFO] [1753972582.128406172] [robot_state_publisher]: got segment laser_link [ahrs_driver_node-2] [INFO] [1753972582.202092222] [ahrs_bringup]: Serial Port initialized [ahrs_driver_node-2] [INFO] [1753972582.203306613] [ahrs_bringup]: ahrsBringup::processLoop: start [cartographer_node-4] [INFO] [1753972582.244303392] [cartographer logger]: I0731 22:36:22.000000 3408 map_builder_bridge.cpp:136] Added trajectory with ID '0'. [sllidar_node-1] [INFO] [1753972582.352471345] [sllidar_node]: current scan mode: DenseBoost, sample rate: 32 Khz, max_distance: 18.0 m, scan frequency:10.0 Hz, [test01-6] [INFO] [1753972583.505330257] [tf_subscriber]: 串口初始化成功: /dev/esp [cartographer_node-4] [INFO] [1753972584.271857380] [cartographer logger]: I0731 22:36:24.000000 3408 ordered_multi_queue.cc:172] All sensor data for trajectory 0 is available starting at '638895693842687326'. [cartographer_node-4] [INFO] [1753972584.273126717] [cartographer logger]: I0731 22:36:24.000000 3408 local_trajectory_builder_2d.cc:135] Extrapolator is still initializing. [cartographer_node-4] [INFO] [1753972584.375924905] [cartographer logger]: I0731 22:36:24.000000 3408 pose_graph_2d.cc:148] Inserted submap (0, 0). [cartographer_node-4] [WARN] [1753972584.473750823] [cartographer logger]: W0731 22:36:24.000000 3408 range_data_collator.cc:82] Dropped 209 earlier points. [cartographer_node-4] [WARN] [1753972584.480935739] [cartographer logger]: W0731 22:36:24.000000 3408 range_data_collator.cc:82] Dropped 1994 earlier points. [cartographer_node-4] [WARN] [1753972584.595685181] [cartographer logger]: W0731 22:36:24.000000 3408 range_data_collator.cc:82] Dropped 2392 earlier points. [cartographer_node-4] [WARN] [1753972584.722220687] [cartographer logger]: W0731 22:36:24.000000 3408 range_data_collator.cc:82] Dropped 2428 earlier points. [cartographer_node-4] [WARN] [1753972584.869288389] [cartographer logger]: W0731 22:36:24.000000 3408 range_data_collator.cc:82] Dropped 2631 earlier points. [cartographer_node-4] [WARN] [1753972585.062024964] [cartographer logger]: W0731 22:36:25.000000 3408 range_data_collator.cc:82] Dropped 2666 earlier points. [cartographer_node-4] [WARN] [1753972585.299729464] [cartographer logger]: W0731 22:36:25.000000 3408 range_data_collator.cc:82] Dropped 2647 earlier points. [cartographer_node-4] [WARN] [1753972585.621127465] [cartographer logger]: W0731 22:36:25.000000 3408 range_data_collator.cc:82] Dropped 2785 earlier points. [cartographer_node-4] [WARN] [1753972585.652920412] [cartographer logger]: W0731 22:36:25.000000 3408 range_data_collator.cc:82] Dropped 537 earlier points. [cartographer_node-4] [WARN] [1753972585.662334584] [cartographer logger]: W0731 22:36:25.000000 3408 range_data_collator.cc:82] Dropped 332 earlier points. [cartographer_node-4] [WARN] [1753972585.691437481] [cartographer logger]: W0731 22:36:25.000000 3408 range_data_collator.cc:82] Dropped 10 earlier points. [cartographer_node-4] [WARN] [1753972585.742905096] [cartographer logger]: W0731 22:36:25.000000 3408 range_data_collator.cc:82] Dropped 595 earlier points. [cartographer_node-4] [WARN] [1753972585.795619066] [cartographer logger]: W0731 22:36:25.000000 3408 range_data_collator.cc:82] Dropped 501 earlier points. ^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT) [robot_state_publisher-3] [INFO] [1753972586.729521375] [rclcpp]: signal_handler(signum=2) [cartographer_occupancy_grid_node-5] [INFO] [1753972586.729486818] [rclcpp]: signal_handler(signum=2) [ahrs_driver_node-2] [INFO] [1753972586.730259954] [rclcpp]: signal_handler(signum=2) [cartographer_node-4] [INFO] [1753972586.731881654] [rclcpp]: signal_handler(signum=2) [cartographer_node-4] [INFO] [1753972586.762551805] [cartographer logger]: I0731 22:36:26.000000 3408 node.cpp:569] Shutdown the subscriber of [scan] [cartographer_node-4] [INFO] [1753972586.765307783] [cartographer logger]: I0731 22:36:26.000000 3408 node.cpp:569] Shutdown the subscriber of [imu] [cartographer_node-4] [INFO] [1753972586.765400804] [cartographer logger]: I0731 22:36:26.000000 3408 map_builder_bridge.cpp:152] Finishing trajectory with ID '0'... [cartographer_node-4] [WARN] [1753972586.766412615] [cartographer logger]: W0731 22:36:26.000000 3408 node.cpp:773] Can't run final optimization if there are one or more active trajectories. Trying to finish trajectory with ID 0 now. [cartographer_node-4] [INFO] [1753972586.766522507] [cartographer logger]: I0731 22:36:26.000000 3408 node.cpp:551] Trajectory 0 already pending to finish. [cartographer_node-4] [INFO] [1753972586.766569212] [cartographer logger]: I0731 22:36:26.000000 3408 map_builder_bridge.cpp:161] Running final trajectory optimization... [cartographer_node-4] [INFO] [1753972586.766686623] [cartographer logger]: I0731 22:36:26.000000 3461 pose_graph_2d.cc:538] Remaining work items in queue: 0 [cartographer_node-4] [INFO] [1753972586.766820776] [cartographer logger]: I0731 22:36:26.000000 3461 constraint_builder_2d.cc:290] 0 computations resulted in 0 additional constraints. [cartographer_node-4] [INFO] [1753972586.766862277] [cartographer logger]: I0731 22:36:26.000000 3461 constraint_builder_2d.cc:292] Score histogram: [cartographer_node-4] Count: 0 [test01-6] [INFO] [1753972586.769791297] [tf_subscriber]: 用户中断,退出节点 [test01-6] Failed to publish log message to rosout: publisher's context is invalid, at ./src/rcl/publisher.c:389 [cartographer_node-4] [WARN] [1753972586.792771590] [cartographer logger]: W0731 22:36:26.000000 3461 preprocessor.cc:62] Specified options.num_threads: 7 exceeds maximum available from the threading model Ceres was compiled with: 4. Bounding to maximum number available. [cartographer_node-4] [INFO] [1753972586.808681453] [cartographer logger]: I0731 22:36:26.000000 3461 pose_graph_2d.cc:538] Remaining work items in queue: 1 [cartographer_node-4] [INFO] [1753972586.808851254] [cartographer logger]: I0731 22:36:26.000000 3461 constraint_builder_2d.cc:290] 0 computations resulted in 0 additional constraints. [cartographer_node-4] [INFO] [1753972586.808900163] [cartographer logger]: I0731 22:36:26.000000 3461 constraint_builder_2d.cc:292] Score histogram: [cartographer_node-4] Count: 0 [cartographer_node-4] [WARN] [1753972586.836843523] [cartographer logger]: W0731 22:36:26.000000 3461 preprocessor.cc:62] Specified options.num_threads: 7 exceeds maximum available from the threading model Ceres was compiled with: 4. Bounding to maximum number available. [cartographer_node-4] [INFO] [1753972586.844830224] [cartographer logger]: I0731 22:36:26.000000 3460 constraint_builder_2d.cc:290] 0 computations resulted in 0 additional constraints. [cartographer_node-4] [INFO] [1753972586.844950321] [cartographer logger]: I0731 22:36:26.000000 3460 constraint_builder_2d.cc:292] Score histogram: [cartographer_node-4] Count: 0 Optimizing: Done. [INFO] [ahrs_driver_node-2]: process has finished cleanly [pid 3404] [cartographer_node-4] [INFO] [1753972587.040705270] [cartographer logger]: I0731 22:36:27.000000 3462 constraint_builder_2d.cc:290] 0 computations resulted in 0 additional constraints. [cartographer_node-4] [INFO] [1753972587.040867757] [cartographer logger]: I0731 22:36:27.000000 3462 constraint_builder_2d.cc:292] Score histogram: [cartographer_node-4] Count: 0 Optimizing: Done. [INFO] [robot_state_publisher-3]: process has finished cleanly [pid 3406] [INFO] [cartographer_occupancy_grid_node-5]: process has finished cleanly [pid 3410] [INFO] [cartographer_node-4]: process has finished cleanly [pid 3408] [INFO] [test01-6]: process has finished cleanly [pid 3414] [sllidar_node-1] [INFO] [1753972587.955950183] [sllidar_node]: Stop motor [INFO] [sllidar_node-1]: process has finished cleanly [pid 3402] wjs@wjs-desktop:~/Drone_Slam$ ^C wjs@wjs-desktop:~/Drone_Slam$ ros2 launch fishbot_grapher test_grapher_11.launch.py [INFO] [launch]: All log files can be found below /home/wjs/.ros/log/2025-07-31-22-42-04-880679-wjs-desktop-3490 [INFO] [launch]: Default logging verbosity is set to INFO URDF路径: /home/wjs/Drone_Slam/install/fishbot_grapher/share/fishbot_grapher/urdf/fishbot_base.urdf 配置文件目录: /home/wjs/Drone_Slam/install/fishbot_grapher/share/fishbot_grapher/config [INFO] [sllidar_node-1]: process started with pid [3491] [INFO] [ahrs_driver_node-2]: process started with pid [3493] [INFO] [robot_state_publisher-3]: process started with pid [3495] [INFO] [cartographer_node-4]: process started with pid [3497] [INFO] [cartographer_occupancy_grid_node-5]: process started with pid [3500] [INFO] [test01-6]: process started with pid [3518] [sllidar_node-1] [INFO] [1753972925.292018354] [sllidar_node]: SLLidar running on ROS2 package SLLidar.ROS2 SDK Version:1.0.1, SLLIDAR SDK Version:2.0.0 [sllidar_node-1] [INFO] [1753972925.341420338] [sllidar_node]: SLLidar S/N: 7885EC95C1EA9ED1B2E49CF4FB594571 [sllidar_node-1] [INFO] [1753972925.341625562] [sllidar_node]: Firmware Ver: 1.01 [sllidar_node-1] [INFO] [1753972925.341712796] [sllidar_node]: Hardware Rev: 18 [sllidar_node-1] [INFO] [1753972925.394365205] [sllidar_node]: SLLidar health status : 0 [sllidar_node-1] [INFO] [1753972925.394585558] [sllidar_node]: SLLidar health status : OK. [robot_state_publisher-3] [WARN] [1753972925.439404039] [robot_state_publisher]: No robot_description parameter, but command-line argument available. Assuming argument is name of URDF file. This backwards compatibility fallback will be removed in the future. [robot_state_publisher-3] [INFO] [1753972925.462492726] [robot_state_publisher]: got segment base_link [robot_state_publisher-3] [INFO] [1753972925.462650546] [robot_state_publisher]: got segment imu_link [robot_state_publisher-3] [INFO] [1753972925.462684655] [robot_state_publisher]: got segment laser_link [sllidar_node-1] [INFO] [1753972926.001498187] [sllidar_node]: current scan mode: DenseBoost, sample rate: 32 Khz, max_distance: 18.0 m, scan frequency:10.0 Hz, [cartographer_node-4] [INFO] [1753972926.381159918] [cartographer logger]: I0731 22:42:06.000000 3497 configuration_file_resolver.cc:41] Found '/home/wjs/Drone_Slam/install/fishbot_grapher/share/fishbot_grapher/config/test02.lua' for 'test02.lua'. [cartographer_node-4] [INFO] [1753972926.387582813] [cartographer logger]: I0731 22:42:06.000000 3497 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/map_builder.lua' for 'map_builder.lua'. [cartographer_node-4] [INFO] [1753972926.387886344] [cartographer logger]: I0731 22:42:06.000000 3497 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/map_builder.lua' for 'map_builder.lua'. [cartographer_node-4] [INFO] [1753972926.401111512] [cartographer logger]: I0731 22:42:06.000000 3497 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/pose_graph.lua' for 'pose_graph.lua'. [cartographer_node-4] [INFO] [1753972926.404937484] [cartographer logger]: I0731 22:42:06.000000 3497 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/pose_graph.lua' for 'pose_graph.lua'. [cartographer_node-4] [INFO] [1753972926.406829278] [cartographer logger]: I0731 22:42:06.000000 3497 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder.lua' for 'trajectory_builder.lua'. [cartographer_node-4] [INFO] [1753972926.407115588] [cartographer logger]: I0731 22:42:06.000000 3497 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder.lua' for 'trajectory_builder.lua'. [cartographer_node-4] [INFO] [1753972926.407520389] [cartographer logger]: I0731 22:42:06.000000 3497 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_2d.lua' for 'trajectory_builder_2d.lua'. [cartographer_node-4] [INFO] [1753972926.407731965] [cartographer logger]: I0731 22:42:06.000000 3497 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_2d.lua' for 'trajectory_builder_2d.lua'. [ahrs_driver_node-2] [INFO] [1753972926.413443343] [ahrs_bringup]: Serial Port initialized [ahrs_driver_node-2] [INFO] [1753972926.413877419] [ahrs_bringup]: ahrsBringup::processLoop: start [cartographer_node-4] [INFO] [1753972926.413688027] [cartographer logger]: I0731 22:42:06.000000 3497 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_3d.lua' for 'trajectory_builder_3d.lua'. [cartographer_node-4] [INFO] [1753972926.414655616] [cartographer logger]: I0731 22:42:06.000000 3497 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_3d.lua' for 'trajectory_builder_3d.lua'. [cartographer_node-4] [INFO] [1753972926.539480363] [cartographer logger]: I0731 22:42:06.000000 3497 map_builder_bridge.cpp:136] Added trajectory with ID '0'. [test01-6] [INFO] [1753972927.276279155] [tf_subscriber]: 串口初始化成功: /dev/esp [cartographer_node-4] [INFO] [1753972927.937685537] [cartographer logger]: I0731 22:42:07.000000 3497 ordered_multi_queue.cc:172] All sensor data for trajectory 0 is available starting at '638895697279334551'. [cartographer_node-4] [INFO] [1753972927.938687865] [cartographer logger]: I0731 22:42:07.000000 3497 local_trajectory_builder_2d.cc:135] Extrapolator is still initializing. [cartographer_node-4] [INFO] [1753972928.041921183] [cartographer logger]: I0731 22:42:08.000000 3497 pose_graph_2d.cc:148] Inserted submap (0, 0). [cartographer_node-4] [WARN] [1753972928.155580796] [cartographer logger]: W0731 22:42:08.000000 3497 range_data_collator.cc:82] Dropped 2204 earlier points. [cartographer_node-4] [WARN] [1753972928.266892465] [cartographer logger]: W0731 22:42:08.000000 3497 sensor_bridge.cpp:211] Ignored subdivision of a LaserScan message from sensor scan because previous subdivision time 638895697282633349 is not before current subdivision time 638895697282613324 [cartographer_node-4] [WARN] [1753972928.267554931] [cartographer logger]: W0731 22:42:08.000000 3497 range_data_collator.cc:82] Dropped 15 earlier points. [cartographer_node-4] [WARN] [1753972928.411221081] [cartographer logger]: W0731 22:42:08.000000 3497 range_data_collator.cc:82] Dropped 2181 earlier points. [cartographer_node-4] [WARN] [1753972928.567551008] [cartographer logger]: W0731 22:42:08.000000 3497 range_data_collator.cc:82] Dropped 20 earlier points. [cartographer_node-4] [WARN] [1753972928.574751828] [cartographer logger]: W0731 22:42:08.000000 3497 range_data_collator.cc:82] Dropped 2260 earlier points. [cartographer_node-4] [WARN] [1753972928.772710132] [cartographer logger]: W0731 22:42:08.000000 3497 range_data_collator.cc:82] Dropped 2491 earlier points. [cartographer_node-4] [WARN] [1753972929.055279642] [cartographer logger]: W0731 22:42:09.000000 3497 range_data_collator.cc:82] Dropped 2639 earlier points. [cartographer_node-4] [WARN] [1753972929.308514082] [cartographer logger]: W0731 22:42:09.000000 3497 range_data_collator.cc:82] Dropped 915 earlier points. [cartographer_node-4] [WARN] [1753972929.357095244] [cartographer logger]: W0731 22:42:09.000000 3497 range_data_collator.cc:82] Dropped 365 earlier points. [cartographer_node-4] [WARN] [1753972929.410270693] [cartographer logger]: W0731 22:42:09.000000 3497 range_data_collator.cc:82] Dropped 757 earlier points. [cartographer_node-4] [WARN] [1753972929.468742243] [cartographer logger]: W0731 22:42:09.000000 3497 range_data_collator.cc:82] Dropped 532 earlier points. ^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT) [robot_state_publisher-3] [INFO] [1753972931.302743250] [rclcpp]: signal_handler(signum=2) [cartographer_node-4] [INFO] [1753972931.303041208] [rclcpp]: signal_handler(signum=2) [cartographer_occupancy_grid_node-5] [INFO] [1753972931.303140164] [rclcpp]: signal_handler(signum=2) [ahrs_driver_node-2] [INFO] [1753972931.306472015] [rclcpp]: signal_handler(signum=2) [test01-6] [INFO] [1753972931.317018916] [tf_subscriber]: 用户中断,退出节点 [test01-6] Failed to publish log message to rosout: publisher's context is invalid, at ./src/rcl/publisher.c:389 [cartographer_node-4] [INFO] [1753972931.381496061] [cartographer logger]: I0731 22:42:11.000000 3497 node.cpp:569] Shutdown the subscriber of [scan] [cartographer_node-4] [INFO] [1753972931.398093009] [cartographer logger]: I0731 22:42:11.000000 3497 node.cpp:569] Shutdown the subscriber of [imu] [cartographer_node-4] [INFO] [1753972931.398192483] [cartographer logger]: I0731 22:42:11.000000 3497 map_builder_bridge.cpp:152] Finishing trajectory with ID '0'... [cartographer_node-4] [WARN] [1753972931.399485994] [cartographer logger]: W0731 22:42:11.000000 3497 node.cpp:773] Can't run final optimization if there are one or more active trajectories. Trying to finish trajectory with ID 0 now. [cartographer_node-4] [INFO] [1753972931.399604003] [cartographer logger]: I0731 22:42:11.000000 3497 node.cpp:551] Trajectory 0 already pending to finish. [cartographer_node-4] [INFO] [1753972931.399660276] [cartographer logger]: I0731 22:42:11.000000 3497 map_builder_bridge.cpp:161] Running final trajectory optimization... [cartographer_node-4] [INFO] [1753972931.399828559] [cartographer logger]: I0731 22:42:11.000000 3553 pose_graph_2d.cc:538] Remaining work items in queue: 0 [cartographer_node-4] [INFO] [1753972931.399970030] [cartographer logger]: I0731 22:42:11.000000 3553 constraint_builder_2d.cc:290] 0 computations resulted in 0 additional constraints. [cartographer_node-4] [INFO] [1753972931.400510321] [cartographer logger]: I0731 22:42:11.000000 3553 constraint_builder_2d.cc:292] Score histogram: [cartographer_node-4] Count: 0 [cartographer_node-4] [WARN] [1753972931.402947335] [cartographer logger]: W0731 22:42:11.000000 3553 preprocessor.cc:62] Specified options.num_threads: 7 exceeds maximum available from the threading model Ceres was compiled with: 4. Bounding to maximum number available. [cartographer_node-4] [INFO] [1753972931.443748639] [cartographer logger]: I0731 22:42:11.000000 3553 pose_graph_2d.cc:538] Remaining work items in queue: 1 [cartographer_node-4] [INFO] [1753972931.444092112] [cartographer logger]: I0731 22:42:11.000000 3553 constraint_builder_2d.cc:290] 0 computations resulted in 0 additional constraints. [cartographer_node-4] [INFO] [1753972931.446113307] [cartographer logger]: I0731 22:42:11.000000 3553 constraint_builder_2d.cc:292] Score histogram: [cartographer_node-4] Count: 0 [cartographer_node-4] [WARN] [1753972931.448578615] [cartographer logger]: W0731 22:42:11.000000 3553 preprocessor.cc:62] Specified options.num_threads: 7 exceeds maximum available from the threading model Ceres was compiled with: 4. Bounding to maximum number available. [cartographer_node-4] [INFO] [1753972931.451659875] [cartographer logger]: I0731 22:42:11.000000 3550 constraint_builder_2d.cc:290] 0 computations resulted in 0 additional constraints. [cartographer_node-4] [INFO] [1753972931.451766940] [cartographer logger]: I0731 22:42:11.000000 3550 constraint_builder_2d.cc:292] Score histogram: [cartographer_node-4] Count: 0 Optimizing: Done. [cartographer_node-4] [INFO] [1753972931.562351736] [cartographer logger]: I0731 22:42:11.000000 3552 constraint_builder_2d.cc:290] 0 computations resulted in 0 additional constraints. [cartographer_node-4] [INFO] [1753972931.562474041] [cartographer logger]: I0731 22:42:11.000000 3552 constraint_builder_2d.cc:292] Score histogram: [cartographer_node-4] Count: 0 Optimizing: Done. [INFO] [robot_state_publisher-3]: process has finished cleanly [pid 3495] [INFO] [cartographer_occupancy_grid_node-5]: process has finished cleanly [pid 3500] [sllidar_node-1] [INFO] [1753972931.631353251] [sllidar_node]: Stop motor [INFO] [ahrs_driver_node-2]: process has finished cleanly [pid 3493] [INFO] [cartographer_node-4]: process has finished cleanly [pid 3497] [INFO] [sllidar_node-1]: process has finished cleanly [pid 3491] [INFO] [test01-6]: process has finished cleanly [pid 3518] wjs@wjs-desktop:~/Drone_Slam$ ros2 launch fishbot_grapher test_grapher_11.launch.py

wjs@wjs-desktop:~/Drone_Slam$ ros2 launch fishbot_grapher test_grapher_6.launch.py [INFO] [launch]: All log files can be found below /home/wjs/.ros/log/2025-08-01-00-35-21-205680-wjs-desktop-2879 [INFO] [launch]: Default logging verbosity is set to INFO [INFO] [sllidar_node-1]: process started with pid [2882] [INFO] [ahrs_driver_node-2]: process started with pid [2884] [INFO] [static_transform_publisher-3]: process started with pid [2886] [INFO] [robot_state_publisher-4]: process started with pid [2888] [INFO] [cartographer_node-5]: process started with pid [2890] [INFO] [cartographer_occupancy_grid_node-6]: process started with pid [2894] [INFO] [test01-7]: process started with pid [2902] [static_transform_publisher-3] [WARN] [1753979721.537040397] []: Old-style arguments are deprecated; see --help for new-style arguments [sllidar_node-1] [INFO] [1753979721.758057445] [sllidar_node]: SLLidar running on ROS2 package SLLidar.ROS2 SDK Version:1.0.1, SLLIDAR SDK Version:2.0.0 [sllidar_node-1] [INFO] [1753979721.806444401] [sllidar_node]: SLLidar S/N: 7885EC95C1EA9ED1B2E49CF4FB594571 [sllidar_node-1] [INFO] [1753979721.806628793] [sllidar_node]: Firmware Ver: 1.01 [sllidar_node-1] [INFO] [1753979721.806682875] [sllidar_node]: Hardware Rev: 18 [sllidar_node-1] [INFO] [1753979721.858743833] [sllidar_node]: SLLidar health status : 0 [sllidar_node-1] [INFO] [1753979721.858900064] [sllidar_node]: SLLidar health status : OK. [sllidar_node-1] [INFO] [1753979722.089228500] [sllidar_node]: current scan mode: DenseBoost, sample rate: 32 Khz, max_distance: 18.0 m, scan frequency:10.0 Hz, [cartographer_node-5] [INFO] [1753979722.285159294] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/home/wjs/Drone_Slam/install/fishbot_grapher/share/fishbot_grapher/config/fishbot_2d.lua' for 'fishbot_2d.lua'. [cartographer_node-5] [INFO] [1753979722.316376894] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/map_builder.lua' for 'map_builder.lua'. [cartographer_node-5] [INFO] [1753979722.316734830] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/map_builder.lua' for 'map_builder.lua'. [cartographer_node-5] [INFO] [1753979722.317209060] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/pose_graph.lua' for 'pose_graph.lua'. [cartographer_node-5] [INFO] [1753979722.317477826] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/pose_graph.lua' for 'pose_graph.lua'. [cartographer_node-5] [INFO] [1753979722.318294347] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder.lua' for 'trajectory_builder.lua'. [cartographer_node-5] [INFO] [1753979722.318567575] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder.lua' for 'trajectory_builder.lua'. [cartographer_node-5] [INFO] [1753979722.335346971] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_2d.lua' for 'trajectory_builder_2d.lua'. [cartographer_node-5] [INFO] [1753979722.335619015] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_2d.lua' for 'trajectory_builder_2d.lua'. [cartographer_node-5] [INFO] [1753979722.336400726] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_3d.lua' for 'trajectory_builder_3d.lua'. [cartographer_node-5] [INFO] [1753979722.336697858] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_3d.lua' for 'trajectory_builder_3d.lua'. [static_transform_publisher-3] [INFO] [1753979722.387448415] [imu_tf_publisher]: Spinning until stopped - publishing transform [static_transform_publisher-3] translation: ('0.000000', '0.000000', '0.000000') [static_transform_publisher-3] rotation: ('0.000000', '0.000000', '0.000000', '1.000000') [static_transform_publisher-3] from 'base_link' to 'imu_link' [ahrs_driver_node-2] [INFO] [1753979722.599184780] [ahrs_bringup]: Serial Port initialized [ahrs_driver_node-2] [INFO] [1753979722.599712426] [ahrs_bringup]: ahrsBringup::processLoop: start [ahrs_driver_node-2] terminate called after throwing an instance of 'serial::SerialException' [ahrs_driver_node-2] what(): SerialException device reports readiness to read but returned no data (device disconnected?) failed. [robot_state_publisher-4] [INFO] [1753979722.692730637] [robot_state_publisher]: got segment base_link [robot_state_publisher-4] [INFO] [1753979722.693155486] [robot_state_publisher]: got segment imu_link [robot_state_publisher-4] [INFO] [1753979722.693285778] [robot_state_publisher]: got segment laser_link [cartographer_node-5] [INFO] [1753979722.875068815] [cartographer logger]: I0801 00:35:22.000000 2890 map_builder_bridge.cpp:136] Added trajectory with ID '0'. [ERROR] [ahrs_driver_node-2]: process has died [pid 2884, exit code -6, cmd '/home/wjs/Drone_Slam/install/fdilink_ahrs/lib/fdilink_ahrs/ahrs_driver_node --ros-args --params-file /tmp/launch_params_ccuxsgpz']. [cartographer_node-5] [INFO] [1753979723.981995571] [cartographer logger]: I0801 00:35:23.000000 2890 ordered_multi_queue.cc:172] All sensor data for trajectory 0 is available starting at '638895765239747368'. [cartographer_node-5] [INFO] [1753979723.982265376] [cartographer logger]: I0801 00:35:23.000000 2890 local_trajectory_builder_2d.cc:135] Extrapolator is still initializing. [cartographer_node-5] [INFO] [1753979724.080317557] [cartographer logger]: I0801 00:35:24.000000 2890 pose_graph_2d.cc:148] Inserted submap (0, 0). [cartographer_node-5] [WARN] [1753979724.286147835] [cartographer logger]: W0801 00:35:24.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [test01-7] Traceback (most recent call last): [test01-7] File "/home/wjs/.local/lib/python3.10/site-packages/serial/serialposix.py", line 322, in open [test01-7] self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK) [test01-7] FileNotFoundError: [Errno 2] No such file or directory: '/dev/esp' [test01-7] [test01-7] During handling of the above exception, another exception occurred: [test01-7] [test01-7] Traceback (most recent call last): [test01-7] File "/home/wjs/Drone_Slam/install/fishbot_grapher/lib/fishbot_grapher/test01", line 33, in <module> [test01-7] sys.exit(load_entry_point('fishbot-grapher==0.0.0', 'console_scripts', 'test01')()) [test01-7] File "/home/wjs/Drone_Slam/install/fishbot_grapher/lib/python3.10/site-packages/fishbot_grapher/test01.py", line 101, in main [test01-7] tf_subscriber = TFSubscriber() [test01-7] File "/home/wjs/Drone_Slam/install/fishbot_grapher/lib/python3.10/site-packages/fishbot_grapher/test01.py", line 20, in __init__ [test01-7] self.ser = serial.Serial("/dev/esp", 115200) [test01-7] File "/home/wjs/.local/lib/python3.10/site-packages/serial/serialutil.py", line 244, in __init__ [test01-7] self.open() [test01-7] File "/home/wjs/.local/lib/python3.10/site-packages/serial/serialposix.py", line 325, in open [test01-7] raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg)) [test01-7] serial.serialutil.SerialException: [Errno 2] could not open port /dev/esp: [Errno 2] No such file or directory: '/dev/esp' [cartographer_node-5] [WARN] [1753979724.491526002] [cartographer logger]: W0801 00:35:24.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979724.709295995] [cartographer logger]: W0801 00:35:24.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [ERROR] [test01-7]: process has died [pid 2902, exit code 1, cmd '/home/wjs/Drone_Slam/install/fishbot_grapher/lib/fishbot_grapher/test01 --ros-args']. [cartographer_node-5] [WARN] [1753979724.926728636] [cartographer logger]: W0801 00:35:24.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979725.135525279] [cartographer logger]: W0801 00:35:25.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979725.355498538] [cartographer logger]: W0801 00:35:25.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979725.575934667] [cartographer logger]: W0801 00:35:25.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979725.791681973] [cartographer logger]: W0801 00:35:25.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979725.792889539] [cartographer logger]: W0801 00:35:25.000000 2890 range_data_collator.cc:82] Dropped 154 earlier points. [cartographer_node-5] [WARN] [1753979726.009195591] [cartographer logger]: W0801 00:35:26.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979726.010459952] [cartographer logger]: W0801 00:35:26.000000 2890 range_data_collator.cc:82] Dropped 532 earlier points. [cartographer_node-5] [WARN] [1753979726.220309676] [cartographer logger]: W0801 00:35:26.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979726.437783320] [cartographer logger]: W0801 00:35:26.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979726.439136426] [cartographer logger]: W0801 00:35:26.000000 2890 range_data_collator.cc:82] Dropped 542 earlier points. [cartographer_node-5] [WARN] [1753979726.649371795] [cartographer logger]: W0801 00:35:26.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979726.857038597] [cartographer logger]: W0801 00:35:26.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979727.064830761] [cartographer logger]: W0801 00:35:27.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. ^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT) [robot_state_publisher-4] [INFO] [1753979727.252864090] [rclcpp]: signal_handler(signum=2) [static_transform_publisher-3] [INFO] [1753979727.252895586] [rclcpp]: signal_handler(signum=2) [cartographer_occupancy_grid_node-6] [INFO] [1753979727.252922415] [rclcpp]: signal_handler(signum=2) [cartographer_node-5] [INFO] [1753979727.254331207] [rclcpp]: signal_handler(signum=2) [cartographer_node-5] [WARN] [1753979727.278186754] [cartographer logger]: W0801 00:35:27.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [INFO] [1753979727.299298707] [cartographer logger]: I0801 00:35:27.000000 2890 node.cpp:569] Shutdown the subscriber of [scan] [cartographer_node-5] [INFO] [1753979727.299538745] [cartographer logger]: I0801 00:35:27.000000 2890 map_builder_bridge.cpp:152] Finishing trajectory with ID '0'... [cartographer_node-5] [WARN] [1753979727.299999084] [cartographer logger]: W0801 00:35:27.000000 2890 node.cpp:773] Can't run final optimization if there are one or more active trajectories. Trying to finish trajectory with ID 0 now. [cartographer_node-5] [INFO] [1753979727.300107494] [cartographer logger]: I0801 00:35:27.000000 2890 node.cpp:551] Trajectory 0 already pending to finish. [cartographer_node-5] [INFO] [1753979727.300154006] [cartographer logger]: I0801 00:35:27.000000 2890 map_builder_bridge.cpp:161] Running final trajectory optimization... [cartographer_node-5] [INFO] [1753979727.300265082] [cartographer logger]: I0801 00:35:27.000000 2953 pose_graph_2d.cc:538] Remaining work items in queue: 0 [cartographer_node-5] [INFO] [1753979727.300400284] [cartographer logger]: I0801 00:35:27.000000 2953 constraint_builder_2d.cc:290] 0 computations resulted in 0 additional constraints. [cartographer_node-5] [INFO] [1753979727.300446870] [cartographer logger]: I0801 00:35:27.000000 2953 constraint_builder_2d.cc:292] Score histogram: [cartographer_node-5] Count: 0 [cartographer_node-5] [WARN] [1753979727.308865144] [cartographer logger]: W0801 00:35:27.000000 2953 preprocessor.cc:62] Specified options.num_threads: 7 exceeds maximum available from the threading model Ceres was compiled with: 4. Bounding to maximum number available. [cartographer_node-5] [INFO] [1753979727.321944840] [cartographer logger]: I0801 00:35:27.000000 2953 pose_graph_2d.cc:538] Remaining work items in queue: 1 [cartographer_node-5] [INFO] [1753979727.322111019] [cartographer logger]: I0801 00:35:27.000000 2953 constraint_builder_2d.cc:290] 0 computations resulted in 0 additional constraints. [cartographer_node-5] [INFO] [1753979727.322155142] [cartographer logger]: I0801 00:35:27.000000 2953 constraint_builder_2d.cc:292] Score histogram: [cartographer_node-5] Count: 0 [cartographer_node-5] [WARN] [1753979727.323773588] [cartographer logger]: W0801 00:35:27.000000 2953 preprocessor.cc:62] Specified options.num_threads: 7 exceeds maximum available from the threading model Ceres was compiled with: 4. Bounding to maximum number available. [cartographer_node-5] [INFO] [1753979727.356344069] [cartographer logger]: I0801 00:35:27.000000 2954 constraint_builder_2d.cc:290] 0 computations resulted in 0 additional constraints. [cartographer_node-5] [INFO] [1753979727.356515895] [cartographer logger]: I0801 00:35:27.000000 2954 constraint_builder_2d.cc:292] Score histogram: [cartographer_node-5] Count: 0 Optimizing: Done. [cartographer_node-5] [INFO] [1753979727.441603445] [cartographer logger]: I0801 00:35:27.000000 2952 constraint_builder_2d.cc:290] 0 computations resulted in 0 additional constraints. [cartographer_node-5] [INFO] [1753979727.441713595] [cartographer logger]: I0801 00:35:27.000000 2952 constraint_builder_2d.cc:292] Score histogram: [cartographer_node-5] Count: 0 Optimizing: Done. [INFO] [static_transform_publisher-3]: process has finished cleanly [pid 2886] [INFO] [cartographer_occupancy_grid_node-6]: process has finished cleanly [pid 2894] [INFO] [robot_state_publisher-4]: process has finished cleanly [pid 2888] [INFO] [cartographer_node-5]: process has finished cleanly [pid 2890] [sllidar_node-1] [INFO] [1753979727.674903693] [sllidar_node]: Stop motor [INFO] [sllidar_node-1]: process has finished cleanly [pid 2882] wjs@wjs-desktop:~/Drone_Slam$

最新推荐

recommend-type

公路工程机械设计制造与自动化发展方向.docx

公路工程机械设计制造与自动化发展方向.docx
recommend-type

电子商务实训心得体会范文.docx

电子商务实训心得体会范文.docx
recommend-type

Excel表格通用模板:成品管理表格.xls

Excel表格通用模板:成品管理表格.xls
recommend-type

pygtk2-codegen-2.24.0-24.module_el8.0.0+36+bb6a76a2.tar.gz

# 适用操作系统:Centos8 #Step1、解压 tar -zxvf xxx.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
recommend-type

podman-compose-1.0.6-1.el8.tar.gz

# 适用操作系统:Centos8 #Step1、解压 tar -zxvf xxx.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
recommend-type

SSRSSubscriptionManager工具:简化SSRS订阅的XML文件导入

### 知识点概述 #### 标题知识点 1. **SSRSSubscriptionManager**: 这是一个专门用于管理SQL Server Reporting Services (SSRS) 订阅的工具或脚本。它允许用户从一个集中的位置管理SSRS订阅。 2. **从XML文件导入SSRS订阅**: 描述了一个通过读取XML文件来配置SSRS订阅的过程。这可能是为了减少重复的手动设置和避免错误,提高管理效率。 #### 描述知识点 3. **快速部署多个SSRS订阅**: 该工具或脚本的一个主要功能是能够快速设置多个订阅,这比传统的SSRS在线向导更为高效。 4. **标准SSRS在线向导的局限性**: 描述了标准SSRS向导的不足之处,例如操作缓慢、单次只能设置一个订阅,以及易于出现人为错误。 5. **SSRS订阅管理器的优势**: 解释了为什么使用SSRS订阅管理器比标准向导更可靠。它允许使用预定义的XML文档进行设置,这些文档可以经过测试和验证以减少错误。 6. **受控文档**: 强调了使用SSRS订阅管理器的一个好处是能够控制订阅设置,使其更为可靠且易于管理。 7. **版本控制和订阅设置**: 讨论了SSRS报告可以进行版本控制,但是传统的订阅设置通常不包含在版本控制中,而SSRS订阅管理器提供了一种方式,可以对这些设置进行记录和控制。 #### 标签知识点 8. **C#**: 指示了实现SSRSSubscriptionManager可能使用的技术,C# 是一种面向对象的编程语言,通常用于开发.NET应用程序,包括SSRS订阅管理器。 #### 压缩包子文件名列表 9. **SSRSSubscriptionManager-master**: 表示这是一个开源项目或组件的主干文件夹。名称表明这是一个版本控制仓库中的主分支,可能包含了源代码、项目文件和其他资源文件。 ### 详细知识点 #### 关于SSRS - SQL Server Reporting Services (SSRS) 是一个服务器基础的报告平台,它能够通过Web界面、文件共享和电子邮件来交付报表内容。SSRS用户可以根据数据源生成数据驱动的报表,并设置订阅以便自动分发这些报表。 - SSRS订阅是一个功能,允许用户根据设定的计划或用户触发条件自动获取报表。订阅可以是快照订阅、数据驱动订阅或基于事件的订阅。 #### 关于SSRSSubscriptionManager - SSRSSubscriptionManager是一个工具,其设计意图是简化SSRS订阅的管理过程。它允许管理员在单个操作中部署大量订阅,相比于传统方法,它极大地节省了时间。 - 通过使用XML文件来定义订阅的设置,该工具提供了更高的准确性和一致性,因为XML文件可以被严格地测试和审核。 - 自动化和批量操作可以减少因手动设置造成的错误,并且提高了操作效率。这对于有大量报表和订阅需求的企业来说尤为重要。 - SSRSSubscriptionManager的出现也表明了开发人员对IT自动化、脚本化操作和管理工具的需求,这可以视为一种持续的向DevOps文化和实践的推进。 #### 关于C# - C# 是一种由微软开发的通用编程语言,它被广泛应用于开发Windows应用程序、服务器端Web应用程序以及移动和游戏开发。 - 在开发SSRSSubscriptionManager时,C# 语言的利用可能涉及到多种.NET框架中的类库,例如System.Xml用于解析和操作XML文件,System.Data用于数据库操作等。 - 使用C# 实现SSRS订阅管理器可以享受到.NET平台的诸多优势,比如类型安全、内存管理和跨平台兼容性。 #### 关于版本控制 - 版本控制是一种记录源代码文件更改历史的方法,它允许开发团队追踪和管理代码随时间的变化。常见的版本控制系统包括Git、Subversion等。 - 在SSRS订阅的上下文中,版本控制意味着可以追踪每个订阅设置的变更,从而保证订阅设置的一致性和可追溯性。 - SSRSSubscriptionManager通过使用XML文件,可以使得版本控制变得更加容易,因为XML文件可以被版本控制系统跟踪。 - 这种做法还确保了订阅设置文件的历史版本可以被审计,对企业的合规性和管理都有积极影响。 ### 结论 SSRSSubscriptionManager通过集成自动化、XML文件和版本控制,为SSRS订阅管理提供了更高效、可信赖和可管理的解决方案。使用C# 实现的这一工具能够极大提高IT专业人员在创建和维护SSRS订阅时的工作效率,并减少可能由手工操作引入的错误。通过强调自动化和可控制的文档处理,它也反映了IT行业的趋势,即追求效率、可靠性和版本管理。
recommend-type

图形缩放与平移实现全攻略:Delphi视图变换核心技术详解

# 摘要 本文系统探讨了图形缩放与平移技术的基本原理及其在实际开发中的应用,涵盖从数学基础到编程实现的全过程。文章首先介绍了图形变换的数学模型,包括坐标系统、矩
recommend-type

Unknown custom element: <CustomForm> - did you register the component correctly? For recursive components, make sure to provide the "name" option.

在使用 Vue.js 时,如果遇到未知自定义组件 `<CustomForm>` 的错误提示,通常是由于组件注册过程中存在某些疏漏或错误。以下是常见的原因及对应的解决方案: ### 1. 组件未正确注册 确保 `<CustomForm>` 组件已经在使用它的父组件或全局中进行了注册。如果未注册,Vue 会提示该组件是未知的。 正确的注册方式如下: - **全局注册**(适用于所有组件都能访问的场景): ```javascript import CustomForm from '@/components/CustomForm.vue' Vue.component('CustomForm',
recommend-type

使用KnockoutJS开发的黑客新闻阅读器 hn-ko

在给定的文件信息中,我们可以提炼出以下IT相关知识点: ### 标题知识点 #### KnockoutJS - **KnockoutJS定义**:Knockout是一个轻量级的JavaScript库,它允许开发者利用声明式绑定方式创建富交互的Web应用程序。它特别擅长于实现UI的自动更新,当模型的数据发生变化时,视图会自动响应这些变化而更新,无需手动操作DOM。 - **KnockoutJS核心特性**: - **依赖项跟踪**:Knockout能够跟踪数据模型中的变化,当数据更新时自动更新相关联的UI元素。 - **声明式绑定**:开发者可以使用简单的数据绑定语法在HTML标记中直接指定数据与DOM元素之间的关系,这样可以使代码更加清晰和易于维护。 - **模板和自定义绑定**:Knockout提供了灵活的模板系统,可以创建可复用的UI组件,并通过自定义绑定来扩展其核心功能,以满足特定需求。 - **组件化**:Knockout支持创建独立的、可复用的视图模型组件,以构建复杂的用户界面。 ### 描述知识点 #### 入门和运行应用 - **Git克隆**:通过`git clone`命令可以从远程仓库克隆代码到本地环境,这是版本控制中常见的操作,有助于团队协作和代码共享。`https://github.com/crissdev/hn-ko.git`指向一个特定的GitHub仓库,其中包含着使用KnockoutJS编写的黑客新闻应用代码。 - **NPM(Node Package Manager)**:NPM是随Node.js一起安装的一个包管理工具,它用于安装和管理JavaScript项目依赖。`npm install`命令用于安装项目中的所有依赖项,这可能包括KnockoutJS库以及其他可能用到的库或框架。 - **启动应用**:`npm start`是启动脚本的命令,它通常在`package.json`文件的scripts部分定义,用以启动开发服务器或运行应用。 #### 麻省理工学院许可证 - **MIT许可证**:这是一种常见的开源许可证,允许用户在任何类型的项目中免费使用软件,无论是个人的还是商业的。在保留原作者版权声明的同时,用户可以根据自己的需要修改和分发代码。这是很多开源项目选择的许可证。 ### 标签知识点 #### JavaScript - **JavaScript作用**:JavaScript是一种高级的、解释执行的编程语言,它通常是运行在浏览器中的脚本语言,用于实现网页的动态效果和用户交互。JavaScript作为全栈开发的关键技术之一,也被广泛用于服务器端开发(Node.js)。 - **JavaScript特点**: - **事件驱动**:JavaScript可以响应用户的点击、输入等事件,并据此进行操作。 - **对象导向**:JavaScript支持面向对象编程,可以通过创建对象、继承、多态等特性来组织代码。 - **异步编程**:JavaScript支持异步编程模型,利用回调函数、Promises、async/await等技术,可以有效处理网络请求、用户输入等异步操作。 ### 压缩包子文件的文件名称列表知识点 - **hn-ko-master**:这表明压缩包中的文件是从名为`hn-ko`的GitHub仓库的`master`分支获取的。文件列表中的这个名称可以帮助开发者快速识别包含KnockoutJS项目的代码仓库版本。 ### 总结 以上知识点总结了文件信息中提及的关于KnockoutJS、Git、NPM、MIT许可证和JavaScript的核心概念和应用实践。KnockoutJS作为一个功能强大的前端库,特别适用于复杂用户界面的数据绑定和动态更新。而通过Git的使用可以方便地管理项目的版本,并与其他开发者协作。NPM则使得项目的依赖管理和模块化开发变得更加简单高效。MIT许可证为项目的使用者提供了法律上的许可,确保了软件使用的自由度。JavaScript作为一种多用途的编程语言,在前端开发中扮演了不可替代的角色。理解并运用这些知识点,将有助于进行现代Web应用的开发工作。
recommend-type

Delphi图层管理机制设计:打造高效绘图控件的架构之道

# 摘要 本文系统研究了Delphi图层管理机制的核心概念、理论基础与实现细节,重点分析了图层的数据模型、渲染流程及其交互机制。通过对图层容器设计、绘制性能优化与事件分发模型的深入探讨,提出了一个高效、可扩展的图层管理架构,并结合实际绘图控件开发,验证了该机制