Rviz显示地图

ROS提供了非常强大的图形化模拟环境 RViz,这个 RViz 能做的事情非常多。今天我们学习一下如何使用 RViz 对机器人在路径探索过程中对地图动态观测。我们将学习重放已经采集的数据来模拟机器人输入,从而将精力放到SLAM和地图的建立以及RViz的使用上。下面是效果图:



一 基本概念

ROS 对机器人导航提供了非常强大的支持,这可以让我们在不了解细节和海量复杂无比的科学计算的情况下就可以对机器人的导航,定位,路径规划。这其中第一步就是要建立一个封闭环境的地图,这个过程叫做SLAM (simultaneous localization and mapping),也称为CML (Concurrent Mapping and Localization), 即时定位与地图构建,或并发建图与定位。 SLAM最早由Smith、Self和Cheeseman于1988年提出。 由于其重要的理论与应用价值,被很多学者认为是实现真正全自主移动机器人的关键。


ROS gmaping 工具

ROS 提供的gmaping包是用来生成地图的,它是对著名的开源OpenSlam包在ROS框架下的一个实现。这个包提供了对激光设备的Slam, 根据激光设备的输入和姿态数据从而建立一个基于网格的的2D地图(就像建立楼房设计的 平面图)它需要从ROS系统监听许多Topic,并输出一个Topic --map (nav_msgs/OccupancyGrid),这也是RViz的输入Topic.

这个包需要单独下载 ,命令  : sudo apt-get install ros-indigo-slam-gmapping

三 硬件要求

本文提供的是模拟数据,所以没有任何硬件需要。

gmaping 需要使用实际的机器人获取激光或者深度数据。通常这些激光距离探测器价格比较昂贵,ROS推荐使用的 SCIP2.2, Hokuyo Model 04LX, 30LX ,SICK LMS2xx Lasers 价格都巨贵无比,而且尺寸都较大。ROS使用的廉价机器人TurtleBot使用的则是Kinnect价格在接近1000元,但这个不是我们今天的话题内容。


四 操作过程

  1. 启动ROS master.  这是所有ROS操作的第一步,就像开机一样

    [plain] view plain copy
    1. roscore  
  2. 配置ROS启用重放数据中的时间而非本机时间,影响整个系统所有时间API的输出结果。在默认情况下,ROS使用ubuntu系统的时间,也就是墙上时钟时间(wall clock)。但我们重播一个记录历史文件时,里面记录的是历史时间,所以我们需要告诉ROS从现在起开始启用模拟时间。

    [plain] view plain copy
    1. rosparam set use_sim_time true  
  3. 下载ROS提供的激光数据采集记录文件

    [plain] view plain copy
    1. wget http://pr.willowgarage.com/data/gmapping/basic_localization_stage.bag  
  4. 启动gmapping, 并监听 scan_base topic发来的消息。该topic是由模拟器发布的。

    [plain] view plain copy
    1. rosrun gmapping slam_gmapping scan:=base_scan  
  5. 启动模拟器重放激光数据

    [plain] view plain copy
    1. rosbag play --clock basic_localization_stage.bag  
  6. 启动RViz,点击 add 按钮(左下方) ,在弹出的列表中选择 map,点击OK,这时开始展现一个空的地图

    [plain] view plain copy
    1. rosrun rviz rviz  

  7. 最关键的一步,要告诉RViz  生成map信息的topic是什么。我们前面讲到过,gmapping输出的topic是 /map.  如下图配置,立即就可以看到地图的动态建立了

  8. 随着时间的推进,慢慢的整个地图就显示出来了
G
M
T
 Detect languageAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu     
Text-to-speech function is limited to 200 characters
  Options : History : Feedback : DonateClose
G
M
T
 Detect languageAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu
Text-to-speech function is limited to 200 characters
 
Options : History : Feedback : DonateClose
### 如何配置 RVIZ 显示点云地图 #### 配置 RVIZ 基本环境 为了使RVIZ能够正确显示点云地图,需先启动ROS核心并运行所需节点。对于特定传感器的数据可视化,比如来自激光雷达的点云数据,确保对应的驱动程序已正常工作,并发布正确的消息主题。 ```bash roscore ``` #### 加载 PCD 文件到 ROS 系统中 如果要加载PCD文件作为点云源,则可以利用`pcl_ros`包中的工具来实现这一目的。通过下面命令可将指定路径下的PCD文件转换成ROS能识别的消息格式: ```bash roslaunch pcl_ros pcd_to_pointcloud.launch file:=/path/to/file.pcd repeat_rate:=10 ``` 此操作会创建一个名为 `/point_cloud` 的话题用于传输点云信息[^3]。 #### 设置 RVIZ 查看器参数 打开RVIZ查看器后,在左侧栏添加 `PointCloud2` 类型的显示项。设置该显示项的主题为之前发布的点云话题名称(如上述例子中的`/point_cloud`)。调整其他选项以优化视觉效果,例如改变颜色编码方式、点大小等。 #### 处理特殊设备兼容性问题 针对不同品牌型号的激光雷达设备,可能存在一些差异化的配置需求。例如当使用速腾聚创32线激光雷达而非常见的Velodyne系列时,可能会遇到因默认参数不匹配而导致无法看到预期点云的情况。此时应参照具体硬件的手册文档调整相关参数映射关系,确保所有必要的变换矩阵被正确定义以便于坐标系之间的转换[^2]。 #### 构建八叉树表示的地图结构 除了简单的点云渲染外,还可以进一步探索更高级别的空间表达形式——八叉树。借助OctoMap服务器的帮助,可以在RVIZ内直观呈现由点云集合成的空间占用情况。这通常涉及到订阅合适的输入流并将输出结果绑定至新的可视化组件上[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值