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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

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

反光柱導(dǎo)航開發(fā)與實驗

3D視覺工坊 ? 來源:CSDN博主一葉執(zhí)念 ? 2023-07-14 15:37 ? 次閱讀

VEnus算法對于反光柱導(dǎo)航的基本思路,其主要分為了高反點提取、高反點聚類查找中心、高反點與已知反光柱位姿匹配以及調(diào)用ceres庫進行位姿優(yōu)化等步驟。

然后在這個算法的基礎(chǔ)上,再進行一定的開發(fā)達到一個比較穩(wěn)定且可視化的版本。


使用:

ffmpeg -f x11grab -framerate 25 -video_size 1920*1080 -i :0.0 out.mp4

這里使用的是自己錄制的一個包,其中包含了激光數(shù)據(jù)以及里程計信息odom。為了使結(jié)果看起來更舒適,主要進行了以下幾個部分的改進:

1、發(fā)布map到odom變換關(guān)系

為了在rviz中進行點云以及反光柱的顯示,需要綁定一個固定TF,一開始使用的是以odom作為固定坐標(biāo)系,但是由于odom本身存在比較大的累積誤差,所以后面發(fā)現(xiàn)效果并不好。

所以這里需要重新計算一下從map到odom的累計漂移發(fā)布到TF樹中,以形成一個較為穩(wěn)定的TF關(guān)系。

tf::Quaternion quat1;
  tf::quaternionMsgToTF(new_odom.pose.pose.orientation, quat1);
  double roll1, pitch1, yaw1;//定義存儲rpy的容器
  tf::Matrix3x3(quat1).getRPY(roll1, pitch1, yaw1);//進行轉(zhuǎn)換
  //上一時刻機器人的角度
  double angel2 = last_pose.theta();
  //yaw1為機器人在odom下的角度,相減得到兩個坐標(biāo)系之間的角度差
  double angel = yaw1-angel2;
  odom_trans.header.frame_id = "map";
 odom_trans.child_frame_id = "odom";
  odom_trans.header.stamp = ros::now();
 odom_trans.transform.translation.x = (last_pose.x() - new_odom.pose.pose.position.x * cos(-angel) + new_odom.pose.pose.position.y * sin(-angel));
 odom_trans.transform.translation.y = (last_pose.y() - new_odom.pose.pose.position.x * sin(-angel) - new_odom.pose.pose.position.y * cos(-angel));
 odom_trans.transform.translation.z = 0;
 odom_trans.transform.rotation = tf::createQuaternionMsgFromYaw(-angel);
  odom_trans.header.stamp = ros::now();
  ROS_INFO("tf map_to_odom: x = %f,y = %f,theta = %f",new_odom.pose.pose.position.x - last_pose.x(),new_odom.pose.pose.position.y - last_pose.y(),angel);
  broadcaster.sendTransform(odom_trans);

通過已知機器人在map坐標(biāo)系下的pose以及odom下的位姿,反求odom到map的TF。先計算兩個坐標(biāo)系下的位姿的角度差,這個代表了兩個TF之間的旋轉(zhuǎn)分量。

在已知旋轉(zhuǎn)分量的情況下再計算兩個TF之間的平移分量。最后再將具體的TF關(guān)系通過broadcaster發(fā)布出來。

2、添加前端可視化插件

為了能夠在rviz中更加方便的查看機器人的運動以及匹配情況,需要在rviz中添加一下反光柱與機器人的一些可視化消息。

對于反光柱的消息,分為兩類:已經(jīng)確定的以及當(dāng)前的。已經(jīng)確定的是指那些被放到feature中我們認(rèn)為其已經(jīng)代表一個正常的反光柱的信息的那些點。

當(dāng)前的則是指當(dāng)前時間下我通過TF關(guān)系將當(dāng)前坐標(biāo)系下的點變換到map坐標(biāo)系下后的點。對于這兩種點。我們使用markarray來進行可視化操作,同時以不同的顏色(紅色/綠色)來區(qū)分它們,類似于這樣:

std::unordered_map>::iterator ite;
  for(ite=feature_points.begin();ite!=feature_points.end();ite++)
  {
    cylinder_arrow.ns = "cylinder";  //命名空間namespace                                     
    cylinder_arrow.type = visualization_msgs::CYLINDER;   //類型
    cylinder_arrow.action = visualization_msgs::ADD;
    cylinder_arrow.lifetime = ros::Duration(); //(sec,nsec),0 forever
    cylinder_arrow.header.frame_id = "map";
    cylinder_arrow.header.stamp = ros::now();
    cylinder_arrow.id = ite->first;
    cylinder_arrow.pose.position.x = ite->second.first;
    cylinder_arrow.pose.position.y = ite->second.second;
    cylinder_arrow.pose.position.z = 0;
    cylinder_arrow.pose.orientation.w = 1.0;
    cylinder_arrow.pose.orientation.x = 0;
    cylinder_arrow.pose.orientation.y = 0;
    cylinder_arrow.pose.orientation.z = 0;
    //設(shè)置標(biāo)記尺寸
    cylinder_arrow.scale.x = 0.09; //m
    cylinder_arrow.scale.y = 0.09;
    cylinder_arrow.scale.z = 0.50;


     ///設(shè)置標(biāo)記顏色
    cylinder_arrow.color.a = 1.0; // Don't forget to set the alpha!
    cylinder_arrow.color.r = 1.0;
    cylinder_arrow.color.g = 0.0;
    cylinder_arrow.color.b = 0.0;
    cylinder_Array.markers.push_back(cylinder_arrow);
  }
  mark_info_pub.publish(cylinder_Array);
  cylinder_Array.markers.clear();

這里只是feature_point的可視化發(fā)布,另外一個類似就不摘抄了。最后得到的就是類似于下圖這樣子的對應(yīng)關(guān)系:

0ebd74b8-21d2-11ee-962d-dac502259ad0.png

3、優(yōu)化反光柱位姿匹配問題

在上一章中分析源代碼的過程我們大致了解了算法的原理主要是基于對不同反光柱點的距離匹配的。例如對于我現(xiàn)有的反光柱ABCD。

A到B的距離為5,A到C的距離為8,A到D的距離為6,B到C的距離為7,B到D的距離為4,C到D的距離為3。然后當(dāng)前幀檢測到幾個反光柱點A1,B1,C1。A1到B1的距離為5,A1到C1的距離為4。

則其分別與BA、BD兩條邊對應(yīng),所以A1與B點對應(yīng)。這種情況適合大部分反光柱,但是會存在一種不適合的情況:當(dāng)全局反光柱中存在A、D兩個反光柱其到周圍其他反光柱之間的距離都相等的時候。

那么新檢測到的反光柱可能會匹配到A也可能會匹配到D。這種情況下就會存在比較大的誤匹配問題。

對于這個問題,我們在算法中的位姿匹配部分新添加了一個新的約束關(guān)系:在檢測與匹配當(dāng)前時刻的反光柱與全局反光柱的時候,我們不僅對其存在的邊進行約束關(guān)系的判斷。

還對這兩個匹配上的點之間進行一定距離上的約束。如果當(dāng)前幀下的投影點在全局坐標(biāo)系下的位姿與對應(yīng)匹配上的點的全局坐標(biāo)差別較大的話,我們認(rèn)為這是可能存在問題的。

舍棄這一個匹配結(jié)果繼續(xù)尋找其他可能存在的匹配點。這樣子可以保證基本每次匹配上的點都是比較正確的。類似于這樣子:

0ec70ed8-21d2-11ee-962d-dac502259ad0.png

測試時在終端打印出了對應(yīng)匹配點的坐標(biāo)關(guān)系,point1是map坐標(biāo)系下的反光柱的位姿,而point2是當(dāng)前時刻下檢測到的高反點對應(yīng)在map坐標(biāo)系下的坐標(biāo)。整個匹配結(jié)果基本上是正確的。

4、優(yōu)化位姿匹配錯誤的跳點問題

跳點問題是指當(dāng)反光柱匹配錯誤是,導(dǎo)致后面優(yōu)化后的位姿突然一下子出現(xiàn)在離上一時刻很遠的地方。

這個在沒有優(yōu)化匹配之前還是較容易出現(xiàn)的,但是匹配結(jié)果正確的話基本上不會出現(xiàn)。只是作為一個保險的手段還是在這里添加一下。

根據(jù)運動邏輯我們知道機器人運動過程不可能一下子出現(xiàn)在離上一時刻很遠的地方。所以在優(yōu)化完位姿后,算法會在更新位姿之前對新的位姿進行一次判斷。

如果位姿與前一時刻想差較大,例如一下子跳到2-3米遠。時間間隔才0.1S,那肯定是有問題的。這個位姿不應(yīng)該給到其他地方進行運動計算。所以這時候需要舍棄這個結(jié)果重新計算。

一般場景中反光柱數(shù)量夠多的話是不會出現(xiàn)這個問題的,測試時基本位姿也都是正確的。

5、優(yōu)化同一位置出現(xiàn)多個反光柱的問題

在上面關(guān)于rviz中的圖片中存在一個BUG,就是在同一個位置出現(xiàn)了兩個不同的紅色反光柱。

這個反光柱其實是代表的同一個反光柱,出現(xiàn)這個問題的原因是再于:在進行位姿匹配的過程中,當(dāng)前幀的反光柱點與現(xiàn)有的反光柱點之間的距離超過了閾值,所以這兩個點沒有被匹配為一個點。

于是在求完新的位姿后,這個點作為一個新的反光柱點被添加到了feature_point里面。所以在這個位置就出現(xiàn)了一個新的反光柱。這個問題有兩種解決方案:第一種比較簡單就是增大范圍判斷的閾值。

這樣子同一個位置的反光柱就不會出現(xiàn)第二個了。另外一種是在新增反光柱的時候判斷一下這個點周圍多少范圍內(nèi)是否存在反光柱,如果有一個的話就不用新增了。

0ed27444-21d2-11ee-962d-dac502259ad0.png


審核編輯:湯梓紅

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

    關(guān)注

    23

    文章

    4552

    瀏覽量

    92023
  • 導(dǎo)航
    +關(guān)注

    關(guān)注

    7

    文章

    512

    瀏覽量

    42159
  • SLAM
    +關(guān)注

    關(guān)注

    23

    文章

    405

    瀏覽量

    31711
  • Venus
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    2656

原文標(biāo)題:反光板導(dǎo)航SLAM-反光柱導(dǎo)航開發(fā)與實驗

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

收藏 人收藏

    評論

    相關(guān)推薦

    反光板的選用

    推薦一款用在智能小車上紅外測距傳感器的反光板吧{:19:}
    發(fā)表于 07-19 12:57

    《FPGA開發(fā)實例導(dǎo)航

    本帖最后由 eehome 于 2013-1-5 09:47 編輯 《FPGA開發(fā)實例導(dǎo)航
    發(fā)表于 08-20 19:39

    【OK210申請】GPRS導(dǎo)航系統(tǒng)

    申請理由:本人是嵌入式愛好者,學(xué)嵌入式開發(fā)已有三年經(jīng)歷,想開發(fā)一款gprs導(dǎo)航系統(tǒng),需要用到ok210系統(tǒng)板。項目描述:項目名稱:GPS導(dǎo)航系統(tǒng)本GPS
    發(fā)表于 07-27 13:03

    激光導(dǎo)航AGV控制系統(tǒng)解決方案(無反光板非工控機)

    傳感器配合使用,就可以實現(xiàn)精準(zhǔn)的激光無軌導(dǎo)航功能。LNM-v1.0(工業(yè)級)無軌導(dǎo)航目前,蘇州智偉達機器人科技有限公司與各大公司合作已經(jīng)實現(xiàn)了LNM模塊無軌導(dǎo)航功能的應(yīng)用。實驗證明,直
    發(fā)表于 06-10 14:07

    請問有LED光柱驅(qū)動電路圖嗎?

    LED光柱驅(qū)動電路
    發(fā)表于 10-11 08:15

    有沒有辦法用VL53L0X 區(qū)分反光板和其他反光材料?

    如您所知,無論反光片表面角度如何,反光片都非常明亮。然而,其他反光材料,如鏡子,只有在表面角度垂直于 VL53L0X 時才會亮。在這種情況下,僅憑亮度的差異是很難區(qū)分的。 有沒有辦法用 VL53L0X 區(qū)分
    發(fā)表于 12-27 06:24

    關(guān)于AGV控制系統(tǒng)使用中的應(yīng)用筆記(二)——追加地圖操作

    。地圖追加常用于以下工況場景:①在激光反射板導(dǎo)航地圖或激光自動導(dǎo)航地圖發(fā)生變動的情況下,將變動場景部分更新至 AGV 運行地圖。②在原有激光自動導(dǎo)航地圖上疊加反射板導(dǎo)航定位所需的
    發(fā)表于 03-13 17:10

    LED 光柱式儀表的串行動態(tài)顯示

    嵌入式工業(yè)自動化儀表中常常需要顯示系統(tǒng)的工作狀態(tài)或測量結(jié)果。顯示方法有很多種,如液晶顯示屏、LED數(shù)碼管等。近年來,光柱模擬加數(shù)字混合顯示的儀表很受歡迎。光柱模擬
    發(fā)表于 05-14 13:20 ?28次下載

    基于VxWorks的導(dǎo)航系統(tǒng)人機交互界面的開發(fā)

    本文介紹了嵌入式實時操作系統(tǒng)VxWorks 及其圖形開發(fā)組件WindML,闡述了車輛導(dǎo)航系統(tǒng)的組成,提出了導(dǎo)航系統(tǒng)中人機交互界面開發(fā)的相關(guān)技術(shù)。經(jīng)
    發(fā)表于 08-03 11:07 ?16次下載

    48N系列光柱顯示器

    高可視性3毫米寬光柱顯示 IP65級防塵防水 全機種符合CE標(biāo)準(zhǔn) 新增藍色LED光柱顯示 深度縮40%,重量減30%的小型設(shè)計
    發(fā)表于 04-19 10:52 ?16次下載

    太陽能LED光柱系統(tǒng)的設(shè)計制作

    本文設(shè)計的太陽能LED光柱系統(tǒng)屬于小型太陽能獨立光伏系統(tǒng).從小型太陽能發(fā)電系統(tǒng)的研究和整體設(shè)計出發(fā),設(shè)計出由太陽能電池板供電,LED發(fā)出彩色光的太陽能LED光柱.太陽能LED光柱
    發(fā)表于 04-21 16:58 ?140次下載
    太陽能LED<b class='flag-5'>光柱</b>系統(tǒng)的設(shè)計制作

    LED光柱驅(qū)動電路

    LED光柱 驅(qū)動電路 作為一個指標(biāo),S1選擇直接輸入或一個1k(高阻抗)音頻輸入。 R2是靈敏度控制。
    發(fā)表于 11-03 16:36 ?2690次閱讀

    基于手機app的室內(nèi)導(dǎo)航系統(tǒng)的設(shè)計與開發(fā)

    綜合考慮常用室內(nèi)導(dǎo)航系統(tǒng)精確度差、室內(nèi)平面結(jié)構(gòu)集納度低、高校公共基礎(chǔ)實驗室錯綜復(fù)雜等現(xiàn)狀,為了方便實驗者快速、便捷的到達指定實驗室位置,本文以南京航空航天大學(xué)物理
    發(fā)表于 12-21 13:54 ?1次下載
    基于手機app的室內(nèi)<b class='flag-5'>導(dǎo)航</b>系統(tǒng)的設(shè)計與<b class='flag-5'>開發(fā)</b>

    LED光柱顯示器的基本結(jié)構(gòu)

    關(guān)鍵詞:LED , 光柱顯示器 , 基本結(jié)構(gòu) 如圖所示為LED光柱顯示器的基本結(jié)構(gòu)。在這種結(jié)構(gòu)中,將高亮度發(fā)光二極管芯片排列成一條直線,將100個芯片分成10組,每組10個芯片。每組共用一個陰極
    發(fā)表于 10-23 00:03 ?502次閱讀

    反光導(dǎo)航SLAM:VEnus代碼淺析

    通過研究具體的代碼我們可以簡單了解VEnus中對于反光柱定位的具體流程。
    的頭像 發(fā)表于 03-14 10:54 ?1306次閱讀