基于ROS gmapping slam 建立地图时遇到的问题

本文涉及的产品
资源编排,不限时长
简介: 基于ROS gmapping slam 建立地图时遇到的问题

遇到问题:

在 turtlebot3 的gazebo 仿真环境下

通过rosbag 保存tf 和scan 的信息,然后通过回放rosbag 里的内容
再通过 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.

在这里插入图片描述

解决过程1

意思是从odom 后面的信息都被丢弃了。 为什么丢弃,因为 tf 不对 。

$ rosrun rqt_tf_tree rqt_tf_tree

显示tf tree
在这里插入图片描述
额,到odom后面没有tf信息了。 urdf根本就没有发布啊。

看 turtlebot3 的launch文件 , 这里没有将 urdf 的 tf 信息发布

  <!-- start robot state publisher -->
  <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" output="screen" >
    <param name="publish_frequency" type="double" value="50.0" />
  </node>
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node> 

再运行仿真程序时 ,出来了理想的 tf tree
在这里插入图片描述

再遇问题

然后保存rosbag,再建图一次,还是报错。

查看rosbag回放数据的tf tree。
就是在rosbag 回放数据的过程中,执行 指令

$ rosrun rqt_tf_tree rqt_tf_tree

在这里插入图片描述
额, base_footprint 和 base_link 为什么是断得.
并且其它传感器去哪了

解决过程2

现在得问题是 在gazebo运行时 tf 是对得 ,在 rosbag回放时tf 是错得
下面把 数据全部保存

rosbag record -O data_all.bag -a

然后看回放rosbag里的tf tree

是对的。

说明少订阅了什么内容,

查看所有topic
在这里插入图片描述
把 /tf_static 加上 ,中间试过了 加 /tf_staic 是不行的

rosbag 里面的 tf tree 终于对了

下面看 /tf_static 到底是个啥东西啊

ROS 的 tf 功能包有一个升级版本 tf2
这个 tf_static 就是 tf2 中多的功能
具体可以看官网的解释

tf2 Migration WIKI
在这里插入图片描述
这里的英文解释很模糊,实际上 tf_static 简单理解 就是 发布的一个锁存功能的tf。
锁存功能 就是订阅者可以订阅 发布者发布的最新的一次topic,而不是发布者发布了才能订阅。

tf::TransformListener 会订阅 /tf 和 /tf_static。

answers.ros.org 上有人解释说 :
Transforms on the /tf_static topic are assumed to never change and be valid for all timestamps.
tf_static 是假设不会改变的的坐标变换关系(例如fixed型的joint),可以被随时使用(就是锁存)。

假如一个坐标变换是固定的那么可以发布一次,之后随时就可以使用了。 当然如果固定的关系变了,那么可以再发一次。

这个是 tf2 相对于 tf 升级的一个功能。

根据上面的调试过程推断:

在 urdf 中的 joint ,假如是 fixed 的joint ,则会往发布 /tf_static 上发布
continue类型的joint 则会往 /tf 上发布

所以 base_footprint 和base_link是fixed 的关系,没有订阅 /tf_static 是断开的 ,轮子的link和base_link是continued ,订阅/tf就 可以连上
在这里插入图片描述
当订阅了 /tf_static 这个之后 , 激光、相机、IMU这种固定连接的就有了
在这里插入图片描述

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
算法 机器人 定位技术
ROS中阶笔记(八):机器人SLAM与自主导航—机器人自主导航
ROS中阶笔记(八):机器人SLAM与自主导航—机器人自主导航
1107 0
ROS中阶笔记(八):机器人SLAM与自主导航—机器人自主导航
|
机器学习/深度学习 传感器 Ubuntu
ubuntu16.04下ROS操作系统学习笔记(八)机器人SLAM与 Gmapping-Hector_slam-Cartographer--ORB_SLAM(下)
ubuntu16.04下ROS操作系统学习笔记(八)机器人SLAM与 Gmapping-Hector_slam-Cartographer--ORB_SLAM(下)
298 0
|
存储 传感器 编解码
ubuntu16.04下ROS操作系统学习笔记(八)机器人SLAM与 Gmapping-Hector_slam-Cartographer--ORB_SLAM(上)
ubuntu16.04下ROS操作系统学习笔记(八)机器人SLAM与 Gmapping-Hector_slam-Cartographer--ORB_SLAM
161 0
|
传感器 算法 机器人
ROS中阶笔记(七):机器人SLAM与自主导航—SLAM功能包的使用(下)
ROS中阶笔记(七):机器人SLAM与自主导航—SLAM功能包的使用
659 0
ROS中阶笔记(七):机器人SLAM与自主导航—SLAM功能包的使用(下)
|
算法 机器人 定位技术
ROS中阶笔记(七):机器人SLAM与自主导航—SLAM功能包的使用(上)
ROS中阶笔记(七):机器人SLAM与自主导航—SLAM功能包的使用
613 0
ROS中阶笔记(七):机器人SLAM与自主导航—SLAM功能包的使用(上)
|
2月前
|
Ubuntu 机器人 Linux
|
15天前
|
自动驾驶 安全 机器人
ROS2:从初识到深入,探索机器人操作系统的进化之路
前言 最近开始接触到基于DDS的这个系统,是在稚晖君的机器人项目中了解和认识到。于是便开始自己买书学习起来,感觉挺有意思的,但是只是单纯的看书籍,总会显得枯燥无味,于是自己又开始在网上找了一些视频教程结合书籍一起来看,便让我对ROS系统有了更深的认识和理解。 ROS的发展历程 ROS诞生于2007年的斯坦福大学,这是早期PR2机器人的原型,这个项目很快被一家商业公司Willow Garage看中,类似现在的风险投资一样,他们投了一大笔钱给这群年轻人,PR2机器人在资本的助推下成功诞生。 2010年,随着PR2机器人的发布,其中的软件正式确定了名称,就叫做机器人操作系统,Robot Op
58 14
|
27天前
|
XML 算法 自动驾驶
ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
【11月更文挑战第7天】本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。
|
1月前
|
自动驾驶 安全 机器人
ROS2:从初识到深入,探索机器人操作系统的进化之路
【11月更文挑战第4天】ROS2的学习过程和应用,介绍DDS系统的框架和知识。
|
7月前
|
传感器 人工智能 算法
ROS机器人操作系统
ROS机器人操作系统
181 1

推荐镜像

更多