PCL点云转RangeImage函数
template <typename PointCloudType> void
RangeImage::createFromPointCloud (const PointCloudType& point_cloud, float angular_resolution,
float max_angle_width, float max_angle_height,
const Eigen::Affine3f& sensor_pose, RangeImage::CoordinateFrame coordinate_frame,
float noise_level, float min_range, int border_size)
投影方向设置
其中sensor_pose是一个放仿射变换矩阵,代表空间变化,4维矩阵。
初始化方式如下,
/*
sensorPose定义模拟深度传感器的6自由度位置:
横滚角roll、俯仰角pitch、偏航角yaw,默认初始值均为0。
*/
// Eigen::Affine3f sensorPose = (Eigen::Affine3f)Eigen::Translation3f(0.0f, 0.0f, 0.0f);
Eigen::Affine3f sensorPose = Eigen::Affine3f::Identity();
// 打印仿射变换矩阵
std::cout<<"---------------------------"<<std::endl;
std::cout<<"sensorPose:\n" << sensorPose.matrix() <<std::endl;
// 绕z轴旋转后的sensorPose
float theta = M_PI; // 旋转角度 弧度制
Eigen::Affine3f sensorPose2 = Eigen::Affine3f::Identity();
sensorPose2.translation()<<0,0,0; // 平移
sensorPose2.rotate(Eigen::AngleAxisf(theta,Eigen::Vector3f::UnitZ())); // 旋转
std::cout<<"---------------------------"<<std::endl;
std::cout<<"sensorPose2:\n" << sensorPose2.matrix() <<std::endl;
其中的角度转弧度制可以通过下面函数来实现。
pcl::deg2rad(_ang_res_x) // 括号内参数位float类型的角度,如pcl::deg2rad(180)
打印结果
---------------------------
sensorPose:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
---------------------------
sensorPose2:
-1 8.74228e-08 0 0
-8.74228e-08 -1 0 0
0 0 1 0
0 0 0 1
这样就可以通过修改轴角来设置投影的方向了。
可视化
前视图360°
后视图360°