TXT生成PCD文件

TXT生成PCD文件(Python实现)

代码功能:将保存点云信息的TXT文件转化为pcl可读的pcd文件。

'''
This code is transform .txt to the .pcd.
and this is the original point cloud
2019.5.23
'''

import os
import sys
import numpy as np

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
ROOT_DIR = os.path.dirname(os.path.dirname(BASE_DIR))
sys.path.append(BASE_DIR)
sys.path.append(ROOT_DIR)
ROOT_DIR = os.path.join(ROOT_DIR, 'pointnet(enhence_11)/sem_seg/log11')

colour_map = (255,0,0,
              0,255,0,
              0,0,255,
              156,102,31,
              255,192,203,
              255,0,255,
              0,255,255,
              255,255,0,
              51,161,201,
              128,42,42,
              48,128,20,
              160,32,240,
              255,128,0)

def creat_real_pcd(input_path, output_path):
    # loda data
    Full_Data = np.loadtxt(input_path)
    # creat output file
    if os.path.exists(output_path):
        os.remove(output_path)
    Output_Data = open(output_path, 'a')
    # headers
    Output_Data.write('# .PCD v0.7 - Point Cloud Data file format\nVERSION 0.7\nFIELDS x y z rgba\nSIZE 4 4 4 4\nTYPE F F F U\nCOUNT 1 1 1 1')
    string = '\nWIDTH ' + str(Full_Data.shape[0])
    Output_Data.write(string)
    Output_Data.write('\nHEIGHT 1\nVIEWPOINT 0 0 0 1 0 0 0')
    string = '\nPOINTS ' + str(Full_Data.shape[0])
    Output_Data.write(string)
    Output_Data.write('\nDATA ascii')
    # pack RGB
    for j in range(Full_Data.shape[0]):
        R=Full_Data[j,3]
        G=Full_Data[j,4]
        B=Full_Data[j,5]
        value = (int(R) << 16 | int(G) << 8 | int(B))
        string = (
### 如何在 Gazebo 中创建或导出 PCD 文件格式点云数据 要在 Gazebo 中生成或导出 PCD 文件格式的点云数据,可以通过 ROS 和相关工具链实现这一目标。以下是具体方法: #### 使用 ROS 订阅激光雷达数据并生成 PCD 文件 通过 ROS 的 `laser_geometry` 和 `pcl_ros` 库可以将激光扫描消息换为点云消息,并进一步将其保存为 PCD 文件。这种方法适用于模拟环境中由 Gazebo 提供的激光雷达传感器。 1. **设置依赖项** 在 CMakeLists.txt 文件中添加必要的依赖项,包括但不限于 roscpp、pcl_conversions、pcl_ros、sensor_msgs 等[^4]。 2. **编写节点代码** 编写一个 ROS 节点来订阅 `/scan` 或其他激光雷达主题的消息,并将其换为点云数据后再保存到本地磁盘上作为 PCD 文件。以下是一个简单的 Python 实现示例: ```python import rospy from sensor_msgs.msg import PointCloud2, LaserScan import laser_geometry.laser_geometry as lg import pcl def scan_callback(scan_msg): cloud_out = lp.projectLaser(scan_msg) pcl.save(cloud_out, 'pointcloud.pcd') if __name__ == '__main__': rospy.init_node('pcd_saver', anonymous=True) lp = lg.LaserProjection() sub_scan = rospy.Subscriber('/scan', LaserScan, scan_callback) rospy.spin() ``` 3. **运行仿真环境** 启动包含激光雷达模型的 Gazebo 仿真场景,确保该设备发布有效的 `/scan` 数据流给上述自定义编写的 ROS 节点处理。 #### 将 .PLY 文件成 .DAE 并载入 Gazebo 场景 如果已经拥有了某种形式的三维几何表示比如 `.ply` 格式的网格,则需先把它变为适合导入至 Gazebo 的 COLLADA (.dae) 文件类型。这是因为尽管某些扩展名可能看起来相似,但并非所有的图形标准都能被 Gazebos 支持良好地解析出来;例如它不原生接受`.ply`类型的输入而是偏好于`.stl`, `.obj`, 又或者是前述提到过的`.dae`. 对于这种情况下的解决方案如下所示: 1. 执行文件格式变换操作——利用第三方应用程序如 MeshLab 来完成从`.ply`向`.dae`过渡的过程; - 注意事项:依据过往经验分享指出当尝试单纯依靠原始未经优化加工后的 Colmap Sparse PLY 输出成果来做此步骤时常会遇到诸多障碍,最终得到的结果往往不尽理想甚至完全无法正常使用[^3]. 2. 修改 SDF 描述文档以引入新产生的资源对象进入虚拟世界布局之中去. --- ### 总结说明 综上所述,在Gazebo里边获取PCD格式的数据主要依托外部插件或者脚本辅助达成目的,要么是从现有的传感器读数出发经一系列计算得出对应的空间分布状况记录下来形成所需的文件结构;要么就是借助中间媒介形态经过特定程序改造成兼容的目标样式再加以运用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值