雷达点云畸变校正

具体原理可参见详解2D激光雷达运动畸变去除_白茶-清欢的博客-CSDN博客_运动畸变

本文的主要工作是重新写了上文链接文章中的代码中的标定主要函数(不关注细节只实现功能),具体代码如下

void LidarMotionCalibrator::Lidar_MotionCalibration ( 
tf::Stamped<tf::Pose> frame_base_pose, 
tf::Stamped<tf::Pose> frame_start_pose, 
tf::Stamped<tf::Pose> frame_end_pose, 
std::vector<double>& ranges,
std::vector<double>& angles, 
int startIndex, 
int& beam_number
)
{
       for(int i = startIndex; i < startIndex + beam_number; ++i)
       {
            double x = frame_start_pose.getOrigin().getX() + (frame_end_pose.getOrigin().getX() - frame_start_pose.getOrigin().getX()) / beam_number * ( i - startIndex );
            double y = frame_start_pose.getOrigin().getY() + (frame_end_pose.getOrigin().getY() - frame_start_pose.getOrigin().getY()) / beam_number * ( i - startIndex );
            double yaw = tf::getYaw(frame_start_pose.getRotation()) + (tf::getYaw(frame_end_pose.getRotation()) - tf::getYaw(frame_start_pose.getRotation())) / beam_number * ( i - startIndex );

            Eigen::Matrix3d x_i;
            x_i <<  1, 0, ranges[i] * cos(angles[i]),
                    0, 1, ranges[i] * sin(angles[i]),
                    0, 0, 1;
            Eigen::Matrix3d T_B_O_2;
            T_B_O_2 << cos(yaw), -sin(yaw), x,
                        sin(yaw), cos(yaw), y,
                        0, 0, 1;
            Eigen::Matrix3d T_B_O_1;
            T_B_O_1 << cos(tf::getYaw(frame_base_pose.getRotation())), -sin(tf::getYaw(frame_base_pose.getRotation())), frame_base_pose.getOrigin().getX(),
                        sin(tf::getYaw(frame_base_pose.getRotation())), cos(tf::getYaw(frame_base_pose.getRotation())),frame_base_pose.getOrigin().getY(),
                        0, 0, 1;
            tf::Stamped<tf::Pose> current_pose;
            Eigen::Matrix3d T_O_1_L;
            T_O_1_L = T_B_O_1.inverse() * T_B_O_2 * x_i;
            ranges[i] = std::sqrt(T_O_1_L(0, 2) * T_O_1_L(0, 2) + T_O_1_L(1, 2) * T_O_1_L(1, 2));
            angles[i] = atan2(T_O_1_L(1, 2), T_O_1_L(0, 2));
       }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值