https://pointclouds.org/documentation/tutorials/pcd_file_format.html のとおり,PointCloudLibrary(PCL)内で定義された独自のフォーマット.だが最近はCloudCompareやOpen3Dなどほかのソフトウェアやライブラリでも読み込めるようになってきた.
アスキーもバイナリも対応しているので,その気になればテキストエディタで必要な情報を書くことで作成も可能.もちろんバイナリの方がデータ量が軽い.
データ構成
アスキーファイルをテキストエディタで開けば見られる.はじめにヘッダがあるのが特徴.バイナリファイルでもヘッダは文字化けしない.座標のみ(左),色付き(中),法線付き(右)いずれも定義可能だが,FIELDSと内容を合わせることに注意.



CloudCompareでの入力・出力
入力:CloudCompareの画面内にpcdファイルをドラッグアンドドロップする,もしくはファイル>開く
出力:「保存」でファイルの種類を「Point Cloud Library cloud(*.pcd)」にして保存する.バイナリで固定.
Point Cloud Libraryでの入力・出力
#include <iostream>
#include <pcl/point_types.h>
//ファイル入力
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile<pcl::PointXYZ>("保存元のファイル名.pcd", *cloud);
//ファイル出力 3つ目の引数はアスキー(false)orバイナリ(true)の判定
pcl::io::savePCDFile("保存先のファイル名.pcd", *cloud, false); //
Open3Dでの入力・出力
import open3d as o3d
# ファイル入力
pcd = o3d.io.read_point_cloud("保存元のファイル名.pcd")
# ファイル出力 3つ目の引数はアスキー(True)orバイナリ(False)の判定
o3d.io.write_point_cloud("保存先のファイル名.pcd", pcd, write_ascii=False)