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

2023-11-01

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 COMPONENTS
  geometry_msgs
  roscpp
  rospy
  std_msgs
message_generation
)

## Generate added messages and services with any dependencies listed here
 generate_messages(
   DEPENDENCIES
   geometry_msgs   std_msgs
 )

catkin_package(
  INCLUDE_DIRS include
  LIBRARIES path_3d
  CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs
  DEPENDS 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS里程计消息nav_msgs/Odometry的可视化方法 的相关文章

随机推荐

  • wish虚拟服务器,云服务器操作wish

    云服务器操作wish 内容精选 换一换 按需计费 按需计费是后付费模式 按弹性云服务器的实际使用时长计费 可以随时开通 删除弹性云服务器 包年 包月 包年 包月是预付费模式 按订单的购买周期计费 适用于可预估资源使用周期的场景 价格比按需计
  • [开发

    ModelMapper是一个用于对象之间转换的Java库 它能够自动映射一个Java对象的属性到另一个Java对象 依赖安装
  • C/C++

    文章目录 空间的读写 作用 实现strlen 实现strcpy 非字符空间 void 返回值 返回连续空间类型 示例 函数内部实现 示例 参考 麦子学院 嵌入式C语言高级 C语言函数的使用 空间的读写 void fun char p con
  • VUE enement-ui之table表格隐藏滚动条

    只需修改样式即可 deep el table body wrapper webkit scrollbar width 0 注意 element ui表格很多样式修改都需要加深度穿透才能生效 效果图
  • 深度神经网络的matlab实现,深度神经网络代码matlab

    为什么不用matlab做深度学习 matlab可以做深度学习 但是从实用性的角度来讲matlab的实现效率相对较低 训练耗时较长 初次学习计算机语言就选择matlab不是一个明智的选择 最好选用C或者Basic作为入门语言 matlab是一
  • 初探C语言链表(一)

    初探链表 一 静态链表 二 动态链表 初始化链表 1 尾插法建立链表 2 头插法建立链表 三 动态链表的基本操作 1 遍历 2 查找 3 插入 4 清空 5 删除 6 销毁 四 链表的综合应用 什么是链表 链表是由一系列节点组成 每个节点包
  • 面试经验:阿里Java后台开发

    最近原来实习时候的Boss联系我 说他跳槽到了阿里 问我有没有兴趣面一个Java后台开发岗位 考虑到我只工作了一年 现在去阿里肯定要降薪 因此也没有太强烈的意愿 但出于提升自我的角度考虑 参加了面试 一面 电话面试一小时 首先做一个简单的自
  • 09虚幻4【UE4】中模型沿着轨道运动

    目录 一 创建Track蓝图类 轨道 并添加一个Spline样条曲线 二 创建TrackCar 移动车 蓝图类并添加一个Mesh 车 方块都可以 三 编写TrackCar的蓝图逻辑 3 1 设置自定义事件MoveCar 3 2 添加时间轴
  • Python全栈开发【基础-04】一文彻底理解Python变量

    专栏介绍 本专栏为Python全栈开发系列文章 技术包括Python基础 函数 文件 面向对象 网络编程 并发编程 MySQL数据库 HTML JavaScript CSS JQuery bootstrap WSGI Django Flas
  • Android手写占位式插件化框架之apk解析原理系统源码分析

    前些天发现了一个蛮有意思的人工智能学习网站 8个字形容一下 通俗易懂 风趣幽默 感觉非常有意思 忍不住分享一下给大家 点击跳转到教程 前言 上一篇文章 Android手写占位式插件化框架之Activity通信 Service通信和Broad
  • JAVA--不同包类的相互访问

    1 不同包之间的访问在定义类之前使用import 加导入的类名 2 不同包没有任何关系的两个类 只有public的类中的public成员才能被另一个包访问 package yi 第一个包 public class A public void
  • sqlserver数据库触发器,对当前的表数据插入时,根据条件防止数据重复插入。

    这是一个之前做项目用的 以下是触发器sql语句 直接执行即可 如果需求不一样需要修改对应的语句就行 USE NetCoreWebApi GO Object Trigger dbo testInsertTrigger Script Date
  • git clone 遇到问题:fatal: unable to access

    git clone 遇到问题 fatal unable to access https github com ros planning navigation git Failed to connect to 127 0 0 1 port 4
  • LeNET的学习以及代码实现

    根据李沐老师的动手深度学习的书进行学习 import torch from torch import nn net nn Sequential nn Conv2d 1 6 kernel size 5 padding 2 nn Sigmoid
  • 运营活动类项目测试方案设计

    1 背景 随着业务的不断发展成熟 商业业务逐渐向重运营 重策略的模式发展 提出的需求中运营活动类需求数量也不断增多 而通过项目的积累 与其他业务的讨论共创 我们也积累了一批对运营活动类项目的测试点和对应的测试方案 下面我将从设计思路和具体内
  • Yolov5 face训练手册

    目录 支持tensorrt yolov5 face 人脸对齐 训练标签可视化 网络特点 关于tensorboard
  • 关于CUDA计算矩阵乘法那些事情

    我想记录一下今天所做的事情 与我自己对GPU 的对矩阵加速的并行运算的认知有点背道而驰 我一共写了三个相同的并行计算程序 理论上 在cpu上面运行的应该是最慢的 用共享内存计算的那个应该是最快的 但是 结果却是与预计的相反 我得提前声明一下
  • SpringBoot在一定时间内限制接口请求次数

    需要用到的知识 注解 AOP ExpiringMap 带有有效期的映射 我们可以自定义注解 把注解添加到我们的接口上 定义一个切面 执行方法前去ExpiringMap查询该IP在规定时间内请求了多少次 如超过次数则直接返回请求失败 需要用到
  • unity属性面板值的显示和隐藏

    Serialize功能 Unity3D 中提供了非常方便的功能可以帮助用户将 成员变量 在Inspector中显示 并且定义Serialize关系 简单的说 在没有自定义Inspector的情况下所有显示在Inspector 中的属性都同时
  • ROS里程计消息nav_msgs/Odometry的可视化方法

    ROS中里程计的消息类型为nav msgs Odometry 该消息类型具有以下结构 可以看到 里程计消息中的pose包含了位置pose position和姿态pose orientation 在ROS中 有一种常用消息类型为nav msg