ROS里程计消息nav_msgs/Odometry的可视化方法

article/2025/7/22 21:11:03

ROS中里程计的消息类型为nav_msgs/Odometry,该消息类型具有以下结构:

 

可以看到,里程计消息中的pose包含了位置pose.position和姿态pose.orientation

在ROS中,有一种常用消息类型为nav_msgs/Path,可视化的方法为:

①在一个节点中订阅发布的里程计话题消息nav_msgs/Odometry

②创建geometry_msgs::PoseStamped对象接收里程计的位姿

创建nav_msgs/Path对象作为容器,将赋值后的对象push_backnav_msgs/Path中并发布

然后即可在rviz中订阅包含nav_msgs/Path的话题并可视化轨迹

1.新建ROS工作空间

mkdir -p path_ws/src
cd path_ws
catkin_make
cd src
catkin_create_pkg path_3d roscpp rospy std_msgs nav_msgs geometry_msgs

2.在path_3d/src中编写消息收发节点文件path_3d.cpp

#include <ros/ros.h>
#include <nav_msgs/Path.h>
#include <std_msgs/String.h>
#include <nav_msgs/Odometry.h>
#include <geometry_msgs/PoseStamped.h>
#include <tf/transform_broadcaster.h>
#include <tf/tf.h>nav_msgs::Path  path;
ros::Publisher  path_pub;void pathCallback(const nav_msgs::Odometry::ConstPtr& odom_3d)
{geometry_msgs::PoseStamped position_3d;position_3d.pose.position.x = odom_3d->pose.pose.position.x; position_3d.pose.position.y = odom_3d->pose.pose.position.y; position_3d.pose.position.z = odom_3d->pose.pose.position.z;position_3d.pose.orientation = odom_3d->pose.pose.orientation;position_3d.header.stamp = odom_3d->header.stamp;position_3d.header.frame_id = "map";path.poses.push_back(position_3d);path.header.stamp = position_3d.header.stamp;path.header.frame_id = "map";path_pub.publish(path);std::cout << odom_3d -> header.stamp << ' ' << odom_3d->pose.pose.position.x << ' ' << odom_3d->pose.pose.position.y << ' ' << odom_3d->pose.pose.position.z << std::endl;
}int main (int argc, char **argv)
{ros::init (argc, argv, "showpath");ros::NodeHandle ph;path_pub = ph.advertise<nav_msgs::Path>("odom3d_path", 10, true);ros::Subscriber odomSub = ph.subscribe<nav_msgs::Odometry>("/odometry_3d", 10, pathCallback);  //订阅里程计话题信息,其中"/odometry_3d"是自己发布的里程计话题名,别忘了修改ros::Rate loop_rate(1000);while(ros::ok()){ros::spinOnce();loop_rate.sleep();}return 0;
}

3.path_3d文件夹目录中的CMakeLists.txt如下:

cmake_minimum_required(VERSION 2.8.3)
project(path_3d)## Compile as C++11, supported in ROS Kinetic and newer
# add_compile_options(-std=c++11)find_package(catkin REQUIRED COMPONENTSgeometry_msgsroscpprospystd_msgs
message_generation
)## Generate added messages and services with any dependencies listed heregenerate_messages(DEPENDENCIESgeometry_msgs   std_msgs)catkin_package(INCLUDE_DIRS includeLIBRARIES path_3dCATKIN_DEPENDS geometry_msgs roscpp rospy std_msgsDEPENDS system_lib
)include_directories(include${catkin_INCLUDE_DIRS}
)add_executable(path_3d src/path_3d.cpp) #${PROJECT_NAME}_node
target_link_libraries(path_3d ${catkin_LIBRARIES}) # ${PROJECT_NAME}_node
add_dependencies(path_3d beginner_tutorials_generate_messages_cpp) #path_3d_node

4.在工作空间中编译功能包

// 打开命令行
// 进入工作空间最上层目录
cd path_ws
// 执行一下 source 命令
source devel/setup.bash
// 编译工作空间下的所有功能包
catkin_make
// 单独编译工作空间下的 path_3d 功能包
catkin_make -DCATKIN_WHITELIST_PACKAGES="path_3d"

5.启动节点、在rviz中订阅odom3d_path话题,即可查看可视化数据

// 终端中启动roscore
roscore
// 另一个终端启动节点
rosrun path_3d path_3d
// 在数据包路径下,播放带有 nav_msgs/Odometry 消息的数据包
rosbag play 你自己需要可视化的数据包.bag
// 第三个终端,启动rviz,frame选择map,订阅发布的odom3d_path话题
rviz


http://chatgpt.dhexx.cn/article/pNuMWrPM.shtml

相关文章

基于rf2o_laser_odometry纯激光里程计的gmapping建图

ROS环境&#xff1a;ubuntu16.04 & ROS kinetic激光雷达&#xff1a;EAI-X4 or RPlidar-A1激光里程计&#xff1a;rf2o_laser_odometry建图&#xff1a;gmapping 对于很多刚入门的同学&#xff0c;购买一台带有高精度轮式里程计的ROS小车经济上往往不允许。但是大多数同学…

nav_msgs/Odometry消息的发布和tf变换

一。ROS使用tf来决定机器人的位置和静态地图中的传感器数据&#xff0c;但是tf中没有机器人的速度信息&#xff0c;所以导航功能包要求机器人 能够通过里程计信息源发布包含速度信息的里程计nav_msgs/Odometry 消息。 本篇将介绍nav_msgs/Odometry消息&#xff0c;并且通过代码…

【视觉SLAM】DM-VIO: Delayed Marginalization Visual-Inertial Odometry

L. v. Stumberg and D. Cremers, “DM-VIO: Delayed Marginalization Visual-Inertial Odometry,” in IEEE Robotics and Automation Letters, vol. 7, no. 2, pp. 1408-1415, April 2022, doi: 10.1109/LRA.2021.3140129. 论文阅读方法&#xff1a;Title&#xff0c;Abstract…

DSO(Direct Sparse Odometry)

DSO&#xff08;Direct Sparse Odometry&#xff09; 文章目录 1. 简述2. 概述3. 框架流程3.1 代码框架与数据表示3.2 VO流程 4. DSO详细介绍4.1 残差的构成与雅可比4.2 滑动窗口的维护与边缘化4.3 零空间&#xff0c;FEJ4.4 其他零散的模块和算法 5. 光度标定6. 评述7. 资料与…

SVO(SVO: fast semi-direct monocular visual odometry)

SVO2系列之深度滤波DepthFiltersvo_noteSVO&#xff08;SVO: fast semi-direct monocular visual odometry&#xff09;SVO 半直接视觉里程计【DepthFilter】深度滤波器【svopro】代码梳理 SVO&#xff08;SVO: fast semi-direct monocular visual odometry&#xff09;翻译 1、…

航迹推演

​ 做机器人底层程序的时候&#xff0c;经常用到航迹推演&#xff08;Odometry&#xff09;&#xff0c;无论是定位导航还是普通的方向控制。航迹推演中除了对机器人位姿进行估计&#xff0c;另一个很重要的关系是移动机器人前进速度、转向角速度与左轮速度、右轮速度之间的转换…

航迹推演(Odometry)

做机器人底层程序的时候&#xff0c;经常用到航迹推演&#xff08;Odometry&#xff09;&#xff0c;无论是定位导航还是普通的方向控制。航迹推演中除了对机器人位姿进行估计&#xff0c;另一个很重要的关系是移动机器人前进速度、转向角速度与左轮速度、右轮速度之间的转换。…

大数据基础编程+实验

本文仅用于分析和记录在校期间学习大数据分析课程的一点心得体会。 1、Ubuntu系统的安装和使用 本文采用Ubuntu16.04系统&#xff0c;安装系统省略&#xff0c;选择镜像后一直点击下一步 1.1 进入系统后&#xff0c;调整输入法&#xff0c;将输入法切换至中英文切换 1.2为…

Python数据库编程pymysql

Python数据库编程pymysql 一、数据库编程介绍 数据库编程就是针对数据库的操作&#xff0c;通过编写程序的方式&#xff0c;让程序做为数据库的客户端进行数据库操作。 对于MySQL的操作我们可以通过SQL语句&#xff0c;但是有很多情况下我们需要写入MySQL的数据非常多&#…

过程化SQL数据库编程

一、过程化SQL的块结构 基本的SQL是高度非过程化的语言。嵌入式SQL将SQL语句嵌入程序设计语言&#xff0c;借助高级语言的控制功能实现过程化。过程化SQL是对SQL的扩展&#xff0c;使其增加了过程化语句功能。 过程化SQL程序的基本结构是块。所有的过程化SQL程序都是由块组成的…

Java的数据库编程:JDBC

目录 一、JDBC是什么&#xff1f; 二、使用步骤 1.首先将JDBC的包引进java中 2.创建新的类来写代码 3.描述你的服务器 4.设置你的数据库地址,数据库用户名,数据库密码 5.连接数据库 6.书写你所要执行的SQL语句 7.把字符串风格的sql转化成一个对象 8.执行语句 9.回收资…

Python数据库编程

操作SQLite3数据库 从Python3.x版本开始&#xff0c;在标准库中已经内置了SQLlite3模块&#xff0c;它可以支持SQLite3数据库的访问和相关的数据库操作。在需要操作SQLite3数据库数据时&#xff0c;只须在程序中导入SQLite3模块即可。Python语言操作SQLite3数据库的基本流程如…

实验7 数据库编程

第1关 定义一个名为PROC_COUNT的无参数存储过程 任务描述 定义一个名为PROC_COUNT的无参数存储过程&#xff0c;查询工程名称中含有“厂”字的工程数量&#xff0c;并调用该存储过程。 相关知识 1、工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)…

C++数据库编程简介

C数据库编程简介 C数据库编程 ODBC简介 C数据库编程 ODBC连接SQL Server数据库 C数据库编程 ODBC插入数据 C数据库编程 ODBC查询数据 C数据库编程 ODBC删除数据 C数据库编程 ODBC修改数据 C数据库编程 ODBC连接MySQL增删改查数据 C数据库编程 MySQL Connecttor C简介 …

游戏设计模式——面向数据编程(转)

作者&#xff1a;KillerAery 出处&#xff1a;http://www.cnblogs.com/KillerAery/ 随着软件需求的日益复杂发展&#xff0c;远古时期面的向过程编程思想才渐渐萌生了面向对象编程思想。 当人们发现面向对象在应对高层软件的种种好处时&#xff0c;越来越沉醉于面向对象&…

数据科学必备Python编程基础

前言 对于Python复杂的编程语言中提取了数据分析常用的数据处理以及数据可视化等数据分析师常用的内容&#xff0c;区别与其他的Python编程教程&#xff0c;如果是纯开发的小伙伴&#xff0c;看完本系列的文章仅仅只能掌握数据相关处理的内容&#xff0c;并不能完全掌握开发方…

数据结构中的C语言编程基础

​ 在学习数据结构时&#xff0c;需要我们编写许多的程序&#xff0c;对于一些变量的定义、结构体的声明、指针的使用&#xff0c;需要有一个统一的标准&#xff0c;这样才能方便我们使用、并简化记忆难度。 ​ 本文结合自身的编程经验和高分笔记中对考研数据结构编程的一些建…

面向数据编程 Data-Oriented Programming [1]

RuntimeMapMaker3D-Pro 面向数据的编程原则 0.1 简介 面向数据的编程是一种编程范式&#xff0c;旨在简化以信息为中心的软件系统的设计和实施。而不是围绕着将数据和代码结合在一起的实体&#xff08;如实例化的对象&#xff09;来设计信息系统&#xff08;例如&#xff0c;从…

ODBC API开发教程

ODBC API开发教程 作者&#xff1a;闻怡洋 未得到作者允许请勿转载 http://wyy.vchelp.net/ 目录 第 1 章 介绍... 2 第 2 章 ODBC API访问数据库... 2 2.1 ODBC简要介绍... 2 2.1.1 在没有ODBC以前... 2 2.1.2 ODBC介绍... 3 2.1.3 ODBC结构…

Microsoft Server 2008 空间存储 应用方法详解

2019独角兽企业重金招聘Python工程师标准>>> 刚接触2008的空间存储&#xff0c;资料比较少&#xff0c;在数据库操作中有很多不懂的地方&#xff0c;包括用法&#xff0c;语法等&#xff0c;经过同事的指点明白了一些&#xff0c;感谢大腿同事~这里只记录数据库操作…