ROS中发布GNSS和点云PCD信息

2024-05-03 11:18
文章标签 发布 信息 ros 点云 gnss pcd

本文主要是介绍ROS中发布GNSS和点云PCD信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.发布gnss

ros::Publisher pub = nh.advertise<nmea_msgs::Sentence>("/nmea_sentence", 1);
// Publish all topics with the same ROS time stamp.
ros::Time topic_publish_time = ros::Time::now();// === NMEA Sentence ===
msg.header.stamp = topic_publish_time;
msg.header.frame_id = "/gps";
// 发布间隔
ros::WallDuration(0.1).sleep();
msg.sentence = `$GPGGA,063201.60,3016.3898531,N,12004.0198533,E,4,19,0.7,6.795,M,7.038,M,1.6,1792*78;
pub.publish(msg);

发布后的完整信息为
header:
seq: 156476
stamp:
secs: 1427157704
nsecs: 536139011
frame_id: “/gps”
sentence: “$GNRMC,004129.40,A,3514.0854393,N,13700.3090060,E,5.9921,147.814,240315,7.320,E,D*10”

2.发布pcd文件

void loadMap()
{std::vector<std::string> pcd_paths;string filePath = "/home/rtour/Desktop/data/2019-12-31-14-32-00-886/Lidar/lidar0/";vector<string> files;//vector<string> filesname;//获取该路径下的所有文件路径get_filelist_from_dir(filePath, files);ros::NodeHandle n;pcd_pub = n.advertise<sensor_msgs::PointCloud2>("points_raw", 1, true);//遍历所有路径for (int i = 1; i < files.size(); ++i) {string dir = filePath;std::string path(dir.append(files[i]));pcd_paths.push_back(path);sensor_msgs::PointCloud2 pcd;if (pcl::io::loadPCDFile(path, pcd) == -1) {std::cerr << "load failed " << path << std::endl;}int err = 0;// Give time to set up pub/subros::WallDuration(0.1).sleep();publish_pcd(pcd,&err);}
}
void publish_pcd(sensor_msgs::PointCloud2 pcd, const int* errp = NULL)
{if (pcd.width != 0) {cout<<"pub"<<endl;pcd.header.frame_id = "/velodyne";ros::Time topic_publish_time = ros::Time::now();pcd.header.stamp = topic_publish_time;pcd_pub.publish(pcd);if (errp == NULL || *errp == 0) {//stat_msg.data = true;//stat_pub.publish(stat_msg);}}
}

3.平移和旋转pcd

string filePath = "/home/rtour/.autoware/lz/xxtest.pcd";pcl::PointCloud<pcl::PointXYZ>::Ptr source_cloud (new pcl::PointCloud<pcl::PointXYZ> ());if (pcl::io::loadPCDFile (filePath, *source_cloud) < 0)  {std::cout << "Error loading point cloud " << filePath << std::endl << std::endl;return;}/* Reminder: how transformation matrices work :|-------> This column is the translation| 1 0 0 x |  \| 0 1 0 y |   }-> The identity 3x3 matrix (no rotation) on the left| 0 0 1 z |  /| 0 0 0 1 |    -> We do not use this line (and it has to stay 0,0,0,1)METHOD #1: Using a Matrix4fThis is the "manual" method, perfect to understand but error prone !*/// Define a rotation matrix (see https://en.wikipedia.org/wiki/Rotation_matrix)float theta = -M_PI/3; // The angle of rotation in radians/*  METHOD #2: Using a Affine3fThis method is easier and less error prone*/Eigen::Affine3f transform_2 = Eigen::Affine3f::Identity();// Define a translation transform_2.translation() << 31.935742, 720.038504 ,6.741113;// The same rotation matrix as before; theta radians arround Z axistransform_2.rotate (Eigen::AngleAxisf (theta, Eigen::Vector3f::UnitZ()));// Print the transformationprintf ("\nMethod #2: using an Affine3f\n");std::cout << transform_2.matrix() << std::endl;// Executing the transformationstd::cout << "transform start" << std::endl;pcl::PointCloud<pcl::PointXYZ>::Ptr transformed_cloud (new pcl::PointCloud<pcl::PointXYZ> ());// You can either apply transform_1 or transform_2; they are the samepcl::transformPointCloud (*source_cloud, *transformed_cloud, transform_2);//保存为一个新的pcd文件 pcl::io::savePCDFileASCII("/home/rtour/.autoware/lz/jh.pcd", *transformed_cloud);
std::cout << "transform end" << std::endl;

这篇关于ROS中发布GNSS和点云PCD信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/956618

相关文章

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

GNSS CTS GNSS Start and Location Flow of Android15

目录 1. 本文概述2.CTS 测试3.Gnss Flow3.1 Gnss Start Flow3.2 Gnss Location Output Flow 1. 本文概述 本来是为了做Android 14 Gnss CTS 的相关环境的搭建和测试,然后在测试中遇到了一些问题,去寻找CTS源码(/cts/tests/tests/location/src/android/locat

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。例如版本升级后需要重新打包并,替换原有jar包等等一些额外的工作量和麻烦。为了避免这些不必要的麻烦,通常我们

禅道Docker安装包发布

禅道Docker安装包发布 大家好, 禅道Docker安装包发布。 一、下载地址 禅道开源版:   /dl/zentao/docker/docker_zentao.zip  备用下载地址:https://download.csdn.net/download/u013490585/16271485 数据库用户名: root,默认密码: 123456。运行时,可以设置 MYSQL_ROOT_P

Linux命令(11):系统信息查看命令

系统 # uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# cat /proc/cpuinfo # 查看CPU信息# hostname # 查看计算机名# lspci -tv # 列出所有PCI设备# lsusb -tv

ROS - C++实现RosBag包回放/提取

文章目录 1. 回放原理2. 回放/提取 多个话题3. 回放/提取数据包,并实时发布 1. 回放原理 #include <ros/ros.h>#include <rosbag/bag.h>#include <std_msgs/String.h>int main(int argc, char** argv){// 初始化ROS节点ros::init(argc, argv,