ROS导航——配置机器人的导航功能(move_base包)

中间部分是整个导航的核心部分,由move_base功能包提供

配置如下:

<launch>

<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen" clear_params="true">

<rosparam file="$(find mbot_navigation)/config/mbot/costmap_common_params.yaml" command="load" ns="global_costmap" />

<rosparam file="$(find mbot_navigation)/config/mbot/costmap_common_params.yaml" command="load" ns="local_costmap" />

<rosparam file="$(find mbot_navigation)/config/mbot/local_costmap_params.yaml" command="load" />

<rosparam file="$(find mbot_navigation)/config/mbot/global_costmap_params.yaml" command="load" />

<rosparam file="$(find mbot_navigation)/config/mbot/base_local_planner_params.yaml" command="load" />

</node>

</launch>

base_local_planner_params.yaml配置详解如下

controller_frequency: 3.0 —— 每多少秒我们需要更新一次路径规划?把这个值舍得太高会使性能不足的CPU过载。对于一台普通的计算机来说,设定为3到5就可以运行的相当不错了

recovery_behavior_enabled: false

clearing_rotation_allowed: false

TrajectoryPlannerROS:

max_vel_x: 0.5——机器人的最大线速度,单位是m/s。对于室内机器人来说0.5就已经很快了,所以保守地选择设为0.3

min_vel_x: 0.1——机器人的最小线速度

max_vel_y: 0.0 # zero for a differential drive robot

min_vel_y: 0.0

max_vel_theta: 1.0——机器人的最大旋转速度,单位是弧度/秒。不要把这个值设的太高,不然机器人会错过它的目标方向

min_vel_theta: -1.0——机器人最小的旋转速度

min_in_place_vel_theta: 0.5——机器人最小的原地旋转速度,单位是弧度/秒

escape_vel: -0.1——机器人逃离时的速度,单位是m/s。请注意这个值必须是负数,这样机器人才能反向移动

acc_lim_x: 1.5——在x方向上的最大线加速度

acc_lim_y: 0.0 # zero for a differential drive robot ——在y轴上的最大线加速度。对于差速驱动(非完整驱动)机器人,设为0,这样机器人就只能在x方向上线性运动(和旋转)了

acc_lim_theta: 1.2——最大角加速度

holonomic_robot: false——除非你有一个全方向驱动机器人,否则一律设为false

yaw_goal_tolerance: 0.1 # about 6 degrees——至多距离目标方向的误差(单位为弧度)是多少?把这个值设得太小的话可能会导致机器人在目标附近徘徊

xy_goal_tolerance: 0.1 # 10 cm——至多距离目标位置的误差(单位为米)是多少?如果把值设得太小,你的机器人可能会不断地在目标位置附近调整。注意:不要把最大误差设定得比地图的分辨率还小,否则机器人会永不停息地在目标附近徘徊但永远到不了目标位置。

latch_xy_goal_tolerance: false

pdist_scale: 0.9——全局路径规划和到达目的位置之间的权重。这个参数比gdist_scale大时,机器人会更倾向于考虑全局路径规划

gdist_scale: 0.6——到达目的位置和全局路径规划之间的权重。这个参数比pdist_scale大时,机器人会更考虑到达目标位置,而不管这段路在全局路径规划中是否是必须的

meter_scoring: true

heading_lookahead: 0.325

heading_scoring: false

heading_scoring_timestep: 0.8

occdist_scale: 0.1——避开障碍物的权重

oscillation_reset_dist: 0.05

publish_cost_grid_pc: false

prune_plan: true

sim_time: 1.0——规划时需要考虑未来多长时间(单位为秒)呢?这个参数和下一个参数(dwa)一起极大地影响机器人往目标移动的路径

sim_granularity: 0.025

angular_sim_granularity: 0.025——在给定轨迹上的点之间采用的步长

vx_samples: 8

vy_samples: 0 # zero for a differential drive robot——探索x速度空间时要使用的样本数

vtheta_samples: 20——探索θ速度空间时要使用的样本数

dwa: true——在模拟未来的轨迹时是否用动态窗口方法(Dynamic Window Approach)

simple_attractor: false

costmap_common_params.yaml通用配置文件(这个文件夹只有两个参数是需要你立刻为你的机器人调整的)配置详解如下:

obstacle_range: 2.5——参数用来设置机器人检测障碍物的最大范围,设置为2.5意为在2.5米范围内检测到的障碍信息,才会在地图中进行更新。

raytrace_range: 3.0——参数用来设置机器人检测自由空间的最大范围,设置为3.0意为在3米范围内,机器人将根据传感器的信息,清除范围内的自由空间

footprint: [[0.10, 0.10], [0.10, -0.10], [-0.10, -0.10], [-0.10, 0.10]]——在列表中的每一个坐标代表机器人的边上的一点,机器人中心设为[0,0],测量单位是米。这在机器人周长上的点要不按照顺时针排列,要不按照逆时针排列

footprint_inflation: 0.01——机器人膨胀区域(个人猜测)

robot_radius: 0.10

inflation_radius: 0.05——地图上的障碍物的膨胀参数

max_obstacle_height: 0.6

min_obstacle_height: 0.0

observation_sources: scan——列出了代价地图需要关注的所有传感器信息,每一个传感器信息都将在后边列出详细信息

scan: {data_type: LaserScan, topic: /scan, marking: true, clearing: true, expected_update_rate: 0}——sensor_frame标识传感器的参考系名称,data_type表示激光数据或者点云数据使用的消息类型,topic_name表示传感器发布的话题名称,而marking和clearing参数用来表示是否需要使用传感器的实时信息来添加或清楚代价地图中的障碍物信息。(这里没有sensor_frame,原因不清,有待验证)

global_costmap_params.yaml全局规划配置文件(详细配置如下):

这个文件夹中的一些参数,需要根据机器人CPU的计算能力和你的工作站与机器人之间的网络情况来实验得到的

global_frame: map——对于全局代价地图,我们用map框架来作为global框架

robot_base_frame: base_footprint——这个通常不是/base_link就是/base_footprint。对于TurtleBot应设为/base_footprint

update_frequency: 5.0——根据传感器数据,全局地图更新的频率,单位为赫兹。这个数值越大,你的计算机的CPU负担会越重。特别对于全局地图

publish_frequency: 0——对于静态的全局地图来说,不需要不断发布

static_map: true——这个参数和下一个参数通常设为相反的值。全局地图通常是静态的,因此我们通常会把这个参数设为true

rolling_window: false——当我们把这个参数设为false时,全局地图不会在机器人移动的时候更新

resolution: 0.01

transform_tolerance: 5.0——指定在tf树中框架之间的转换的最大延时,单位为秒。对于典型的工作站和机器人之间的无线网络来说,与1.0秒同一级别的都可以工作的很好

map_type: costmap

local_costmap_params.yaml本地代价地图文件(详细配置如下):

local_costmap:

global_frame: odom——对于本地代价地图来说,我们使用odometry框架来作为global框架

robot_base_frame: base_footprint——这个通常不是/base_link就是/base_footprint。对于TurtleBot应设为/base_footprint

update_frequency: 3.0——根据传感器数据,本地地图更新的频率,单位为次/秒。对于很慢的计算机,你可能需要减小这个值

publish_frequency: 1.0——我们想更新已经发布出去的本地地图,所以我们会把这个值设为非零。一秒一次应该足够了,除非你的机器人要移动得更快。

static_map: false——这个参数和笑一个参数通常会设为相反的值。当本地地图需要根据传感器数据动态更新的时候,我们通常会把这个参数设为false

rolling_window: true——当我们把这个参数设为true时,局部地图会随机器人移动的时候更新(下面几个参数定义了本地地图更新用的滑动窗口)

width: 6.0——滑动地图的x维长度是多少米

height: 6.0——滑动地图的y维长度是多少米

resolution: 0.01——滑动地图的分辨率,单位为米。这个参数应该与YAML文件设置的地图分辨率匹配(在后续部分会解释)

transform_tolerance: 5.0——指定在tf树框架之间的转换,或可能会暂时中止的地图绘制过程中两者的最大延时,单位为秒。在一台速度较快、直连到机器人的计算机上,把这个值设定为1.0就能很好地工作了。但是在通过无线网络连接的较慢计算机上,这个延时容忍参数需要增大。当容忍度太低的时候,你将会在屏幕上看到这样的信息:

[WARN][1339438850.439571557]:Costmap2DROS transform timeout. Current time:1339438850.4395,global_pose stamp:1339438850.3170,tolerance:0.0001

猜你喜欢

转载自blog.csdn.net/weixin_37661634/article/details/81169741