机械式激光雷达,可以根据ring提取边和面特征,固态式激光雷达实现特征检查需要的工作比较多,可以将降采样的都做为面特征进行处理。lio-sam添加固态雷达代码:
一、imageProjection.cpp
(sensor == SensorType::ZVISION) {
pcl::moveFromROSMsg(currentCloudMsg, *tmpOusterCloudIn);
laserCloudIn->points.resize(tmpOusterCloudIn->size());
laserCloudIn->is_dense = tmpOusterCloudIn->is_dense;
for (size_t i = 0; i < tmpOusterCloudIn->size(); i++) {
auto &src = tmpOusterCloudIn->points[i];
auto &dst = laserCloudIn->points[i];
dst.x = src.x;
dst.y = src.y;
dst.z = src.z;
dst.intensity = src.intensity;
//dst.ring = src.ring;
dst.time = src.t * 1e-9f; //ms
}
}
取消ring检测
if (ringFlag == 0 && sensor != SensorType::ZVISION) {
ringFlag = -1;
for (int i = 0; i < (int)currentCloudMsg.fields.size(); ++i) {
if (currentCloudMsg.fields[i].name == "ring") {
ringFlag = 1;
break;
}
}
if (ringFlag == -1) {
ROS_ERROR("Point cloud ring channel not available, please configure your point cloud data!");
ros::shutdown();
}
}
取消去畸变
void projectPointCloud() {
int cloudSize = laserCloudIn->points.size();
fullCloud->clear();
// range image projection
for (int i = 0; i < cloudSize; ++i) {
PointType thisPoint;
thisPoint.x = laserCloudIn->points[i].x;
thisPoint.y = laserCloudIn->points[i].y;
thisPoint.z = laserCloudIn->points[i].z;
thisPoint.intensity = laserCloudIn->points[i].intensity;
float range = pointDistance(thisPoint);
if (range < lidarMinRange || range > lidarMaxRange)
continue;
if (thisPoint.z < lidarLowRange) //去除地面点
continue;
if (sensor != SensorType::ZVISION) {
int rowIdn = laserCloudIn->points[i].ring;
if (rowIdn < 0 || rowIdn >= N_SCAN)
continue;
if (rowIdn % downsampleRate != 0)
continue;
int columnIdn = -1;
if (sensor == SensorType::VELODYNE || sensor == SensorType::OUSTER) {
float horizonAngle = atan2(thisPoint.x, thisPoint.y) * 180 / M_PI;
static float ang_res_x = 360.0 / float

文章讲述了fast-lio2在固态激光雷达上的优化,包括特征提取、去畸变、地面点去除和面特征处理的改进,提高了处理速度和鲁棒性。
最低0.47元/天 解锁文章
1691

被折叠的 条评论
为什么被折叠?



