ROS自学实践(11):利用map_server功能包创建自己的地图
1.前言
在进行路径规划与仿真时,往往需要对我们的算法进行验证,有很多方式来进行,比如利用QT可视化界面进行仿真,如下图是自己利用QGraphicsview建立的一个仿真环境。也可以利用ROS中的地图工具来进行,本文尝试使用ROS的map_server工具包进行地图的建立。
2.流程
(1)安装navigation功能包,或者单独安装map_server功能包
安装功能包时如果找不到功能包,添加一下中科大的镜像站,然后再下载
sudo sh -c . /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list sudo apt-get update sudo apt-get install ros-kinetic-navigation
(2)用画图软件创建一个地图
(3)创建ros功能包,添加map文件夹
常规创建ros功能包,这里不再赘述
在根目录下新建ROS工作空间,命名pathplanning,并建立子文件夹src mkdir -p pathplanning/src 进入src文件目录,初始化工作空间 cd src catkin_init_workspace 退回pathplanning目录,编译工作空间 cd .. catkin_make 设置环境变量 source devel/setup.bash 创建laser_receive功能包 catkin_create_pkg pathplanning std_msgs roscpp rospy
进入到pathplanning/src/pathplanning目录下
mkdir map
将map.png文件放到map文件夹下
(4)配置map.yaml文件
在map文件夹下创建map.yaml文件添加[1]
image: testmap.png resolution: 0.1 origin: [0.0, 0.0, 0.0] occupied_thresh: 0.65 free_thresh: 0.196 negate: 0
-
image:指定包含occupancy data的image文件路径; 可以是绝对路径,也可以是相对于YAML文件的对象路径 。 resolution:地图分辨率,单位是meters/pixel 。 origin:图中左下角像素的二维位姿,如(x,y,yaw),yaw逆时针旋转(yaw=0表示没有旋转)。系统的很多部分现在忽略yaw值。注意fix_frame是map occupied_thresh:像素占用率大于这个阈值则认为完全占用。 free_thresh:像素占用率比该阈值小被则认为完全自由。 negate:无论白色或黑色,占用或自由,语义应该是颠倒的(阈值的解释不受影响)。 negate : Whether the white/black free/occupied semantics should be reversed (interpretation of thresholds is unaffected)
(5)显示地图
在map文件夹下打开终端
rosrun map_server map_server map.yaml
如果遇到闪退,一般是,map.yaml文件里面加了多余的换行和或空格,删掉即可。 启动rviz 看来800×600图片不小啊,在进行路径规划的时候,太大的地图对算法的实时性要求会很高。
(6)简单地接收一下地图
#include <ros/ros.h> #include "nav_msgs/OccupancyGrid.h" void callback(const nav_msgs::OccupancyGridConstPtr& map) { int height = map->info.height; int width = map->info.width; std::cout << "receive map!" <<"height: " << height << " width: "<<width<<std::endl; } int main(int argc, char** argv) { ros::init(argc, argv, "map_receiver"); ros::NodeHandle n; ros::Subscriber sub = n.subscribe("map",100,callback); std::cout << "hahah" << std::endl; ros::spin(); return 0; }
参考文献: [1]https://www.ncnynl.com/archives/201708/1897.html600