ROS导航实现之路径规划

文章介绍了如何在ROS中使用move_base功能包进行路径规划,包括构建实时更新的代价地图,编写launch文件,设置配置参数,以及集成map_server、amcl和rviz进行导航测试。重点在于全局和本地代价地图的配置以及路径规划的实现过程。
摘要由CSDN通过智能技术生成

导航实现之路径规划

  move_base 功能包提供了基于动作(action)的路径规划实现,move_base 可以根据给定的目标点,控制机器人底盘运动至目标位置,并且在运动过程中会连续反馈机器人自身的姿态与目标点的状态信息,move_base主要由全局路径规划与本地路径规划组成。

  move_base已经被集成到了navigation包,可以通过如下命令安装:

sudo apt install ros-<ROS版本>-navigation

(1)构建适用于机器人导航的代价地图

  由于导航过程中,障碍物信息是可变的,导航时机器人需要实时获取当前的障碍物信息,且机器人在靠近障碍物边缘时,可能会由于惯性、机器人体的不规则外形,在转弯等过程中发生碰撞,SLAM构建的静态地图在导航中是不可以直接使用的,需要构建实时获取数据和障碍物膨胀后的代价地图。

代价地图:

  • 全局代价地图(全局路径规划)

  • 本地代价地图(本地路径规划)

(2)使用move_base功能包编写路径规划相关得launch文件

  复制调用模板,将功能包修改为自己功能包得名字

<launch>

    <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen" clear_params="true">
        <rosparam file="$(find 功能包)/param/costmap_common_params.yaml" command="load" ns="global_costmap" />
        <rosparam file="$(find 功能包)/param/costmap_common_params.yaml" command="load" ns="local_costmap" />
        <rosparam file="$(find 功能包)/param/local_costmap_params.yaml" command="load" />
        <rosparam file="$(find 功能包)/param/global_costmap_params.yaml" command="load" />
        <rosparam file="$(find 功能包)/param/base_local_planner_params.yaml" command="load" />
    </node>

</launch>

(3)设置配置文件

  在功能包里新建文件夹命名为param,将上文中得launch文件里涉及的配置文件名新建到这个文件夹中

  粘贴标准例程中的代码,把各种坐标系名称和机器人几何参数修改到与自己的项目匹配。

  • costmap_common_params.yaml

  该文件是move_base 在全局路径规划与本地路径规划时调用的通用参数,包括:机器人的尺寸、距离障碍物的安全距离、传感器信息等。配置参考如下:

#机器人几何参,如果机器人是圆形,设置 robot_radius,如果是其他形状设置 footprint
robot_radius: 0.12 #圆形
# footprint: [[-0.12, -0.12], [-0.12, 0.12], [0.12, 0.12], [0.12, -0.12]] #其他形状

obstacle_range: 3.0 # 用于障碍物探测,比如: 值为 3.0,意味着检测到距离小于 3 米的障碍物时,就会引入代价地图
raytrace_range: 3.5 # 用于清除障碍物,比如:值为 3.5,意味着清除代价地图中 3.5 米以外的障碍物


#膨胀半径,扩展在碰撞区域以外的代价区域,使得机器人规划路径避开障碍物
inflation_radius: 0.2
#代价比例系数,越大则代价值越小
cost_scaling_factor: 3.0

#地图类型
map_type: costmap
#导航包所需要的传感器
observation_sources: scan
#对传感器的坐标系和数据进行配置。这个也会用于代价地图添加和清除障碍物。例如,你可以用激光雷达传感器用于在代价地图添加障碍物,再添加kinect用于导航和清除障碍物。
scan: {sensor_frame: laser, data_type: LaserScan, topic: scan, marking: true, clearing: true}
Copy
  • global_costmap_params.yaml

  该文件用于全局代价地图参数设置:

global_costmap:
  global_frame: map #地图坐标系
  robot_base_frame: base_footprint #机器人坐标系
  # 以此实现坐标变换

  update_frequency: 1.0 #代价地图更新频率
  publish_frequency: 1.0 #代价地图的发布频率
  transform_tolerance: 0.5 #等待坐标变换发布信息的超时时间

  static_map: true # 是否使用一个地图或者地图服务器来初始化全局代价地图,如果不使用静态地图,这个参数为false.
Copy
  • local_costmap_params.yaml

  该文件用于局部代价地图参数设置:

local_costmap:
  global_frame: odom #里程计坐标系
  robot_base_frame: base_footprint #机器人坐标系

  update_frequency: 10.0 #代价地图更新频率
  publish_frequency: 10.0 #代价地图的发布频率
  transform_tolerance: 0.5 #等待坐标变换发布信息的超时时间

  static_map: false  #不需要静态地图,可以提升导航效果
  rolling_window: true #是否使用动态窗口,默认为false,在静态的全局地图中,地图不会变化
  width: 3 # 局部地图宽度 单位是 m
  height: 3 # 局部地图高度 单位是 m
  resolution: 0.05 # 局部地图分辨率 单位是 m,一般与静态地图分辨率保持一致
Copy
  • base_local_planner_params

  基本的局部规划器参数配置,这个配置文件设定了机器人的最大和最小速度限制值,也设定了加速度的阈值。

TrajectoryPlannerROS:

# Robot Configuration Parameters
  max_vel_x: 0.5 # X 方向最大速度
  min_vel_x: 0.1 # X 方向最小速速

  max_vel_theta:  1.0 # 
  min_vel_theta: -1.0
  min_in_place_vel_theta: 1.0

  acc_lim_x: 1.0 # X 加速限制
  acc_lim_y: 0.0 # Y 加速限制
  acc_lim_theta: 0.6 # 角速度加速限制

# Goal Tolerance Parameters,目标公差
  xy_goal_tolerance: 0.10
  yaw_goal_tolerance: 0.05

# Differential-drive robot configuration
# 是否是全向移动机器人
  holonomic_robot: false

# Forward Simulation Parameters,前进模拟参数
  sim_time: 0.8
  vx_samples: 18
  vtheta_samples: 20
  sim_granularity: 0.05

(4)新建launch文件,将需要的map_server服务、amcl服务、rviz启动集成

<launch>
    <!-- 设置地图的配置文件 -->
    <arg name="map" default="nav.yaml" />
    <!-- 运行地图服务器,并且加载设置的地图-->
    <node name="map_server" pkg="map_server" type="map_server" args="$(find navigation)/map/$(arg map)"/>
    <!-- 启动AMCL节点 -->
    <include file="$(find navigation)/launch/amcl.launch" />

    <!-- 运行move_base节点 -->
    <include file="$(find navigation)/launch/path.launch" />
    <!-- 运行rviz -->
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find navigation)/rviz/navigation_test.rviz" />

</launch>

(5)启动gazebo仿真环境,运行集成后的launch文件,即可实现导航

(6)测试,可以看到gazebo和rviz都启动了,添加rviz组件:RobotModel、Map、Posearray、odometry

在这里插入图片描述

  通过菜单栏上方的2D Nav Goal设置目标点,会发现小车会自行朝目标点运动
  此外,我们还可以通过继续选择map的不同话题,得到全局和局部的代价地图(如下图所示),也可以选择添加Path,看到全局路径规划和局部路径规划的可视化结果

在这里插入图片描述

路径规划

  • 7
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
ROS导航中的局部路径规划介绍 ROS是Robot Operating System的缩写,是一款开源的机器人操作系统,它提供了可重用的驱动程序、库和工具,方便机器人的开发和使用。ROS导航堆栈是ROS中的一个重要部分,它为机器人提供了从环境感知到路径规划的完整解决方案。 路径规划ROS导航中非常重要的一部分。在ROS导航中,路径规划被分为两个阶段,全局路径规划和局部路径规划。全局路径规划通常使用A*、Dijkstra、RRT等算法生成一条从起点到终点的路径。而局部路径规划则是在机器人当前位置附近进行的,它通过实时感知环境来规划一条可行的、避开障碍物的路径。 局部路径规划算法可以分为六大类:代价地图、机器学习、一阶优化、二阶优化、近似优化和搜索算法。代价地图方法是利用障碍物和地形信息构建一张能够描述环境的代价地图,通过寻找代价低的路径来进行规划。机器学习方法则是通过训练网络来实现路径规划,典型的例子是深度强化学习。而优化方法则是利用数学优化方法找到一条最优或次优的路径。近似优化算法是利用近似算法来打破规划问题的难题,比如快速拉格朗日多项式(FastLMP)算法。搜索算法则是依据搜索算法的优化目标寻找最优或次优路径,例如A*搜索算法。 在ROS导航中,局部路径规划通常使用代价地图方法,其中最为流行的是DWA(Local Dynamic Window Approach)算法。DWA算法首先根据传感器输入构建代价地图,代价地图描述了环境的状态,包括自由空间、障碍物、边界等等。接下来DWA算法使用机器人的运动学模型生成一系列备选速度命令。随后,DWA算法使用这些备选速度命令在代价地图上进行评估,选取代价最小的速度命令作为最终的运动命令。最后,在选取得到的速度命令下,机器人使用路径追踪算法沿着路径向目标点前进。 总之,ROS导航中局部路径规划机器人在环境中线性移动的关键,通过选择合适的路径规划算法,可以让机器人穿过狭窄通道、避开障碍物,并能够快速、有效地完成任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

芝士就是力量蛙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值