cartographer输出机器人相对地图位姿

2023-05-16

     cartographer(0.3.0版本)中机器人位姿是以tf的格式发布的。cartographer在关于位姿的tf_tree为:map->odom->base_footprint。其中odom->base_footprint理解为激光模拟的里程计信息,map->odom理解为对里程计数据的补偿,如消除累积误差等。在应用中推荐把provide_odom_frame参数置为false。当该参数为true时,其发布的数据为map->odom的tf,而非机器人的位姿。当将provide_odom_frame参数置为false时,可以获得map->base_footprint的tf数据,即机器人相对于map的位姿。

       但是,有时会希望在工程中将机器人相对于map的位姿以其他msgs格式发布。这种情况需要对cartographer_ros的源码进行修改。下面以将机器人相对于map的位姿数据封装成odometry的格式发布为例。

       改动主要在node.cc中。

void Node::PublishTrajectoryStates(const ::ros::WallTimerEvent& timer_event) {
laser_odom_pub_ = node_handle_.advertise<nav_msgs::Odometry>("laser_odom",1000); 
...
for (const auto& entry : map_builder_bridge_.GetTrajectoryStates()) {
  if (trajectory_state.published_to_tracking != nullptr) {
  nav_msgs::Odometry laser_odom_; 
  ...
  if (trajectory_state.trajectory_options.provide_odom_frame) {
  ...  //参数provide_odom_frame为true时的情况
   }
  else{
        stamped_transform.header.frame_id = node_options_.map_frame;
        stamped_transform.child_frame_id =
            trajectory_state.trajectory_options.published_frame;
        stamped_transform.transform = ToGeometryMsgTransform(
            tracking_to_map * (*trajectory_state.published_to_tracking));
        tf_broadcaster_.sendTransform(stamped_transform);

        laser_odom_.header.stamp = stamped_transform.header.stamp; 
        laser_odom_.header.frame_id = "laser_odom";
        laser_odom_.child_frame_id = "base_footprint";
        laser_odom_.pose.pose.position.x = stamped_transform.transform.translation.x;
        laser_odom_.pose.pose.position.y = stamped_transform.transform.translation.y;
        laser_odom_.pose.pose.position.z = stamped_transform.transform.translation.z;
        laser_odom_.pose.pose.orientation = stamped_transform.transform.rotation;
        laser_odom_pub_.publish(laser_odom_); 
      }
    }}}

       如此机器人将发布一个名为laser_odom的topic,topic的内容为机器人相对于map的位姿。

       为了在rviz中观察到laser_odom,在launch文件中加入map到laser_odom的静态tf即可。

<node pkg="tf" type="static_transform_publisher" name="map_to_laser_odom" args="0.0 0.0 0.0 0.0 0.0 0.0 /map /laser_odom 100" />
       若想封装为其他格式的数据流程类似。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cartographer输出机器人相对地图位姿 的相关文章

随机推荐

  • openvslam------slam解读系列

    是什么 openvslam是日本先进工业科技研究 xff08 National Institute of Advanced Industrial Science and Technology xff09 所于2019年5月20日开源的视觉S
  • Hadoop编程学习1--WordCount

    span class hljs keyword package span org apache hadoop examples span class hljs keyword import span java io IOException
  • p2p传输实时视频流

    HYP2P是好游科技开发的p2p sdk xff0c 利用nat穿透的原理实现p2p打洞 xff0c 主要用于实时音视频的传输 使用时可以配置成tcp模式或udp模式 xff0c tcp模式会自动帮您解决丢包 乱序 重传问题 中转模式则是基
  • 笑谈Android图表------MPAndroidChart

    MPAndroidChart是一款基于Android的开源图表库 xff0c MPAndroidChart不仅可以在Android设备上绘制各种统计图表 xff0c 而且可以对图表进行拖动和缩放操作 xff0c 应用起来非常灵活 MPAnd
  • 详谈高大上的图片加载框架Glide -应用篇

    在Android设备上 xff0c 加载网络图片一直是一个头疼的问题 xff0c 因为Android设备种类繁多 xff08 当然最主要的是配置 xff09 xff0c 处理的稍不周到轻则应用卡顿 xff0c 严重者就会出现OOM的 xff
  • 微信小程序开发环境搭建

    微信小程序可谓是今天最火的一个名词了 xff0c 一经出现真是轰炸了整个开发人员 xff0c 当然很多App开发人员有了一个担心 xff0c 微信小程序的到来会不会给移动端App带来一个寒冬 xff0c 身为一个Android开发者我是不相
  • 实现APP定位功能

    源码传送门 若你不小心点击进入GitHub了捎带给个star 前言 最近更新项目中用的百度定位SDK时遇见了一个奇葩的问题 当升级SDK后百度定位一直返回505 通过百度定位官网查看该码表示AK非法或者不存在 很纠结 于是自己又写了一个de
  • Linux系统命令行创建新文件

    linux命令行创建文件 方法有许多 xff0c 下面简单介绍一下 方法1 使用cat命令 cat span class token operator gt span sample1 span class token punctuation
  • Java利器之UML类图详解

    前言 UML xff08 Unified Modeling Language xff09 中文统一建模语言 xff0c 是一种开放的方法 xff0c 用于说明 可视化 构建和编写一个正在开发的 面向对象的 软件密集系统的制品的开放方法 UM
  • 从零开始学习Linux部署Java web项目

    前言 最近越来越发现需要学习的东西太多了 xff0c 前几天公司服务器出现问题 xff0c 需要对服务器硬件进行维护 xff0c 当然服务器上的服务需要部署到另一个服务器上 这对于我来说是很陌生的 xff0c 虽然这件工作没有让我去做 xf
  • 致敬我奋起直追的2016

    前言 其实当用奋起直追这个词语形容我的2016时 xff0c 自己一度怀疑是不是配得上这个词语 虽然2016成长了不少 xff0c 但是依然没有达到我想要的效果 在学习过程中不断出现越学越倒退的感觉 还偶尔会出现一些恐惧感 不过庆幸的是 x
  • 微信小程序分页加载

    分页加载功能大家遇到的应该会经常遇到 xff0c 应用场景也很多 xff0c 例如微博 xff0c QQ xff0c 微信朋友圈以及新闻类应用 xff0c 都会有分页加载的功能 xff0c 这不仅节省了我们用户的流量 xff0c 还提升了用
  • ReactNative ViewPageAndroid组件详解

    源码传送门 在我们开发Android的时候 xff0c ViewPage这个控件的使用频率还是很高的 xff0c 最简单的就是制作引导页 xff0c 应用程序的主界面等 xff0c 在ReactNative开发中实现该功能的组件是ViewP
  • Android自定义数字键盘

    好久没有写Android的文章了 xff0c 有两三个月多了吧 xff0c 刚开始搞微信小程序 xff0c 后来又开搞ReactNative 现在又兴奋的开搞AI机器学习的东西 xff0c 感觉挺有意思的 xff0c 不过AI与其它的东西相
  • ConstraintLayout基础介绍

    自去年Google I O 大会发布ConstraintLayout至今 xff0c 已有一年多的时间 xff0c 但是并没有普及开来 xff0c 了解过ConstraintLayout布局的人知道 xff0c 它的性能的确提升了不少 在前
  • 嵌入式Linux实战开发之项目总体概述(基于IMX6ULL)

    文章目录 前言 xff08 一 xff09 开发环境 xff08 二 xff09 项目基本概述 xff08 三 xff09 程序框架 xff08 四 xff09 参考资料 前言 现在越来越多的智能设备融入到我们的生活 xff0c 然而 xf
  • Jetson Xavier NX安装opencv3.4.5(小白教程)

    作为小白 xff0c 近期开始上手嵌入式设备Jetson Xavier NX xff0c 系统为Ubuntu 18 04 6 xff0c 而因项目开发环境需要Opencv3 4 5版本 xff0c 预装系统内安装的是Opencv4 1 1
  • tortoisegit安装及实用操作

    TortoiseGit安装及实用操作 TortoiseGit安装TortoiseGit配置TortoiseGit基本操作Git Clone 克隆远程仓库到本地Git Commit 提交改动到本地的版本库Git Push 将本地修改提交到远程
  • linux系统如何开启和关闭core dump

    概述 大多数Linux系统默认开始core dump 我们一方面咱们想要收集信息以提升稳定性 排除故障 xff1b 另外一方面 xff0c 我们又想要限制debug的数据 避免泄漏一些敏感数据 第一个选择适合于研究不稳定的程序的机器 第二个
  • cartographer输出机器人相对地图位姿

    cartographer xff08 0 3 0版本 xff09 中机器人位姿是以tf的格式发布的 cartographer在关于位姿的tf tree为 xff1a map gt odom gt base footprint 其中odom