栅格地图转代价地图,栅格地图转cv::mat图片,代价地图转换为cv::Mat

     栅格地图转代价地图,栅格地图转cv::mat图片,代价地图转换为cv::Mat

//订阅一个全局大地图,做障碍和珊格地图的提取
ros::Subscribe costmap_sub_ = private_nh.subscribe<nav_msgs::OccupancyGrid>("move_base/global_costmap/costmap", 1,
                                                             &global_planner::grid_callback, this);
ros::Subscribe costmap_updated_sub_ = private_nh.subscribe<map_msgs::OccupancyGridUpdate>(
                "move_base/global_costmap/costmap_updates", 1,&global_planner::grid_updated_callback, this);

订阅栅格地图:

    //订阅一个全局大地图,做障碍和珊格地图的提取
    void global_planner::grid_callback(nav_msgs::OccupancyGridConstPtr const& msg) {
        grid_ready_ = false;
        grid_ = *msg;
        frame_id_ = msg->header.frame_id;
        std::cout << "1.订阅一个全局大地图,做障碍和珊格地图的提取 frame_id_
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
occupancyGrid栅格地图转换cv::Mat图片的步骤如下: 1. 获取栅格地图信息,包括地图的宽度、高度和分辨率等信息。 2. 创建一个空的cv::Mat图片,大小为栅格地图的宽度和高度。 3. 遍历栅格地图中的每个栅格,将其转换为像素点,并在cv::Mat图片中填充相应的像素值。这里可以使用不同的颜色表示不同的栅格状态,比如黑色表示障碍物,白色表示自由空间。 4. 最后将cv::Mat图片保存为图片文件或显示在屏幕上。 下面是一个示例代码,可以将ROS中的occupancyGrid栅格地图转换cv::Mat图片: ```cpp #include <ros/ros.h> #include <nav_msgs/OccupancyGrid.h> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> void occupancyGridToMat(const nav_msgs::OccupancyGrid& occupancy_grid, cv::Mat& image) { int width = occupancy_grid.info.width; int height = occupancy_grid.info.height; double resolution = occupancy_grid.info.resolution; double origin_x = occupancy_grid.info.origin.position.x; double origin_y = occupancy_grid.info.origin.position.y; image.create(height, width, CV_8UC1); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int index = x + y * width; int value = occupancy_grid.data[index]; if (value == 100) { image.at<uchar>(y, x) = 0; // black represents obstacles } else if (value == 0) { image.at<uchar>(y, x) = 255; // white represents free space } else { image.at<uchar>(y, x) = 127; // gray represents unknown space } } } } int main(int argc, char** argv) { ros::init(argc, argv, "occupancy_grid_to_mat"); ros::NodeHandle nh; // subscribe to the occupancy grid topic nav_msgs::OccupancyGrid::ConstPtr occupancy_grid_ptr; occupancy_grid_ptr = ros::topic::waitForMessage<nav_msgs::OccupancyGrid>("map", nh); // convert occupancy grid to cv::Mat image cv::Mat image; occupancyGridToMat(*occupancy_grid_ptr, image); // display the image cv::imshow("Occupancy Grid", image); cv::waitKey(0); return 0; } ``` 在这个示例中,我们订阅ROS中的地图话题,并将其转换cv::Mat图片。然后,我们将图片显示在屏幕上。你可以将代码中的显示部分替换为保存图片到文件的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_无往而不胜_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值