实现一个自定义地图
创建功能包
cd catkin_ws/src
catkin_create_pkg map_pkg rospy roscpp nav_msgs
创建节点
map_pub_node.cpp
#include <ros/ros.h>
#include <nav_msgs/OccupancyGrid.h>
int main(int argc, char *argv[])
{
ros::init(argc,argv,"map_sub_node");
ros::NodeHandle n;
ros::Publisher pub = n.advertise<nav_msgs::OccupancyGrid>("/map",10);
ros::Rate loop(10);
while(ros::ok()){
nav_msgs::OccupancyGrid msg;
msg.header.frame_id = "map";
msg.header.stamp = ros::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.resize(msg.info.width*msg.info.height);
msg.data[0] = 100;
msg.data[1] = 100;
msg.data[2] = 0;
msg.data[3] = -1;
pub.publish(msg);
loop.sleep();
}
return 0;
}
创建编译规则
add_executable(map_pub_node src/map_pub_node.cpp)
add_dependencies(map_pub_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(map_pub_node
${catkin_LIBRARIES}
)
运行节点在rviz中显示地图
rosrun map_pkg map_pub_node
rviz
添加坐标和map,订阅/map
红色箭头是x轴
绿色箭头是y轴
蓝色箭头是轴
改变:
msg.info.origin.position.x = 1.0 ;
地图向x轴方向移动了一个格子