rotation_pcd.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #!/usr/bin/env python3
  2. import rospy
  3. import pcl
  4. import numpy as np
  5. def main():
  6. # 初始化ROS节点
  7. rospy.init_node('transform_pcd_node', anonymous=True)
  8. # 定义点云地图的路径和文件名
  9. pcd_path = "/home/tong/renyuan_pointcloud/4/trans/LazerData.pcd"
  10. # 读取点云地图
  11. cloud = pcl.load(pcd_path)
  12. points = cloud.to_array()
  13. centroid = np.mean(points, axis=0)
  14. points_centered = points - centroid
  15. theta = np.pi
  16. #旋转点云
  17. transform_matrix = np.array([[1, 0, 0],
  18. [0, np.cos(theta), -np.sin(theta)],
  19. [0, np.sin(theta), np.cos(theta)]], dtype=np.float32)
  20. # 手动变换点云
  21. transformed_points = np.dot(points_centered[:, :3],transform_matrix.T)
  22. transformed_points += centroid
  23. # #定义位移向量(沿Z轴方向移动一个单位长度)
  24. # print("Transformed Points (before translation):", transformed_points)
  25. translation_vector = np.array([-1000, 0, 0], dtype=np.float32)
  26. transformed_points += translation_vector
  27. # print("Transformed Points (after translation):", transformed_points)
  28. # 创建新的点云对象
  29. transformed_cloud = pcl.PointCloud()
  30. transformed_cloud.from_array(transformed_points.astype(np.float32))
  31. # 保存旋转后的点云地图到PCD文件中
  32. pcl.save(transformed_cloud, "/home/tong/renyuan_pointcloud/4/trans/trans.pcd")
  33. if __name__ == "__main__":
  34. main()