一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

反光柱導(dǎo)航開發(fā)與實(shí)驗(yàn)

3D視覺工坊 ? 來源:CSDN博主一葉執(zhí)念 ? 2023-07-14 15:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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


使用:

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

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

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

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

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

tf::Quaternion quat1;
  tf::quaternionMsgToTF(new_odom.pose.pose.orientation, quat1);
  double roll1, pitch1, yaw1;//定義存儲(chǔ)rpy的容器
  tf::Matrix3x3(quat1).getRPY(roll1, pitch1, yaw1);//進(jìn)行轉(zhuǎn)換
  //上一時(shí)刻機(jī)器人的角度
  double angel2 = last_pose.theta();
  //yaw1為機(jī)器人在odom下的角度,相減得到兩個(gè)坐標(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);

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

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

2、添加前端可視化插件

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

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

當(dāng)前的則是指當(dāng)前時(shí)間下我通過TF關(guān)系將當(dāng)前坐標(biāo)系下的點(diǎn)變換到map坐標(biāo)系下后的點(diǎn)。對(duì)于這兩種點(diǎn)。我們使用markarray來進(jìn)行可視化操作,同時(shí)以不同的顏色(紅色/綠色)來區(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ā)布,另外一個(gè)類似就不摘抄了。最后得到的就是類似于下圖這樣子的對(duì)應(yīng)關(guān)系:

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

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

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

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

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

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

對(duì)于這個(gè)問題,我們?cè)谒惴ㄖ械奈蛔似ヅ洳糠中绿砑恿艘粋€(gè)新的約束關(guān)系:在檢測(cè)與匹配當(dāng)前時(shí)刻的反光柱與全局反光柱的時(shí)候,我們不僅對(duì)其存在的邊進(jìn)行約束關(guān)系的判斷。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


審核編輯:湯梓紅

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

    關(guān)注

    23

    文章

    4705

    瀏覽量

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

    關(guān)注

    7

    文章

    549

    瀏覽量

    43086
  • SLAM
    +關(guān)注

    關(guān)注

    24

    文章

    438

    瀏覽量

    32414
  • Venus
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    2738

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    反光板的選用

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

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

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

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

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

    LED光柱顯示器與PLC的接口技術(shù)

    上設(shè)置的指示燈或PLC本身的LED燈來了解控制儀的狀態(tài),對(duì)于像液位采集與控制之類的儀器儀表,這種顯示界面遠(yuǎn)遠(yuǎn)不夠。為了彌補(bǔ)PLC顯示界面的不足,可以采用LED光柱顯示器或PC機(jī)顯示。本文提出了一種
    發(fā)表于 12-20 10:58

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

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

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

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

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

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

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

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

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

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

    48N系列光柱顯示器

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

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

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

    LED光柱驅(qū)動(dòng)電路

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

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

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

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

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

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

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