Velodyne激光距離測試
在室內測試了VLP16和HDL-32E兩種激光雷達的數據輸出。
根據官方手冊25頁左右給出的說明,激光探頭是有安裝誤差和偏置的,因此想對偏置進行測試。
63-9113 REV J MANUAL,USER’S,HDL-32E.pdf
Coordinate Calculation Algorithm Sample Code
After removing all the correction parameters except vertical correction,
the calculation code is:
firingData::computeCoords(guintl6 laserNum, boost::shared_ptr<CalibrationDB> db,
GLpos_t &pos)
{
guintl6 idx = laserNum % VLS_LASER_PER_FIRING;
boost::shared_ptr<CalibrationPoint> cal = db->getCalibration(laserNum);
if (data->points[idx].distance == O) {
coords[idx].setX(O.O);
coords[idx].setY(O.O);
coords[idx].setZ(O.O);
return;
}
float distance = db->getDistLSB() * (float)data->points[idx].distance;
II Get measured distance, distancel
float cosVertAngle = cal->getCosVertCorrection();
float sinVertAngle = cal->getSinVertCorrection();
float cosRotAngle = rotCosTable[data->position];
float sinRotAngle = rotSinTable[data->position];
float xyDistance = distance * cosVertAngle; II Convert to X-Y plane
coords[idx].setX(xyDistance * sinRotAngle + pos.getX()IVLS_DIM_SCALE);
II Calculate X coordinate
coords[idx].setY(xyDistance * cosRotAngle + pos.getY()IVLS_DIM_SCALE);
II Calculate Y coordinate
IICalculate Z coordinate
coords[idx].setZ(distance * sinVertAngle + pos.getZ()IVLS_DIM_SCALE);
}
其中的 pos.getX()IVLS_DIM_SCALE) pos.getY()IVLS_DIM_SCALE) pos.getZ()IVLS_DIM_SCALE) 就是偏置項。但是在附送的u盤或者github上下載的ros驅動中,這些偏置和校正都是0,(相比於速騰激光,每個激光都有對應的偏置文件),感覺很奇怪,按說如果不加偏置修正,測量出來的距離應該比實際距離來的小。因此進行實際測試。實際距離使用手持激光測距儀測量,精度可信。
測試環境如下圖所示:
猜想會存在的誤差
測試結果也是異常詭異,按說測量值應該小於實際距離,但是最終的結果,32線完美吻合,16線一左一右加起來反而比真實值大3-4cm!
實際距離 | 5.611m | 5.387m |
---|---|---|
VLP16 | 5.65m | 5.42m |
HDL-32E | 5.617m | 5.389m |