【Move base navigation】使用rolling_window解决在规划过程中出现地图中的未知区域被吃掉的情况

在我们使用local_costmap局部代价地图的参数的时候,我们发现了rolling_window这个选项,也就是滑动窗口,这个东西的作用我后面讲,我先讲一下我遇到的问题,我们在参加智能车航天物流组的时候,我们发现我们所规定的全局规划中的点于点之间的导航线是由dwa功能包自动生成的,它会严格按照确定没有障碍物的最短路径进行规划,这就出现了一个问题,在跑第一圈的时候我们的地图还是完全的“未知”的状态,而随着跑过去之后,地图会被轻微的篡改,会有一道像羊拉屎一样的,白色的,确定没有障碍物的空白小格子留在车跑过的路线上,而第二圈点和点之间规划出的线会弯弯曲曲严格的贴合着这些白色的格子,这就让我们的车子跑起来一直左右打方向盘,虽然勉强可以保持直行,但是随着越跑越多之后,摆的会越来越大,很容易撞墙。而将rolling_window参数设置为true之后,就可以避免这种问题,这时全局规划不会记录之前跑过的地方,也就不会留下像羊拉屎一样的痕迹来干扰我们的规划,让我们后面的规划和第一次的规划一样好。

global_costmap:

global_costmap:
#    footprint: [[0.25,0.2],[0.25,-0.2],[-0.4,-0.2],[-0.4,0.2]]   #[[0.325,0.225],[0.325,-0.225],[-0.325,-0.225],[-0.325,0.225]]
    footprint: [[0.01,0.01],[0.01,-0.01],[-0.01,-0.01],[-0.01,0.01]]
    footprint_padding: 0.01
    transform_tolerance: 1.0
    update_frequency: 50.0 #5.0
    publish_frequency: 50.0

    global_frame: map
    robot_base_frame: base_link
    resolution: 0.05

    rolling_window: true
    track_unknown_space: true

    plugins:
        - {name: static,    type: "costmap_2d::StaticLayer"}
        - {name: inflation, type: "costmap_2d::InflationLayer"}

    static:
        map_topic: /map
        subscribe_to_updates: true

    sensor:
        observation_sources: laser_scan_sensor
        laser_scan_sensor: {sensor_frame: base_link, data_type: LaserScan, topic: /scan, marking: true, clearing: true}

    inflation:
        inflation_radius: 0.8
        cost_scaling_factor: 10.0

local_costmap:

local_costmap:
    footprint: [[0.25,0.2],[0.25,-0.2],[-0.4,-0.2],[-0.4,0.2]]    #[[0.325,0.225],[0.325,-0.225],[-0.325,-0.225],[-0.325,0.225]] 
    footprint_padding: 0.01
    transform_tolerance: 1.0
    update_frequency: 50.0
    publish_frequency: 50.0

    global_frame: map
    robot_base_frame: base_link
    resolution: 0.05
    static_map: false
    rolling_window: true
    width: 2.0
    height: 2.0

    plugins:            
        - {name: sensor,    type: "costmap_2d::ObstacleLayer"}
        - {name: inflation, type: "costmap_2d::InflationLayer"}

    sensor:
        observation_sources: laser_scan_sensor
        laser_scan_sensor: {sensor_frame: laser, data_type: LaserScan, topic: scan, marking: true, clearing: true}

    inflation:
        inflation_radius: 1.0 #2.5
        cost_scaling_factor: 10.0 #8.0

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在ROS使用`move_base`包和`nav_msgs/OccupancyGrid`话题,你需要进行以下步骤: 1. 首先,确保已经安装并配置了`move_base`包。你可以通过运行以下命令来安装它: ``` sudo apt-get install ros-<distro>-move-base ``` 其,`<distro>`是你正在使用ROS发行版(如`melodic`或`noetic`)。 2. 在你的工作空间创建一个新的包,例如`my_navigation`,并添加`move_base`作为依赖项。在终端执行以下命令: ``` cd <your_workspace>/src catkin_create_pkg my_navigation move_base ``` 然后,在`my_navigation`包的`package.xml`文件添加以下行: ```xml <build_depend>move_base</build_depend> <exec_depend>move_base</exec_depend> ``` 3. 在你的工作空间编译包: ``` cd <your_workspace> catkin_make ``` 4. 确保你有一个地图供`move_base`使用。你可以使用`map_server`包将地图加载到`nav_msgs/OccupancyGrid`话题。首先,将地图文件(如`map.yaml`和`map.pgm`)放入你的工作空间的`maps`文件夹。然后,在终端运行以下命令: ``` rosrun map_server map_server <path_to_map.yaml> ``` 这将在`/map`话题上发布地图。 5. 配置`move_base`参数。你可以创建一个`move_base`配置文件(如`move_base_params.yaml`),并在其设置相关参数,例如机器人的底盘参数、全局规划器和局部规划器的参数等。确保将配置文件放入你的工作空间的`config`文件夹。 6. 启动`move_base`节点。在终端运行以下命令: ``` roslaunch my_navigation move_base.launch ``` 这将启动`move_base`节点,并开始订阅`nav_msgs/OccupancyGrid`话题以获取地图数据,并发布导航目标。 7. 现在,你可以发布一个导航目标点到`move_base`节点的`move_base_simple/goal`话题。你可以使用RViz或编写一个ROS节点来发布导航目标。 以上是使用`move_base`包和`nav_msgs/OccupancyGrid`话题进行导航的基本步骤。你可以根据自己的需求进行进一步的配置和定制化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Black__Jacket

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值