ROS-建图-栅格坐标系

ROS-建图-栅格坐标系

一、栅格地图参数

1.1 像素坐标系

下图是一个机器人在实际环境中绘制的二维地图,图片中左下角是地图原点(map.info.origin),在原点上已经标明了这个地图的三维坐标轴,其中红色的代表x轴方向,绿色代表y轴方向。

// 此时栅格地图原点为(0, 0)
grid_map.info.origin.x = 0;
grid_map.info.origin.y = 0;

ROS-建图-栅格坐标系_第1张图片
在ROS的地图中,地图是以像素标记的,每一个像素(map.info.resolution)代表0.05m,即地图的分辨率为0.05m。

例如,下图上的星星,他的位置在像素层面上的坐标为(400, 150),则x:400像素,y:150像素。这个机器人距离地图原点的实际距离是:横坐标方向为400 * 0.05=20m,纵坐标方向为150 * 0.05=7.5m。

ROS-建图-栅格坐标系_第2张图片

1.2 地图原点

我们在设置栅格地图原点时,地图的原点并不一定在左下角,可以将栅格地图原点设置在所建栅格地图中间任一位置上。

// 将栅格地图原点设置在整张图的(-20, -20)位置
grid_map.info.origin.x = -20;
grid_map.info.origin.y = -20;

ROS-建图-栅格坐标系_第3张图片
此时,这张图的地图原点就跑到了地图图片里,如果车辆处在原点左下角的位置,那么车辆的X和Y像素坐标就会为负值。

1.3 栅格地图消息格式

在ROS中,地图的类型是nav_msgs/OccupancyGrid,每个像素代表的长度以及地图的原点都被定义在了消息结构体之中。

// 栅格地图消息
std_msgs/Header header
nav_msgs/MapMetaData info
time map_load_time
float32 resolution         			// 分辨率
geometry_msgs/Pose origin  			// 原点坐标
geometry_msgs/Quaternion orientation
int8[] data    						// 地图像素信息

// 栅格地图参数
grid_map.info.resolution = 0.5;     // 分辨率
grid_map.info.origin.x = -20;		// 栅格地图原点x
grid_map.info.origin.y = -20;		// 栅格地图原点y
grid_map.info.width = 100;			// 栅格地图宽,定义尺寸
grid_map.info.height = 100;			// 栅格地图高,定义尺寸	

更多的栅格地图消息类型

你可能感兴趣的:(自动驾驶定位,自动驾驶建图,自动驾驶,c++,人工智能)