PCL点云转rangeImage中的视角变换(旋转+平移)

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°
后视图360°
后视图360°

参考

PCL库学习笔记——使用变换矩阵变换点云

你可能感兴趣的:(C/C++,PointCloud,计算机视觉)