• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

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

人工智能 懒小象 1939次浏览 0个评论

文章目录 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 <iostream>
#include <ros/ros.h>
#include <nav_msgs/GridCells.h>
int main(int argc,char **argv)
{
    ros::init(argc,argv,"gridCell");
    ros::NodeHandle nh;
    ros::Publisher pub = nh.advertise<nav_msgs::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——SLAM实时更新显示栅格地图之nav_msgs::GridCells   2.创建栅格地图 点击左下角添加按钮Add,在打开的Create visualization栏中选择GridCell,并点击OK键确认。
ROS——SLAM实时更新显示栅格地图之nav_msgs::GridCells 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<nav_msgs::OccupancyGrid>("/gridCell", 1);

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


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明ROS——SLAM实时更新显示栅格地图之nav_msgs::GridCells
喜欢 (0)

您必须 登录 才能发表评论!

加载中……