上一节介绍了cartographer中的TimedPointCloudData数据相关转换。

本节将介绍里程计Odom数据转换为cartographer中的OdometryData数据。还有cartographer中的OdometryData数据和Ros的nav_msgs::Odometry数据相互转换,方便引入Rosbag进行储存和读取。


目录

1:OdometryData数据类型

2:Odom数据转换cartographer数据

3:Odom数据转换Ros数据

4:cartographer数据转换Ros数据

5:Ros数据转换cartographer数据


1:OdometryData数据类型

【odometry_data.h】中查看数据结构:

//时间
common::Time time;
//位置
transform::Rigid3d pose;

2:Odom数据转换cartographer数据

cartographer::sensor::OdometryData GetOdometryData()
{cartographer::sensor::OdometryData odometry_data;current_time = ros::Time::now();double dt = (current_time - last_time).toSec();double dx = (vx * cos(th) - vy * sin(th)) * dt;double dy = (vx * sin(th) + vy * cos(th)) * dt;double dth = vth * dt;last_time = current_time;x += dx;y += dy;th += dth;cartographer::common::Time curTime = cartographer::common::NowTime();const Eigen::AngleAxisd rotation(th, Eigen::Vector3d::UnitZ());const Eigen::Vector3d translation(x, y, 0.0);cartographer::transform::Rigid3d pose(translation, rotation);odometry_data = cartographer::sensor::OdometryData{curTime, pose};return odometry_data;
}

3:Odom数据转换Ros数据

【cartographer_ros】四: 发布和订阅里程计odom信息


4:cartographer数据转换Ros数据

nav_msgs::Odometry ToRosMsg(cartographer::sensor::OdometryData odometry_data)
{nav_msgs::Odometry odom;odom.header.stamp = TimeRosFromCarto(odometry_data.time);odom.header.frame_id = "odom";odom.pose.pose.position.x = odometry_data.pose.translation().x();odom.pose.pose.position.y = odometry_data.pose.translation().y();odom.pose.pose.position.z = odometry_data.pose.translation().z();odom.pose.pose.orientation.w = odometry_data.pose.rotation().w();odom.pose.pose.orientation.x = odometry_data.pose.rotation().x();odom.pose.pose.orientation.y = odometry_data.pose.rotation().y();odom.pose.pose.orientation.z = odometry_data.pose.rotation().z();odom.child_frame_id = "base_link";return odom;
}

5:Ros数据转换cartographer数据

cartographer::sensor::OdometryData ToCartoSensor(nav_msgs::Odometry odom)
{cartographer::sensor::OdometryData odometry_data;odometry_data.time = Time::CartoFromRos(odom.header.stamp);const Eigen::Vector3d translation(odom.pose.pose.position.x, odom.pose.pose.position.y, odom.pose.pose.position.z);const Eigen::Quaterniond rotation(odom.pose.pose.orientation.w, odom.pose.pose.orientation.x, odom.pose.pose.orientation.y, odom.pose.pose.orientation.z);odometry_data.pose = cartographer::transform::Rigid3d(translation, rotation);return odometry_data;
}

【完】


下一节会介绍里程计Imu数据转换为cartographer中的cartographer::sensor::ImuData数据。

【cartographer without ros】四、里程计odom数据转换相关推荐

  1. 【cartographer_ros】四: 发布和订阅里程计odom信息

    上一节介绍了激光雷达Scan传感数据的订阅和发布. 本节会介绍里程计Odom数据的发布和订阅.里程计在cartographer中主要用于前端位置预估和后端优化. 官方文档: http://wiki.r ...

  2. ROS机器人里程计校准

    ROS机器人里程计校准 麦克纳姆轮机器人里程计标定 前提是你的机器人已经输入了正确的运动学模型并可以按照你给定的运动速度有正确的运动方向. 一.启动初始化节点 首先打开第一个终端,打开你的机器人的初始 ...

  3. ros(25):发布一个静态的里程计odom信息

    有时为了验证程序可以运行,需要给程序输入一个里程计信息:有时为了在实车实验前验证程序,需要修改不同的里程计数据(可以在下面代码中增加一个odom_tmp的数组,或者用循环来使odom_tmp值变化), ...

  4. ROS机器人里程计模型

    3.5 移动机器人系统模型 相信大家的机器人平台STM32端底层控制和机器人urdf建模都已经顺利完成了,在正式开始ros端编写机器人启动功能包之前,我们还不得不学习一些必要的理论知识.别担心数学不好 ...

  5. 《动手学机器人学》7.4机器人运动学介绍|机械臂运动学|两轮差速底盘运动学|轮式里程计

    本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途. 7.4 机器人运动学介绍 机器 ...

  6. ROS察微【51】:如何将里程计和 IMU 与 robots_localization 融合

    一.简述 笔记 是 ROS 开发人员 Live Class n.51 的附加材料,由 The Construct 的 Alberto Ezquerro 和 Ricardo Tellez 免费创建和提供 ...

  7. 基于ROS与C++,只利用IMU实现里程计和计步器,精确计算行走距离

    老规矩,开门见山,先说说本篇文章实现了什么: 1.只使用IMU模块,实现了对于人行走距离的检测(精度在0.5m左右) 2.只使用IMU模块,通过峰值检测\机器学习两个方法,实现了一个精确的计步器 背景 ...

  8. ros移动机器人,激光雷达里程计rf2o_laser_odometry的使用与分析

    目录 1.问题分析 2.激光雷达里程计 2.1 代码下载 2.2 使用方法 (1) ERRO:"base_link" passed to lookupTransform argum ...

  9. odom 里程计轨迹的代码

    在 C++ 中预测 odom 里程计轨迹的代码可能需要使用一些库来帮助处理数据和进行计算.以下是一个示例,它使用 Eigen 库来表示和操作矩阵和向量,以及使用 ROS (Robot Operatin ...

最新文章

  1. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现
  2. 从零入门 Serverless | 一文搞懂函数计算及其工作原理
  3. Origin绘制大小和颜色可变的3D散点图
  4. 将有序数组转换为二叉搜索树
  5. JDK 12的Files.mismatch方法
  6. python列表有固定大小吗_如何在python中创建固定大小的列表?
  7. python读取大文件csv_对python中大文件的导入与导出方法详解
  8. php开发app接口-封装类
  9. 表白网页在线制作-我要表白网-最浪漫的表白网页在线生成网站
  10. Android URLEncoder和URLDecoder
  11. MySQL触发器写入Sqlseever_sqlserver 触发器实例
  12. 通用的权限管理系统的设计
  13. cgcs2000大地坐标系地图_CGCS2000坐标系和WGS84坐标系的区别联系
  14. 两台电脑的文件共享方式
  15. E9000刀片服务器维护记录
  16. Tkinter——②entry(文本框)和text(多行文本)
  17. Java8新特性 Stream流常用方法
  18. vue h5点击跳转主流手机应用商店app下载页
  19. linux系统nginx安装教程,Linux下Nginx安装教程
  20. 计算机应用于软件等待预审,1系统架构-计算机应用与软件.doc

热门文章

  1. 汇编语言--jmp指令
  2. 蓝牙4.0 BLE 广播包解析
  3. (转)2010年最不能错过的101个网站
  4. Mybatis-Plus条件构造器学习and方法
  5. Flask系列教程(一)-----------入门
  6. “悟空”来也!未上市就签几亿订单,看优必选机器人梦想的超级路径
  7. SqlDataReader转换为DataTable
  8. 微信移动端数据库组件WCDB系列(二) — 数据库修复三板斧
  9. 【python练习题3】英雄联盟英雄购买界面+数字炸弹游戏
  10. 《zw版·Halcon-delphi系列原创教程》 只有2行代码的超市收款单ocr脚本