• 0321-ROS-带地图导航


    带语义模型地图静态的导航

    前言

    • 背景模型是语义地图,但是ROS-NAV需要一张栅格地图,所以想办法转换一下
    • 此外还需要做一张符合P3AT自带地图格式的ArMap地图
    • 重新设置ROS-Nav的全局代价地图配置

    参考

    ros-mapserver
    ArMap Map file format
    Resize the static map
    setup map yaml file
    Aria Docs: Maps
    ArMap file formats

    学习内容

    ROS-MapServer

    地图格式

    • 多种文件共同决定地图数据,YAML文件描述地图的元数据meta-data,图形文件与YAML文件同名,图形文件描述栅格数据

    图像格式

    • 一般用灰度图像来制作地图,纯黑色为致命障碍物,纯白色为自由控件,中间灰度值为不确定,但是可以由一个阈值来决定是否将其识别为障碍物,阈值处理由MapServer内部处理
    • 判断灰度像素是否有较高风险使用了如下概率计算公式:occ = (255 - color_avg) / 255.0, where color_avg is the 8-bit value that results from averaging over all channels
    • 图像是通过SDL_Image库读入的,该库支持的文件就是支持的地图图像数据,包括bmp, git, jpg, png, tif等

    yaml格式

    • yaml是一些技术参数
    image: testmap.png
    # 使用相对或绝对路径
    resolution: 0.1
    # 分辨率 0.1m/pixel
    origin: [0.0, 0.0, 0.0]
    # 图像的左下角(边界)在地图中的坐标
    occupied_thresh: 0.65
    # 判断像素格是否为障碍的阈值
    free_thresh: 0.196
    # 判断是否为自由空间的阈值
    negate: 0
    # 一般情况下,黑色为障碍物,白色为自由空间
      20  # m   Don't forget to create a file with 2000 pixel width
    height: 20  # m   Don't forget to create a file with 2000 pixel height

    global_costmap.yaml

    global_costmap:
       global_frame: /map
       robot_base_frame: /base_link
       update_frequency: 3.0
       publish_frequency: 0.0  # For a static global map, there is generally no need to continually publish it
       static_map: true        # This parameter and the next are always set to opposite values. The global map is usually static so we set static_map to true
       rolling_window: false   # The global map is generally not updated as the robot moves to we set this parameter to false
       resolution: 0.01
       transform_tolerance: 1.0
       map_type: costmap
         20 # m   Don't forget to create a file with 2000 pixel width
       height: 20 # m   Don't forget to create a file with 2000 pixel width

    命令行

    rosrun map_server map_server mymap.yaml
    <!-- Run the map server -->
          <node name="map_server" pkg="map_server" type="map_server" args="/tmp/my_map_waalre.yaml" />

    ArMap

    格式

    • 因为临时想到不用将语义模型转化为ArMap了,所以此处省略

    使用Mapper3修改地图

    • 添加forbidden line, forbidden area, home point, home area

    ROS-Map 生成

    新图

    • CAD显示,整个环境为 148876mmX117600mm,即148.876mX117.6m
    • 则width=148.876; height=117.600
    • 建议修正为整数:
    • 设置resolution=0.05m/pixel
    • 2977.52: 2352
    • 图片像素为2978:2352
    • 修正尺寸为: 148.9; height: 117.6

    新图分辨率增大

    • 设置resolution = 0.1m/pixel
    • 1488.76: 1176
    • 像素为:1489:1176

    老图sim

    • 1417.4cmX1187.9cm; 141.74mX118.79m
    • width=141.74; height=118.79
    • 修为整数:
    • 设置resolution=0.05m/pixel
    • 2834.8: 2375.8
    • 图片像素为2835:2376
    • 修正尺寸为: 141.75 height: 118.8

    老图yaml

    image: 4F-sim.png
    resolution: 0.050000
    origin: [0, 0, 0]
    negate: 0
    occupied_thresh: 0.65 # 无关紧要
    free_thresh: 0.196 # # 无关紧要
    
     141.75
    height: 118.8

    PS修图

    • LV绘制的语义地图像素较低,用PS将其放大到指定分辨率
    • 工具栏-图像-图像大小-指定像素-重定图像像素:两次立方较平滑(适用于扩大)

      注意:Windows自带画图程序,也可以修改图片分辨率,但是并没有将已有像素图形放大,而是简单扩展了图片边界,使得图形外围全部是白色像素

    重新配置ROS

    global costmap

    tf和消息设计

    • 为了方便控制map->odom的关系,即进行机器人全局定位,决定不使用fake amcl或者amcl
    • 如果要使用amcl或者fake amcl,则需要对ROSARIA进行修改,为其添加move_to接口。
      • 使用amcl对于语义绘制的地图没有意义,因为其几何要素过于简单,使用配准算法还是有问题的,SLAM算法生成的地图比较起来就好得多,包含的细节都是激光传感器生成的。
    • 最后决定修改ARIA中的publisher,把原来的zs_worldframe改成/map。
      • 后来想了想,如果改成/map的话,proxy也有很多有关坐标系的东西也需要改变,应该这么做,把mapserver发送的主题名称改了,直接改成zsworld_frame.解决OK!
    • 先看看fake_amcl在RViz中定位方不方便,暂时把zs_worldframe与odom之间的tf给禁用了,如果定位不方便然后再进行大改代码。
  • 相关阅读:
    SQL中常用的数据类型及简介
    静态方法与非静态方法
    遍历多维数组
    遍历一个三维数组
    冒泡排序-方法2
    关于二分查找分
    冒泡排列-——方法1
    AngularJS 循环查询数组
    AngularJs 指令
    给定一个年月值,返回上个年月值,格式为:YYYY.MM string类型
  • 原文地址:https://www.cnblogs.com/lizhensheng/p/11117543.html
Copyright © 2020-2023  润新知