chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

一個利用GT-SAM的緊耦合激光雷達慣導里程計的框架

工程師鄧生 ? 來源:古月居 ? 作者:月照銀海似蛟龍 ? 2022-09-14 10:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

LIO-SAM的全稱是:Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping

從全稱上可以看出,該算法是一個緊耦合的雷達慣導里程計(Tightly-coupled Lidar Inertial Odometry),借助的手段就是利用GT-SAM庫中的方法。

LIO-SAM 提出了一個利用GT-SAM的緊耦合激光雷達慣導里程計的框架。

實現(xiàn)了高精度、實時的移動機器人的軌跡估計和建圖。

其中點云運動畸變矯正的代碼在圖像投影的節(jié)點中

23c33d90-33ba-11ed-ba43-dac502259ad0.png

可以看到該節(jié)點 訂閱 3種消息:

原始點云數(shù)據(jù)

原始imu數(shù)據(jù)

imu預積分后預測的imu里程計數(shù)據(jù)其中完成的一個主要功能就是進行畸變矯正。

本篇博客將解讀其畸變矯正處理流程部分。

23d60f9c-33ba-11ed-ba43-dac502259ad0.png

畸變矯正

將點云投影到一個矩陣上,并保存每個點的信息,并在內(nèi)部進行畸變矯正

  void projectPointCloud()  {

    int cloudSize = laserCloudIn->points.size();    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);

計算這個點距離lidar中心的距離

      if (range < lidarMinRange || range > lidarMaxRange)        continue;

距離太小或者太遠都認為是異常點

      int rowIdn = laserCloudIn->points[i].ring;      if (rowIdn < 0 || rowIdn >= N_SCAN)        continue;      if (rowIdn % downsampleRate != 0)        continue;

取出對應的在第幾根scan上


scan id 合理判斷


如果需要降采樣,就根據(jù)scan id 適當跳過

      float horizonAngle = atan2(thisPoint.x, thisPoint.y) * 180 / M_PI;       static float ang_res_x = 360.0/float(Horizon_SCAN);      int columnIdn = -round((horizonAngle-90.0)/ang_res_x) + Horizon_SCAN/2;      if (columnIdn >= Horizon_SCAN)        columnIdn -= Horizon_SCAN;      if (columnIdn < 0 || columnIdn >= Horizon_SCAN)        continue;

計算水平角

計算水平分辨率


計算水平線束id ,轉(zhuǎn)換到x負方向為起始,順時針為正方向,范圍[0-H]


對水平角做補償,因為雷達是順時針旋轉(zhuǎn),


對水平id進行檢查

      if (rangeMat.at(rowIdn, columnIdn) != FLT_MAX)        continue;

如果這個位置有填充了就跳過


點云不是完全的360度,可能會多一些

      thisPoint = deskewPoint(&thisPoint, laserCloudIn->points[i].time);

對點做運動補償

rangeMat.at(rowIdn, columnIdn) = range;

將這個點的距離數(shù)據(jù)保存進這個range矩陣種

int index = columnIdn + rowIdn * Horizon_SCAN;

算出點的索引

fullCloud->points[index] = thisPoint;

保存這個點的坐標

之后來看下運動補償?shù)煤瘮?shù)deskewPoint

  PointType deskewPoint(PointType *point, double relTime)  {

    if (deskewFlag == -1 || cloudInfo.imuAvailable == false)      return *point;

判斷是否可以進行運動補償,不能得話則之間返回原點


判斷依據(jù):

deskewFlag 是原始點云 沒有 time得標簽 則為-1

cloudInfo.imuAvailable 的原始imu里面的數(shù)據(jù)判斷

    double pointTime = timeScanCur + relTime;

relTime 是相對時間,加上起始時間就是絕對時間

    float rotXCur, rotYCur, rotZCur;    findRotation(pointTime, &rotXCur, &rotYCur, &rotZCur);

通過findRotation函數(shù) 計算當前點 相對起始點的相對旋轉(zhuǎn)

其內(nèi)部為:

  void findRotation(double pointTime, float *rotXCur, float *rotYCur, float *rotZCur)  {    *rotXCur = 0; *rotYCur = 0; *rotZCur = 0;

先將相對旋轉(zhuǎn)至0

    int imuPointerFront = 0;    while (imuPointerFront < imuPointerCur)    {      if (pointTime < imuTime[imuPointerFront])        break;      ++imuPointerFront;    }

找到距離該點云時間最近的 大于該點云時間的點

    if (pointTime > imuTime[imuPointerFront] || imuPointerFront == 0)    {      *rotXCur = imuRotX[imuPointerFront];      *rotYCur = imuRotY[imuPointerFront];      *rotZCur = imuRotZ[imuPointerFront];    }

如果時間戳不在兩個imu的旋轉(zhuǎn)之間,就直接賦值了

    } else {       int imuPointerBack = imuPointerFront - 1;      double ratioFront = (pointTime - imuTime[imuPointerBack]) / (imuTime[imuPointerFront] - imuTime[imuPointerBack]);      double ratioBack = (imuTime[imuPointerFront] - pointTime) / (imuTime[imuPointerFront] - imuTime[imuPointerBack]);      *rotXCur = imuRotX[imuPointerFront] * ratioFront + imuRotX[imuPointerBack] * ratioBack;      *rotYCur = imuRotY[imuPointerFront] * ratioFront + imuRotY[imuPointerBack] * ratioBack;      *rotZCur = imuRotZ[imuPointerFront] * ratioFront + imuRotZ[imuPointerBack] * ratioBack;    }

否則 作一個線性插值,得到相對旋轉(zhuǎn)


算兩個權重 進行 插值

    float posXCur, posYCur, posZCur;    findPosition(relTime, &posXCur, &posYCur, &posZCur);

這里沒有計算平移補償 如果運動不快的話

    if (firstPointFlag == true)    {      transStartInverse = (pcl::getTransformation(posXCur, posYCur, posZCur, rotXCur, rotYCur, rotZCur)).inverse();      firstPointFlag = false;    }

計算第一個點的相對位姿

    Eigen::Affine3f transFinal = pcl::getTransformation(posXCur, posYCur, posZCur, rotXCur, rotYCur, rotZCur);    Eigen::Affine3f transBt = transStartInverse * transFinal;

計算當前點和第一點的相對位姿

    newPoint.x = transBt(0,0) * point->x + transBt(0,1) * point->y + transBt(0,2) * point->z + transBt(0,3);    newPoint.y = transBt(1,0) * point->x + transBt(1,1) * point->y + transBt(1,2) * point->z + transBt(1,3);    newPoint.z = transBt(2,0) * point->x + transBt(2,1) * point->y + transBt(2,2) * point->z + transBt(2,3);    newPoint.intensity = point->intensity;    return newPoint;

就是R*p+t ,把點補償?shù)降谝粋€點對應的時刻的位姿

然后看提取出有效的點的信息 函數(shù)cloudExtraction

  void cloudExtraction()  {

    for (int i = 0; i < N_SCAN; ++i)    {

遍歷每一根scan

cloudInfo.startRingIndex[i] = count - 1 + 5;

這個scan可以計算曲率的起始點(計算曲率需要左右各五個點)

      for (int j = 0; j < Horizon_SCAN; ++j)      {

遍歷該 scan上的每 個點

        if (rangeMat.at(i,j) != FLT_MAX)//FLT_MAX就是最大的浮點數(shù)        {

判斷該點 是否 是一個 有效的點


rangeMat的每個點初始化為FLT_MAX ,如果點有效,則會賦值為 range

cloudInfo.pointColInd[count] = j;

點云信息里面 這個點對應著哪一個垂直線

cloudInfo.pointRange[count] = rangeMat.at(i,j);

點云信息里面 保存它的距離信息

 extractedCloud->push_back(fullCloud->points[j + i*Horizon_SCAN]);

他的3d坐標信息

cloudInfo.endRingIndex[i] = count -1 - 5;

這個scan可以計算曲率的終端

在上面處理完后


即可發(fā)布點云

  void publishClouds()  {    cloudInfo.header = cloudHeader;    cloudInfo.cloud_deskewed = publishCloud(&pubExtractedCloud, extractedCloud, cloudHeader.stamp, lidarFrame);    pubLaserCloudInfo.publish(cloudInfo);  }

最后將處理后的點云發(fā)布出去

result

23ec0fe0-33ba-11ed-ba43-dac502259ad0.png

23fb2ef8-33ba-11ed-ba43-dac502259ad0.png

240d608c-33ba-11ed-ba43-dac502259ad0.png





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 3D
    3D
    +關注

    關注

    9

    文章

    2991

    瀏覽量

    113842
  • SAM
    SAM
    +關注

    關注

    0

    文章

    116

    瀏覽量

    34317
  • 激光雷達
    +關注

    關注

    978

    文章

    4379

    瀏覽量

    195391

原文標題:LIO-SAM點云預處理前端:畸變矯正

文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    CES 2025激光雷達觀察:“千線”激光雷達亮相,頭部廠商布局具身智能

    電子發(fā)燒友網(wǎng)報道(文/梁浩斌)每年CES都是激光雷達廠商發(fā)布新品的節(jié)點,在今年CES 2025上,有超過30家激光雷達廠商參展。頭部的廠商,禾賽、速騰聚創(chuàng)、Seyond都推出了新產(chǎn)品,另外國內(nèi)多家
    的頭像 發(fā)表于 01-12 09:08 ?3355次閱讀
    CES 2025<b class='flag-5'>激光雷達</b>觀察:“千線”<b class='flag-5'>激光雷達</b>亮相,頭部廠商布局具身智能

    激光雷達為什么會出現(xiàn)串擾的問題?

    飛行時間(Time-of-Flight,TOF)和連續(xù)波調(diào)頻型(Frequency-Modulated Continuous Wave,F(xiàn)MCW)兩種。 圖片源自:網(wǎng)絡 脈沖型TOF激光雷達雷達的工作原理比較直觀,發(fā)射器每隔
    的頭像 發(fā)表于 11-04 10:42 ?543次閱讀
    <b class='flag-5'>激光雷達</b>為什么會出現(xiàn)串擾的問題?

    【CIE全國RISC-V創(chuàng)新應用大賽】+基于MUSE Pi Pro的3d激光里程計實現(xiàn)

    基于MUSE Pi Pro的3D激光里程計實現(xiàn)技術文檔 內(nèi)容摘要 本文檔詳細介紹了基于MUSE Pi Pro開發(fā)板和速騰聚創(chuàng)Airy 96線激光雷達實現(xiàn)3D激光
    發(fā)表于 10-24 17:02

    華為,激光雷達! 車載激光雷達市場的“隱形冠軍”

    達到93.4%!相比此前1-5月份的三家份額91%進步提高,激光雷達產(chǎn)業(yè)正形成“寡頭”競爭格局。 值得關注的是,華為以 64.38 萬顆的裝機量穩(wěn)居榜首,市場份額攀升至 41.1%,成為車載激光雷達市場的“隱形冠軍”。 ? 作
    的頭像 發(fā)表于 10-23 18:57 ?3032次閱讀
    華為,<b class='flag-5'>激光雷達</b>第<b class='flag-5'>一</b>! 車載<b class='flag-5'>激光雷達</b>市場的“隱形冠軍”

    【SOA是什么?】#激光雷達

    激光雷達
    天津見合八方光電科技有限公司
    發(fā)布于 :2025年07月15日 14:39:59

    超酷的樹莓派激光雷達掃描儀!

    摘要這款DIY的PiLiDAR掃描儀項目利用樹莓派進行激光雷達測繪。激光雷達通過發(fā)射激光來掃描周圍環(huán)境,從而創(chuàng)建三維模型。該項目需要樹莓派4、攝像頭、電機以及
    的頭像 發(fā)表于 06-01 08:33 ?798次閱讀
    超酷的樹莓派<b class='flag-5'>激光雷達</b>掃描儀!

    種新型激光雷達慣性視覺里程計系統(tǒng)介紹

    針對具有挑戰(zhàn)性的光照條件和惡劣環(huán)境,本文提出了LIR-LIVO,這是種輕量級且穩(wěn)健的激光雷達-慣性-視覺里程計系統(tǒng)。通過采用諸如利用深度與激光雷達
    的頭像 發(fā)表于 04-28 11:18 ?804次閱讀
    <b class='flag-5'>一</b>種新型<b class='flag-5'>激光雷達</b>慣性視覺<b class='flag-5'>里程計</b>系統(tǒng)介紹

    極氪007GT搭載禾賽ATX激光雷達上市

    近日,極氪科技集團旗下首款搭載禾賽激光雷達的車型極氪 007GT 正式上市,共發(fā)布后驅(qū)智駕版、長續(xù)航后驅(qū)智駕版、四驅(qū)智駕版三版型,官方零售價為 20.29-23.29 萬元。極氪 007GT
    的頭像 發(fā)表于 04-18 11:31 ?1731次閱讀

    激光雷達調(diào)研紀要

    、長安已跟上,廣汽、上汽等后續(xù)也可能加入,但具體配置情況因各車企方案而異。 不同級別自動駕駛配置差異: L3級自動駕駛因需安全冗余,會配備多顆激光雷達以實現(xiàn)360度或270度覆蓋,般應用于30萬以上車型;L2+車型通常只配備
    的頭像 發(fā)表于 04-17 16:54 ?770次閱讀

    禾賽科技在車載激光雷達市場摘得三項全球第

    激光雷達市場摘得三項全球第:全球車載激光雷達市占率第、全球 ADAS 激光雷達市占率第、
    的頭像 發(fā)表于 04-14 15:26 ?1375次閱讀
    禾賽科技在車載<b class='flag-5'>激光雷達</b>市場摘得三項全球第<b class='flag-5'>一</b>

    DeepSeek:2025年激光雷達技術與行業(yè)應用趨勢

    近日DeepSeek的火爆,我想知道它對激光雷達技術與行業(yè)應用趨勢的看法。以下內(nèi)容來源于DeepSeek-R1,僅供參考。2025年激光雷達技術與行業(yè)應用趨勢:深度分析與預測、技術趨勢:從固態(tài)化到
    的頭像 發(fā)表于 02-06 10:40 ?2872次閱讀
    DeepSeek:2025年<b class='flag-5'>激光雷達</b>技術與行業(yè)應用趨勢

    激光雷達領域的新秀利器—SPAD23

    分析在激光雷達系統(tǒng)中的關鍵應用以及在激光雷達系統(tǒng)中核心器件的技術特性
    的頭像 發(fā)表于 01-23 14:35 ?1222次閱讀
    <b class='flag-5'>激光雷達</b>領域的新秀利器—SPAD23

    則消息引爆激光雷達行業(yè)!特斯拉竟然在自研激光雷達?

    電子發(fā)燒友網(wǎng)報道(文/梁浩斌)則消息引爆激光雷達行業(yè)?上周業(yè)界流傳的份會議紀要稱,有自動駕駛專家透露,特斯拉已經(jīng)設計了自己的激光雷達,并正在與大陸集團合作,將自己開發(fā)的
    的頭像 發(fā)表于 12-30 00:09 ?2898次閱讀

    科普:文了解固態(tài)和半固態(tài)激光雷達

    激光雷達(LiDAR,Laser Detecting and Ranging)作為種先進的傳感技術,通過發(fā)射激光脈沖并測量其返回時間來計算目標距離,被廣泛應用于自動駕駛、機器人、工業(yè)自動化等領域
    的頭像 發(fā)表于 12-23 18:06 ?3688次閱讀

    激光雷達,明年要降價至200美元

    20萬以下車型。 而最近,禾賽科技CEO李帆表示,遠距ADAS激光雷達產(chǎn)品計劃在明年價格減半,令激光雷達對于15萬以下更廉價的電動汽車也有吸引力?,F(xiàn)階段15萬以上電動汽車的激光雷達
    的頭像 發(fā)表于 12-16 11:36 ?6074次閱讀
    <b class='flag-5'>激光雷達</b>,明年要降價至200美元