ROS导航配置

本文详细介绍ROS中的Costmap组件,包括StaticMapLayer、ObstacleMapLayer和InflationLayer的作用及配置参数。并解释如何通过不同图层融合实现全局与局部路径规划。
  1. Static Map Layer:静态地图层,基本上不变的地图层,通常都是SLAM建立完成的静态地图。
  2. Obstacle Map Layer:障碍地图层,用于动态的记录传感器感知到的障碍物信息。
  3. Inflation Layer:膨胀层,在以上两层地图上进行膨胀(向外扩张),以避免机器人的撞上障碍物。
  4. Other Layers:你还可以通过插件的形式自己实现costmap,目前已有Social Costmap Layer、Range Sensor Layer等开源插件。

costmap_common_params

costmap_2d roswiki

# 如果机器人是圆的可以直接设置robot_radius参数
robot_radius: 0.2 
# 如果机器人不是圆的设置footpoint参数     
footprint: [[-0.5, 0.33], [0.5, 0.33], [0.5, -0.33], [-0.5, -0.33]]
# 机器人轮廓边缘
footprint_padding: 0.00
# tf坐标转换时最大容忍的时间
transform_tolerance: 2.0
# 地图类型
map_type: costmap

always_send_full_costmap: true  #true

# 障碍地图层 需要开启
obstacle_layer:
 enabled: True
 # 只能设置为0或1,用来更新地图上的代价值,一般设置为1。
 combination_method: 1
 # false->地图上只分为致命碰撞区域和自由区域。
 # true->地图上分为致命碰撞,自由区域和未知区域。
 track_unknown_space: true
 # 机器人检测障碍物的最大范围
 # 超过该范围的障碍物,并不进行检测,只有靠近到该范围内才把该障碍物当作影响路径规划和移动的障碍物;
 obstacle_range: 2.5
 # 实时清除代价地图上的障碍物的最大范围,更新可自由移动的空间数据。
 # 假如设置该值为3米,那么就意味着在3米内的障碍物,本来开始时是有的,但是本次检测却没有了,那么就需要在代价地图上来更新,将旧障碍物的空间标记为可以自由移动的空间。
 raytrace_range: 3.5
 # 膨胀半径
 inflation_radius: 0.035

# 观察来源
# 设置导航中所使用的传感器,这里可以用逗号形式来区分开很多个传感器,例如激光雷达,碰撞传感器,超声波传感器等。
 observation_sources: laser_scan_sensor
 # making->是否这个观察用来标记障碍物
 # clearing->是否这个观察用来清除空闲空间
 laser_scan_sensor: {data_type: LaserScan, topic: volcano/Sick_LMS_291/laser_scan/layer0, marking: true, clearing: true}

# 静态地图层
static_layer:
  enabled:              true
  map_topic:            "map"

footpoint:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3pWse4RU-1610947342263)(1.png)]

inflation_radius:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YL4QVaL5-1610947342265)(2.png)]

global_costmap_params

# 全局代价地图
global_costmap:
  global_frame: map
  robot_base_frame: base_link
  # 全局代价地图更新频率,一般全局代价地图更新频率设置的比较小
  update_frequency: 3.0
  # 发布速率
  publish_frequency: 2.0
  # 配置是否使用map_server提供的地图来初始化,一般全局地图都是静态的,需要设置为true
  static_map: true
 
  # 坐标系之间的转换可以忍受的最大延时
  transform_tolerance: 1.0
  #在global_costmap中使用下面三个插件来融合三个不同图层,分别是static_layer、obstacle_layer和inflation_layer,合成一个master_layer来进行全局路径规划。
  plugins:
    - {name: static_layer,     type: "costmap_2d::StaticLayer"}
    - {name: obstacle_layer,   type: "costmap_2d::VoxelLayer"}
    - {name: inflation_layer,  type: "costmap_2d::InflationLayer"}

  inflation_layer:
    enabled:              true
    
    cost_scaling_factor:  10.0  # exponential rate at which the obstacle cost drops off (default: 10)
    # 膨胀半径
    inflation_radius:     0.50  # max. distance from an obstacle at which costs are incurred for planning paths.

local_costmap_params

local_costmap:
  global_frame: map
  robot_base_frame: base_link
  update_frequency: 3.0
  publish_frequency: 2.0
  # 局部代价地图需要在机器人移动时检测周围是否有新增的障碍物
  static_map: false
  # 机器人移动时保证机器人在滚动窗口中心
  rolling_window: true
  width: 5.0  #滚动窗口宽度
  height: 5.0 #滚动窗口高度
  # 地图的分辨率,该分辨率可以从加载的地图相对应的配置文件中获取到
  resolution: 0.02
  transform_tolerance: 2.0
  # 在局部代价地图中,不需要静态地图层,因为我们使用滚动窗口来不断的扫描障碍物,所以就需要融合两层地图(inflation_layer和obstacle_layer)即可,融合后的地图用于进行局部路径规划
  plugins:
   #- {name: static_layer,        type: "costmap_2d::StaticLayer"}
   - {name: obstacle_layer,      type: "costmap_2d::ObstacleLayer"}
   - {name: inflation_layer,     type: "costmap_2d::InflationLayer"}

  inflation_layer:
    enabled:              true
    cost_scaling_factor:  10.0  # exponential rate at which the obstacle cost drops off (default: 10)
    inflation_radius:     0.035  # max. distance from an obstacle at which costs are incurred for planning paths.


Reference:https://www.cnblogs.com/flyinggod/p/12742889.html

<think>好的,我需要帮助用户找到关于ROS导航栈的配置方法或教程。用户提到了ROS导航栈的配置教程,或者如何配置ROS Navigation。首先,我需要回顾用户提供的三个引用内容,看看是否有相关的配置信息。 引用[1]提到了ROS Navigation Stack的基本架构和组件之间的通信,但没有具体的配置步骤。引用[2]提到了一个完整的包“two_wheeled_robot”,用户可以用作模板,并提到需要按照教程进行。引用[3]详细描述了导航系统的各个组件,如global_planner、local_planner、costmap等,还提到了需要配置的参数,比如地图服务器、定位、传感器数据等。这可能涉及到配置文件的设置,如costmap参数、规划器参数等。 接下来,我需要整理配置ROS导航栈的一般步骤。通常,配置ROS Navigation需要以下几个步骤:创建机器人URDF模型、配置传感器数据(如激光雷达、里程计)、设置全局和局部costmap参数、配置全局和局部规划器、启动导航节点等。用户提供的引用[2]中的“two_wheeled_robot”包可以作为模板,引用[3]中的描述则给出了各个组件的协作方式,这些都可以作为配置的参考。 另外,用户可能需要具体的教程链接或步骤说明。由于引用中没有直接给出外部链接,我需要根据常见的ROS导航配置教程来总结步骤,并结合引用内容中的要点。例如,引用[3]提到需要global_costmap和local_costmap的配置,可能需要调整YAML文件中的参数,如障碍物层、膨胀层等。同时,需要确保传感器数据正确发布到指定话题,比如激光雷达的scan话题,里程计的odom话题等。 可能还需要考虑定位部分,如amcl的配置,这在引用[3]中也有提及。此外,导航栈中的move_base节点是关键,需要配置其参数文件,包括全局和局部规划器的选择,如使用默认的NavFn作为全局规划器,Teb Local Planner或DWA作为局部规划器。 最后,用户可能需要验证配置的正确性,比如通过启动导航节点并在RViz中进行测试,观察costmap的生成情况,路径规划是否正常等。如果遇到问题,可能需要检查各个节点的发布话题是否匹配,参数是否正确设置等。 总结下来,配置ROS导航栈的步骤包括模型准备、传感器配置、参数文件设置、启动和测试等阶段,每个阶段需要参考官方文档或现有模板,如引用[2]提到的包,同时结合引用[3]中的组件协作说明进行调整。</think>### ROS导航配置方法及教程 配置ROS导航栈需要完成以下步骤,结合传感器集成、参数调优和功能验证: #### 1. **机器人模型与传感器配置** - **URDF/SDF建模** 使用URDF或SDF定义机器人底盘、传感器(如激光雷达、IMU)的物理属性及坐标系关系。需确保各传感器话题与导航栈要求一致,例如激光雷达数据通常发布在`/scan`话题[^3]。 - **示例代码片段**: ```xml <!-- 激光雷达配置示例 --> <joint name="laser_joint" type="fixed"> <parent link="base_link"/> <child link="laser_frame"/> </joint> <link name="laser_frame"> <sensor type="ray" name="lidar"> <topic>/scan</topic> </sensor> </link> ``` #### 2. **导航参数文件配置** - **Costmap配置** 全局与局部代价地图需分别设置`global_costmap_params.yaml`和`local_costmap_params.yaml`,定义障碍物层、膨胀半径等参数。引用[3]指出,局部地图会动态更新以处理临时障碍物。 ```yaml # global_costmap_params.yaml示例 global_costmap: plugins: ["static_layer", "obstacle_layer"] obstacle_layer: observation_sources: scan scan: {data_type: LaserScan, topic: /scan} ``` - **规划器配置** 全局规划器默认使用`NavFN`,局部规划器可选`DWA`或`TEB`。需在`base_local_planner_params.yaml`中调整路径评分权重和动力学约束。 #### 3. **定位与传感器融合** - **AMCL配置** 自适应蒙特卡洛定位(AMCL)需设置初始位姿误差范围和粒子数。引用[3]强调里程计(`odom`话题)与激光雷达数据融合对定位可靠性的重要性。 ```yaml amcl: min_particles: 100 max_particles: 5000 odom_frame_id: odom ``` #### 4. **启动导航栈** - **集成启动文件** 创建`move_base.launch`文件,加载所有参数并启动`move_base`节点。引用[2]提供的`two_wheeled_robot`包可作为模板。 ```xml <launch> <node pkg="move_base" type="move_base" name="move_base"> <rosparam file="$(find your_pkg)/config/costmap_params.yaml" command="load" ns="global_costmap"/> <rosparam file="$(find your_pkg)/config/costmap_params.yaml" command="load" ns="local_costmap"/> <rosparam file="$(find your_pkg)/config/local_planner_params.yaml" command="load"/> </node> </launch> ``` #### 5. **功能验证与调试** - **RViz可视化** 加载预定义RViz配置,检查代价地图覆盖范围、全局路径规划效果。 - **典型问题排查** - 若路径规划失败,检查`global_costmap`是否正确加载静态地图。 - 定位漂移时,验证AMCL的`odom`与`tf`树是否对齐。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

锡城筱凯

你的鼓励是我创造的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值