ros android 栅格地图,ROS——SLAM实时更新显示栅格地图之nav_msgs::GridCells

文章目录

GridCells概述

OccupancyGrid使用注意事项

创建工程

在Rviz中实时现实栅格地图

结束语

GridCells概述

GridCells是另外一种创建栅格地图的方法,与nav_msgs::OccupancyGrid栅格地图不同的是:

1.GridCells栅格地图使用(x,y,z)表示被占用的栅格,可用构建多层栅格。OccupancyGrid栅格地图只能构建2D栅格地图,使用(x,y)表示被占用的栅格。

2.GridCells栅格地图每个格子只有被占用和未被占用两种状态。OccupancyGrid栅格地图每个格子使用占用率表示,颜色从白到黑,用范围在[0,100]的概率表示占用率,-1代表未知区域。

官方数据类型解释如下:

消息定义格式如下:

std_msgs/Header header

float32 cell_width

float32 cell_height

geometry_msgs/Point[] cells

OccupancyGrid使用注意事项

1.向Rviz发送的数据中一定要包含frame_id

map.header.frame_id="cell";

2.栅格地图中每个小格对应的宽和高为

cells.cell_height=1; // 长

cells.cell_width=1; // 宽

3.栅格地图中每个小格有两种状态,占有和未占有,使用GridCell的时候若向Rviz发送某栅格的坐标(x,y,z),则证明该栅格被占用;若未被占用则不用发送,占用即有障碍物。

4.地图中栅格的坐标(x,y,z)由以下格式表示,高可用不为0,这是栅格呈现分层现象。

geometry_msgs::Point obstacle;

obstacle.x = 1;

obstacle.y = 1;

obstacle.z = 1;

cells.cells.push_back(obstacle);

创建工程

1.创建工程所在文件夹

mkdir grid

cd grid

mkdir src

2.创建ROS工程的grid包

catkin_create_pkg grid std_msgs rospy roscpp

3.在创建好的ROS工程内建立新的gridCell.cpp文件,并添加如下程序

#include

#include

#include

int main(int argc,char **argv)

{

ros::init(argc,argv,"gridCell");

ros::NodeHandle nh;

ros::Publisher pub = nh.advertise<:gridcells>("/gridCell", 1);;

nav_msgs::GridCells cells;

cells.header.frame_id="cell";

cells.cell_height=1;

cells.cell_width=1;

cells.cells.resize(3);

cells.cells[0].x=1;

cells.cells[0].y=1;

cells.cells[0].z=0;

geometry_msgs::Point obstacle;

obstacle.x = 1;

obstacle.y = 1;

obstacle.z = 1;

cells.cells.push_back(obstacle);

obstacle.x = 2;

obstacle.y = 2;

obstacle.z = 1;

cells.cells.push_back(obstacle);

obstacle.x = 2;

obstacle.y = 3;

obstacle.z = 1;

cells.cells.push_back(obstacle);

obstacle.x = 2;

obstacle.y = 4;

obstacle.z = 1;

cells.cells.push_back(obstacle);

while (ros::ok())

{

pub.publish(cells);

}

}

4.修改CMakeLists.txt文件,在文件中添加如下程序

add_executable(gridCell

src/gridCell.cpp

)

add_dependencies(gridCell ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

target_link_libraries(gridCell

${catkin_LIBRARIES}

)

5.编译工程

catkin_make

6.运行工程

6.1.首先运行

roscore

6.2.运行新建的结点

source devel/setup.bash

rosrun grid gridCell

在Rviz中实时现实栅格地图

1.打开Rviz

rosrun rviz rviz

ros android 栅格地图,ROS——SLAM实时更新显示栅格地图之nav_msgs::GridCells_第1张图片

2.创建栅格地图

点击左下角添加按钮Add,在打开的Create visualization栏中选择GridCell,并点击OK键确认。

ros android 栅格地图,ROS——SLAM实时更新显示栅格地图之nav_msgs::GridCells_第2张图片

3.打开Map下拉列表中的属性信息,在Topic话题后面输入/选择/gridMap话题,即可看到删咯地图在Rviz中现实的结果。此时虽然会现实栅格地图,但是会出现Error提示,因此修改Global Option属性中的Fixed Frame对应程序中的cell,这时错误提示消失,正常显示删咯地图。

注释

Global Option属性中的Fixed Frame对应程序中向Rviz发布消息的消息头中的frame_id,即

map.header.frame_id="cell";

Map属性中的Topic对应程序中向Rviz发布消息的话题名,即

ros::Publisher pub = nh.advertise<:occupancygrid>("/gridCell", 1);

ros android 栅格地图,ROS——SLAM实时更新显示栅格地图之nav_msgs::GridCells_第3张图片

你可能感兴趣的:(ros,android,栅格地图)