导航实现之路径规划
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: 0.12
obstacle_range: 3.0
raytrace_range: 3.5
inflation_radius: 0.2
cost_scaling_factor: 3.0
map_type: costmap
observation_sources: scan
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
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
width: 3
height: 3
resolution: 0.05
Copy
-
base_local_planner_params
基本的局部规划器参数配置,这个配置文件设定了机器人的最大和最小速度限制值,也设定了加速度的阈值。
TrajectoryPlannerROS:
max_vel_x: 0.5
min_vel_x: 0.1
max_vel_theta: 1.0
min_vel_theta: -1.0
min_in_place_vel_theta: 1.0
acc_lim_x: 1.0
acc_lim_y: 0.0
acc_lim_theta: 0.6
xy_goal_tolerance: 0.10
yaw_goal_tolerance: 0.05
holonomic_robot: false
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)"/>
<include file="$(find navigation)/launch/amcl.launch" />
<include file="$(find navigation)/launch/path.launch" />
<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,看到全局路径规划和局部路径规划的可视化结果
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)