ros 栅格地图保存与发布

Posted 怪皮蛇皮怪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ros 栅格地图保存与发布相关的知识,希望对你有一定的参考价值。

序言

书接上文(哈哈哈,已经过了好久才又继续做这个,一会贴个上文链接)

ros pcd 地图转栅格地图

保存栅格地图

通过map server来保存地图
两个需要注意的参数
map:=后面放ros中topic的名字,在octomap生成的栅格地图就叫/projected_map
-f 后面接的是保存成的yaml和pgm文件名字与地址

rosrun map_server map_saver map:=/projected_map -f map

发布栅格地图

rosrun map_server map_server map.yaml /map:=/gobal_map

依然是map server
/map:=/gobal_map 是话题重映射,你们可加可不加,我是因为**/map**话题本身已经发布了,所以换个名字

同时需要注意,map server 发布的地图的frame id是map

frame id是map!!!

这很重要

注意事项

注意,使用octomap保存的地图,有可能会出现

MongoDB_"Error parsing YAML config file: yaml-cpp: error at line 3, column34

啥啥啥的问题
解决方案是** line 3, column34**这个位置


注意到原点坐标的z轴坐标是-nan,怎么看都不对劲,所以手动给了0

自动修改frame id

rosrun map_server map_server map.yaml /map:=/gobal_map _frame_id:="/world"

手动修改frame id(懒得删了)

目前还没去看map server 的 frame id 如何设置,所以先手动加个代码修改frame id
(我为什么要修改frame id)因为autoware 的map坐标系是局部地图的cost map,我这里发布的是全局的栅格地图,全局的栅格地图对应的是/points_map的world,所以需要修改frame id为world

import rospy
from  nav_msgs.msg import OccupancyGrid
import time 


class Transfer():
    def __init__(self):
        #初始化节点
        rospy.init_node('transfer_frameid_of_gobal_map')
        self.map_pub = rospy.Publisher('/new_gobal_map', OccupancyGrid, queue_size=100)
        rospy.Subscriber('/gobal_map', OccupancyGrid, self.callback_lidar)

    def callback_lidar(self,data):
        #重设frame_id
        data.header.frame_id="/world"
        self.map_pub.publish(data)

if __name__ == '__main__':
    Transfer()
    rospy.spin()

以上是关于ros 栅格地图保存与发布的主要内容,如果未能解决你的问题,请参考以下文章

ros 栅格地图保存与发布

pcd 地图转 栅格地图

0321-ROS-带地图导航

《动手学ROS2》10.6导航地图概述

ROS学习记录15SLAM仿真学习4——使用gmapping建图与保存地图

ROS学习记录15SLAM仿真学习4——使用gmapping建图与保存地图