地图
基础知识
- 地图的数据按照行优先的顺序,从栅格矩阵的(0,0)位置开始排列
- 栅格里的障碍物占据值范围是从0到100,如果栅格里的障碍物状况位置,则栅格数值为-1
发布自定义地图
注意事项
- 依赖项里添加nav_msgs
代码示例
C++
#include <ros/ros.h>
#include <nav_msgs/OccupancyGrid.h>
int main(int argc, char *argv[])
{
ros::init(argc, argv, "map_pub_node");
ros::NodeHandle nh;
ros::Publisher pub = nh.advertise<nav_msgs::OccupancyGrid>("/map",10);
ros::Rate r(1);
while (ros::ok()){
nav_msgs::OccupancyGrid msg;
msg.header.frame_id = "map";
msg.header.stamp = ros::Time::now();
msg.info.origin.position.x = 1;
msg.info.origin.position.y = 1;
msg.info.resolution = 1.0;
msg.info.width = 4;
msg.info.height = 2;
msg.data.resize(4*2);
msg.data[0] = 100;
msg.data[1] = 100;
msg.data[2] = 0;
msg.data[3] = -1;
pub.publish(msg);
r.sleep();
}
return 0;
}
Python
#!/usr/bin/env python3
#coding=utf-8
import rospy
from nav_msgs.msg import OccupancyGrid
if __name__ == "__main__":
rospy.init_node("map_pub_node")
pub = rospy.Publisher("/map", OccupancyGrid, queue_size=10)
rate = rospy.Rate(1)
while not rospy.is_shutdown():
msg = OccupancyGrid()
msg.header.frame_id = "map"
msg.header.stamp = rospy.Time.now()
msg.info.origin.position.x = 0
msg.info.origin.position.y = 0
msg.info.resolution = 1.0
msg.info.width = 4
msg.info.height = 2
msg.data = [0]*4*2
msg.data[0] = 100
msg.data[1] = 100
msg.data[2] = 0
msg.data[3] = -1
pub.publish(msg)
rate.sleep()
map_server
保存地图
rosrun map_server map_saver [--occ <threshold_occupied>] [--free <threshold_free>] [-f <mapname>] map:=/your/costmap/topic
rosrun map_sever map_saver -f 文件名
加载地图
rosrun rosrun map_server map_server mymap.yaml
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人