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()
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值