網(wǎng)上有很多關(guān)于pos機(jī)是否帶定位功能,如何使用外部定位設(shè)備作為無人機(jī)位置估計(jì)的知識(shí),也有很多人為大家解答關(guān)于pos機(jī)是否帶定位功能的問題,今天pos機(jī)之家(www.tjfsxbj.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來看下吧!
本文目錄一覽:
pos機(jī)是否帶定位功能
近很多小伙伴都提出了類似的問題,小編在這里解答一下大家的困惑,大家看不懂的地方,以及大家希望了解的技術(shù)細(xì)節(jié),可以點(diǎn)開鏈接(http://amovauto.mikecrm.com/lThqMKF),通過填表來告訴我們您想了解什么技術(shù)。同時(shí),我們也會(huì)開源一些P200科研無人機(jī)中的源碼給大家使用。
準(zhǔn)備工作
飛控固件及版本:PX4(建議用最新的版本)
其他要求:機(jī)載電腦(默認(rèn)已經(jīng)掌握:如何使用Mavros連接機(jī)載電腦和飛控)
Mavros源碼鏈接:https://github.com/mavlink/mavros
舊的PX4手冊是沒有這部分相關(guān)內(nèi)容的詳細(xì)說明的,最新版本的手冊已經(jīng)更新了這部分內(nèi)容,與本文檔內(nèi)容略有重疊,但側(cè)重不同,供大家參考。官方教程鏈接:https://dev.px4.io/en/ros/external_position_estimation.html
飛控中的濾波模塊(濾波器)
狀態(tài)估計(jì)包括位置估計(jì)與姿態(tài)估計(jì)。在舊版本的飛控中默認(rèn)使用的是attitude_estimator_q(姿態(tài)估計(jì))、position_estimator_inav(位置估計(jì),最新的固件已經(jīng)刪除這個(gè)模塊了)或local_position_estimator(位置估計(jì))。新版本固件中的默認(rèn)濾波器是ekf2模塊(包含位置及姿態(tài)估計(jì))。
本文就將利用ekf2模塊中提供的vehicle_visual_odometry.msg(uORB消息)接口實(shí)現(xiàn)這個(gè)功能。
室內(nèi)定位需要的信息
一般針對(duì)室內(nèi)情況,需要通過外部設(shè)備獲得無人機(jī)的位置及偏航角(這是由于飛控自身的磁力計(jì)在室內(nèi)的太無力了)。
常見的定位方式
定位方式按照是否機(jī)載可以大致分為兩大類:外部定位及機(jī)載定位。
外部定位:利用動(dòng)作捕捉系統(tǒng)(motion capturesystem,簡稱mocap)等設(shè)備測量無人機(jī)當(dāng)前的位置及姿態(tài)。mocap目前主流的是兩家國外牌子:Vicon和Optitrack。mocap設(shè)備價(jià)格較為昂貴(十幾萬到幾百萬不等,但是精度很高,可以達(dá)到厘米甚至毫米級(jí)別的定位,且刷新率很高。機(jī)載定位:這大概就是目前比較火的視覺SLAM和激光SLAM。筆者用過的有:HKUST開源的VINS,谷歌開源的cartographer。如何在記載電腦中接受定位信息
如果是mocap的話,推薦使用vrpn_clinet_ros功能包來得到地面軟件發(fā)出的定位信息(只需要將地面軟件所在的電腦和機(jī)載電腦接入同一個(gè)局域網(wǎng),IP設(shè)置正確即可。這一步不懂的可以留言,我后期可以補(bǔ)充具體步驟)。
主流的傳感器和SLAM算法一般都有相應(yīng)的ros功能包,直接按照官方教程安裝,運(yùn)行起來就可以看到其發(fā)布的包含定位數(shù)據(jù)的話題了。
注意:距離單位?。”M管默認(rèn)的單位都是米,也不排除有例外的。以及大部分姿態(tài)都是用四元數(shù)表示,這里可能涉及到四元數(shù)與歐拉角的轉(zhuǎn)換關(guān)系。
小結(jié):無論哪種定位方式,這一步你需要能夠在機(jī)載電腦中接收到所需要的定位信息(位置xyz+偏航角yaw)。
飛控中如何設(shè)置
為了配合機(jī)載電腦中傳來的定位信息,有兩個(gè)和ekf2有關(guān)的參數(shù)需要修改。
EKF2_AID_MASK 設(shè)置為24(即勾選vision position fusion and vision yaw fusion)EKF2_HGT_MODE 設(shè)置為VISION (默認(rèn)為氣壓計(jì))因?yàn)閑kf2中默認(rèn)是不會(huì)融合這個(gè)外部的定位信息的,這里相當(dāng)于在ekf2中啟用這個(gè)功能。至于ekf2參數(shù)中還有很多和這個(gè)外部定位相關(guān)的濾波參數(shù)設(shè)置,就請參看官網(wǎng)教程吧。我沒有改任何參數(shù),但是ekf2代碼的話,阿木團(tuán)隊(duì)優(yōu)化過,具體修改筆者也不清楚。
其他說明:
做了以上修改之后,水平校準(zhǔn)會(huì)遇到問題,所以要修改之前校準(zhǔn)水平。修改之后,自穩(wěn)模式會(huì)變得有些奇怪,基本上只能使用位置閉環(huán)的控制模式了,也就是offboard模式。如何將定位信息發(fā)送到飛控中
話不多說,直接共享代碼 px4_pos_estimator.cpp
px4_pos_estimator.cpp是阿木社區(qū)最新推出的P200科研無人機(jī)中px4_command功能包中的一個(gè)小程序,主要負(fù)責(zé)的功能就是將外部信息發(fā)送到飛控中,代碼文件中有詳盡的注釋(因?yàn)槭腔趓os寫的,所以需要一點(diǎn)點(diǎn)ros編程的基礎(chǔ))。該程序也只是提供一個(gè)示例及代碼框架而已,照搬肯定是不行的,部分地方還是要按照你選擇定位方式的具體情況來修改的。
我在這里大致提幾點(diǎn)注意事項(xiàng):
坐標(biāo)系轉(zhuǎn)換(對(duì)應(yīng)的callback函數(shù)中修改):需要將外部定位信息轉(zhuǎn)換至ENU坐標(biāo)系。mavros中默認(rèn)使用的是ENU系。這里的ENU系是指:無人機(jī)前方為正,左方為正,上方為正,由上向下看飛機(jī)逆時(shí)針旋轉(zhuǎn)為正。/mavros/vision_pose/pose 這個(gè)話題發(fā)布的時(shí)候必須要加時(shí)間戳,不然mavros不會(huì)訂閱。訂閱飛控返回的位置及姿態(tài)信息并打印出來,同時(shí)打印外部定位信數(shù)據(jù),用于檢查是否發(fā)送成功并確認(rèn)方向。具體消息流向
ros話題是機(jī)載電腦中傳遞的消息載體,Mavlink是機(jī)載電腦與飛控傳遞的消息載體,uORB話題是飛控內(nèi)部傳遞的消息載體。
這里針對(duì)外部定位位置(即一個(gè)包含xyz的數(shù)據(jù)類型)進(jìn)行梳理:
首先是傳感器測量得到,由機(jī)載電腦中的ros話題發(fā)布出來。px4_pos_estimator.cpp訂閱該話題,進(jìn)行一定處理后,轉(zhuǎn)存至另一個(gè)話題/mavros/vision_pose/pose 并發(fā)布。Mavros功能包中vision_pose_estimate.cpp訂閱/mavros/vision_pose/pose話題,并將其封裝成Mavlink消息,發(fā)送給飛控。飛控接收到該Mavlink消息,通過mavlink_receiver.cpp接收并處理,轉(zhuǎn)存為相應(yīng)的uORB消息。飛控中ekf2模塊訂閱該uORB消息,并進(jìn)行相應(yīng)計(jì)算處理,融合得到無人機(jī)的位置速度等狀態(tài)。實(shí)現(xiàn)步驟總結(jié)
在機(jī)載電腦中,利用相應(yīng)驅(qū)動(dòng)程序或者功能包獲得外部定位數(shù)據(jù),并以ros話題的形式發(fā)布出來。利用px4_pos_estimator.cpp程序訂閱該話題,做好相應(yīng)坐標(biāo)轉(zhuǎn)換,然后轉(zhuǎn)發(fā)該數(shù)據(jù)至飛控中。打印相應(yīng)信息,檢查飛控是否收到定位信息。前后左右移動(dòng)飛機(jī),確認(rèn)方向正確。調(diào)試建議
第四步很重要,基本上問題都出在這,如果實(shí)在搞不清方向轉(zhuǎn)換的,就多試幾次,因?yàn)槲恢玫淖鴺?biāo)轉(zhuǎn)換只是正負(fù)號(hào)的問題,多試幾次總能得到正確的結(jié)果?;旧巷w行的控制精度是取決于這里的定位精度的。理解以下幾個(gè)概念:靜態(tài)定位精度,動(dòng)態(tài)定位精度,控制精度。以激光slam為例,靜態(tài)精度1cm左右,動(dòng)態(tài)精度可能只有5cm了,如果不其他(延時(shí),控制參數(shù)等等)影響不顯著時(shí),控制精度較好時(shí)在正負(fù)10cm以內(nèi),較差的話正負(fù)20cm以內(nèi),再差可能飛機(jī)就定不住發(fā)散了。以上就是關(guān)于pos機(jī)是否帶定位功能,如何使用外部定位設(shè)備作為無人機(jī)位置估計(jì)的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于pos機(jī)是否帶定位功能的知識(shí),希望能夠幫助到大家!
