ROS2 Jazzy机器人导航navigation2 参数文件分析

下面将逐一解释Nav2(ROS2 jazzy Navigation 2)参数配置文件中各个参数的含义和作用。配置文件涉及多个节点,包括 amclbt_navigatorcontroller_serverlocal_costmapglobal_costmapmap_saverplanner_serversmoother_serverbehavior_serverwaypoint_followervelocity_smoothercollision_monitordocking_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"

  • navigate_through_poses:

    • plugin: 使用的导航器插件类型,"nav2_bt_navigator::NavigateThroughPosesNavigator"

  • 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: 成本权重。

  • 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"

  • 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: 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: 在航点处暂停的时间,单位为秒。


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
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值