turtlebot3 在gazebo仿真下 通过 gmapping slam 建立二维平面地图——全过程

本文涉及的产品
资源编排,不限时长
简介: turtlebot3 在gazebo仿真下 通过 gmapping slam 建立二维平面地图——全过程

ROS中的地图

ROS中的导航地图以2D网格的形式描述,每个网格包含一个值,这个值描述了这个网格有多少可能是被障碍物占据的。

地图文件以图像的形式存储,支持多种常见的格式(比如PNG、JPG、PGM)。虽然使用的是彩色图像,ROS在解析这些图片之前,会先把它们转换为灰度图像。这意味着每一个地图都可以使用任何的图像显示程序显示出来。

每个地图都有一个与之关联的YAML文件,这个文件包含一些额外的信息,比如分辨率(每个网格的长度,以米为单位)、地图的原点在哪里,判断网格是否有障碍物的阈值。

image: map.pgm
resolution: 0.1
origin: [0.0,0.0,0.0]
occupied_thresh: 0.65
free_thresh: 0.196
negate: 1

上面的YAML文件表示
图像文件存储在map.pgm文件中,
每个网格表示真实环境中一个边长为10cm的正方形,
原点在(0,0,0)处,
如果一个网格的值超过了像素最大值的65%,那么就认为这个网格有障碍物。
如果一个网格的值小于像素最大值的19.6%,那么就认为这个网格是空闲的。
negate 就是把像素值反转。255-像素值 。
为什么反转:在没有障碍物的地方值更小,有障碍物的地方值大,也就是黑色表示没有障碍物,白色表示有障碍物。和人理解冲突,就反转下,黑色表示有障碍物,白色表示没有障碍物。

使用rosbag记录数据

rosbag 可以帮助记录消息,而且可以重放这些消息。
这对调试算法也是有用得,可以向算法中反复注入相同得数据。
可以用rosbag记录下机器人传感器得数据,然后使用这些记录下来得数据测试代码。

当前rosbag 得功能不仅仅局限于记录和重放数据

rosbag record

为了记录消息,使用rosbag 得record功能,并制定一系列需要记录得话题名字。

例如为了记录scan和tf话题上发送得所有消息,需要运行:

$ rosbag record scan tf

这将所有消息存储到一个文件中,文件名得格式是 YYYY-MM-DD-HH-mm-ss.bag 这是rosbag开始运行得时间。这保证每个包文件都是一个独一无二得名字。

可以使用 -O或-output-name 标志来更改输出文件得名字,
使用-o或-output-prefix标志来给文件名加前缀

例如

$ rosbag record -O foo.bag scan tf

会创建 名为 foo.bag 得包文件

$ rosbag record -o foo.bag scan tf

会创建名为 foo_2020_03_10_14_29_30.bag

也可以使用 -a 标志 记录所有正在发布得话题

rosbag play

可以使用play功能来播放之前记录得包。

这个功能有很多命令行参数,用来控制播放速度有多快,从文件得何处开始播放以及一些其它得东西。

$ rosbag play --clock foo.bag

这将会重放包文件foo.bag中记录得消息,就像是从一个ROS节点中发布得一样。如果指定得包文件多于1个,那么它们将会被顺序播放。

--clock 标志表示需要rosbag发布时间消息,这对于创建地图来说很重要。
注意此时发布得时间 是 从记录时刻开始得 , 此时最好别有其它发布时间得消息,否则时间会跳

创建地图

启动 turtlebot3 及world

roslaunch turtlebot3_gazebo turtlebot3_stage_2.launch

启动建模控制

 roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch 

这时候 turtlebot3 可以移动了

查看此时活跃得topic ,存在 /scan 和 /tf
在这里插入图片描述

下面使用rosbag 记录 这两个topic

$ rosbag record -O data_scan.bag /scan /tf

再按 Ctrl+C结束终端时,会在终端得路径上出现你 记录得包
在这里插入图片描述

$ rosbag info data_scan.bag

可以用这个查看建立得包得信息
在这里插入图片描述
现在可以建图了
首先要启动 roscore

使用这条指令 使 ROS使用记录下来得包文件中得时间戳

$ rosparam set use_sim_time ture

使用下面这条指令 启动 gmapping节点

$ rosrun gmapping slam_gmapping

提示这个错误

[ WARN] [1584192934.752228918]: MessageFilter [target=odom ]: Dropped 100.00% of messages so far. Please turn the [ros.gmapping.message_notifier] rosconsole logger to DEBUG for more information.

在这里插入图片描述
进行了 解决工作
解决方式记录

继续
使用下面这条指令 启动 gmapping节点

$ rosrun gmapping slam_gmapping

正常会有建图的打印信息
激光雷达的信息

-maxUrange 3.49 -maxUrange 3.49 -sigma 0.05 -kernelSize 1 -lstep 0.05 -lobsGain 3 -astep 0.05
-srr 0.1 -srt 0.2 -str 0.1 -stt 0.2
-linearUpdate 1 -angularUpdate 0.5 -resampleThreshold 0.5
-xmin -100 -xmax 100 -ymin -100 -ymax 100 -delta 0.05 -particles 30

处理的第一个数据

update frame 0
update ld=0 ad=0
Laser Pose= -0.0635836 3.14698e-06 -3.14156
m_count 0

处理的后面的数据

update frame 94
update ld=0.422216 ad=0.562223
Laser Pose= -0.519626 1.10899 0.461962
m_count 10
Average Scan Matching Score=353.008
neff= 29.8927

保存地图 ,执行下面的指令

$ rosrun map_server map_saver 

正常结果
在这里插入图片描述

可以看下该图片

在这里插入图片描述
实际场景:

在这里插入图片描述
哈哈!是一致的。

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
存储 前端开发 算法
激光SLAM:ALOAM---后端lasermapping地图栅格化处理与提取
不同于前端的scan-to-scan的过程,ALOAM的后端是scan-to-map的算法,具体来说就是把当前帧和地图进行匹配,得到更准确的位姿同时也可以构建更好的地图.由于是scan-to-map的算法,因此计算量会明显高于scan-to-scan的前端,所以后端通常处于一个低频的运行频率,但是由于scan-to-map的精度往往优于scan-to-scan.因此后端也有比前端更高的精度.为了提高后端的处理速度,所以要进行地图的栅格化处理
激光SLAM:ALOAM---后端lasermapping地图栅格化处理与提取
|
1月前
|
JavaScript API 图形学
(在线查看三维模型)在线CAD中创建三维建筑墙体
本文详细介绍如何使用mxcad3d创建建筑墙体模型。首先需安装Node.js及npm包管理器,并通过npm初始化项目、引入mxcad包。接着,在项目中编写HTML与TypeScript代码以实现墙体绘制,包括外墙、内墙、窗户和门的创建。最后,通过运行项目验证效果。教程及完整项目示例可在[mxcad3d官方仓库](https://gitee.com/mxcadx/mxcad_docs/tree/master/examples3D/Test3dWall.7z)获取。更多详细步骤,请关注“梦想云图网页CAD”公众号。
|
6月前
|
算法 计算机视觉
基于表面法线法的二维人脸图构建三维人脸模型matlab仿真
该内容概述了一个使用MATLAB2022a的二维人脸图像三维重建算法。首先,通过人脸检测和对齐,然后运用深度信息估计技术(如Shape from Shading)获取表面法线。接着,结合预训练的三维人脸模型库和二维关键点,通过迭代优化和全局优化构建三维模型。核心程序涉及图像处理、光源方向转换、反射率和表面法线计算,最终重构高度图并显示结果。该方法依赖多视角图像,单幅图像重建可能存在挑战。
|
机器学习/深度学习 人工智能 算法
LabVIEW深度相机与三维定位实战(三)
立体匹配与ACV算法理论知识
137 0
LabVIEW深度相机与三维定位实战(三)
|
算法
基于双目相机拍摄图像的深度信息提取和目标测距matlab仿真
基于双目相机拍摄图像的深度信息提取和目标测距matlab仿真
326 0
基于双目相机拍摄图像的深度信息提取和目标测距matlab仿真
|
存储 编解码 定位技术
案例!从天地图中提取全市的建筑物矢量轮廓-以苏州市为例
案例!从天地图中提取全市的建筑物矢量轮廓-以苏州市为例
234 1
|
机器学习/深度学习 传感器 编解码
LabVIEW实现深度相机与三维定位实战(二)
LabVIEW实现深度相机与三维定位实战(二)
227 0
LabVIEW实现深度相机与三维定位实战(二)
|
机器学习/深度学习 传感器 编解码
LabVIEW实现深度相机与三维定位实战(一)
LabVIEW实现深度相机与三维定位实战(一)
284 0
LabVIEW实现深度相机与三维定位实战(一)
|
机器学习/深度学习 人工智能 算法
LabVIEW深度相机与三维定位实战(四)
立体匹配与ACV算法在LabVIEW中的调用
111 0
LabVIEW深度相机与三维定位实战(四)
|
传感器 算法 机器人
【通过粒子滤波进行地形辅助导航】用于地形辅助导航的粒子滤波器和 PCRB研究(Matlab代码实现)
【通过粒子滤波进行地形辅助导航】用于地形辅助导航的粒子滤波器和 PCRB研究(Matlab代码实现)
141 0