搭积木ROS与navigation教程——概述
navigation是ROS的⼆维导航功能包,简单来说,就是根据输⼊的⾥程计等传感器的信息流和机器⼈的全局位置,通过导航算法,计算得出安全可靠的机器⼈速度控制指令。
代码⾥⽂件较多,进⾏梳理后如下图
map_rver:地图服务器,主要功能是保存地图和导⼊地图。
costmap_2d:可以⽣产代价地图,以及提供各种相关的函数。
robot_po_ekf:扩展卡尔曼滤波器,输⼊是⾥程计、IMU、VO中的任意两个或者三个,输出是⼀个融合之后的po。
localization:这⾥是两个定位⽤的package。fake_localization⼀般是仿真⽤的,amcl才是实际定位⽤的package。
痒疹怎么治疗>溪水清清
nav_core:这⾥⾯只有三个⽂件,对应的是全局路径规划、局部路径规划、recovery_action的通⽤接⼝定义,具体功能实现则是在各个对应的规划器package⾥。
move_ba:这⾥实现的是整个导航的流程。什么时候调⽤全局路径规划、什么时候调⽤局部路径规划、什么时候调⽤
recovery_action都是这个package管的。就是下图中间⽅框⾥做的事情,可以说是整个navigation stack的核⼼。
总体框架图中可以看到,
⼀、move_ba
move_ba提供了ROS导航的配置、运⾏、交互接⼝,它主要包括两个部分:
食品安全宣传海报(1) 全局路径规划(global planner):根据给定的⽬标位置进⾏总体路径的规划.
在ROS的导航中,⾸先会通过全局路径规划,计算出机器⼈到⽬标位置的全局路线。这⼀功能是navfn这个包实现的。
navfn通过Dijkstra最优路径的算法,计算costmap上的最⼩花费路径,作为机器⼈的全局路线。将来在算法上应该还会加⼊A*算法。
(2) 本地实时规划(local planner):根据附近的障碍物进⾏躲避路线规划。
本地的实时规划是利⽤ba_local_planner包实现的。该包使⽤Trajectory Rollout 和Dynamic Window approaches算法计算机器⼈每个周期内应该⾏驶的速度和⾓度(dx,dy,dtheta velocities)。
ba_local_planner这个包通过地图数据,通过算法搜索到达⽬标的多条路经,利⽤⼀些评价标准(是否会撞击障碍物,所需要的时间等等)选取最优的路径,并且计算所需要的实时速度和⾓度。刘国钧中学
⼆、map_rver
map_rver提供map_rver ROS节点,它提供地图数据作为⼀个ROS服务器。
也提供map_saver命令⾏功能,能动态⽣成保存到⽂件中的地图。 包中通过⼯具操作的地图是以成堆的⽂件存储的。YAML⽂件描述地图的元数据,并命名image⽂件。Image⽂件编码占⽤数据。
Image 以对应单元的颜⾊描述世界中每个单元的占⽤状态。⽩⾊单元格表⽰⾃由,⿊⾊单元格表⽰占⽤,两种颜⾊之间的单元表⽰未知。接受彩⾊图像,但颜⾊值平均为灰度值。
三、costmap_2d
costmap_2d包提供了⼀种2D代价地图的实现⽅案,该⽅案从实际环境中获取传感器数据,构建数据的2D或3D占⽤栅格(取决于是否使⽤基于体素的实现),以及基于占⽤栅格和⽤户定义膨胀半径的2D代价地图的膨胀代价。
该包也⽀持基于map_rver初始化代价地图,基于滚动窗⼝的代价地图,以及基于参数化订阅和配置传感器主题。
costmap_2d包提供了⼀种可配置框架来维护机器⼈在占⽤栅格应该如何导航的信息。代价地图使⽤传感器数据和来⾃静态地图的信息,通过costmap_2d :: Costmap2DROS对象来存储和更新实际环境中的障碍物信息。
初始化costmap_2d :: Costmap2DROS对象的⽅法主要有两种。
第⼀种是使⽤⽤户⽣成的静态地图进⾏初始化(有关构建地图的⽂档,请参阅map_rver包)。在这种情况下,代价地图被初始化来匹配与静态地图提供的宽度,⾼度和障碍物信息。这种⽅式通常与定位系统(如AMCL)结合使⽤,允许机器⼈在地图坐标系注册障碍物,并且当基座在环境中移动时可以根据传感器数据更新其代价地图。
胖哥哥
u的形容词
第⼆种是给出⼀个宽度和⾼度,并将rolling_window参数设置为true。当机器⼈在移动时,rolling_window参数将机器⼈保持在代价地图的中⼼。然⽽当机器⼈在给定区域移动得太远时,障碍物信息将会被从地图中丢弃。这种⽅式的配置最常⽤于⾥程计坐标系中,机器⼈只关注局部区域内的障碍物
四、robot_po_ekf
Robot Po EKF 包⽤于评估机器⼈的3D位姿,基于来⾃不同来源的位姿测量信息。
它使⽤带有6D(3D position and 3D orientation)模型信息的扩展卡尔曼滤波器来整合来⾃轮式⾥程计,IMU传感器和视觉⾥程计的数据信息。
基本思路就是⽤松耦合⽅式融合不同传感器信息实现位姿估计。
五、acml头发拉直
amcl是⼀种机器⼈在2D中移动的概率定位系统。 它实现了⾃适应(或KLD采样)蒙特卡罗定位⽅法,该⽅法使⽤粒⼦滤波器来针对已知地图跟踪机器⼈的位姿。
参考资料: