You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »


概述

Slamware模块最重要的功能即为定位导航以及建图,在此过程中,会涉及大量的对地图和坐标的操作,因此,有必要针对SDK里面所用到的坐标系统以及地图数据,进行详细的介绍。 本文将首先介绍Slamware模块中所建的地图,然后针对SDK中的一些机器人运动相关的接口进行说明。

地图坐标及数据说明

以UI commander windows客户端为例,红色箭头所指为地图坐标X轴正向, 绿色箭头所指为Y轴正向。蓝色点为坐标零点。红色四边形箭头为机器人所在位置,其中,箭头方向为机器人的朝向。下图左上角的SLAMWARE SDP [-0.59,-0.44, -157.37] 分别是 [X轴坐标, Y轴坐标, 机器人偏转角度yaw]。 默认情况下,机器人开机的位置,即为地图零点位置。机器人朝向为X轴正向,为0度,角度逆时针增加。

以下内容将以如何从Slamware模块中获取整张地图数据并将mapdata转换成bmp为例,详细介绍地图的相关概念,

Tip

示例代码来自windows SDK中的map2bmp参考代码

Map2bmp
sdp = SlamwareCorePlatform::connect(opt_sdpIPAddress, opt_sdpPort);   
     
rpos::core::RectangleF knownArea = sdp.getKnownArea(MapTypeBitmap8Bit, rpos::features::location_provider::EXPLORERMAP); //获得地图已知区域

Map map = sdp.getMap(MapTypeBitmap8Bit, knownArea, rpos::features::location_provider::EXPLORERMAP);//根据地图已知区域,获得地图

bitmap_image mapBitmap(map.getMapDimension().x(), map.getMapDimension().y()); //根据已获得的地图尺寸,定义bmp

for (size_t posY = 0; posY < map.getMapDimension().y(); ++posY) //获取mapdata数据,并转化成bmp
{
   for (size_t posX = 0; posX < map.getMapDimension().x(); ++posX)
   {
      rpos::system::types::_u8 cellValue = 128 + map.getMapData()[posX + (map.getMapDimension().y()-posY-1) * map.getMapDimension().x()];
      mapBitmap.set_pixel(posX, posY, cellValue, cellValue, cellValue);
   }
}




  • No labels