赞
踩
目录
学习笔记来源于:ROS机器人开发与实践(古月居)
导航的关键是机器人定位和路径规划两大部分
在上述两个功能包的基础上,ROS提供一系列完整的导航框架:
机器人发布必要的传感器信息和导航的目标位置,ROS即可完成导航功能。在该框架中,move_base功能包提供导航的主要运行、交互接口。amcl功能包保障路径的准确性,对自己所处的位置进行精确定位。
首先,导航功能包采集机器人的传感器信息,达到实时避障的效果。机器人通过ROS发布sensor_msgs/LaserScan或者是三维点云的信息
其次,导航功能包发布nav_msgs/Odometry格式的里程计信息,同时发布相应的TF变换
最后,导航功能包的输出是geometry_msgs/Twist格式控制命令,机器人通过这些指令完成任务
路径规划主要有下面的两大规划器组成:
自主定位:机器人在任意状态下都可以推算自己在地图中的所处的位置
ROS提供一种自适应(或kld采样)的蒙特卡罗定位方法(amcl),这是一种概率统计的方法,针对已有地图使用粒子滤波器跟踪一个机器人的姿态
里程计可以帮助机器人定位,而amcl也可以实现机器人定位,但是两者具有区别:
导航地图使用两种代价地图存储周围环境的障碍信息:
两种代价地图需要使用一些共用的或独立的配置文件:通用配置文件、全局规划配置文件和本地规划配置文件呢
代价地图用来存储周围环境的障碍信息,其中需要申明地图关注的机器人传感器消息,以便于地图信息更新。针对两种代价地图通用的配置选型,创建名为costmap_common_params.yaml的配置文件,解析如下:
- #这两个参数用来设置代价地图中障碍物的相关阀值
- obstacle_range: 2.5#用来设置障碍物的最大范围,若设置为2.5,则表在2.5m范围内检测到的障碍信息才会在地图中更新
- raytrace_range: 3.0#用来设置检测自由空间的最大范围,设置为3,.0,表示在3m的范围内机器人将根据传感器的信息清楚范围内的自由空间
-
-
- #footprint: [[0.175, 0.175], [0.175, -0.175], [-0.175, -0.175], [-0.175, 0.175]]
- #footprint_inflation: 0.01
- robot_radius: 0.175
- inflation_radius: 0.1#这个是机器人和障碍物保持的最小安全距离为0.1m以上
- #这个footprint参数设置机器人在二维地图上的占用的面积,参数以机器人的中心作为坐标原点
- #要是机器人外形是圆形,则需要设置机器人的外形半径robot_radius
-
-
- 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}
- #observation_sources参数列出了代价地图需要关注的所有的传感器信息,每个传感器信息都会在后面列出来
- #data_type表示激光数据或者是点云数据使用的消息
- #topic:表示传感器发布的话题的名称
- #marking和clearing:表示是否需要使用传感器的实时信息来添加或清除代价地图中的障碍物信息
全局规划配置文件用于存储配置全局代价地图的参数,命名为global_costmap_params.yaml,代码详解:
- global_costmap:
- global_frame: map
- #用来表示全局代价地图需要在哪个参考系下运行,这里选择了map参考系
-
- robot_base_frame: base_footprint
- #参数用来表示代价地图可以参考的机器人本体的坐标系
-
- update_frequency: 1.0
- #参数用来决定全局地图信息更新的频率,单位是Hz
-
- publish_frequency: 1.0
-
- static_map: true
- #参数用来决定代价地图是否需要根据map_server提供的地图信息进行初始化,如果不需要使用已有的地图这最好设置为false
-
- rolling_window: false
- resolution: 0.01#分辨率
- transform_tolerance: 1.0#转换容忍
- map_type: costmap#地图类型
本地规划配置文件用来存储代价地图的配置参数,命名为local_costmap_params.yaml,代码详解如下:
- local_costmap:
- #下面的这几个参数和全局规划配置文件中的参数相同
- global_frame: map
- robot_base_frame: base_footprint
- update_frequency: 3.0
- publish_frequency: 1.0#参数用于设置代价地图发布可视化信息的频率,单位是Hz
- static_map: true
-
- rolling_window: false
- #参数是用来设置在机器人移动过程中是否可以需要滚动窗口以保持机器人在中心位置
-
- width: 6.0
- height: 6.0
- resolution: 0.01
- #这三个参数分别设置代价地图的长(米)高(米)和分辨率(米/格)虽然分辨率设置和静态地图的不同,但是一般条件下是相同的
-
- transform_tolerance: 1.0
本地规划器base_local_planner的主要作用是,根据规划的全局路径计算发布给机器人的速度控制指令。
该规划根据机器人的规格配置相关参数,创建名为base_local_planner_params.yaml的配置文件,代码如下:
- controller_frequency: 3.0#控制频率
- recovery_behavior_enabled: false
- clearing_rotation_allowed: false
-
- TrajectoryPlannerROS:#声明机器人本地规划采用Trajectory Rollout算法
- #下面是设置算法需要用到的机器人的速度、加速度阀值等参数
- max_vel_x: 0.5
- min_vel_x: 0.1
- max_vel_y: 0.0 # zero for a differential drive robot(0是为差动机器人设置的)
- min_vel_y: 0.0
- max_vel_theta: 1.0
- min_vel_theta: -1.0
- min_in_place_vel_theta: 0.4
- escape_vel: -0.1
- acc_lim_x: 1.5
- acc_lim_y: 0.0 # zero for a differential drive robot(0是为差动机器人设置的)
- acc_lim_theta: 1.2
-
- holonomic_robot: false
- yaw_goal_tolerance: 0.1 # about 6 degrees(偏航的角度容忍度大约是6°)
- xy_goal_tolerance: 0.05 # 5 cm
- latch_xy_goal_tolerance: false
- pdist_scale: 0.4
- gdist_scale: 0.8
- meter_scoring: true
-
- heading_lookahead: 0.325
- heading_scoring: false
- heading_scoring_timestep: 0.8
- occdist_scale: 0.05
- oscillation_reset_dist: 0.05
- publish_cost_grid_pc: false
- prune_plan: true
-
- sim_time: 1.0
- sim_granularity: 0.05
- angular_sim_granularity: 0.1
- vx_samples: 8
- vy_samples: 0 # zero for a differential drive robot
- vtheta_samples: 20
- dwa: true
- simple_attractor: false
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。