高精度定位:從原理到實(shí)戰(zhàn)部署指南)
1. 項(xiàng)目概述為什么要在室內(nèi)用Optitrack定位PX4如果你玩過(guò)PX4肯定知道它在室外靠GPS飛得挺穩(wěn)。但一進(jìn)室內(nèi)GPS信號(hào)一斷飛控立馬就“懵”了懸停航線(xiàn)想都別想。這時(shí)候你就需要一個(gè)高精度的“室內(nèi)GPS”。Optitrack這套基于紅外光學(xué)動(dòng)捕的系統(tǒng)就是干這個(gè)的。它通過(guò)多個(gè)高速紅外攝像頭捕捉機(jī)身上反光標(biāo)記點(diǎn)的三維坐標(biāo)能提供厘米級(jí)、甚至毫米級(jí)的實(shí)時(shí)位姿數(shù)據(jù)。把這套數(shù)據(jù)喂給PX4它就能在室內(nèi)像在室外一樣實(shí)現(xiàn)精準(zhǔn)的定點(diǎn)懸停、軌跡跟蹤甚至自主導(dǎo)航。這不僅僅是“能飛”那么簡(jiǎn)單。對(duì)于無(wú)人機(jī)算法開(kāi)發(fā)、集群編隊(duì)、視覺(jué)SLAM的實(shí)機(jī)驗(yàn)證或者需要極高重復(fù)精度的自動(dòng)化測(cè)試比如給機(jī)器人做“體檢”室內(nèi)光學(xué)定位是無(wú)可替代的基礎(chǔ)設(shè)施。我見(jiàn)過(guò)太多團(tuán)隊(duì)算法在仿真里跑得飛起一到真機(jī)測(cè)試光是為了讓飛機(jī)穩(wěn)定懸停就折騰好幾周。搞定Optitrack和PX4的對(duì)接相當(dāng)于給你的真機(jī)實(shí)驗(yàn)鋪了一條高速公路。所以這個(gè)項(xiàng)目的核心就是打通從Optitrack動(dòng)捕系統(tǒng)到PX4飛控的位姿數(shù)據(jù)鏈路并讓PX4信任并使用這套外部數(shù)據(jù)來(lái)替代GPS實(shí)現(xiàn)室內(nèi)的高精度定位與控制。接下來(lái)我會(huì)把從環(huán)境準(zhǔn)備、數(shù)據(jù)對(duì)接、參數(shù)調(diào)試到實(shí)戰(zhàn)避坑的完整流程拆開(kāi)揉碎了講清楚。2. 核心原理與系統(tǒng)架構(gòu)拆解2.1 Optitrack數(shù)據(jù)流從反光點(diǎn)到位姿信息首先得明白Optitrack給出的是什么。它不是一個(gè)“黑盒”其軟件Motive才是大腦。攝像頭捕捉到標(biāo)記點(diǎn)Marker的二維圖像坐標(biāo)通過(guò)多視角三角測(cè)量計(jì)算出每個(gè)標(biāo)記點(diǎn)在三維空間中的位置。多個(gè)標(biāo)記點(diǎn)構(gòu)成一個(gè)剛體Rigid BodyMotive根據(jù)這些點(diǎn)的空間關(guān)系解算出這個(gè)剛體的六自由度位姿位置X, Y, Z和姿態(tài)四元數(shù)或歐拉角形式的Roll, Pitch, Yaw。關(guān)鍵點(diǎn)在于數(shù)據(jù)輸出。Motive通常通過(guò)兩種主流協(xié)議向外廣播數(shù)據(jù)VRPNVirtual Reality Peripheral Network老牌協(xié)議兼容性廣但配置稍復(fù)雜。NatNetOptitrack自家的高性能協(xié)議延遲更低效率更高是當(dāng)前的首選。我們的目標(biāo)就是讓運(yùn)行在機(jī)載計(jì)算機(jī)如樹(shù)莓派、英偉達(dá)Jetson或者地面站電腦上的一個(gè)程序通過(guò)局域網(wǎng)接收到Motive發(fā)出的NatNet數(shù)據(jù)流。2.2 PX4的EKF2與外部視覺(jué)估計(jì)PX4自身有一個(gè)強(qiáng)大的狀態(tài)估計(jì)器——擴(kuò)展卡爾曼濾波器EKF2。它像飛控的“感官中樞”融合多種傳感器數(shù)據(jù)IMU、磁力計(jì)、氣壓計(jì)、GPS等來(lái)估算飛機(jī)狀態(tài)。當(dāng)GPS不可用時(shí)EKF2可以接受來(lái)自外部源的位置和姿態(tài)數(shù)據(jù)并將其與IMU數(shù)據(jù)進(jìn)行緊耦合融合。這里涉及兩個(gè)關(guān)鍵的概念和對(duì)應(yīng)的MAVLink消息視覺(jué)位置估計(jì)Vision Position Estimate 提供飛機(jī)的位置X, Y, Z和姿態(tài)四元數(shù)。對(duì)應(yīng)的MAVLink消息是VISION_POSITION_ESTIMATE。這是最常用、最全面的方式。里程計(jì)信息Odometry 提供更豐富的信息包括位置、姿態(tài)、線(xiàn)速度和角速度。對(duì)應(yīng)的MAVLink消息是ODOMETRY。它包含的信息維度更全對(duì)于需要速度反饋的精準(zhǔn)控制更有優(yōu)勢(shì)。我們的橋梁程序就是要訂閱Optitrack的NatNet數(shù)據(jù)將其轉(zhuǎn)換成上述MAVLink消息然后發(fā)送給PX4飛控。2.3 整體工作流程架構(gòu)整個(gè)系統(tǒng)的數(shù)據(jù)流可以這樣理解Optitrack攝像頭群 - Motive軟件計(jì)算位姿 - NatNet協(xié)議廣播 - 我們的橋接程序坐標(biāo)轉(zhuǎn)換、MAVLink封裝 - MAVLink協(xié)議通過(guò)串口/UDP - PX4飛控EKF2數(shù)據(jù)融合 - 控制器實(shí)現(xiàn)精準(zhǔn)定位控制其中坐標(biāo)轉(zhuǎn)換是最大的坑點(diǎn)之一。Optitrack有它的世界坐標(biāo)系通常定義在捕捉空間內(nèi)而PX4和MAVLink有自己的一套坐標(biāo)系NED北東地。我們的程序必須正確地進(jìn)行旋轉(zhuǎn)和平移把數(shù)據(jù)從Optitrack坐標(biāo)系轉(zhuǎn)換到PX4的NED坐標(biāo)系。這一步錯(cuò)了飛機(jī)就會(huì)往莫名其妙的方向飛。3. 軟件環(huán)境搭建與橋接程序部署3.1 PX4端開(kāi)發(fā)環(huán)境準(zhǔn)備Ubuntu 22.04雖然最終橋接程序可以運(yùn)行在任何電腦上但為了后續(xù)可能的PX4固件修改或深入調(diào)試一個(gè)完整的PX4開(kāi)發(fā)環(huán)境還是有必要的。針對(duì)Ubuntu 22.04步驟已經(jīng)比較成熟。首先安裝依賴(lài)。這里要注意官方腳本可能更新但核心依賴(lài)不變sudo apt-get update sudo apt-get install git zip qtcreator cmake build-essential genromfs ninja-build exiftool -y # 安裝Python3和pip sudo apt-get install python3-pip -y # 安裝Gazebo仿真器依賴(lài)即使不做仿真也建議安裝因?yàn)橐恍┕ぞ哝溞枰?sudo apt-get install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y接下來(lái)下載PX4源碼。推薦使用國(guó)內(nèi)鏡像加速git clone https://gitee.com/mirrors/PX4-Autopilot.git ~/PX4-Autopilot cd ~/PX4-Autopilot git submodule sync --recursive git submodule update --init --recursive注意git submodule update這一步可能會(huì)因?yàn)榫W(wǎng)絡(luò)問(wèn)題失敗多次。如果遇到可以嘗試反復(fù)執(zhí)行或者手動(dòng)修改.gitmodules文件中的URL為國(guó)內(nèi)鏡像地址如gitee這是一個(gè)常見(jiàn)的“坑”。最后運(yùn)行編譯工具鏈安裝腳本。對(duì)于Ubuntu 22.04直接運(yùn)行其下的腳本即可bash ./Tools/setup/ubuntu.sh安裝完成后可以通過(guò)編譯一個(gè)固件來(lái)測(cè)試環(huán)境cd ~/PX4-Autopilot make px4_fmu-v5_default # 如果看到 [100%] Linking CXX executable ... 并且沒(méi)有紅色錯(cuò)誤說(shuō)明環(huán)境基本OK。3.2 Optitrack橋接程序的選型與配置現(xiàn)在我們需要一個(gè)程序充當(dāng)“翻譯官”。有幾個(gè)成熟的選擇mavros_extras包中的mocap_optitrack節(jié)點(diǎn) 這是最經(jīng)典、最集成化的方案。它是ROSRobot Operating System的一個(gè)節(jié)點(diǎn)屬于mavros_extras功能包。它直接訂閱Optitrack的NatNet數(shù)據(jù)轉(zhuǎn)換成geometry_msgs/PoseStamped消息然后由MAVROS將其轉(zhuǎn)發(fā)為MAVLink消息給PX4。優(yōu)點(diǎn) 與MAVROS集成度極高配置好后非常穩(wěn)定。缺點(diǎn) 必須依賴(lài)完整的ROS和MAVROS環(huán)境。PX4官方提供的motion_capture_tracker示例 位于PX4源碼的src/examples/motion_capture_tracker目錄下。這是一個(gè)獨(dú)立的C程序不依賴(lài)ROS。優(yōu)點(diǎn) 輕量直接依賴(lài)PX4的Dronecode SDK或MAVLink C庫(kù)適合嵌入到自定義應(yīng)用中。缺點(diǎn) 需要自己編譯配置相對(duì)底層。第三方開(kāi)源工具如optitrack2mavlink GitHub上一些開(kāi)發(fā)者分享的Python或C腳本。優(yōu)點(diǎn) 可能更簡(jiǎn)單直接。缺點(diǎn) 質(zhì)量和維護(hù)情況參差不齊。對(duì)于大多數(shù)研究和快速實(shí)驗(yàn)我強(qiáng)烈推薦第一種方案ROS MAVROS mocap_optitrack因?yàn)樗鷳B(tài)成熟遇到問(wèn)題容易找到解決方案。部署步驟假設(shè)你已經(jīng)安裝了ROS NoeticUbuntu 20.04/22.04的推薦版本和MAVROS。# 安裝MAVROS如果未安裝 sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras -y # 安裝地理庫(kù)數(shù)據(jù)非常重要用于坐標(biāo)轉(zhuǎn)換 wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh sudo bash ./install_geographiclib_datasets.shmocap_optitrack節(jié)點(diǎn)通常隨mavros_extras一起安裝了。你需要?jiǎng)?chuàng)建一個(gè)啟動(dòng)文件例如optitrack.launch來(lái)配置它launch arg namemocap_server_ip default192.168.1.100 / !-- Motive電腦的IP -- arg namemocap_local_ip default192.168.1.50 / !-- 運(yùn)行本節(jié)點(diǎn)的電腦IP -- arg namemocap_server_port default1511 / include file$(find mavros)/launch/px4.launch !-- 指定飛控連接例如通過(guò)UDP連接模擬器或真機(jī) -- arg namefcu_url valueudp://:14540127.0.0.1:14557 / /include !-- 啟動(dòng)Optitrack橋接節(jié)點(diǎn) -- node pkgmocap_optitrack typemocap_optitrack_node namemocap_optitrack outputscreen respawntrue rosparam file$(find mocap_optitrack)/config/mocap.yaml commandload / param nameconnection_type valueMulticast / !-- 或 Unicast -- param nameserver_address value$(arg mocap_server_ip) / param namelocal_address value$(arg mocap_local_ip) / param nameserver_port value$(arg mocap_server_port) / !-- 關(guān)鍵指定要跟蹤的剛體ID在Motive中設(shè)置 -- param namerigid_body_id value1 / /node /launch3.3 坐標(biāo)系統(tǒng)與數(shù)據(jù)對(duì)齊配置這是整個(gè)環(huán)節(jié)中最需要耐心的一步。你必須在Motive軟件、橋接程序、PX4參數(shù)中保持坐標(biāo)系定義一致。在Motive中定義坐標(biāo)系 校準(zhǔn)完攝像頭后在Motive中定義好世界坐標(biāo)系的原點(diǎn)和軸向。通常我們會(huì)讓地面為XY平面Z軸向上。記錄下這個(gè)坐標(biāo)系的方向。在橋接程序中轉(zhuǎn)換mocap_optitrack節(jié)點(diǎn)需要將數(shù)據(jù)從Optitrack坐標(biāo)系轉(zhuǎn)換到ROS坐標(biāo)系通常是ENU東-北-天。它內(nèi)部有參數(shù)可以設(shè)置旋轉(zhuǎn)。通常如果Optitrack的Z軸向上Y軸向前那么轉(zhuǎn)換到ROS的ENU可能需要一個(gè)繞X軸旋轉(zhuǎn)-90度的變換具體取決于你的定義。在PX4中確認(rèn)坐標(biāo)系 PX4的EKF2默認(rèn)期望外部視覺(jué)數(shù)據(jù)在NED北-東-地坐標(biāo)系下。MAVROS在發(fā)送VISION_POSITION_ESTIMATE時(shí)默認(rèn)會(huì)進(jìn)行從ROS的ENU到PX4的NED的轉(zhuǎn)換。所以你的橋接程序輸出給MAVROS的應(yīng)該是正確的ENU數(shù)據(jù)。實(shí)操心得 最穩(wěn)妥的調(diào)試方法是“分步驗(yàn)證”。首先在Motive里移動(dòng)剛體用ROS命令rostopic echo /mavros/vision_pose/pose查看MAVROS收到的位姿數(shù)據(jù)。確保位置移動(dòng)方向與你的物理移動(dòng)方向一致例如向前推剛體Y值增加。如果不一致調(diào)整橋接節(jié)點(diǎn)的旋轉(zhuǎn)參數(shù)。這一步確認(rèn)無(wú)誤后再連接PX4。4. PX4參數(shù)配置與飛控設(shè)置當(dāng)數(shù)據(jù)流打通后我們需要告訴PX4“請(qǐng)使用這套外部視覺(jué)數(shù)據(jù)并給它高權(quán)重。”4.1 關(guān)鍵參數(shù)詳解通過(guò)QGroundControl地面站連接PX4修改以下參數(shù)EKF2_AID_MASK 這是EKF2傳感器融合的主開(kāi)關(guān)。我們需要啟用視覺(jué)位置融合。勾選“視覺(jué)位置融合”和“視覺(jué)偏航角融合”如果你信任Optitrack的姿態(tài)數(shù)據(jù)。如果只融合位置姿態(tài)僅依賴(lài)IMU則只勾選位置。注意 在勾選視覺(jué)偏航融合前必須確保視覺(jué)偏航角與磁力計(jì)或IMU估計(jì)的偏航角已經(jīng)對(duì)齊否則會(huì)引起劇烈跳變。EKF2_HGT_MODE 高度來(lái)源選擇。設(shè)置為“Vision”。這樣EKF2將主要使用視覺(jué)數(shù)據(jù)的高度信息而不是氣壓計(jì)。在室內(nèi)氣壓計(jì)受氣流和空調(diào)影響極大必須禁用。EKF2_EV_DELAY 視覺(jué)數(shù)據(jù)延遲補(bǔ)償。Optitrack系統(tǒng)本身有少量延遲通常幾毫秒到幾十毫秒加上網(wǎng)絡(luò)和計(jì)算延遲。這個(gè)參數(shù)需要根據(jù)實(shí)測(cè)調(diào)整。可以從0.01秒10毫秒開(kāi)始嘗試。如果設(shè)置過(guò)小融合效果會(huì)變差設(shè)置過(guò)大會(huì)引入滯后。可以通過(guò)日志分析來(lái)精細(xì)調(diào)整。EKF2_EV_NOISE_MD 視覺(jué)位置噪聲模型。根據(jù)Optitrack的實(shí)測(cè)精度設(shè)置。在典型的良好校準(zhǔn)環(huán)境下可以設(shè)置為“低噪聲”。EKF2_NOAID_MASK 無(wú)GPS時(shí)允許解鎖的掩碼。確保在無(wú)GPS時(shí)允許使用外部姿態(tài)信息解鎖。通常需要設(shè)置。4.2 傳感器校準(zhǔn)與對(duì)齊即使數(shù)據(jù)流和參數(shù)都正確如果傳感器之間的物理對(duì)齊沒(méi)做好飛機(jī)也會(huì)“斜著飛”或者產(chǎn)生耦合控制。IMU校準(zhǔn) 在QGroundControl中執(zhí)行標(biāo)準(zhǔn)的加速度計(jì)和陀螺儀校準(zhǔn)。務(wù)必在飛機(jī)最終搭載機(jī)載電腦和標(biāo)記點(diǎn)的狀態(tài)下進(jìn)行因?yàn)橹亓糠植紩?huì)影響加速度計(jì)。磁力計(jì)校準(zhǔn) 在室內(nèi)磁力計(jì)受干擾極大強(qiáng)烈建議在EKF2中禁用磁力計(jì)融合通過(guò)EKF2_AID_MASK取消勾選“磁強(qiáng)計(jì)融合”。我們的偏航角將由Optitrack視覺(jué)提供如果融合了視覺(jué)偏航或IMU陀螺積分。外部視覺(jué)對(duì)齊 這是最關(guān)鍵的一步。將飛機(jī)放在Optitrack捕捉區(qū)域內(nèi)保持水平。在QGroundControl的“傳感器設(shè)置”中選擇“外部視覺(jué)”。點(diǎn)擊“校準(zhǔn)”。軟件會(huì)提示你緩慢旋轉(zhuǎn)飛機(jī)偏航。這個(gè)過(guò)程是讓PX4記錄下視覺(jué)偏航角與IMU估計(jì)的偏航角之間的固定偏差。校準(zhǔn)成功后這個(gè)偏差會(huì)被補(bǔ)償。5. 全流程實(shí)操與飛行測(cè)試5.1 step-by-step 啟動(dòng)流程啟動(dòng)Motive 打開(kāi)Optitrack的Motive軟件完成攝像頭預(yù)熱和校準(zhǔn)。創(chuàng)建剛體并確保剛體在捕捉區(qū)域內(nèi)穩(wěn)定可見(jiàn)剛體ID例如1與橋接程序配置一致。在“數(shù)據(jù)流”設(shè)置中啟用NatNet廣播并確認(rèn)服務(wù)器IP和端口。啟動(dòng)ROS與橋接 在運(yùn)行橋接程序的電腦上啟動(dòng)你的launch文件。roslaunch your_package optitrack.launch查看終端是否有錯(cuò)誤并用rostopic list確認(rèn)/mavros/vision_pose/pose等話(huà)題已存在。連接PX4與QGroundControl 給飛機(jī)上電通過(guò)數(shù)傳或USB連接QGroundControl。確保連接正常參數(shù)可讀寫(xiě)。檢查數(shù)據(jù)流 在QGroundControl的“MAVLink Inspector”中查找VISION_POSITION_ESTIMATE或ODOMETRY消息。確認(rèn)其數(shù)據(jù)在隨著你移動(dòng)飛機(jī)而規(guī)律變化。檢查消息的接收頻率理想應(yīng)在50Hz以上。切換至外部定位模式 在安全的情況下例如飛機(jī)用繩子拴住或放在測(cè)試架上將飛行模式切換到“位置Position”模式。此時(shí)PX4應(yīng)使用視覺(jué)數(shù)據(jù)進(jìn)行定位。解鎖與微調(diào) 嘗試解鎖。飛機(jī)可能會(huì)輕微調(diào)整位置以“鎖定”在當(dāng)前視覺(jué)位置。緩慢推動(dòng)油門(mén)觀(guān)察飛機(jī)響應(yīng)。如果出現(xiàn)劇烈震蕩或朝一個(gè)方向猛沖立即鎖定回頭檢查坐標(biāo)轉(zhuǎn)換和傳感器對(duì)齊。5.2 飛行日志分析與問(wèn)題診斷PX4的飛行日志ULog文件是排查問(wèn)題的金礦。用Flight Reviewhttps://logs.px4.io在線(xiàn)工具分析。查看vehicle_local_position主題 這是EKF2融合后的本地位置估計(jì)。將其與vehicle_vision_position原始視覺(jué)數(shù)據(jù)進(jìn)行對(duì)比。兩者應(yīng)該基本重合。如果存在固定偏差說(shuō)明坐標(biāo)轉(zhuǎn)換或?qū)R有問(wèn)題如果存在高頻抖動(dòng)可能是視覺(jué)噪聲太大或EKF2_EV_NOISE_MD設(shè)置不當(dāng)。查看estimator_status主題 關(guān)注vel_ratio,pos_ratio,hgt_ratio等字段。它們表示視覺(jué)數(shù)據(jù)在速度、位置、高度估計(jì)中的融合比例。理想情況下在純視覺(jué)定位時(shí)位置和高度的比例應(yīng)接近1.0。如果比例很低說(shuō)明EKF2不信任視覺(jué)數(shù)據(jù)需要檢查數(shù)據(jù)質(zhì)量或EKF2_EV_*系列參數(shù)。檢查延遲 對(duì)比vehicle_vision_position的時(shí)間戳和sensor_combinedIMU數(shù)據(jù)的時(shí)間戳。兩者的時(shí)間差加上EKF2_EV_DELAY就是EKF2認(rèn)為的視覺(jué)延遲。確保這個(gè)延遲值合理例如小于0.1秒。6. 常見(jiàn)問(wèn)題與深度排坑指南6.1 剛體位置飄移或跳動(dòng)可能原因1標(biāo)記點(diǎn)遮擋或反射不良。確保所有反光標(biāo)記點(diǎn)清潔且不被飛機(jī)自身部件如螺旋槳、機(jī)臂遮擋。在Motive的預(yù)覽窗口中觀(guān)察剛體的“殘影”或“閃爍”情況。可能原因2攝像頭校準(zhǔn)不完美或環(huán)境光干擾。重新進(jìn)行高精度的“標(biāo)定板”校準(zhǔn)確保捕捉區(qū)域光線(xiàn)均勻避免其他紅外光源如陽(yáng)光、暖氣片干擾。可能原因3剛體定義不穩(wěn)固。在Motive中剛體是由一組標(biāo)記點(diǎn)定義的。如果這些點(diǎn)在物理結(jié)構(gòu)上不夠剛性比如裝在軟性材料上或者定義時(shí)殘留點(diǎn)太多會(huì)導(dǎo)致解算抖動(dòng)。優(yōu)化剛體模型使用最少的、穩(wěn)固的標(biāo)記點(diǎn)。6.2 PX4拒絕使用視覺(jué)數(shù)據(jù)或融合效果差可能原因1EKF2一致性檢查失敗。EKF2會(huì)檢查不同傳感器數(shù)據(jù)的一致性。如果視覺(jué)數(shù)據(jù)與IMU預(yù)測(cè)的位置偏差過(guò)大例如因坐標(biāo)轉(zhuǎn)換錯(cuò)誤導(dǎo)致數(shù)據(jù)跳變EKF2會(huì)將其標(biāo)記為失效并拒絕融合。檢查estimator_status日志中的filter_fault_flags。可能原因2數(shù)據(jù)頻率過(guò)低或不穩(wěn)定。確保NatNet數(shù)據(jù)流頻率穩(wěn)定且足夠高30Hz。在橋接節(jié)點(diǎn)和網(wǎng)絡(luò)層面檢查是否有丟包。可能原因3EKF2_EV_DELAY參數(shù)錯(cuò)誤。這個(gè)參數(shù)對(duì)融合效果影響極大。一個(gè)實(shí)用的調(diào)試方法是在日志中固定飛機(jī)觀(guān)察vehicle_local_position.vz融合后的垂直速度。理論上應(yīng)該接近0。如果EKF2_EV_DELAY設(shè)置錯(cuò)誤即使飛機(jī)靜止也會(huì)融合出一個(gè)虛假的上下速度。微調(diào)此參數(shù)使靜止時(shí)的融合速度最小化。6.3 飛機(jī)解鎖后向一個(gè)方向緩慢或快速漂移可能原因1視覺(jué)位置與IMU估計(jì)的重心偏差。這通常是因?yàn)樵贓KF2中融合了視覺(jué)位置但視覺(jué)姿態(tài)或IMU姿態(tài)與飛機(jī)的真實(shí)重心存在杠桿臂Arm效應(yīng)未補(bǔ)償。PX4支持通過(guò)EKF2_EV_POS_X/Y/Z參數(shù)設(shè)置視覺(jué)傳感器即剛體相對(duì)于飛機(jī)重心的偏移量。如果剛體安裝在飛機(jī)上方你需要設(shè)置一個(gè)正的Z偏移量。可能原因2未進(jìn)行外部視覺(jué)對(duì)齊校準(zhǔn)導(dǎo)致視覺(jué)偏航角與IMU偏航角存在固定偏差。飛機(jī)為了糾正這個(gè)偏差會(huì)持續(xù)旋轉(zhuǎn)從而耦合出位置漂移。務(wù)必執(zhí)行QGC中的外部視覺(jué)對(duì)齊校準(zhǔn)。可能原因3控制器積分飽和。如果位置存在一個(gè)小的穩(wěn)態(tài)誤差位置控制器的積分項(xiàng)I項(xiàng)會(huì)不斷累積導(dǎo)致持續(xù)加大油門(mén)修正。可以嘗試在飛行中輕微搖桿修正或者臨時(shí)調(diào)低位置控制器的積分增益MPC_XY_I和MPC_Z_I但這不是根本解決辦法根源還是定位數(shù)據(jù)有偏差。6.4 從仿真到真機(jī)的額外注意事項(xiàng)在仿真中如Gazebo with ROS一切都很完美。但真機(jī)是另一回事。機(jī)載計(jì)算延遲 如果你的橋接程序運(yùn)行在機(jī)載計(jì)算機(jī)如樹(shù)莓派上然后通過(guò)串口傳給飛控這個(gè)串口通信會(huì)引入不可忽略的延遲可能達(dá)到20-50毫秒。你需要將這個(gè)延遲加到EKF2_EV_DELAY中。更好的架構(gòu)是讓運(yùn)行橋接程序的電腦地面站通過(guò)數(shù)傳電臺(tái)以較高帶寬向飛控發(fā)送MAVLink消息飛控的MAVLink模塊處理延遲更低。振動(dòng)問(wèn)題 飛機(jī)螺旋槳的振動(dòng)會(huì)嚴(yán)重影響IMU數(shù)據(jù)也可能通過(guò)結(jié)構(gòu)傳遞到剛體標(biāo)記點(diǎn)在Motive中造成高頻抖動(dòng)。加強(qiáng)飛控和機(jī)載電腦的減震使用海綿膠墊。在Motive中也可以開(kāi)啟剛體平滑濾波Smoothing但要小心引入額外延遲。剛體剛性問(wèn)題 確保固定標(biāo)記點(diǎn)的支架非常牢固。任何微小的形變?cè)诟咚贁z像頭下都會(huì)被放大導(dǎo)致位姿解算錯(cuò)誤。使用碳纖維桿和3D打印的堅(jiān)固件來(lái)固定標(biāo)記點(diǎn)。最后室內(nèi)光學(xué)定位是一個(gè)系統(tǒng)工程任何一個(gè)環(huán)節(jié)的疏忽都會(huì)導(dǎo)致失敗。我的建議是嚴(yán)格按照“分步驗(yàn)證”的原則先確保Motive里的剛體穩(wěn)定再確保橋接程序輸出正確的ROS話(huà)題數(shù)據(jù)然后確保MAVLink消息能正確發(fā)送并被PX4接收最后才進(jìn)行參數(shù)配置和飛行測(cè)試。耐心記錄每一個(gè)步驟的現(xiàn)象和參數(shù)善用日志分析工具你就能把這套強(qiáng)大的系統(tǒng)馴服為你的無(wú)人機(jī)在室內(nèi)插上“厘米級(jí)”的眼睛。