下面将逐一解释Nav2(ROS2 jazzy Navigation 2)参数配置文件中各个参数的含义和作用。配置文件涉及多个节点,包括 amcl
、bt_navigator
、controller_server
、local_costmap
、global_costmap
、map_saver
、planner_server
、smoother_server
、behavior_server
、waypoint_follower
、velocity_smoother
、collision_monitor
、docking_server
以及 loopback_simulator
。每个节点的参数配置如下:
1. amcl
(自适应蒙特卡洛定位)
功能:amcl
用于机器人在已知地图上的定位,通过粒子滤波算法结合激光传感器和里程计数据估计机器人的位姿。
参数详解:
- alpha1, alpha2, alpha3, alpha4, alpha5: 运动模型的噪声参数,分别对应旋转角度和线性移动的不确定性,用于描述机器人运动时的误差。
- base_frame_id: 机器人的基坐标系,通常为
"base_link"
,用于表示机器人自身的参考框架。 - beam_skip_distance: 激光束跳过的距离阈值,超过此距离的激光束将被忽略。
- beam_skip_error_threshold: 激光束跳过时的误差阈值,超过此阈值会影响定位精度。
- beam_skip_threshold: 激光束跳过的判定阈值,用于决定是否跳过某个激光束。
- do_beamskip: 是否启用激光束跳过功能,
false
表示禁用。 - global_frame_id: 全局参考框架,通常为
"map"
,用于全局定位和地图表示。 - lambda_short: 激光传感器模型中的短尾概率参数,用于处理异常短的激光测量。
- laser_likelihood_max_dist: 激光测量的最大可能距离,超过此距离的测量将不用于定位。
- laser_max_range: 激光传感器的最大测量范围。
- laser_min_range: 激光传感器的最小测量范围,
-1.0
通常表示不限制。 - laser_model_type: 激光传感器模型类型,
"likelihood_field"
表示使用似然场模型。 - max_beams: 每次处理的最大激光束数,限制计算量。
- max_particles: 粒子滤波中的最大粒子数,影响定位的精度和计算负担。
- min_particles: 粒子滤波中的最小粒子数,保证定位的稳定性。
- odom_frame_id: 里程计的坐标框架,通常为
"odom"
,用于表示机器人的里程计参考。 - pf_err: 粒子滤波中的误差参数,用于调整滤波器的响应。
- pf_z: 粒子滤波中的权重更新参数,影响粒子的重新采样。
- recovery_alpha_fast & recovery_alpha_slow: 恢复行为中的参数,用于快速和慢速恢复策略。
- resample_interval: 重新采样的间隔,决定粒子滤波器何时重新采样粒子。
- robot_model_type: 机器人运动模型类型,
"nav2_amcl::DifferentialMotionModel"
表示使用差分驱动模型。 - save_pose_rate: 保存位姿的频率,单位为Hz。
- sigma_hit: 激光传感器模型中的命中概率标准差,影响传感器模型的精度。
- tf_broadcast: 是否广播TF变换,
true
表示启用。 - transform_tolerance: TF变换的容忍时间,决定变换的有效性时间窗口。
- update_min_a: 触发定位更新的最小角度变化量。
- update_min_d: 触发定位更新的最小位移变化量。
- z_hit, z_max, z_rand, z_short: 激光传感器模型中的概率参数,用于组合不同类型的激光测量。
- scan_topic: 激光扫描数据的主题名称,通常为
"scan"
。
2. bt_navigator
(行为树导航器)
功能:bt_navigator
使用行为树(Behavior Tree)管理导航任务,协调不同的导航行为插件。
参数详解:
- global_frame: 全局参考框架,通常为
"map"
。 - robot_base_frame: 机器人的基坐标框架,通常为
"base_link"
。 - odom_topic: 里程计数据的主题名称,通常为
"/odom"
。 - bt_loop_duration: 行为树循环的持续时间,单位为秒。
- default_server_timeout: 默认的服务器超时时间,单位为秒。
- wait_for_service_timeout: 等待服务的超时时间,单位为秒。
- action_server_result_timeout: 动作服务器结果的超时时间,单位为秒。
- navigators: 使用的导航器插件列表,例如
["navigate_to_pose", "navigate_through_poses"]
。 - navigate_to_pose:
- plugin: 使用的导航器插件类型,
"nav2_bt_navigator::NavigateToPoseNavigator"
。
- plugin: 使用的导航器插件类型,
- navigate_through_poses:
- plugin: 使用的导航器插件类型,
"nav2_bt_navigator::NavigateThroughPosesNavigator"
。
- plugin: 使用的导航器插件类型,
- plugin_lib_names: 用于添加自定义行为树插件的库名称列表,内置插件会自动添加。
- error_code_names: 定义错误码名称,用于路径计算和跟随过程中错误处理,例如
["compute_path_error_code", "follow_path_error_code"]
。
3. controller_server
(控制器服务器)
功能:controller_server
负责机器人轨迹的控制,生成速度命令以驱动机器人沿规划路径前进。
参数详解:
- controller_frequency: 控制器的频率,单位为Hz。
- costmap_update_timeout: 代价地图更新的超时时间,单位为秒。
- min_x_velocity_threshold: 最小线速度阈值,低于此值时认为机器人静止。
- min_y_velocity_threshold: 最小横向速度阈值。
- min_theta_velocity_threshold: 最小角速度阈值。
- failure_tolerance: 控制器失败的容忍度。
- progress_checker_plugins: 进度检查插件列表,例如
["progress_checker"]
。 - goal_checker_plugins: 目标检查插件列表,例如
["general_goal_checker"]
,可选"precise_goal_checker"
。 - controller_plugins: 控制器插件列表,例如
["FollowPath"]
。 - use_realtime_priority: 是否使用实时优先级,
false
表示禁用。
具体插件参数:
Progress Checker (progress_checker
)
- plugin: 使用的进度检查插件类型,
"nav2_controller::SimpleProgressChecker"
。 - required_movement_radius: 需要的移动半径,用于判断是否有足够的进展。
- movement_time_allowance: 移动时间的允许范围,单位为秒。
Goal Checker (general_goal_checker
)
- stateful: 是否为有状态检查器,
True
表示启用。 - plugin: 使用的目标检查插件类型,
"nav2_controller::SimpleGoalChecker"
。 - xy_goal_tolerance: 目标位置的容忍范围,单位为米。
- yaw_goal_tolerance: 目标朝向的容忍范围,单位为弧度。
控制器插件 (FollowPath
)
- plugin: 使用的控制器插件类型,
"nav2_mppi_controller::MPPIController"
。 - time_steps: 预测时间步数。
- model_dt: 运动模型的时间步长,单位为秒。
- batch_size: 批处理大小,用于并行计算。
- ax_max, ax_min, ay_max, az_max: 加速度的最大和最小值,分别对应x、y、z轴。
- vx_std, vy_std, wz_std: 速度的标准差,用于噪声生成。
- vx_max, vx_min, vy_max, wz_max: 速度的最大和最小值,分别对应线速度和角速度。
- iteration_count: 迭代次数,用于优化。
- prune_distance: 修剪距离,用于减少不必要的轨迹。
- transform_tolerance: TF变换的容忍时间,单位为秒。
- temperature: 温度参数,用于控制随机性的影响。
- gamma: 折扣因子,用于累积奖励的计算。
- motion_model: 运动模型类型,
"DiffDrive"
表示差分驱动模型。 - visualize: 是否启用可视化,
true
表示启用。 - regenerate_noises: 是否重新生成噪声,
true
表示启用。
轨迹可视化 (TrajectoryVisualizer
)
- trajectory_step: 轨迹步长。
- time_step: 时间步长,单位为秒。
Ackermann 约束 (AckermannConstraints
)
- min_turning_r: 最小转弯半径。
批评器(Critics)
- critics: 使用的批评器列表,用于评估轨迹质量,例如:
"ConstraintCritic"
"CostCritic"
"GoalCritic"
"GoalAngleCritic"
"PathAlignCritic"
"PathFollowCritic"
"PathAngleCritic"
"PreferForwardCritic"
具体批评器参数:
- ConstraintCritic:
- enabled: 是否启用,
true
表示启用。 - cost_power: 成本幂次。
- cost_weight: 成本权重。
- enabled: 是否启用,
- GoalCritic:
- enabled: 是否启用。
- cost_power: 成本幂次。
- cost_weight: 成本权重。
- threshold_to_consider: 考虑阈值。
- GoalAngleCritic:
- enabled: 是否启用。
- cost_power: 成本幂次。
- cost_weight: 成本权重。
- threshold_to_consider: 考虑阈值。
- PreferForwardCritic:
- enabled: 是否启用。
- cost_power: 成本幂次。
- cost_weight: 成本权重。
- threshold_to_consider: 考虑阈值。
- CostCritic:
- enabled: 是否启用。
- cost_power: 成本幂次。
- cost_weight: 成本权重。
- critical_cost: 临界成本值。
- consider_footprint: 是否考虑机器人占用空间。
- collision_cost: 碰撞成本值。
- near_goal_distance: 接近目标的距离阈值。
- trajectory_point_step: 轨迹点步长。
- PathAlignCritic:
- enabled: 是否启用。
- cost_power: 成本幂次。
- cost_weight: 成本权重。
- max_path_occupancy_ratio: 最大路径占用比例。
- trajectory_point_step: 轨迹点步长。
- threshold_to_consider: 考虑阈值。
- offset_from_furthest: 距离最远点的偏移量。
- use_path_orientations: 是否使用路径方向。
- PathFollowCritic:
- enabled: 是否启用。
- cost_power: 成本幂次。
- cost_weight: 成本权重。
- offset_from_furthest: 距离最远点的偏移量。
- threshold_to_consider: 考虑阈值。
- PathAngleCritic:
- enabled: 是否启用。
- cost_power: 成本幂次。
- cost_weight: 成本权重。
- offset_from_furthest: 距离最远点的偏移量。
- threshold_to_consider: 考虑阈值。
- max_angle_to_furthest: 最大角度阈值。
- mode: 模式选择。
4. local_costmap
(局部代价地图)
功能:local_costmap
用于表示机器人周围的局部环境,包含障碍物和安全区域信息,支持动态更新。
参数详解:
- update_frequency: 局部代价地图的更新频率,单位为Hz。
- publish_frequency: 局部代价地图的发布频率,单位为Hz。
- global_frame: 全局参考框架,通常为
"odom"
。 - robot_base_frame: 机器人的基坐标框架,通常为
"base_link"
。 - rolling_window: 是否使用滚动窗口,
true
表示地图随机器人移动而滚动。 - width, height: 局部代价地图的宽度和高度,单位为米。
- resolution: 地图的分辨率,单位为米/栅格。
- robot_radius: 机器人的半径,单位为米,用于安全距离计算。
- plugins: 使用的代价地图插件列表,例如
["voxel_layer", "inflation_layer"]
。
具体插件参数:
Inflation Layer (inflation_layer
)
- plugin: 使用的插件类型,
"nav2_costmap_2d::InflationLayer"
。 - cost_scaling_factor: 成本缩放因子,用于计算膨胀成本。
- inflation_radius: 膨胀半径,单位为米,用于增加障碍物周围的安全区域。
Voxel Layer (voxel_layer
)
- plugin: 使用的插件类型,
"nav2_costmap_2d::VoxelLayer"
。 - enabled: 是否启用,
True
表示启用。 - publish_voxel_map: 是否发布体素地图,
True
表示启用。 - origin_z: 地图的Z轴原点,单位为米。
- z_resolution: Z轴方向的分辨率,单位为米。
- z_voxels: Z轴方向的体素数。
- max_obstacle_height: 最大障碍物高度,超过此高度的障碍物将被忽略。
- mark_threshold: 标记阈值,用于判断是否标记障碍物。
- observation_sources: 观测源列表,例如
["scan"]
。
Scan (scan
)
- topic: 激光扫描数据的主题名称,通常为
"/scan"
。 - max_obstacle_height: 最大障碍物高度,单位为米。
- clearing: 是否清除旧的障碍物信息,
True
表示启用。 - marking: 是否标记新的障碍物信息,
True
表示启用。 - data_type: 数据类型,通常为
"LaserScan"
。 - raytrace_max_range: 射线追踪的最大范围,单位为米。
- raytrace_min_range: 射线追踪的最小范围,单位为米。
- obstacle_max_range: 障碍物的最大检测范围,单位为米。
- obstacle_min_range: 障碍物的最小检测范围,单位为米。
Static Layer (static_layer
)
- plugin: 使用的插件类型,
"nav2_costmap_2d::StaticLayer"
。 - map_subscribe_transient_local: 是否使用瞬态本地订阅,
True
表示启用。
其他参数:
- always_send_full_costmap: 是否总是发送完整的代价地图,
True
表示启用。
5. global_costmap
(全局代价地图)
功能:global_costmap
用于表示整个工作空间的全局环境,支持全局路径规划。
参数详解:
- update_frequency: 全局代价地图的更新频率,单位为Hz。
- publish_frequency: 全局代价地图的发布频率,单位为Hz。
- global_frame: 全局参考框架,通常为
"map"
。 - robot_base_frame: 机器人的基坐标框架,通常为
"base_link"
。 - robot_radius: 机器人的半径,单位为米,用于安全距离计算。
- resolution: 地图的分辨率,单位为米/栅格。
- track_unknown_space: 是否跟踪未知区域,
true
表示启用。 - plugins: 使用的代价地图插件列表,例如
["static_layer", "obstacle_layer", "inflation_layer"]
。
具体插件参数:
Obstacle Layer (obstacle_layer
)
- plugin: 使用的插件类型,
"nav2_costmap_2d::ObstacleLayer"
。 - enabled: 是否启用,
True
表示启用。 - observation_sources: 观测源列表,例如
["scan"]
。
Scan (scan
)
- topic: 激光扫描数据的主题名称,通常为
"/scan"
。 - max_obstacle_height: 最大障碍物高度,单位为米。
- clearing: 是否清除旧的障碍物信息,
True
表示启用。 - marking: 是否标记新的障碍物信息,
True
表示启用。 - data_type: 数据类型,通常为
"LaserScan"
。 - raytrace_max_range: 射线追踪的最大范围,单位为米。
- raytrace_min_range: 射线追踪的最小范围,单位为米。
- obstacle_max_range: 障碍物的最大检测范围,单位为米。
- obstacle_min_range: 障碍物的最小检测范围,单位为米。
Static Layer (static_layer
)
- plugin: 使用的插件类型,
"nav2_costmap_2d::StaticLayer"
。 - map_subscribe_transient_local: 是否使用瞬态本地订阅,
True
表示启用。
Inflation Layer (inflation_layer
)
- plugin: 使用的插件类型,
"nav2_costmap_2d::InflationLayer"
。 - cost_scaling_factor: 成本缩放因子,用于计算膨胀成本。
- inflation_radius: 膨胀半径,单位为米,用于增加障碍物周围的安全区域。
其他参数:
- always_send_full_costmap: 是否总是发送完整的代价地图,
True
表示启用。
6. map_saver
(地图保存器)
功能:map_saver
用于将机器人当前的地图保存为文件,方便后续使用。
参数详解:
- save_map_timeout: 保存地图的超时时间,单位为秒。
- free_thresh_default: 空闲空间的阈值,通常为0.25,用于区分自由区域和障碍物。
- occupied_thresh_default: 占用空间的阈值,通常为0.65,用于区分障碍物。
- map_subscribe_transient_local: 是否使用瞬态本地订阅,
True
表示启用。
7. planner_server
(规划器服务器)
功能:planner_server
负责全局路径规划,生成从起点到目标点的路径。
参数详解:
- expected_planner_frequency: 期望的规划器频率,单位为Hz。
- planner_plugins: 使用的规划器插件列表,例如
["GridBased"]
。 - costmap_update_timeout: 代价地图更新的超时时间,单位为秒。
具体插件参数:
Grid-Based Planner (GridBased
)
- plugin: 使用的规划器插件类型,
"nav2_navfn_planner::NavfnPlanner"
。 - tolerance: 规划容忍度,单位为米,决定规划器何时认为到达目标。
- use_astar: 是否使用A*算法,
false
表示不使用。 - allow_unknown: 是否允许规划路径经过未知区域,
true
表示允许。
8. smoother_server
(平滑器服务器)
功能:smoother_server
负责对全局路径进行平滑处理,生成更为平滑和可执行的轨迹。
参数详解:
- smoother_plugins: 使用的平滑器插件列表,例如
["simple_smoother"]
。
具体插件参数:
Simple Smoother (simple_smoother
)
- plugin: 使用的平滑器插件类型,
"nav2_smoother::SimpleSmoother"
。 - tolerance: 平滑容忍度,决定平滑程度。
- max_its: 最大迭代次数,用于平滑算法的迭代控制。
- do_refinement: 是否进行细化处理,
True
表示启用。
9. behavior_server
(行为服务器)
功能:behavior_server
管理机器人的各种行为,如旋转、后退、等待等,支持复杂的行为组合。
参数详解:
- local_costmap_topic: 局部代价地图的主题名称,通常为
local_costmap/costmap_raw
。 - global_costmap_topic: 全局代价地图的主题名称,通常为
global_costmap/costmap_raw
。 - local_footprint_topic: 局部足迹的主题名称,通常为
local_costmap/published_footprint
。 - global_footprint_topic: 全局足迹的主题名称,通常为
global_costmap/published_footprint
。 - cycle_frequency: 行为循环频率,单位为Hz。
- behavior_plugins: 使用的行为插件列表,例如
["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"]
。 - spin:
- plugin: 使用的行为插件类型,
"nav2_behaviors::Spin"
。
- plugin: 使用的行为插件类型,
- backup:
- plugin: 使用的行为插件类型,
"nav2_behaviors::BackUp"
。
- plugin: 使用的行为插件类型,
- drive_on_heading:
- plugin: 使用的行为插件类型,
"nav2_behaviors::DriveOnHeading"
。
- plugin: 使用的行为插件类型,
- wait:
- plugin: 使用的行为插件类型,
"nav2_behaviors::Wait"
。
- plugin: 使用的行为插件类型,
- assisted_teleop:
- plugin: 使用的行为插件类型,
"nav2_behaviors::AssistedTeleop"
。
- plugin: 使用的行为插件类型,
- local_frame: 局部参考框架,通常为
"odom"
。 - global_frame: 全局参考框架,通常为
"map"
。 - robot_base_frame: 机器人的基坐标框架,通常为
"base_link"
。 - transform_tolerance: TF变换的容忍时间,单位为秒。
- simulate_ahead_time: 模拟前进时间,单位为秒。
- max_rotational_vel: 最大旋转速度,单位为弧度/秒。
- min_rotational_vel: 最小旋转速度,单位为弧度/秒。
- rotational_acc_lim: 旋转加速度限制,单位为弧度/秒²。
10. waypoint_follower
(航点跟随器)
功能:waypoint_follower
负责按顺序跟随预设的航点,实现路径跟随和任务执行。
参数详解:
- loop_rate: 循环频率,单位为Hz。
- stop_on_failure: 在任务失败时是否停止,
false
表示不停止。 - action_server_result_timeout: 动作服务器结果的超时时间,单位为秒。
- waypoint_task_executor_plugin: 使用的航点任务执行插件类型,
"wait_at_waypoint"
。 - wait_at_waypoint:
- plugin: 使用的任务执行插件类型,
"nav2_waypoint_follower::WaitAtWaypoint"
。 - enabled: 是否启用,
True
表示启用。 - waypoint_pause_duration: 在航点处暂停的时间,单位为秒。
- plugin: 使用的任务执行插件类型,
11. velocity_smoother
(速度平滑器)
功能:velocity_smoother
用于对生成的速度命令进行平滑处理,避免机器人动作过于剧烈。
参数详解:
- smoothing_frequency: 平滑处理的频率,单位为Hz。
- scale_velocities: 是否缩放速度,
False
表示不缩放。 - feedback: 反馈模式,
"OPEN_LOOP"
表示开环。 - max_velocity: 最大速度列表,分别对应x、y、z轴,单位为米/秒和弧度/秒。
- min_velocity: 最小速度列表,分别对应x、y、z轴,单位为米/秒和弧度/秒。
- max_accel: 最大加速度列表,分别对应x、y、z轴,单位为米/秒²和弧度/秒²。
- max_decel: 最大减速度列表,分别对应x、y、z轴,单位为米/秒²和弧度/秒²。
- odom_topic: 里程计数据的主题名称,通常为
"odom"
。 - odom_duration: 里程计数据的有效时间窗口,单位为秒。
- deadband_velocity: 死区速度列表,分别对应x、y、z轴,单位为米/秒和弧度/秒。
- velocity_timeout: 速度命令的超时时间,单位为秒。
12. collision_monitor
(碰撞监控器)
功能:collision_monitor
监控机器人周围的环境,检测潜在碰撞并采取相应的安全措施。
参数详解:
- base_frame_id: 机器人的基坐标框架,通常为
"base_link"
。 - odom_frame_id: 里程计的坐标框架,通常为
"odom"
。 - cmd_vel_in_topic: 输入的速度命令主题名称,通常为
"cmd_vel_smoothed"
。 - cmd_vel_out_topic: 输出的速度命令主题名称,通常为
"cmd_vel"
。 - state_topic: 碰撞监控状态的主题名称,通常为
"collision_monitor_state"
。 - transform_tolerance: TF变换的容忍时间,单位为秒。
- source_timeout: 数据源的超时时间,单位为秒。
- base_shift_correction: 是否启用基座位移校正,
True
表示启用。 - stop_pub_timeout: 停止命令发布的超时时间,单位为秒。
- polygons: 多边形区域列表,用于定义不同的安全区域和行为类型,例如
["FootprintApproach"]
。
具体多边形参数:
FootprintApproach
- type: 多边形类型,通常为
"polygon"
。 - action_type: 行为类型,
"approach"
表示靠近。 - footprint_topic: 足迹数据的主题名称,通常为
"/local_costmap/published_footprint"
。 - time_before_collision: 碰撞前的时间预警,单位为秒。
- simulation_time_step: 仿真时间步长,单位为秒。
- min_points: 最小检测点数。
- visualize: 是否可视化,
False
表示不启用。 - enabled: 是否启用,
True
表示启用。
观测源参数:
- observation_sources: 使用的观测源列表,例如
["scan"]
。
Scan (scan
)
- type: 观测源类型,通常为
"scan"
。 - topic: 激光扫描数据的主题名称,通常为
"scan"
。 - min_height: 最小高度,单位为米,过滤低于此高度的障碍物。
- max_height: 最大高度,单位为米,过滤高于此高度的障碍物。
- enabled: 是否启用,
True
表示启用。
13. docking_server
(对接服务器)
功能:docking_server
负责机器人与充电桩的对接与断开,实现自动充电功能。
参数详解:
- controller_frequency: 控制器的频率,单位为Hz。
- initial_perception_timeout: 初始感知超时时间,单位为秒。
- wait_charge_timeout: 等待充电的超时时间,单位为秒。
- dock_approach_timeout: 对接接近的超时时间,单位为秒。
- undock_linear_tolerance: 断开时线性位置的容忍度,单位为米。
- undock_angular_tolerance: 断开时角度位置的容忍度,单位为弧度。
- max_retries: 最大重试次数。
- base_frame: 机器人的基坐标框架,通常为
"base_link"
。 - fixed_frame: 固定参考框架,通常为
"odom"
。 - dock_backwards: 是否支持反向对接,
false
表示不支持。 - dock_prestaging_tolerance: 对接预定位的容忍度,单位为米。
- dock_plugins: 对接类型列表,例如
['simple_charging_dock']
。
具体对接插件参数:
Simple Charging Dock (simple_charging_dock
)
- plugin: 使用的对接插件类型,
'opennav_docking::SimpleChargingDock'
。 - docking_threshold: 对接阈值,决定何时认为对接成功。
- staging_x_offset: 预定位的X轴偏移量,单位为米。
- use_external_detection_pose: 是否使用外部检测姿态,
true
表示启用。 - use_battery_status: 是否使用电池状态,
false
表示不启用。 - use_stall_detection: 是否使用停滞检测,
false
表示不启用。 - external_detection_timeout: 外部检测的超时时间,单位为秒。
- external_detection_translation_x: 外部检测的X轴平移,单位为米。
- external_detection_translation_y: 外部检测的Y轴平移,单位为米。
- external_detection_rotation_roll: 外部检测的Roll旋转,单位为弧度。
- external_detection_rotation_pitch: 外部检测的Pitch旋转,单位为弧度。
- external_detection_rotation_yaw: 外部检测的Yaw旋转,单位为弧度。
- filter_coef: 过滤系数,用于平滑检测数据。
对接实例参数:
- docks: 对接实例列表,例如
['home_dock']
。
Home Dock (home_dock
)
- type: 对接类型,
'simple_charging_dock'
。 - frame: 对接参考框架,通常为
"map"
。 - pose: 对接位置的姿态,格式为
[x, y, z]
。
控制器参数:
- controller:
- k_phi: 角度控制增益。
- k_delta: 位置控制增益。
- v_linear_min: 最小线速度,单位为米/秒。
- v_linear_max: 最大线速度,单位为米/秒。
14. loopback_simulator
(回环仿真器)
功能:loopback_simulator
用于仿真环境中回环机器人的运动和传感器数据,常用于测试和开发。
参数详解:
- base_frame_id: 机器人的基坐标框架,通常为
"base_link"
。 - odom_frame_id: 里程计的坐标框架,通常为
"odom"
。 - map_frame_id: 地图的坐标框架,通常为
"map"
。 - scan_frame_id: 激光扫描的坐标框架,通常为
"laser"
,在tb4_loopback_simulator.launch.py
中会重映射为'rplidar_link'
。 - update_duration: 更新的持续时间,单位为秒。
总结:
以上就是对Ros2 jazzy版本的Navigation参数配置文件的解析,仅提供参考学习使用。下面附上一份完整案例。
案例:
amcl:
ros__parameters:
alpha1: 0.2
alpha2: 0.2
alpha3: 0.2
alpha4: 0.2
alpha5: 0.2
base_frame_id: "base_link"
beam_skip_distance: 0.5
beam_skip_error_threshold: 0.9
beam_skip_threshold: 0.3
do_beamskip: false
global_frame_id: "map"
lambda_short: 0.1
laser_likelihood_max_dist: 2.0
laser_max_range: 100.0
laser_min_range: -1.0
laser_model_type: "likelihood_field"
max_beams: 60
max_particles: 2000
min_particles: 500
odom_frame_id: "odom"
pf_err: 0.05
pf_z: 0.99
recovery_alpha_fast: 0.0
recovery_alpha_slow: 0.0
resample_interval: 1
robot_model_type: "nav2_amcl::DifferentialMotionModel"
save_pose_rate: 0.5
sigma_hit: 0.2
tf_broadcast: true
transform_tolerance: 1.0
update_min_a: 0.2
update_min_d: 0.25
z_hit: 0.5
z_max: 0.05
z_rand: 0.5
z_short: 0.05
scan_topic: scan
bt_navigator:
ros__parameters:
global_frame: map
robot_base_frame: base_link
odom_topic: /odom
bt_loop_duration: 10
default_server_timeout: 20
wait_for_service_timeout: 1000
action_server_result_timeout: 900.0
navigators: ["navigate_to_pose", "navigate_through_poses"]
navigate_to_pose:
plugin: "nav2_bt_navigator::NavigateToPoseNavigator"
navigate_through_poses:
plugin: "nav2_bt_navigator::NavigateThroughPosesNavigator"
# 'default_nav_through_poses_bt_xml' and 'default_nav_to_pose_bt_xml' are use defaults:
# nav2_bt_navigator/navigate_to_pose_w_replanning_and_recovery.xml
# nav2_bt_navigator/navigate_through_poses_w_replanning_and_recovery.xml
# They can be set here or via a RewrittenYaml remap from a parent launch file to Nav2.
# plugin_lib_names is used to add custom BT plugins to the executor (vector of strings).
# Built-in plugins are added automatically
# plugin_lib_names: []
error_code_names:
- compute_path_error_code
- follow_path_error_code
controller_server:
ros__parameters:
controller_frequency: 20.0
costmap_update_timeout: 0.30
min_x_velocity_threshold: 1.0
min_y_velocity_threshold: 1.0
min_theta_velocity_threshold: 1.0
failure_tolerance: 0.3
progress_checker_plugins: ["progress_checker"]
goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker"
controller_plugins: ["FollowPath"]
use_realtime_priority: false
# Progress checker parameters
progress_checker:
plugin: "nav2_controller::SimpleProgressChecker"
required_movement_radius: 0.5
movement_time_allowance: 10.0
# Goal checker parameters
#precise_goal_checker:
# plugin: "nav2_controller::SimpleGoalChecker"
# xy_goal_tolerance: 0.25
# yaw_goal_tolerance: 0.25
# stateful: True
general_goal_checker:
stateful: True
plugin: "nav2_controller::SimpleGoalChecker"
xy_goal_tolerance: 0.25
yaw_goal_tolerance: 0.25
FollowPath:
plugin: "nav2_mppi_controller::MPPIController"
time_steps: 56
model_dt: 0.05
batch_size: 2000
ax_max: 3.0
ax_min: -3.0
ay_max: 3.0
az_max: 3.5
vx_std: 0.2
vy_std: 0.2
wz_std: 0.4
vx_max: 10.0
vx_min: -10.0
vy_max: 10.0
wz_max: 5.0
iteration_count: 1
prune_distance: 1.7
transform_tolerance: 0.1
temperature: 0.3
gamma: 0.015
motion_model: "DiffDrive"
visualize: true
regenerate_noises: true
TrajectoryVisualizer:
trajectory_step: 5
time_step: 3
AckermannConstraints:
min_turning_r: 0.2
critics: [
"ConstraintCritic", "CostCritic", "GoalCritic",
"GoalAngleCritic", "PathAlignCritic", "PathFollowCritic",
"PathAngleCritic", "PreferForwardCritic"]
ConstraintCritic:
enabled: true
cost_power: 1
cost_weight: 4.0
GoalCritic:
enabled: true
cost_power: 1
cost_weight: 5.0
threshold_to_consider: 1.4
GoalAngleCritic:
enabled: true
cost_power: 1
cost_weight: 3.0
threshold_to_consider: 0.5
PreferForwardCritic:
enabled: true
cost_power: 1
cost_weight: 5.0
threshold_to_consider: 0.5
CostCritic:
enabled: true
cost_power: 1
cost_weight: 3.81
critical_cost: 300.0
consider_footprint: true
collision_cost: 1000000.0
near_goal_distance: 1.0
trajectory_point_step: 2
PathAlignCritic:
enabled: true
cost_power: 1
cost_weight: 14.0
max_path_occupancy_ratio: 0.05
trajectory_point_step: 4
threshold_to_consider: 0.5
offset_from_furthest: 20
use_path_orientations: false
PathFollowCritic:
enabled: true
cost_power: 1
cost_weight: 5.0
offset_from_furthest: 5
threshold_to_consider: 1.4
PathAngleCritic:
enabled: true
cost_power: 1
cost_weight: 2.0
offset_from_furthest: 4
threshold_to_consider: 0.5
max_angle_to_furthest: 1.0
mode: 0
# TwirlingCritic:
# enabled: true
# twirling_cost_power: 1
# twirling_cost_weight: 10.0
local_costmap:
local_costmap:
ros__parameters:
update_frequency: 5.0
publish_frequency: 2.0
global_frame: odom
robot_base_frame: base_link
rolling_window: true
width: 3
height: 3
resolution: 0.05
robot_radius: 0.22
plugins: ["voxel_layer", "inflation_layer"]
inflation_layer:
plugin: "nav2_costmap_2d::InflationLayer"
cost_scaling_factor: 3.0
inflation_radius: 0.15
voxel_layer:
plugin: "nav2_costmap_2d::VoxelLayer"
enabled: True
publish_voxel_map: True
origin_z: 0.0
z_resolution: 0.05
z_voxels: 16
max_obstacle_height: 2.0
mark_threshold: 0
observation_sources: scan
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
static_layer:
plugin: "nav2_costmap_2d::StaticLayer"
map_subscribe_transient_local: True
always_send_full_costmap: True
global_costmap:
global_costmap:
ros__parameters:
update_frequency: 1.0
publish_frequency: 1.0
global_frame: map
robot_base_frame: base_link
robot_radius: 0.22
resolution: 0.05
track_unknown_space: true
plugins: ["static_layer", "obstacle_layer", "inflation_layer"]
obstacle_layer:
plugin: "nav2_costmap_2d::ObstacleLayer"
enabled: True
observation_sources: scan
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
static_layer:
plugin: "nav2_costmap_2d::StaticLayer"
map_subscribe_transient_local: True
inflation_layer:
plugin: "nav2_costmap_2d::InflationLayer"
cost_scaling_factor: 3.0
inflation_radius: 0.15
always_send_full_costmap: True
# The yaml_filename does not need to be specified since it going to be set by defaults in launch.
# If you'd rather set it in the yaml, remove the default "map" value in the tb3_simulation_launch.py
# file & provide full path to map below. If CLI map configuration or launch default is provided, that will be used.
# map_server:
# ros__parameters:
# yaml_filename: ""
map_saver:
ros__parameters:
save_map_timeout: 5.0
free_thresh_default: 0.25
occupied_thresh_default: 0.65
map_subscribe_transient_local: True
planner_server:
ros__parameters:
expected_planner_frequency: 20.0
planner_plugins: ["GridBased"]
costmap_update_timeout: 1.0
GridBased:
plugin: "nav2_navfn_planner::NavfnPlanner"
tolerance: 0.5
use_astar: false
allow_unknown: true
smoother_server:
ros__parameters:
smoother_plugins: ["simple_smoother"]
simple_smoother:
plugin: "nav2_smoother::SimpleSmoother"
tolerance: 1.0e-10
max_its: 1000
do_refinement: True
behavior_server:
ros__parameters:
local_costmap_topic: local_costmap/costmap_raw
global_costmap_topic: global_costmap/costmap_raw
local_footprint_topic: local_costmap/published_footprint
global_footprint_topic: global_costmap/published_footprint
cycle_frequency: 10.0
behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"]
spin:
plugin: "nav2_behaviors::Spin"
backup:
plugin: "nav2_behaviors::BackUp"
drive_on_heading:
plugin: "nav2_behaviors::DriveOnHeading"
wait:
plugin: "nav2_behaviors::Wait"
assisted_teleop:
plugin: "nav2_behaviors::AssistedTeleop"
local_frame: odom
global_frame: map
robot_base_frame: base_link
transform_tolerance: 0.1
simulate_ahead_time: 2.0
max_rotational_vel: 5.0
min_rotational_vel: 2.0
rotational_acc_lim: 3.2
waypoint_follower:
ros__parameters:
loop_rate: 20
stop_on_failure: false
action_server_result_timeout: 900.0
waypoint_task_executor_plugin: "wait_at_waypoint"
wait_at_waypoint:
plugin: "nav2_waypoint_follower::WaitAtWaypoint"
enabled: True
waypoint_pause_duration: 200
velocity_smoother:
ros__parameters:
smoothing_frequency: 20.0
scale_velocities: False
feedback: "OPEN_LOOP"
max_velocity: [10.0, 10.0, 2.0]
min_velocity: [-10.0, -10.0, -2.0]
max_accel: [2.5, 2.0, 3.2]
max_decel: [-2.5, -2.0, -3.2]
odom_topic: "odom"
odom_duration: 0.1
deadband_velocity: [0.0, 0.0, 0.0]
velocity_timeout: 1.0
collision_monitor:
ros__parameters:
base_frame_id: "base_link"
odom_frame_id: "odom"
cmd_vel_in_topic: "cmd_vel_smoothed"
cmd_vel_out_topic: "cmd_vel"
state_topic: "collision_monitor_state"
transform_tolerance: 0.2
source_timeout: 1.0
base_shift_correction: True
stop_pub_timeout: 2.0
# Polygons represent zone around the robot for "stop", "slowdown" and "limit" action types,
# and robot footprint for "approach" action type.
polygons: ["FootprintApproach"]
FootprintApproach:
type: "polygon"
action_type: "approach"
footprint_topic: "/local_costmap/published_footprint"
time_before_collision: 1.2
simulation_time_step: 0.1
min_points: 6
visualize: False
enabled: True
observation_sources: ["scan"]
scan:
type: "scan"
topic: "scan"
min_height: 0.15
max_height: 2.0
enabled: True
docking_server:
ros__parameters:
controller_frequency: 50.0
initial_perception_timeout: 5.0
wait_charge_timeout: 5.0
dock_approach_timeout: 30.0
undock_linear_tolerance: 0.05
undock_angular_tolerance: 0.1
max_retries: 3
base_frame: "base_link"
fixed_frame: "odom"
dock_backwards: false
dock_prestaging_tolerance: 0.5
# Types of docks
dock_plugins: ['simple_charging_dock']
simple_charging_dock:
plugin: 'opennav_docking::SimpleChargingDock'
docking_threshold: 0.05
staging_x_offset: -0.7
use_external_detection_pose: true
use_battery_status: false # true
use_stall_detection: false # true
external_detection_timeout: 1.0
external_detection_translation_x: -0.18
external_detection_translation_y: 0.0
external_detection_rotation_roll: -1.57
external_detection_rotation_pitch: -1.57
external_detection_rotation_yaw: 0.0
filter_coef: 0.1
# Dock instances
# The following example illustrates configuring dock instances.
# docks: ['home_dock'] # Input your docks here
# home_dock:
# type: 'simple_charging_dock'
# frame: map
# pose: [0.0, 0.0, 0.0]
controller:
k_phi: 3.0
k_delta: 2.0
v_linear_min: 0.15
v_linear_max: 0.15
loopback_simulator:
ros__parameters:
base_frame_id: "base_link"
odom_frame_id: "odom"
map_frame_id: "map"
scan_frame_id: "laser" # tb4_loopback_simulator.launch.py remaps to 'rplidar_link'
update_duration: 0.02