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

  • ROS中的地图
  • 使用rosbag记录数据
    • rosbag record
    • rosbag play
  • 创建地图

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

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

[ INFO] [1584350478.995006024]: Laser is mounted upwards.
-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

正常结果

可以看下该图片


实际场景:


哈哈!是一致的。

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

  1. 【应用SLAM技术建立二维栅格化地图】

    应用SLAM技术建立二维栅格化地图 一. 设计目标 二. 技术要求 三. 设计方案 1. 激光SLAM简介 2. Cartographer简介与使用 1) Cartographer简介 2) 官方de ...

  2. 通过Gazebo仿真学TurtleBot3(四)——简单的/cmd_vel控制

    1. 通过命令发送/cmd_vel控制底盘移动 - 启动tb3仿真: 启动: $ roslaunch tb3_sim_bringup tb3_empty_world.launch 开启rviz显示: ...

  3. ROS开发笔记(5)——基于 python 开发 Turtlebot3 Gazebo仿真环境下键盘操控移动机器人(Teleop-bot )

    前文中记录了随机移动机器人的开发过程,本文内容为Turtlebot3 Gazebo仿真环境下Teleop-bot 键盘操控移动机器人,主要包含以下几个部分: 1.键盘驱动(按键驱动发布keys话题) ...

  4. 【无人机自主导航3-ORB-SLAM2】Gazebo仿真环境下的视觉SLAM

    一.背景 无人机的自主导航需要无人机的位置信息.姿态等,在空旷的室外环境,一般需要基于GNSS系统进行位置信息的获取与无人机导航. 但在室内等无GNSS的情况下,我们就需要其他的手段来实现. 在我们确 ...

  5. Turtlebot3 buger在仿真环境下建图导航

    Gazebo仿真实验(建图+导航)turtlebot3 buger 1.打开gazebo仿真环境并加载地图 roslaunch turtlebot3_gazebo turtlebot3_world.l ...

  6. 【ROS】移动机器人导航仿真(2)——SLAM(gmapping)

    在前一节中,简单介绍了移动机器人的3D建模,并在gazebo三维仿真环境中实现了简单的移动.这一节采用gmapping包实现机器人的SLAM(同时定位与地图建立).使用上一节构建的机器人3D模型,在g ...

  7. ROS系统SLAM基础学习:gazebo仿真机器人自主导航

    ROS系统SLAM基础学习:gazebo仿真机器人自主导航 move_base节点配置 amcl节点配置 导航仿真 导航SLAM仿真 自主探索SLAM仿真 自主导航:避障 遇到的问题及解决方法和总结 ...

  8. Gazebo仿真激光SLAM

    前言 一.环境搭建 1.1 配置代理(虚拟机情况下可配置) 1.1.1 安装代理 sudo apt-get install proxychains 1.1.2 修改配置文件 对/etc/proxych ...

  9. Gazebo仿真记录 Turtlebot3 + D435i

    在Gazebo环境中在Turtlebot3上添加深度相机D435和IMU. 步骤 1.准备工作 创建ROS工作空间,下载turtlebot3相关代码和realsense2_description 模型 ...

最新文章

  1. plt.hist绘制直方图参数density 为True和False分别代表是否归一化 参数orientation决定了是采用纵轴代表频率还是横轴代表频率的展现形式
  2. java基础.0——Object类
  3. 数据探查与可视化平台
  4. 初次运行git前的配置
  5. 使用Nomad构建弹性基础架构: 容错和中断恢复
  6. Skynet 游戏服务器开发实战
  7. 流行的某导航网站系统源码 收录系统源码
  8. 正则语言和正则表达式_探索正则表达式背后的语言学
  9. 知名电商“猝死”办公地人去楼空:不发货退款难 消费者被坑哭了
  10. 数组的基本操作(1)
  11. android XMPP即时通讯客户端
  12. win10系统下载 Ghost Win10 RS1 1607 32位纯净3月版
  13. sql 触发器(Insert,update,delete)
  14. 【DB笔试面试666】在Oracle中,在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?...
  15. R中安装rgl时“configure: error: missing required library GL”错误的解决方法
  16. 2018年软工第二次结对作业
  17. Android更改开机画面
  18. 计算机用户名怎么改好听,电脑版本优酷视频如何设置呢称_昵称起名
  19. 面板数据、工具变量选择和Hausman检验的若干问题
  20. 考研用什么蓝牙降噪耳机好?适合学生党的降噪耳机推荐

热门文章

  1. vac服务器未响应,csgo国服游戏停止工作、未响应的解决方法
  2. 用户行为分析zhi应用分析模型
  3. 编程求x的n次方_用C语言程序设计:求x的n次方的函数。
  4. 可能你需要一个王者荣耀刷金币神器(解除网瘾)
  5. 网页进服务器,如何通过网页进去云服务器
  6. 如何储存图片方法jpg格式png格式#ps教程#ps抠图
  7. postgresql索引_PostgreSQL中的索引— 10(Bloom)
  8. 程序员的自我修养阅读笔记
  9. 物联网平台搭建的全过程介绍(五)——基于阿里云物联网平台的Android聊天app源码
  10. python和r语言哪个简单_python与r语言哪个简单