gmapping导航建地图

    xiaoxiao2021-03-29  46

    概述

    http://wiki.ros.org/gmapping

    Gmapping包包含OpenSlamGmapping的一个ROS封装。Gmapping ROS节点slam_gmapping提供基于激光的SLAM(同时定位和创建地图)。依靠移动机器人收集的激光和位姿数据,使用slam_gmapping可以创建2维栅格地图。

    外部文档

    主要是一个第三方包。

    硬件需求

    使用slam_gmapping,需要移动机器人提供里程计数据,并且水平安装固定激光测距仪。slam_gmapping节点试图转换每个扫描输入数据到odom(里程计)tf坐标系。见"Required tf transforms"更多需要的转换。

    例子

    机器人用激光扫描发布创建地图在base_scan话题上:

     

    [html]  view plain  copy  print ? rosrun gmapping slam_gmapping scan:=base_scan  

    节点

    slam_gmapping

    节点slam_gmapping采用sensor_msgs/LaserScan消息,并且构建地图(nv_msgs/OccupancyGrid)。地图可以通过topicservice检索。

    订阅话题

    tf(tf/tfMessage)

          转换需要涉及激光坐标系,基座坐标系和里程计坐标系。

    scan(sensor_msgs/LaserScan)

        从激光扫描创建地图

    发布话题

     map_metadata (nav_msgs/MapMetaData)

         从这个话题获得地图数据,这个话题是被锁存的,并定期更新。

    map (nav_msgs/OccupancyGrid)

        从这个话题获得地图数据,这个话题是被锁存的,并定期更新。

    ~entropy (std_msgs/Float64)

        机器人位姿分布熵的估计(值越高表示越大的不确定性)

    服务

    dynamic_map(nav_msgs/GetMap)

        调用这个服务来获取地图数据。

    参数

    http://wiki.ros.org/gmapping

    · inverted_laser (string, default: "false")

       (REMOVED in 1.1.1; transform data is used instead) 激光是朝上安装(扫描是逆时     针), 还 是朝下安装 (扫描是顺时针)?

    · throttle_scans (int, default: 1)

       激光雷达每扫描一周跳过多少扫描。

    · base_frame (string, default: "base_link")

       移动基座的坐标系。

    · map_frame (string, default: "map")

       地图坐标系。

    · odom_frame (string, default: "odom")

       里程计系统的坐标系。

    · map_update_interval (float, default: 5.0)

       地图更新的时间间隔(单位:seconds)。更新间隔越小,计算负荷越大。

    · maxUrange (float, default: 80.0)

       激光雷达最大可用距离。光束被裁减成这个值。

    · sigma (float, default: 0.05)

       用作结束点匹配。

    · kernelSize (int, default: 1)

       在内核内寻找一个对应。

    · lstep (float, default: 0.05)

       平移的最优步长。

    · astep (float, default: 0.05)

       旋转的最优步长。

    · iterations (int, default: 5)

       扫描匹配的迭代次数。

    · lsigma (float, default: 0.075)

       波束的sigma,用来计算似然估计。 

    · ogain (float, default: 3.0)

       评估似然的增益,用来平滑重采样的影响。

    · lskip (int, default: 0)

       每次扫描跳过的波束。

    · minimumScore (float, default: 0.0)

       评价扫描匹配良好结果的最低分数。 

    · srr (float, default: 0.1)

       平移函数在平移时的里程计误差 (rho/rho)。

    · srt (float, default: 0.2)

       旋转函数在平移时的里程计误差 (rho/theta)

    · str (float, default: 0.1)

       平移函数在旋转时的里程计误差 (theta/rho)

    · stt (float, default: 0.2)

       旋转函数在旋转时的里程计误差 (theta/theta)

    · linearUpdate (float, default: 1.0)

       机器人平移这么远,处理一次扫描。

    · angularUpdate (float, default: 0.5)

       机器人旋转这个角度,处理一次扫描。

    · temporalUpdate (float, default: -1.0)

       如果上一次扫描处理比更新时间长,处理一次扫描。值小于0,将会关闭更新相关    的时间。

    · resampleThreshold (float, default: 0.5)

       基于重采样阈值的Neff

    · particles (int, default: 30)

       滤波器的粒子数。

    · xmin (float, default: -100.0)

       初始地图尺寸。

    · ymin (float, default: -100.0)

       初始地图尺寸。

    · xmax (float, default: 100.0)

           初始地图尺寸。

    · ymax (float, default: 100.0)

       初始地图尺寸。

    · delta (float, default: 0.05)

       处理参数 (地图的分辨率)。

    · llsamplerange (float, default: 0.01)

       似然的平移采样距离。

    · llsamplestep (float, default: 0.01)

       似然的平移采样步长。

    · lasamplerange (float, default: 0.005)

       似然的角度采样距离。

    · lasamplestep (float, default: 0.005)

       似然的角度采样步长。

    · transform_publish_period (float, default: 0.05)

       转换发布间隔,单位:seconds

    · occ_thresh (float, default: 0.25)

       Gmapping占用值的阈值。有大一些的占用值的单元格,被视为占用。

    · maxRange (float)

       传感器的最大距离。

     

    需要的tf转换

    <the frame attached to incoming scans> → base_link

             通常是一个固定值, 由robot_state_publisher或 tf static_transform_publisher.定期广播。

    base_link → odom

          通常有里程计系统提供(例如,移动机器人的驱动)

    提供的tf转换

    map → odom

         在地图坐标系中机器人位姿的当前估计。

    http://wiki.ros.org/pr2_controllers/Tutorials/Using the base controller with odometry and transform information

    转载请注明原文地址: https://ju.6miu.com/read-664932.html

    最新回复(0)