文章目录
前言
时间插值
一、深蓝学院 代码示例
adjusted_cloud_ptr->points.resize(input_cloud_ptr->points.size());
Eigen::Vector3f point, rotated_point, adjusted_point;
Eigen::Matrix3f current_matrix;
bool half_pased = false;
for (size_t point_index = 0; point_index < input_cloud_ptr->points.size(); point_index ++ ){
point(0) = input_cloud_ptr->points[point_index].x;
point(1) = input_cloud_ptr->points[point_index].y;
point(2) = input_cloud_ptr->points[point_index].z;
float ori = -atan2(point(1), point(0));
if(!half_pased){
if(ori < start_orientation - M_PI / 2) ori += 2 * M_PI;
else if(ori > start_orientation + M_PI * 3 / 2) ori -= 2 * M_PI;
if (ori - start_orientation > M_PI) half_pased = true;
}
else{
ori += 2 * M_PI;
if ( ori < end_orientation - M_PI * 3 / 2) ori += 2 * M_PI;
else if (ori > end_orientation + M_PI / 2) ori -= 2 * M_PI;
}
float real_time = (ori - start_orientation) / orientation_diff * scan_peirod_;//orientation_diff = 360, scan_period
current_matrix = UpdateMatrix(real_time);
rotated_point = current_matrix * point;
adjusted_point = rotated_point * velocity_ * real_time;
adjusted_cloud_ptr->points[point_index].x = adjusted_point(0);
adjusted_cloud_ptr->points[point_index].y = adjusted_point(1);
adjusted_cloud_ptr->points[point_index].z = adjusted_point(2);
}