在rviz中实时显示车辆轨迹

news2024/11/24 4:32:08

在工作空间中创建包

cd ~/catkin_ws/src
catkin_create_pkg trajectory_display_example roscpp nav_msgs sensor_msgs

在src文件夹下创建一个C++源文件

#include <ros/ros.h>
#include <nav_msgs/Odometry.h>
#include <nav_msgs/Path.h>
#include <sensor_msgs/Imu.h>
#include <geometry_msgs/Point.h>
#include <visualization_msgs/Marker.h>

class TrajectoryDisplay
{
public:
    TrajectoryDisplay()
    {
        ros::NodeHandle nh;
        odom_sub = nh.subscribe("/raw_odom", 10, &TrajectoryDisplay::odomCallback, this);
        imu_sub = nh.subscribe("imu", 10, &TrajectoryDisplay::imuCallback, this);
        path_pub = nh.advertise<nav_msgs::Path>("/trajectory_odom", 10);
    }

    void odomCallback(const nav_msgs::Odometry::ConstPtr& odom)
    {
        geometry_msgs::PoseStamped this_pose_stamped;
        this_pose_stamped.pose.position.x = odom->pose.pose.position.x;
        this_pose_stamped.pose.position.y = odom->pose.pose.position.y;
        this_pose_stamped.pose.position.z = odom->pose.pose.position.z;

        this_pose_stamped.pose.orientation = odom->pose.pose.orientation;

        this_pose_stamped.header.stamp = ros::Time::now();
        this_pose_stamped.header.frame_id = "odom";
        
        path.poses.push_back(this_pose_stamped);

        path.header.stamp = ros::Time::now();
        path.header.frame_id = "odom";
        path_pub.publish(path);
        ROS_INFO("odom : %f, %f, %f", odom->pose.pose.position.x, odom->pose.pose.position.y, odom->pose.pose.position.z);
    }

    void imuCallback(const sensor_msgs::Imu::ConstPtr& msg)
    {
        // Do something with IMU data if needed
    }

private:
    ros::Subscriber odom_sub;
    ros::Subscriber imu_sub;
    ros::Publisher path_pub;
    nav_msgs::Path path;
};

int main(int argc, char** argv)
{
    ros::init(argc, argv, "trajectory_display_node");
    TrajectoryDisplay trajectory_display;
    ros::spin();
    return 0;
}



回环效果

只有轮子里程计,效果你懂得。
在这里插入图片描述
odom+IMU
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/857342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

roi感兴趣区域像素值统计,求roi感兴趣区域内像素值的最小值、最大值、均值、标准差(标准方差)

文章目录 1、求roi感兴趣区域内像素值的最小值、最大值minMaxLoc() 函数原型&#xff1a;&#xff08;1&#xff09;原型一&#xff1a;&#xff08;2&#xff09;原型二&#xff1a;&#xff08;3&#xff09;另外与 minMaxLoc()函数原型一&#xff0c;用法相同的函数 minMaxI…

mac ssh连接另一台window虚拟机vm

vmware配置端口映射 编辑(E) > 虚拟网络编辑器(N)... > NAT设置(S)... window防火墙&#xff0c;入站规则添加5555端口 控制面板 > 系统和安全 > Windows 防火墙>高级设置>入站规则>新建规则... tips windows查看端口命令&#xff1a;netstat -ano | f…

html实现商品图片放大镜,html图片放大镜预览

效果 实现 复制粘贴&#xff0c;修改图片路径即可使用 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>商品图片放大镜</title></head><style>body {margin: 0;padding: 0;}#app {padding: 10px;posit…

基于Java+SpringBoot+Vue的网吧管理系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

CEC2013(MATLAB):遗传算法(Genetic Algorithm,GA)求解CEC2013的28个函数

一、遗传算法GA 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;起源于对生物系统所进行的计算机模拟研究&#xff0c;是一种随机全局搜索优化方法&#xff0c;它模拟了自然选择和遗传中发生的复制、交叉(crossover)和变异(mutation)等现象&#xff0c;从任…

国际货币汇率 API 数据接口

国际货币汇率 API 数据接口 支持多种货币对&#xff0c;每日精准汇率&#xff0c;多币种支持。 1. 产品功能 支持多种货币汇率查询&#xff1b;支持部分加密货币汇率查询&#xff1b;数据为每日更新汇率数据&#xff1b;可一次查询源货币代码对应所有目标货币汇率&#xff1b…

无涯教程-Perl - getppid函数

描述 该函数返回父进程的进程ID。 语法 以下是此函数的简单语法- getppid返回值 该函数返回父进程的进程ID。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl$ppidgetppid();print "Parent Process ID $ppid\n";执行上述代码后,将产生以下输出- Paren…

多模态模型评价

论文1 【Evaluating Object Hallucination in Large Vision-Language Models】 这篇文章主要是评价视觉-语言模型中出现“幻觉”的评价。论文中是这样定义幻觉的 we find that LVLMs suffer from the hallucination problem, i.e., they tend to generate objects that are in…

哪个类包含clone方法?是Cloneable还是Object?

在Java中&#xff0c;clone方法是定义在Object类中的。所有的Java类都继承自Object类&#xff0c;因此每个Java对象都继承了clone方法。然而&#xff0c;要成功地使用clone方法&#xff0c;需要满足一些条件&#xff0c;其中之一是被克隆的类必须实现Cloneable接口。 虽然clone…

途乐证券-光伏、储能板块拉升 德业股份、固德威等大幅走高

光伏、储能等新能源板块10日盘中震荡上扬&#xff0c;截至发稿&#xff0c;德业股份涨近8%&#xff0c;锦浪科技、固德威、阿特斯等涨逾6%&#xff0c;禾迈股份、昱能科技涨近4%。 消息面上&#xff0c;据中关村储能产业技术联盟计算&#xff0c;2021年至2023年上半年&#xff…

无涯教程-Perl - glob函数

描述 此函数返回与EXPR匹配的文件的列表,这些文件将由标准Bourne shell进行扩展。如果EXPR未指定路径,请使用当前目录。如果省略EXPR,则使用$_的值。 从Perl 5.6开始,扩展是在内部完成的,而不是使用外部脚本。扩展遵循csh(以及任何派生形式,包括tcsh和bash)的扩展方式,其翻译…

【雕爷学编程】Arduino动手做(08)---湿敏电阻传感器模块3

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

示波器带宽和采样率

示波器带宽概念定义&#xff1a; 在示波器的输入端加相同幅值的正弦波&#xff0c;幅度衰减至-3dB&#xff08;70.7%&#xff09;时的频率点就是示波器的带宽。 如果我们用100MHz带宽的示波器测量&#xff1a;幅值为1V &#xff0c;频率为100MHz 的正弦波时&#xff0c;实际得到…

Java基础篇--对象和类

目录 对象&#xff08;Object&#xff09; 类&#xff08;Class&#xff09; 构造方法 创建对象 访问对象的成员 总结 在面向对象中&#xff0c;为了做到让程序对事物的描述与事物在现实中的形态保持一致&#xff0c;面向对象思想中提出了两个概念&#xff0c;即类和对象…

基于jeecg-boot的flowable流程增加部门经理审批功能

因为之前没有在流程设计器里增加部门经理审批,所以这次增加这个功能 界面如下: 同时可以对于多名部门经理可以进行多实例配置,如下图: 一、前端实现 主要修改userTask.vue文件。 <template><div style="margin-top: 16px"><el-row><h4&…

Vue3的自定义指令,项目中的运用

目录 一、什么是自定义指令 1. 定义 2. 什么时候使用自定义指定 二、Vue3中的自定义指令 1.全局自定义指令 2. 组件自定义指令 三、指令钩子 1. 钩子 2. 钩子参数 四、自定义指令的常见用法 1.添加事件监听 2.操作DOM 一、什么是自定义指令 1. 定义 自定义指令是一…

k8s pod启动报错: no route to host

k8s pod kuboard启动报错 查看pod命令 kubectl get pods -A kubectl get pods --all-namespaces查看报错pod日志 命令&#xff1a; kubectl logs -f -n namespace nametime"2023-08-09T13:40:3608:00" levelerror msg"不能获取 AgentEndpointsGet \"http:/…

ssm学院党员管理系统源码和论文PPT

ssm学院党员管理系统源码和论文PPT002 开发工具&#xff1a;idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具&#xff1a;navcat,小海豚等 开发技术&#xff1a;java ssm tomcat8.5 选题意义、价值和目标&#xff1a; 随着鄂尔多斯应用技术学院招生规模的不断扩大&…

【玩转pandas系列】pandas加载数据,分箱操作和时间序列,绘制图形

知识目录 前言一、加载数据1 - 加载CSV文件2 - 加载Excel文件3 - 加载数据库数据 二、分箱1 - 等宽分箱2 - 等频分箱 三、时间序列1 - Timestamp和Period的创建2 - 索引和切片3 - 属性和移动4 - 频率转换5 - 数据聚合 四、pandas绘制图形1 - 折线图2 - 柱状图3 - 直方图4 - 饼图…

【Mysql】数据库基础与基本操作

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…