前置知识:前面已经完成了ros2的驱动和fastlio2建图,现在就是调用建图数据来进行路径规划,然后呢,就是使用ros自带的二维路径规划来实现,雷达是mid360,需要做三维转为二维处理

数据流

主要的文件夹:

1.配置文件.--config
config 目录是ROS2导航系统的 参数管理中心 ,通过合理的配置文件可以实现:
-
快速参数调整 :无需重新编译代码
-
环境适配 :不同场景使用不同配置
-
版本管理 :配置变更可追踪
这个配置文件,经常存放yaml文件
ros的参数一般在对应的包的官网都有介绍:ROS: Home
我们可以进行配置参数
# Navigation2 parameters for MID-360 with FAST-LIO2
# 完整可运行版 -- 无空值、无 tuple 报错
#
# 本配置文件定义了Nav2导航堆栈的所有参数设置
# 包含定位、路径规划、控制、代价地图等核心模块
# 适用于MID-360激光雷达 + FAST-LIO2 SLAM的导航系统
#=============================================================================
# 1. AMCL定位模块配置
#=============================================================================
# AMCL (Adaptive Monte Carlo Localization) - 自适应蒙特卡洛定位
# 作用:基于粒子滤波器实现机器人在已知地图中的定位
amcl:
ros__parameters:
# 地图相关配置
use_map_topic: true # 从/map话题订阅地图,而不是服务调用
first_map_only: false # 不限制只使用第一张地图
map_topic: /map # 地图话题名称,与pointcloud_to_grid节点输出对应
# 坐标系配置
odom_frame_id: odom # 里程计坐标系,FAST-LIO提供
base_frame_id: base_link # 机器人基座坐标系
global_frame_id: map # 全局地图坐标系
# 粒子滤波器参数
min_particles: 500 # 最小粒子数,定位不稳定时增加
max_particles: 2000 # 最大粒子数,计算资源不足时减少
transform_tolerance: 0.5 # TF变换容差,单位:秒
# 更新条件参数
update_min_d: 0.05 # 最小位移更新阈值,单位:米
update_min_a: 0.1 # 最小角度更新阈值,单位:弧度
resample_interval: 1 # 重采样间隔,单位:秒
# 激光雷达参数
laser_min_range: 0.1 # 最小测距范围,单位:米
laser_max_range: 10.0 # 最大测距范围,单位:米
laser_max_beams: 720 # 激光束数量,360°/0.5°=720束
# 初始位姿参数
set_initial_pose: true # 启用初始位姿设置
initial_pose_x: 0.0 # 初始X位置,单位:米
initial_pose_y: 0.0 # 初始Y位置,单位:米
initial_pose_z: 0.0 # 初始Z位置,单位:米
initial_pose_yaw: 0.0 # 初始朝向角,单位:弧度
#=============================================================================
# 2. 行为树导航器配置
#=============================================================================
# BT Navigator - 行为树导航器
# 作用:使用行为树管理导航任务,协调各个导航模块的工作
bt_navigator:
ros__parameters:
# 基础配置
use_sim_time: false # 不使用仿真时间,使用系统时间
global_frame: map # 全局坐标系
robot_base_frame: base_link # 机器人基座坐标系
odom_topic: /Odometry # 里程计话题,FAST-LIO提供
# 行为树配置
bt_loop_duration: 10 # 行为树循环周期,单位:毫秒
default_nav_to_pose_bt_xml: "navigate_to_pose_w_replanning_and_recovery.xml" # 默认导航行为树文件
default_nav_through_poses_bt_xml: "navigate_through_poses_w_replanning_and_recovery.xml" # 多点导航行为树文件
# 行为树插件库列表 - 定义可用的行为树节点类型
plugin_lib_names: [
"nav2_compute_path_to_pose_action_bt_node", # 计算到目标点的路径
"nav2_compute_path_through_poses_action_bt_node", # 计算通过多个目标点的路径
"nav2_follow_path_action_bt_node", # 跟随路径执行
"nav2_back_up_action_bt_node", # 后退行为
"nav2_spin_action_bt_node", # 旋转行为
"nav2_wait_action_bt_node", # 等待行为
"nav2_clear_costmap_service_bt_node", # 清除代价地图服务
"nav2_is_stuck_condition_bt_node", # 判断是否卡住的条件
"nav2_goal_reached_condition_bt_node", # 判断是否到达目标的条件
"nav2_goal_updated_condition_bt_node", # 判断目标是否更新的条件
"nav2_initial_pose_received_condition_bt_node", # 判断是否收到初始位置的条件
"nav2_reinitialize_global_localization_service_bt_node", # 重新初始化全局定位服务
"nav2_rate_controller_bt_node", # 速率控制器
"nav2_distance_controller_bt_node", # 距离控制器
"nav2_speed_controller_bt_node", # 速度控制器
"nav2_truncate_path_action_bt_node", # 截断路径行为
"nav2_recovery_node_bt_node", # 恢复行为节点
"nav2_pipeline_sequence_bt_node", # 管道序列节点
"nav2_round_robin_node_bt_node", # 轮询节点
"nav2_transform_available_condition_bt_node", # 判断TF变换是否可用的条件
"nav2_time_expired_condition_bt_node", # 判断时间是否过期的条件
"nav2_distance_traveled_condition_bt_node", # 判断移动距离的条件
"nav2_remove_passed_goals_action_bt_node" # 移除已到达目标的行为
]
#=============================================================================
# 3. 控制器服务器配置
#=============================================================================
# Controller Server - 控制器服务器
# 作用:执行局部路径规划和速度控制,将全局路径转换为具体的运动指令
controller_server:
ros__parameters:
# 基础配置
use_sim_time: false # 不使用仿真时间
controller_frequency: 20.0 # 控制器频率,单位:Hz,控制周期50ms
# 速度阈值配置 - 防止微小抖动
min_x_velocity_threshold: 0.001 # X方向最小速度阈值,单位:m/s
min_y_velocity_threshold: 0.001 # Y方向最小速度阈值,单位:m/s
min_theta_velocity_threshold: 0.001 # 角速度最小阈值,单位:rad/s
# 插件配置
progress_checker_plugins: ["progress_checker"] # 进度检查插件
goal_checker_plugins: ["goal_checker"] # 目标检查插件
controller_plugins: ["FollowPath"] # 控制器插件
# 进度检查器配置 - 防止机器人卡住
progress_checker:
plugin: "nav2_controller::SimpleProgressChecker" # 进度检查器插件类型
required_movement_radius: 0.5 # 要求移动半径,单位:米,在此范围内认为有进展
movement_time_allowance: 10.0 # 移动时间容许值,单位:秒,超时认为卡住
# 目标检查器配置 - 判断何时到达目标
goal_checker:
plugin: "nav2_controller::SimpleGoalChecker" # 目标检查器插件类型
xy_goal_tolerance: 0.25 # 位置目标容差,单位:米,在此范围内认为到达
yaw_goal_tolerance: 0.25 # 角度目标容差,单位:弧度,约14.3度
stateful: True # 有状态模式,考虑历史信息
# DWB局部规划器配置 - 核心控制器
FollowPath:
plugin: "dwb_core::DWBLocalPlanner" # DWB(Dynamic Window Approach)局部规划器
debug_trajectory_details: true # 启用调试信息输出
# 速度限制配置 - 机器人运动能力
min_vel_x: -0.5 # 最小X方向速度,单位:m/s,负值表示后退
max_vel_x: 0.5 # 最大X方向速度,单位:m/s
min_vel_y: -0.5 # 最小Y方向速度,单位:m/s,负值表示右移
max_vel_y: 0.5 # 最大Y方向速度,单位:m/s
min_vel_theta: -1.0 # 最小角速度,单位:rad/s,负值表示右转
max_vel_theta: 1.0 # 最大角速度,单位:rad/s,约57.3度/秒
# 加速度限制配置 - 机器人动力学约束
acc_lim_x: 2.5 # X方向加速度限制,单位:m/s²
acc_lim_y: 2.5 # Y方向加速度限制,单位:m/s²
acc_lim_theta: 3.2 # 角加速度限制,单位:rad/s²
decel_lim_x: -2.5 # X方向减速度限制,单位:m/s²
decel_lim_y: -2.5 # Y方向减速度限制,单位:m/s²
decel_lim_theta: -3.2 # 角减速度限制,单位:rad/s²
# 采样配置 - 轨迹生成密度
vx_samples: 20 # X方向速度采样数,影响轨迹精度
vy_samples: 20 # Y方向速度采样数
vtheta_samples: 40 # 角速度采样数
# 仿真配置 - 轨迹预测
sim_time: 1.7 # 仿真时间,单位:秒,预测未来1.7秒的轨迹
sim_granularity: 0.025 # 仿真时间粒度,单位:秒
angular_sim_granularity: 0.025 # 角度仿真粒度,单位:秒
# DWA配置 - Dynamic Window Approach
use_dwa: true # 启用DWA算法,更适合动态环境
# 评分权重配置 - 轨迹评价标准
path_distance_bias: 32.0 # 路径距离权重,越大越贴近全局路径
goal_distance_bias: 20.0 # 目标距离权重,越大越快速接近目标
occdist_scale: 0.01 # 障碍物距离权重,越大越远离障碍
# 前向点配置 - 提高路径跟踪精度
forward_point_distance: 0.325 # 前向点距离,单位:米,提前看多远的路径
# 安全缓冲配置
stop_time_buffer: 0.2 # 停止时间缓冲,单位:秒
scaling_speed: 0.25 # 缩放速度,单位:m/s
max_scaling_factor: 0.2 # 最大缩放因子
# 输出配置
publish_cost_grid_pc: false # 是否发布代价网格点云,调试用
# 坐标系配置
global_frame_id: map # 全局坐标系
robot_base_frame: base_link # 机器人基座坐标系
transform_tolerance: 0.1 # TF变换容差,单位:秒
odom_topic: /Odometry # 里程计话题
# 轨迹评分标准(Critics)配置 - 必须配置,否则无法工作
# 这些插件用于评价生成的轨迹,选择最优轨迹
critics: [
"RotateToGoal", # 目标旋转:在接近目标时调整朝向
"Oscillation", # 振荡检测:防止机器人来回摆动
"BaseObstacle", # 基础障碍物:基本避障
"GoalAlign", # 目标对齐:确保朝向目标方向
"PathAlign", # 路径对齐:确保沿路径方向移动
"PathDist", # 路径距离:评价与全局路径的距离
"GoalDist" # 目标距离:评价与目标的距离
]
# 各评分标准的权重配置
BaseObstacle.scale: 0.02 # 基础避障权重
PathAlign.scale: 32.0 # 路径对齐权重
PathAlign.forward_point_distance: 0.1 # 路径对齐前向点距离
GoalAlign.scale: 24.0 # 目标对齐权重
GoalAlign.forward_point_distance: 0.1 # 目标对齐前向点距离
PathDist.scale: 32.0 # 路径距离权重
GoalDist.scale: 24.0 # 目标距离权重
RotateToGoal.scale: 32.0 # 目标旋转权重
RotateToGoal.slowing_factor: 5.0 # 减速因子
RotateToGoal.lookahead_time: -1.0 # 前瞻时间,-1表示使用默认值
#=============================================================================
# 4. 全局规划器配置
#=============================================================================
# Planner Server - 规划器服务器
# 作用:计算从当前位置到目标位置的全局路径,避开静态障碍物
planner_server:
ros__parameters:
# 基础配置
use_sim_time: false # 不使用仿真时间
expected_planner_frequency: 1.0 # 期望规划频率,单位:Hz
planner_plugins: ["GridBased"] # 使用的规划器插件列表
# 基于网格的规划器配置
GridBased:
plugin: "nav2_navfn_planner/NavfnPlanner" # Navfn规划器插件(基于Dijkstra算法)
tolerance: 0.5 # 目标容差,单位:米,在此范围内认为到达
use_astar: false # 不使用A*算法,使用Dijkstra算法(更稳定)
allow_unknown: true # 允许穿越未知区域(灰色区域)
#=============================================================================
# 5. 行为服务器配置
#=============================================================================
# Behavior Server - 行为服务器
# 作用:提供恢复行为,当导航失败时执行特定的恢复动作
behavior_server:
ros__parameters:
# 基础配置
costmap_topic: local_costmap/costmap_raw # 代价地图话题
footprint_topic: local_costmap/published_footprint # 机器人足迹话题
cycle_frequency: 10.0 # 循环频率,单位:Hz
behavior_plugins: ["spin", "wait", "backup", "drive_on_heading"] # 启用的行为插件
# 旋转行为 - 用于清除传感器噪声或重新定位
spin:
plugin: "nav2_behaviors/Spin" # 旋转行为插件
spin_angle: 3.14159 # 旋转角度,单位:弧度(约180度)
spin_speed: 1.0 # 旋转速度,单位:rad/s
simulate_ahead_time: 2.0 # 前瞻仿真时间,单位:秒
# 等待行为 - 用于暂停导航
wait:
plugin: "nav2_behaviors/Wait" # 等待行为插件
wait_duration: 10 # 等待时间,单位:秒
# 后退行为 - 用于从卡住状态退出
backup:
plugin: "nav2_behaviors/BackUp" # 后退行为插件
backup_speed: 0.025 # 后退速度,单位:m/s(2.5cm/s)
backup_distance: 0.15 # 后退距离,单位:米(15cm)
simulate_ahead_time: 2.0 # 前瞻仿真时间,单位:秒
# 定向移动行为 - 沿指定方向直线移动
drive_on_heading:
plugin: "nav2_behaviors/DriveOnHeading" # 定向移动行为插件
simulate_ahead_time: 1.0 # 前瞻仿真时间,单位:秒
#=============================================================================
# 6. 航点跟随配置
#=============================================================================
# Waypoint Follower - 航点跟随器
# 作用:按顺序导航到多个航点,支持巡逻、巡检等任务
waypoint_follower:
ros__parameters:
# 基础配置
loop_rate: 20.0 # 循环频率,单位:Hz
stop_on_failure: false # 遇到失败时是否停止,false表示继续尝试下一个航点
waypoint_task_executor_plugin: "wait_at_waypoint" # 航点任务执行器插件
# 航点等待配置 - 到达每个航点后的行为
wait_at_waypoint:
plugin: "nav2_waypoint_follower::WaitAtWaypoint" # 等待插件
enabled: True # 启用等待功能
waypoint_pause_duration: 0 # 等待时间,单位:秒,0表示不等待
#=============================================================================
# 7. 局部代价地图配置
#=============================================================================
# Local Costmap - 局部代价地图
# 作用:实时构建机器人周围的局部障碍物地图,用于局部路径规划和避障
# 特点:使用滚动窗口,随机器人移动而更新
local_costmap:
local_costmap:
ros__parameters:
# 基础配置
update_frequency: 5.0 # 更新频率,单位:Hz,每200ms更新一次
publish_frequency: 2.0 # 发布频率,单位:Hz,每500ms发布一次
global_frame: map # 全局坐标系
robot_base_frame: base_link # 机器人基座坐标系
use_sim_time: false # 不使用仿真时间
rolling_window: true # 启用滚动窗口,地图随机器人移动
# 地图尺寸配置
width: 10 # 地图宽度,单位:米(10米×10米窗口)
height: 10 # 地图高度,单位:米
resolution: 0.05 # 地图分辨率,单位:米/格(5cm精度)
transform_tolerance: 0.5 # TF变换容差,单位:秒
# 机器人模型配置
footprint: "[ [0.14, 0.14], [-0.14, 0.14], [-0.14, -0.14], [0.14, -0.14] ]" # 机器人足迹,28cm×28cm正方形
plugins: ["voxel_layer", "inflation_layer"] # 启用的图层插件
# 膨胀层配置 - 在障碍物周围添加安全边界
inflation_layer:
plugin: "nav2_costmap_2d::InflationLayer" # 膨胀层插件
cost_scaling_factor: 3.0 # 代价缩放因子,越大膨胀效果越明显
inflation_radius: 0.55 # 膨胀半径,单位:米(55cm安全距离)
# 使用 footprint,不再写 robot_radius
# 体素层配置 - 处理3D激光雷达数据,构建3D障碍物地图
voxel_layer:
plugin: "nav2_costmap_2d::VoxelLayer" # 体素层插件
enabled: True # 启用体素层
publish_voxel_map: True # 发布体素地图,用于调试
origin_z: -1.0 # Z轴原点,单位:米
z_resolution: 0.2 # Z轴分辨率,单位:米
z_voxels: 16 # Z轴体素数量
max_obstacle_height: 2.0 # 最大障碍物高度,单位:米
mark_threshold: 0 # 标记阈值
observation_sources: laser_scan # 观测源列表
# 激光雷达观测配置
laser_scan:
topic: /scan # 激光雷达话题
max_obstacle_height: 2.0 # 最大检测高度,单位:米
clearing: True # 启用清除功能,清除已消失的障碍物
marking: True # 启用标记功能,标记新检测到的障碍物
data_type: "LaserScan" # 数据类型
raytrace_max_range: 3.0 # 射线追踪最大范围,单位:米
raytrace_min_range: 0.0 # 射线追踪最小范围,单位:米
obstacle_max_range: 2.5 # 障碍物检测最大范围,单位:米
obstacle_min_range: 0.0 # 障碍物检测最小范围,单位:米
reliability: best_effort # 可靠性策略,尽力而为
durability: volatile # 持久性策略,不保存
#=============================================================================
# 8. 全局代价地图配置
#=============================================================================
# Global Costmap - 全局代价地图
# 作用:存储静态地图和全局障碍物信息,用于全局路径规划
# 特点:覆盖整个地图区域,不随机器人移动,主要使用静态地图
# 注意:由于使用FAST-LIO,这里禁用rolling_window,使用全局静态地图
global_costmap:
global_costmap:
ros__parameters:
# 基础配置
use_sim_time: false # 不使用仿真时间
update_frequency: 1.0 # 更新频率,单位:Hz,每1秒更新一次
publish_frequency: 1.0 # 发布频率,单位:Hz,每1秒发布一次
global_frame: map # 全局坐标系
robot_base_frame: base_link # 机器人基座坐标系
rolling_window: false # 禁用滚动窗口,使用全局固定地图
# 地图尺寸配置 - 覆盖整个环境
width: 20 # 地图宽度,单位:米(20米×20米覆盖范围)
height: 20 # 地图高度,单位:米
resolution: 0.05 # 地图分辨率,单位:米/格(5cm精度)
plugins: ["static_layer", "obstacle_layer", "inflation_layer"] # 启用的图层插件
# 静态图层配置 - 加载预先构建的静态地图
static_layer:
plugin: "nav2_costmap_2d::StaticLayer" # 静态图层插件
map_subscribe_transient_local: true # 使用持久化本地订阅,提高性能
# 障碍物图层配置 - 处理动态障碍物
obstacle_layer:
plugin: "nav2_costmap_2d::ObstacleLayer" # 障碍物图层插件
enabled: true # 启用障碍物图层
observation_sources: laser_scan # 观测源列表
# 激光雷达观测配置
laser_scan:
topic: /scan # 激光雷达话题
max_obstacle_height: 2.0 # 最大检测高度,单位:米
min_obstacle_height: -0.1 # 最小检测高度,单位:米,负值表示地面以下
expected_update_rate: 0.0 # 期望更新率,0表示不检查
observation_persistence: 0.0 # 观测持久性,0表示不保存历史
marking: true # 启用标记,标记新检测到的障碍物
clearing: true # 启用清除,清除已消失的障碍物
data_type: "LaserScan" # 数据类型
raytrace_max_range: 5.0 # 射线追踪最大范围,单位:米
raytrace_min_range: 0.0 # 射线追踪最小范围,单位:米
obstacle_max_range: 2.5 # 障碍物检测最大范围,单位:米
obstacle_min_range: 0.0 # 障碍物检测最小范围,单位:米
reliability: best_effort # 可靠性策略
durability: volatile # 持久性策略
# 膨胀图层配置 - 在障碍物周围添加安全边界
inflation_layer:
plugin: "nav2_costmap_2d::InflationLayer" # 膨胀图层插件
cost_scaling_factor: 3.0 # 代价缩放因子,控制膨胀强度
inflation_radius: 0.55 # 膨胀半径,单位:米(55cm安全距离)
# 使用 footprint,不再写 robot_radius
2.yaml,xml和launch的区别以及语法规则
官方网站:使用 XML、YAML 和 Python 进行 ROS 2 启动文件 --- ROS 2 文档:滚动文档
在ros2手册介绍了对于这三种的区别和相关语法介绍
3.maps---地图参数存放处
这个就是存放地图参数的,可以在这里修改地图参数
#=============================================================================
# MID-360 导航地图配置文件
#=============================================================================
# 地图元数据文件 - 定义2D占据栅格地图的基本属性
# 作用:为Nav2导航系统提供静态地图信息,用于全局路径规划
#
# 文件结构说明:
# - map.yaml:本文件,地图元数据配置
# - map.pgm:对应的地图图像文件(缺失,需要生成或提供)
#
# 坐标系统说明:
# - 地图坐标系:原点在地图左下角,X向右,Y向上
# - 机器人坐标系:base_link,原点在机器人中心
# - 世界坐标系:map,与地图坐标系对齐
#=============================================================================
# 1. 地图图像文件配置
#=============================================================================
# 地图图像文件名,必须与YAML文件在同一目录下
# PGM格式:Portable Gray Map,灰度图像格式
# 像素值含义:
# - 0(黑色):占用(障碍物)
# - 254(白色):空闲(可通行)
# - 205(灰色):未知(未探索区域)
image: map.pgm
#=============================================================================
# 2. 地图分辨率配置
#=============================================================================
# 地图分辨率,单位:米/像素
# 含义:地图中每个像素代表的实际距离
# 0.05 = 5cm精度,即每个像素对应现实世界中的5厘米
# 精度选择考虑:
# - 0.02-0.05m:高精度,适合室内精细导航
# - 0.05-0.1m:中等精度,平衡性能和精度
# - 0.1-0.5m:低精度,适合室外大场景
resolution: 0.05
#=============================================================================
# 3. 地图原点配置
#=============================================================================
# 地图原点在世界坐标系中的位置
# 格式:[x, y, yaw],单位:米、米、弧度
# 含义:地图左下角像素(0,0)对应的世界坐标
# [-10.0, -10.0, 0.0]:地图中心在世界坐标系原点
# 计算关系:
# - 地图宽度 = 图像宽度 × resolution
# - 地图高度 = 图像高度 × resolution
# - 世界坐标范围:x∈[-10, 10],y∈[-10, 10] → 20m×20m区域
origin: [-10.0, -10.0, 0.0]
#=============================================================================
# 4. 图像反转配置
#=============================================================================
# 是否反转图像像素值
# 0:不反转,保持原值(推荐)
# 1:反转,黑变白,白变黑
# 反转后的含义:
# - 0→254:占用→空闲
# - 254→0:空闲→占用
# - 205→205:未知→未知(不变)
negate: 0
#=============================================================================
# 5. 占用阈值配置
#=============================================================================
# 占用阈值,范围:0.0-1.0
# 含义:像素值被判断为占用的概率阈值
# 计算:概率 = (255 - 像素值) / 255
# 0.65 = 65%,即像素值 ≤ 89 时判断为占用
# 调参建议:
# - 保守值(0.6-0.7):更安全,避免碰撞
# - 激进值(0.4-0.6):更灵活,可通过狭窄空间
occupied_thresh: 0.65
#=============================================================================
# 6. 空闲阈值配置
#=============================================================================
# 空闲阈值,范围:0.0-1.0
# 含义:像素值被判断为空闲的概率阈值
# 计算:概率 = (255 - 像素值) / 255
# 0.25 = 25%,即像素值 ≥ 191 时判断为空闲
# 阈值关系:必须满足 free_thresh < occupied_thresh
# 中间区域(25%-65%):未知状态
free_thresh: 0.25
#=============================================================================
# 7. 地图模式配置
#=============================================================================
# 地图解释模式
# trinary:三值模式(推荐)
# - 像素值 > occupied_thresh → 占用(100)
# - 像素值 < free_thresh → 空闲(0)
# - 其他 → 未知(-1)
# scale:缩放模式(不推荐)
# - 直接按比例映射到0-100
# raw:原始模式(不推荐)
# - 直接使用像素值作为代价值
mode: trinary
#=============================================================================
# 8. 使用说明和调参建议
#=============================================================================
#
# 使用场景:
# - 室内导航:resolution=0.05,阈值适中
# - 室外导航:resolution=0.1-0.2,阈值保守
# - 动态环境:降低阈值,增加未知区域
#
# 性能优化:
# - 降低分辨率(0.1m)可提高规划速度
# - 减小地图尺寸可减少内存占用
# - 调整阈值可影响导航行为
#
# 故障排查:
# - 地图不显示:检查image路径是否正确
# - 定位失败:确认origin设置是否准确
# - 路径规划异常:验证阈值设置是否合理
#
# 与FAST-LIO集成:
# - 确保坐标系一致(map、odom、base_link)
# - 地图原点应与SLAM初始位置匹配
# - 定期更新地图以反映环境变化
4.rviz---这个可以打开rviz之后,配置完成之后在左上角点击保存即可

至于rviz的每一个摁键,都有什么作用
参考文档:ROS学习------RViz简介与基础使用方式-CSDN博客
5.launch文件--这个很重要,可以一下子启动很多个节点
参考教程:ROS2基础教程 - 10 Launch - For技术栈

其实这个配置和那些xml,yaml文件差不多,只不过是换成了python,的这种格式
想调用什么包可以直接在这里直接配置就可以了,非常方便
6.src文件---最重要的就是这个文件了
存放重要的代码的位置,放点云处理代码,初始化位置代码等等,根据自己的需求来书写