首页 > 其他分享 >ROS_发布点云pcd到rviz

ROS_发布点云pcd到rviz

时间:2022-11-24 19:34:54浏览次数:50  
标签:rviz point PointField vis msg 点云 ROS pcd

发布标注好的点云

发布标注好的点云

读取点云文件-发布

 std_msgs/Header header:数据头,包含该帧点云的时间戳、坐标系等属性信息
 uint32 			height:data的高度,一帧点云通常height=1,即表示无序点云;
 uint32 			width:data的宽度,即每行对应点的数量;
 sensor_msgs/PointField[] fields:包含每个点的字段属性信息,详见下文。
 bool 			is_bigendian:点云是否按正序排列
 uint32 			point_step:每个点占用的比特数,1字节=8比特,与PointField里所有字节数之和相等。
 uint32 			row_step:每行占用的比特数,=点的数量*Point_step;
 uint8[] 		data:序列化后的点云二进制数据,所有点信息都在一串字符中,无法通过data[i]取值。
 bool 			is_dense:是否存在无效点。

示例代码

#! /usr/bin/env python3
# -*- coding=utf-8 -*-

import rospy
from sensor_msgs.msg import PointField
from sensor_msgs.msg import PointCloud2
import open3d as o3d
import numpy as np
import os
 
def talker():
    pub = rospy.Publisher('points_b', PointCloud2, queue_size=10)
    rospy.init_node('node', anonymous=True)
    rate = rospy.Rate(2) # 2hz
    ##处理PCD点云
    pcd_path = '~/pcd'
	#得到文件夹下的所有文件名称
    files= os.listdir(pcd_path) 
    #files.sort(key = lambda x: int(x[:-4]))
    files.sort()
    for i,pcd_file in enumerate(files):
        print(i,pcd_file)
        pcd = o3d.t.io.read_point_cloud(os.path.join(pcd_path,pcd_file))
        exp_points = pcd.point
        point_xyz = exp_points['positions'].numpy()
        # 构造消息
        msg = PointCloud2()
        msg.header.stamp = rospy.Time().now()
        msg.header.frame_id = "map"
        msg.fields = [
            PointField('x', 0, PointField.FLOAT32, 1),
            PointField('y', 4, PointField.FLOAT32, 1),
            PointField('z', 8, PointField.FLOAT32, 1)]
        msg.is_bigendian = False
        msg.point_step = 12
        msg.row_step = msg.point_step * point_xyz.shape[0]
        msg.is_dense = False
        if len(point_xyz.shape) == 3:
            msg.height = point_xyz.shape[1]
            msg.width = point_xyz.shape[0]
        else:
            msg.height = 1
            msg.width = len(point_xyz)
        msg.data = np.asarray(point_xyz, np.float32).tostring()
        pub.publish(msg)       
        rate.sleep()
        
if __name__ == '__main__':     
    for i in range(20):
        talker()

点云保存为图像

vis = o3d.visualization.Visualizer()
vis.create_window()
vis.add_geometry(pcd)
vis.update_geometry()
vis.poll_events()
vis.update_renderer()
### 将点云保存为图像
vis.capture_screen_image('test.png') 
vis.run() 
vis.destroy_window() 
 
###Have you tried: vis.capture_screen_image('test.png', true)?
###Is the window visible and showing the image prior to this function call, 
###i.e., try to add time.sleep(5) before the capture_screen_image?  

参考

 【ros】numpy 格式点云转 sensor_msgs/PointCloud2 格式发布 https://blog.csdn.net/qq_35632833/article/details/108050233
 动手学ROS(13):点云(PointCloud2)的发送与接收--python和c++示例 https://zhuanlan.zhihu.com/p/421691350
 ROS(机器人操作系统) http://www.autolabor.com.cn/book/ROSTutorials/
  【Open3D】点云可视化 https://zhuanlan.zhihu.com/p/483414760
  https://github.com/isl-org/Open3D/issues/1110

标签:rviz,point,PointField,vis,msg,点云,ROS,pcd
From: https://www.cnblogs.com/ytwang/p/16922980.html

相关文章

  • navicat 连接mssqlserver 错误:[IM002] [Microsoft][ODBC驱动程序管理器]未发现数据源
    错误解决安装完成后,下面就是用本机的Navicat来连接SQLserver,这里确实有点麻烦,所以特地来写个博客记录一下当我们想要连接的时候会出现这样的错误[IM002][Microsoft][ODBC......
  • Spring @CrossOrigin注解原理是什么
    问题起源在Postman调用接口中,忘记设置Origin,发现@CrossOrigin未生效(响应头没有cors的)在filter中设置了Access-Control-Allow-Origin发现@CrossOrigin未生效(响应头没有co......
  • ros +realsenseD435+大象Pro600手眼标定
    踩坑手眼标定的算法网上是比较多的,但是很多都不好用。github上高赞的easy_handeye,试了一下,但是mycobot600没有提供moveit的配置,而我ROS基础不是很好,不太会修改示例代码。折......
  • ROS_C++_涉及的代数以及C++代码库
    基本线性代数库Ceres、Eigen、Sophus、G2O基本线性代数子程序,BasicLinearAlgebraSubprograms,是一个API标淮,用以规范发布基础线性代数操作的数值库Netlib用......
  • ROS的Fasttrack,可以极大的减少ROS的CPU使用率已经带宽!特别注意:如果开启了 fasttrack,si
    原文http://t.zoukankan.com/itfat-p-12936850.htmlhttps://wiki.mikrotik.com/wiki/Manual:IP/Fasttrack特别注意:如果开启了fasttrack,simplequeue将失效。需要两条......
  • ROS_C++_第三方库Eigen
    Eigen提供了快速的矩阵线性代数运算,矩阵、向量、旋转矩阵、变换矩阵。Eigen是纯头文件搭建成的库,使用时只需引入Eigen的头文件即可,不需要链接库文件target_link安装......
  • regexcrossword Hamlet篇
    一个练习正则表达式的网站,用类似数独的方式填写,但是规则是正则。从简单到难循序渐进,网址:https://regexcrossword.com偶尔访问不了基本的话,DoubleCross篇之前的做一遍,正......
  • 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
    1、需要在服务器安装AccessDatabaseEngine_2010_X64.exe驱动程序2、虽然金蝶安装程序目录是32位的,但是IIS的w3wp进程是64位,所以安装64位的AccessDatabaseEngine才有用3......
  • ROS_解析protobuf
    protobufProtobuf的数据结构定义的语法,以及如何编译proto文件,以及相关的主要读写proto文件结构中的API说明:读bin文件API是bin文件二进制形式,Prototxt文件是......
  • 点云存储格式
    vSLAMNet(十)-三维点云处理-平滑、滤波和下采样|学步......