ROS之rviz显示GNSS/INS运动轨迹

news2024/11/24 14:36:34

目录

一、显示自定义圆形轨迹

二、显示GNSS/INS轨迹

2.1代码show_path.cpp

2.2CMakeLists.txt

2.3显示效果


一、显示自定义圆形轨迹

参考:(九)ROS在rviz中实时显示轨迹(nav_msgs/Path消息的使用)_nav_msgs/path.h_火星机器人life的博客-CSDN博客

 默认代码的画圆速度很慢,改变ROS周期可以调整  //ros::Rate loop_rate(100);

二、显示GNSS/INS轨迹

 在接收到GNSS/INS位置和姿态信息后,由回调函数绘制轨迹path

2.1代码show_path.cpp

订阅GNSS/INS位置姿态信息,发布运动轨迹path

#include <ros/ros.h>
#include <ros/console.h>
#include <nav_msgs/Path.h>
#include <nav_msgs/Odometry.h>
#include <sensor_msgs/NavSatFix.h>
#include <std_msgs/String.h>
#include <geometry_msgs/Quaternion.h>
#include <geometry_msgs/PoseStamped.h>
#include <tf/transform_broadcaster.h>
#include <tf/tf.h>

#include "eul2qua.h"
#include "lla2utm.h"

nav_msgs::Path  path;
ros::Publisher  path_pub;

void odomCallback(const geometry_msgs::PoseStampedConstPtr& odom)
{
    geometry_msgs::PoseStamped this_pose_stamped;
    double pre_longitude = 116.17487972 , pre_latitude = 40.13351039 , pre_height = 37.43;
    double LL2UTM_E0 = LonLat2UTM(pre_longitude, pre_latitude).first;
    double LL2UTM_N0 = LonLat2UTM(pre_longitude, pre_latitude).second;
    // cout << "original: "<< LL2UTM_E0 << endl;
    // cout << "original: "<< LL2UTM_N0 << endl;

    double new_longitude = odom->pose.position.x;
    double new_latitude  = odom->pose.position.y;
    double LL2UTM_E_new = LonLat2UTM(new_longitude, new_latitude).first;
    double LL2UTM_N_new = LonLat2UTM(new_longitude, new_latitude).second;

    this_pose_stamped.pose.position.x = LL2UTM_E_new - LL2UTM_E0;
    this_pose_stamped.pose.position.y = LL2UTM_N_new - LL2UTM_N0;
    this_pose_stamped.pose.position.z = odom->pose.position.z - pre_height;

    this_pose_stamped.pose.orientation = odom -> pose.orientation;
 
    this_pose_stamped.header.stamp = ros::Time::now();
    this_pose_stamped.header.frame_id = "map";
 
    path.poses.push_back(this_pose_stamped);
    path.header.stamp = ros::Time::now();
    path.header.frame_id = "map";
    
    path_pub.publish(path);
    cout << "odom: "<<this_pose_stamped.pose.position.x << "  " << this_pose_stamped.pose.position.y << "  " << this_pose_stamped.pose.position.z << endl;
 
}
 
int main (int argc, char **argv)
{
    ros::init (argc, argv, "showpath");
    ros::NodeHandle ph;
    
    path_pub = ph.advertise<nav_msgs::Path>("trajectory_odom", 10, true);
    ros::Subscriber odomSub = ph.subscribe<geometry_msgs::PoseStamped>("/lla_qua", 10, odomCallback);  //订阅里程计话题信息

    ros::spin();
    return 0;
}

2.2CMakeLists.txt

cmake_minimum_required(VERSION 3.0.2)
project(show_path)

set(CMAKE_CXX_FLAGS "-std=c++11")
set(CMAKE_CXX_STANDARD 14)  


find_package(catkin REQUIRED COMPONENTS
  nav_msgs
  roscpp
  rospy
  # sensor_msgs
  std_msgs
  # tf
)
find_package(Eigen3 REQUIRED)
find_package(PCL REQUIRED)

catkin_package(
  CATKIN_DEPENDS roscpp std_msgs
  DEPENDS EIGEN3 PCL 
  INCLUDE_DIRS include
)

include_directories(
  include
  ${catkin_INCLUDE_DIRS}
  ${PCL_INCLUDE_DIRS}
)

aux_source_directory(./src SRCS)
add_executable(show_path ${SRCS})
target_link_libraries(show_path ${catkin_LIBRARIES})

2.3显示效果

 速度为0.5m/s的车运动80s的轨迹

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

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

相关文章

Java:正则表达式案例:爬数据,重复数据替换,数据分割

使用正则表达式查找一段文本中的内容 需求:请把下面文本中的电话&#xff0c;邮箱&#xff0c;座机号码&#xff0c;热线都爬取出来。 String data "电话:1866668888&#xff0c;18699997777\n" "或者联系邮箱: boniuitcast.cn&#xff0c;\n" "座机…

使用 PostgreSQL 创建全文搜索引擎1

PostgreSQL 提供了必要的模块&#xff0c;可以组合和创建自己的全文搜索搜索引擎。让我们尝试一下。 这是系列文章的第 1 部分&#xff0c;将要在其中探索 PostgreSQL 中的全文搜索功能&#xff0c;并研究我们可以完成多少典型的搜索引擎功能。在第 2 部分中&#xff0c;我们将…

【Redis从头学-0】一张思维导图对Redis做出基本介绍

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Re…

[centos]设置主机名

1、设置 hostnamectl set-hostname 名字 2、查看是否生效 hostnamectl status 3、打开一个新链接就可以了

零代码编程:用ChatGPT批量删除Excel文件中的行

文件夹中有上百个Excel文件&#xff0c;每个文件中都有如下所示的两行&#xff0c;要进行批量删除。 在ChatGPT中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个处理Excel文件内容的任务&#xff0c;具体步骤如下&#xff1a; 打开F盘的文件夹&#x…

16.1.2 Linux 的多用户多任务环境

在 Linux 下面执行一个指令时&#xff0c;系统会将相关的权限、属性、程序码与数据等均载入内存&#xff0c; 并给予这个单元一个程序识别码 &#xff08;PID&#xff09;&#xff0c;最终该指令可以进行的任务则与这个 PID 的权限有关。根据这个说明&#xff0c;我们就可以简单…

ESD培训和咨询的相关服务

ESD&#xff08;Electrostatic Discharge&#xff0c;静电放电&#xff09;是指在两个物体之间发生的电荷平衡或不平衡&#xff0c;导致静电能量的释放。静电放电可能会对敏感的电子设备、芯片和电子元件产生损坏&#xff0c;因此对于需要处理电子设备的行业来说&#xff0c;ES…

MSP432自主开发笔记6:定时器多通道捕获多条编码器线脉冲数

所用开发板&#xff1a;MSP432P401R 今日在此更新一下编码器测速的定时器捕获写法&#xff0c;之前学习时竟然忘记更新了~~ 本文讲如何用定时器的通道来 捕获编码器的脉冲信号数量&#xff0c;不提供速度路程的计算方式&#xff0c; 文章提供源码&#xff0c;测试工程下载&a…

手动实现 Spring 底层机制【初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP】之实现任务阶段 5- bean 后置处理器

&#x1f600;前言 手动实现 Spring 底层机制【初始化 IOC容器依赖注入BeanPostProcessor 机制AOP】的第五篇具体实现了任务阶段 5- bean 后置处理器 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希…

ModaHub魔搭社区:从OpenAI实践看分工必要性,核心关注工作流相关的基础软件工具栈

从OpenAI实践看分工必要性,核心关注工作流相关的基础软件工具栈 参考海外OpenAI的率先尝试,工作流分工、点工具加持助力成功。一方面,OpenAI在《GPT-4 Technical Report》论文中[1]中披露了参与GPT 4开发的人员分工,共249人,角色分工明确,预训练、强化学习和对齐、部署等…

时间序列去趋势化和傅里叶变换

在计算傅里叶变换之前对信号去趋势是一种常见的做法&#xff0c;特别是在处理时间序列时。在这篇文章中&#xff0c;我将从数学和视觉上展示信号去趋势是如何影响傅里叶变换的。 这篇文章的目的是让介绍理解什么是常数和线性去趋势&#xff0c;为什么我们使用它们&#xff0c;…

CRM系统如何搭建?流程是什么样的?

CRM系统可以提高企业的销售效率和客户满意度&#xff0c;从而增加企业的收入和利润。但是&#xff0c;要想成功地上线CRM系统&#xff0c;需要经过一系列的步骤和流程&#xff0c;下面说说&#xff0c;企业如何上线CRM系统&#xff1f;CRM系统搭建流程。 1、需求分析 需求分析…

记一次物理机安装centos7遇到的问题

首先制作U盘镜像&#xff08;之前装windows的大白菜之类的就没用了&#xff09; 用的这个UltraISO制作U盘镜像 然后从U盘启动开始安装&#xff0c; 问题一 安装时报错 dracut-pre-udev[351]:modprobe :ERROR:could not insert ‘floppy’ dracut-pre-udev[351]:modprobe…

Nacos源码 (3) 注册中心

本文将从一个服务注册示例入手&#xff0c;通过阅读客户端、服务端源码&#xff0c;分析服务注册、服务发现原理。 使用的2.0.2的版本。 返回目录 客户端 创建NacosNamingService对象 NacosNamingService nacosNamingService new NacosNamingService(NACOS_HOST);NacosNami…

华为OD机试 - 最长的连续子序列 (Java 2022Q4 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》…

ISIS技术(第三十七课)

1 分享一下华为官网上的一张地图 官网地址:https://support.huawei.com/hedex/hdx.do?docid=EDOC1000105967&id=ZH-CN_CONCEPT_0000001501534705 2 路由的分类 -直连路由 直接连接的路由,且配置了IP地址之后(在同一网段内),就是直连路由。 -非直连路由 -静态路由…

如何在金属制品业运用IPD?

金属制品行业是指以金属材料为原料&#xff0c;通过加工、制造、加工等工艺制造出各种金属制品的企业和产业。这些金属制品包括但不限于机械设备、工具、建筑材料、家具、电子产品、交通运输设备等。金属制品加工业是机械装备行业的一个子行业&#xff0c;包括结构性金属制品制…

SpringBoot对一个URL通过method(GET、POST、PUT、DELETE)实现增删改查操作

目录 1. rest风格基础2. 开启方法3. 实战练习 1. rest风格基础 我们都知道GET、POST、PUT、DELETE分别对应查、增、改、删除 虽然Postman这些工具可以直接发送GET、POST、PUT、DELETE请求。但是RequestMapping并不支持PUT和DELETE请求操作。需要我们手动开启 2. 开启方法 P…

ModaHub魔搭社区:Milvus Cloud素材集合帖,等你查收

Hi~Milvus Cloud 的各位朋友,这是一期 Milvus Cloud 素材弹药库的集中汇总帖。随着向量数据库的火爆,越来越多的伙伴开始关注到向量数据库并开始使用 Milvus Cloud 。 考虑到目前信息获取的渠道多且分散,我们专门为大家整理了一期 Milvus Cloud 信息集合帖,让大家可以在快…

iPhone苹果手机触屏失灵无法关机,如何强制重启

参考:https://zhuanlan.zhihu.com/p/615223121 1&#xff0c;只轻按一下音量上键后快速松开 2&#xff0c;只轻按一下音量下键后快速松开 3&#xff0c;只按住右侧电源键长按不松手&#xff0c;直到手机关机。