控制調參實戰(zhàn):從串級PID到MAVLink工具鏈)
很多搞飛控的朋友做完了傳感器校準、電調油門行程校準、解鎖自檢之后往往會卡在同一道坎上——飛機第一次離地就天旋地轉或者明明能飛但手感稀碎懸停時像喝醉了酒。其實這些問題的根源基本都在同一個地方Ardupilot的姿態(tài)控制沒調明白。作為《Ardupilot姿態(tài)控制詳解》系列的完結篇這篇不打算再重復前幾篇講過的傳感器融合原理、電機動力模型、濾波器選型這些“地基”我們直接把最核心的那部分補上姿態(tài)控制這個閉環(huán)到底怎么運轉、代碼層面它干了什么事、以及你手里那些管理工具和編程接口Python、Dart該怎么用它干活。適合正在調參的飛手、做二次開發(fā)的軟件工程師以及剛入坑無人機但對“飛機為什么能站穩(wěn)”充滿好奇的新手。1. 姿態(tài)控制是怎么一環(huán)扣一環(huán)的上一代飛控或者說初學階段大家對姿態(tài)控制的理解往往停留在“PID調一下就行”。但實際上去翻Ardupilot的源碼、看日志曲線你會發(fā)現姿態(tài)控制從來不是一個單一PID它是一整套串級閉環(huán)里面有三個繞不開的概念期望姿態(tài)、機體角速度、以及電機的推力分配。1.1 先分清幾個“姿態(tài)”概念很多新手在接觸姿態(tài)控制時第一件事就是被歐拉角、四元數、機體軸角速度搞暈。這里我建議你用一個樸素的心智模型去記姿態(tài)就是飛機“相對于地面的朝向”角速度就是飛機“繞自己三個軸的轉動快慢”。Ardupilot內部幾乎全程用四元數來表示姿態(tài)原因很實際歐拉角在接近90°俯仰時會出萬向鎖導致數值跳變而且四元數做姿態(tài)插值和旋轉串聯運算比歐拉角方便得多。但在對外接口比如MAVLink的ATTITUDE消息里它又會把姿態(tài)轉成歐拉角給你看。所以你會看到roll、pitch、yaw三個角度和rollspeed、pitchspeed、yawspeed三個角速度同時出現??刂粕暇陀脙商琢拷嵌攘科谕麢M滾角、期望俯仰角、期望偏航角這是外環(huán)的輸入輸出對象角速度量機體繞X、Y、Z軸的旋轉速度單位rad/s這是內環(huán)的直接控制對象。說個容易踩的坑角速度符號方向和角度的符號方向在Ardupilot里是約定一致的都是右手定則。也就是繞X軸向右滾轉為正繞Y軸抬頭為正繞Z軸逆時針偏航為正。要是你自己寫代碼做控制律符號搞反了那飛機一定是炸雞收場。1.2 串級控制角度外環(huán)與角速度內環(huán)的結構Ardupilot的姿態(tài)控制采用典型的串級PID結構。外環(huán)是角度控制器輸入是期望角度和當前角度輸出是期望角速度內環(huán)是角速度控制器輸入是外環(huán)給出的期望角速度和當前角速度陀螺儀測量的角速度輸出是期望力矩最后通過混控器mixer轉化為每個電機的PWM指令。為什么會用兩層而不是直接把期望角度丟給PID去推電機原因很簡單直接用角度誤差去輸出電機指令等效于一個P控制器去控制一個其實是二階系統(tǒng)的東西增益小了反應慢增益大了就震蕩。串級的好處是內環(huán)可以先把角速度這個“中間量”快速穩(wěn)住外環(huán)只需要調度“轉到什么角速度”即可。用大白話說外環(huán)決定“你要多快轉過去”內環(huán)保證“你確實按這個速度轉”。在Ardupilot參數里這層結構體現在前綴上ATC_ANG_RLL_P、ATC_ANG_PIT_P、ATC_ANG_YAW_P外環(huán)角度P增益ATC_RAT_RLL_P/I/D、ATC_RAT_PIT_P/I/D、ATC_RAT_YAW_P/I/D內環(huán)角速度PID。注意外環(huán)只有P沒有I和D。這是Ardupilot官方推薦的經典配合。角度誤差不存在穩(wěn)態(tài)誤差問題——因為只要角度有偏差外環(huán)就會產生期望角速度繼續(xù)糾偏所以積分項放在外環(huán)是多余且有害的反而會引入超調和緩震。角度環(huán)的D更是沒必要因為角度本身是由姿態(tài)解算積分出來的求導放大噪聲純屬自討苦吃。2. 深入Ardupilot的姿態(tài)控制實現前一節(jié)講了閉環(huán)骨架這一節(jié)我們把骨架里的“器官”逐個解剖。Ardupilot這套姿態(tài)控制算法經過十幾年的迭代已經非常成熟但它的實現方式并不是教科書里那種隨手寫個PID就完事的里面有不少細節(jié)值得展開。2.1 從期望姿態(tài)到期望角速度外環(huán)在算什么外環(huán)的輸入來自遙控器輸入或自主飛行邏輯比如航線任務、定高模式里的位置控制器通常表達為期望的橫滾角、俯仰角、偏航角。Ardupilot在計算時會先把期望姿態(tài)和當前姿態(tài)都轉為四元數計算其誤差四元數然后從這個誤差中分解出機體坐標系下的角度誤差。角度誤差在外環(huán)經過比例控制分別乘上ATC_ANG_RLL_P、ATC_ANG_PIT_P、ATC_ANG_YAW_P這三個參數就得到了期望角速度。以橫滾軸為例數學上就是期望滾轉角速度 (期望橫滾角 - 當前橫滾角) × ATC_ANG_RLL_P簡單、直接、沒有任何花哨的東西。但Ardupilot還會做一些限制期望角速度不能超過ATC_RATE_RLL_MAX、ATC_RATE_PIT_MAX、ATC_RATE_YAW_MAX這個參數在老版本里叫ATC_RATE_YAW_MAX新版本拆成了幾個限制參數姿態(tài)角本身也會被限幅比如ATC_ANG_LIM_TC用來平滑搖桿輸入讓期望角度平滑變化避免桿量猛地打滿導致姿態(tài)突跳。ATC_ANG_LIM_TC這個參數很容易被忽略但它管著“搖桿打過去之后期望姿態(tài)追得多快”。調小立即使手感更跟手調大則飛機更柔和。實際調試時如果覺得飛機“跟手但容易過沖”或者“穩(wěn)但反應慢”往往不需要動PID調這個時間常數就能解決問題。2.2 角速度環(huán)PID每個參數到底在干啥內環(huán)角速度PID是姿態(tài)控制的重中之重。網上流傳的“P管力度、I管消除靜差、D管阻尼”這句口訣放在這里確實沒錯但真要落到參數上還是有很多細節(jié)值得深挖。先說P項。期望角速度和當前角速度之間的誤差乘上ATC_RAT_RLL_P對應橫滾軸就成了P項輸出它決定飛機“抵抗外力擾動”的剛度。P太低飛機受到陣風就會歪P太高飛機會出現高頻的嗡嗡聲甚至持續(xù)震蕩這種震蕩頻率通常在幾赫茲以上從日志里看角速度曲線就像鋸齒一樣。再說I項。角速度環(huán)的I項用來消除恒定的干擾力矩比如重心偏移、電機拉力不一致、機身不對稱等導致的持續(xù)偏轉。I項的問題是積分飽和——當飛機持續(xù)被施加一個由外環(huán)產生的角速度誤差指令時如果I項累計得太多一旦外界擾動消失它還會繼續(xù)輸出好幾秒的偏轉力矩表現出來就是飛機“緩了一下又突然歪一下”。解決辦法是把I項的積分輸出限制住Ardupilot里專門有ATC_RAT_RLL_IMAX這個參數控制橫滾軸的積分限幅默認是0.333調小一點能讓飛機在風吹時恢復得更利落。最后說D項。角速度環(huán)的D項對陀螺儀噪聲極其敏感它本質上是“角加速度抑制”。D項高了飛機會在快速機動后干凈利落地停下來但調太高就會出現陀螺儀噪聲被放大之后的dirty震動整機發(fā)麻、電機發(fā)燙。Ardupilot里D項還可以再加一個D濾波器也就是ATC_RAT_RLL_D_FILTER參數默認25Hz用來把陀螺儀高頻噪聲擋在前端。這個參數如果不是特別清楚自己在干嘛建議保持默認。偏航軸和橫滾俯仰軸有個重要區(qū)別偏航軸的轉動慣量小、響應快而且偏航力矩主要靠電機反扭力差產生所以偏航軸的P和D通常比橫滾俯仰明顯低。新手上路容易犯的錯是把三軸P設成一樣的結果偏航軸瘋狂抖頭。2.3 代碼層面去哪兒看Ardupilot的姿態(tài)控制代碼在Copter固件里主要由AC_AttitudeControl類負責源碼文件路徑大致在libraries/AC_AttitudeControl/AC_AttitudeControl.cpp和ArduCopter/Attitude.cpp。很多朋友想“看源碼學飛控”我個人建議先別從頭一行一句讀因為代碼里混了大量傳感器失效保護、限幅、模式切換分支直接讀完會很勸退。更好的方式是帶著問題去搜關鍵函數名比如你搜attitude_controller_run_quat就能看到姿態(tài)控制器的主入口搜rate_controller_run就能看到內環(huán)PID計算的地方。對著代碼再回頭看日志曲線理解速度會快很多。3. 配套工具與實操讀數據、發(fā)航點、調參姿態(tài)控制講得再多最終還是要落到工具鏈和實操上。這部分我會覆蓋三個熱詞里提到的點用哪個管理工具管理Ardupilot、用Python怎么讀取Ardupilot的姿態(tài)數據、以及用Dart通過MAVLink給Ardupilot發(fā)送航點。這些都是實際項目里高頻出現的真需求。3.1 管理工具選型Mission Planner、QGroundControl、MAVProxy怎么選Ardupilot的管理工具生態(tài)很豐富但大家最常見的就三個Mission Planner、QGroundControl、MAVProxy。Mission Planner是Windows平臺上的“老大哥”功能最全尤其適合做參數調優(yōu)、日志分析、傳感器校準。姿態(tài)控制調參時我特別推薦它的“Flight Data”界面能同時看Pitch/Roll的期望值、實際值、角速度誤差還能拉出PID貢獻曲線。新版本里它甚至提供了一個自動調參的“Tune”按鈕雖然我不建議對新手全自動跑但用來做參數初篩非常高效。QGroundControl是跨平臺地面站macOS和Linux用戶的福音。它的航點規(guī)劃和任務上傳做得漂亮MAVLink可視化也清晰但單獨的PID分析工具不如Mission Planner豐富。如果你是純Ubuntu開發(fā)環(huán)境QGC是首選。MAVProxy則完全是命令行工具對工程師更友好。它最核心的價值是可以在嵌入式環(huán)境里用python擴展而且資源占用極低。如果你需要在地面站里跑自定義腳本去批量讀取參數、批量發(fā)指令MAVProxy pymavlink的組合比圖形化地面站靈活得多。選型建議Windows用戶直接上Mission PlannermacOS/Linux桌面用戶上QGroundControl做自動化測試或二次開發(fā)的MAVProxy pymavlink是生產力工具。3.2 Python讀取Ardupilot姿態(tài)數據pymavlink實戰(zhàn)Python讀取Ardupilot姿態(tài)數據最常用的庫是pymavlink。它本質上是一個MAVLink協(xié)議解析庫負責把串口、UDP、TCP上的二進制MAVLink消息轉成可讀的Python對象。第一步安裝pip install pymavlink第二步建立連接。常見的有兩種連接方式USB串口直連和UDP局域網連接。串口連接適合地面站和飛控用USB線連的場景UDP連接適合數傳或者模擬器SITL。模擬器調試時通常用的是UDPfrom pymavlink import mavutil # 串口連接示例Linux下通常是/dev/ttyUSB0Windows下是COM口 # master mavutil.mavlink_connection(/dev/ttyUSB0, baud115200) # UDP連接預設端口SITL默認是14550 master mavutil.mavlink_connection(udp:127.0.0.1:14550) master.wait_heartbeat() print(已連接飛控心跳正常)第三步訂閱姿態(tài)消息。姿態(tài)數據對應的MAVLink消息名是ATTITUDE里面包含roll、pitch、yaw、rollspeed、pitchspeed、yawspeed六個核心字段。讀取方式有兩種阻塞式讀取適合腳本里按順序處理一條條消息msg master.recv_match(typeATTITUDE, blockingTrue) print(froll: {msg.roll:.3f} rad, pitch: {msg.pitch:.3f} rad, yaw: {msg.yaw:.3f} rad)事件循環(huán)式讀取適合長時間監(jiān)聽、隨時抓取最新姿態(tài)while True: msg master.recv_match(typeATTITUDE, blockingTrue) if msg: # 注意ATTITUDE消息里的歐拉角單位是弧度 roll_deg int(msg.roll * 57.2958) pitch_deg int(msg.pitch * 57.2958) yaw_deg int(msg.yaw * 57.2958) print(froll: {roll_deg}°, pitch: {pitch_deg}°, yaw: {yaw_deg}°)一個非常容易踩的坑ATTITUDE消息的歐拉角單位是弧度不是角度。如果你直接拿數值去當角度看會發(fā)現roll是0.03左右而不是1.7度左右搞得自己一頭霧水。做日志分析的時候統(tǒng)一轉成角度制再操作。如果要做姿態(tài)控制調參分析除了實時讀取更推薦直接讀Ardupilot的bin日志dataflash log。用pymavlink的mavlogdump.py腳本可以很方便地把.bin轉成.csv或者可讀文本再結合Excel或者Python的pandas去畫期望角速度、實際角速度、P/I/D各項貢獻的曲線。3.3 Dart通過MAVLink發(fā)送航點給Ardupilot的完整流程Dart這個語言在飛控生態(tài)里出現得不算多但做跨平臺App、桌面工具、甚至機器人控制面板時它確實是一個好選擇。Dart發(fā)航點給Ardupilot本質上就是通過串口或網絡連接發(fā)送MAVLink的航點相關消息。Ardupilot這邊完全不知道對面是C、Python還是Dart它只認MAVLink協(xié)議。第一步準備一個可用的MavLink庫。Dart生態(tài)里有一個維護得比較好的dart_mavlink庫也可以直接用protocol生成器從mavlink.xml生成Dart代碼。這個步驟如果你不熟悉可以去pub.dev搜索mavlink找一個舊但能用的包通常都支持v1.0協(xié)議。第二步建立連接。Dart端通常用UDP連接到運行著SITL的電腦上或者通過串口串口庫比如serial_port連真機。這里給一個UDP連接的示意寫法import dart:io; // 連接到SITL的UDP端口 var socket await RawDatagramSocket.bind(InternetAddress.anyIPv4, 0); socket.connect(InternetAddress(127.0.0.1), 14550);第三步發(fā)送航點消息。標準流程其實分幾步發(fā)送MISSION_COUNT消息告訴飛控“我要上傳N個航點”等待飛控回MISSION_REQUEST每收到一個請求就發(fā)送對應的MISSION_ITEM_INT消息里面包含航點序號、經緯度、高度、航點類型MAV_CMD_NAV_WAYPOINT全部發(fā)完后飛控會回復MISSION_ACK表示任務接收完成。以向Ardupilot上傳一個簡單的“起飛到指定點”航點為例核心是要構MAVLink消息。在dart_mavlink這類庫里MISSION_ITEM_INT的消息體通常長這樣var item MavlinkMissionItemInt( seq: 0, frame: MavFrame.mavFrameGlobalRelativeAlt, command: MavCmd.mavCmdNavWaypoint, current: 0, autocontinue: 1, param1: 0, // 停留時間秒 param2: 20, // 接受半徑米 param3: 0, // 通過航點半徑米 param4: 0, // 偏航角 x: 47.397742, // 緯度 y: 8.545594, // 經度 z: 100.0, // 高度米 );真正讓Ardupilot開始執(zhí)行還需要切換飛行模式到AUTO/GUIDED然后發(fā)送MAV_CMD_MISSION_START消息。直接用MAVLink的SET_MODE消息切換模式是最穩(wěn)妥的方式Ardupilot這邊要設置自定義模式編號為AUTO在Copter里AUTO對應模式序號是3。這個流程里最常見的坑有三個航點序號必須從0開始而且MISSION_COUNT里的總數要和實際發(fā)送的消息數量完全一致多了少了都會卡在等待請求狀態(tài)坐標系一定要用MAV_FRAME_GLOBAL_RELATIVE_ALT相對高度否則飛控會按絕對高度去執(zhí)行你把高度設成100米要是當地海拔正好是100米可能沒事但要是在高原飛飛控會直接起飛拉升到幾百米如果飛控沒收到任務先檢查循環(huán)里有沒有處理好MISSION_REQUEST消息Ardupilot是一邊收一邊校驗每收一個就要立即回一個不能批量發(fā)送。3.4 姿態(tài)調參標準流程與參數速查說完了讀取和航點再回到姿態(tài)控制最核心的事情——調參。這里給出一個我自己實測下來比較穩(wěn)的流程。先確認基礎條件飛機重心居中、電機編號和方向正確、螺旋槳規(guī)格一致、加速度計和陀螺儀校準完成、遙控器通道和模式設置正確。這個前提沒滿足參數怎么調都是白搭。第一步把內環(huán)PID全部恢復到一個安全的保守基準值。對于一臺常見的250級別四軸或大疆F450級別四軸可以從Ardupilot自帶的參數文件里選一個相近機型的默認參數或者用官方推薦的默認值起步。一般來說ATC_RAT_RLL_P和ATC_RAT_PIT_P可以先給0.135左右I給0.18左右D給0.003左右偏航軸的P給0.18I給0.015D給0.004。軸距更大、更重的飛機P值反而要適當調小因為轉動慣量大。第二步先調內環(huán)P。讓飛機解鎖油門推到一個中等懸停位置給一個小幅橫滾或俯仰階躍指令用手輕推桿然后回中觀察飛機是否震蕩。如果震蕩把P降低20%再試。如果響應很軟、像“發(fā)面團”把P提高20%。反復試到“打桿后快速響應但沒有高頻震蕩”這個狀態(tài)為止。第三步加I。手動把飛機在一個方向掰一下看它是否慢慢回中。如果不回中增加I如果回中后產生低頻率的“來回晃”就是I過高降低I。正常情況下姿態(tài)控制的I值不需要很大因為外環(huán)已經在持續(xù)消除角度誤差。第四步加D。把飛機快速從一個姿態(tài)打到另一個姿態(tài)然后回中觀察能不能干脆利落停住。如果會“過沖”一下再回來說明D不足如果電機發(fā)出尖銳鳴叫、機身發(fā)麻說明D過大。D項的調整幅度要非常小一次±0.001因為陀螺儀噪聲很容易被D放大。完整的參數速查表放在這里方便調參時對照參數名稱作用參考范圍250~550級四軸調大效果調小效果ATC_ANG_RLL_P / ATC_ANG_PIT_P外環(huán)角度P4.5 ~ 6.5更跟手、更激進更柔和、更適合新手ATC_ANG_YAW_P外環(huán)偏航角度P4.0 ~ 5.5偏航響應更快偏航發(fā)虛ATC_RAT_RLL_P / ATC_RAT_PIT_P內環(huán)橫滾俯仰P0.12 ~ 0.18抵抗擾動更強抗風變差ATC_RAT_RLL_I / ATC_RAT_PIT_I內環(huán)橫滾俯仰I0.15 ~ 0.25消除恒定偏差更快恢復力變弱ATC_RAT_RLL_D / ATC_RAT_PIT_D內環(huán)橫滾俯仰D0.002 ~ 0.006快速制動、抗過沖更容易過沖ATC_RAT_YAW_P內環(huán)偏航P0.15 ~ 0.22機頭鎖定力更強鎖頭發(fā)軟ATC_ACCEL_MAX最大角加速度限制8000 ~ 45000 deg/s2機動更猛機動更柔和調參時一定要養(yǎng)成記日志的習慣。每一輪調整前用Mission Planner輸一個特定的“tag”在Flight Data里標注品名這樣后面翻日志時一眼就知道當前曲線對應哪一組參數。別偷懶這個習慣能幫你少走非常多彎路。4. 常見問題與排查技巧實錄姿態(tài)控制調參這條路上幾乎每個人都踩過差不多的坑。我把這些年遇到的高頻問題整理一下屬實都是“過來人”經驗很多人不看日志瞎調一晚上最后發(fā)現就是個幾百年沒人注意的小參數。4.1 高頻自激震蕩現象飛機解鎖后在空中或者地面就能聽到高頻的“嗡嗡”聲甚至電機抖動肉眼可見油門稍微拉高就會劇烈晃動。排查思路直接看日志里的角速度曲線。如果角速度曲線呈現高頻10Hz以上正弦狀波動通常意味著內環(huán)P偏高或者D偏高。先降P再降D一般一次調整幅度不超過20%降完重新試飛。另一個隱藏原因是陀螺儀濾波器設置不當INS_GYRO_FILTER默認值是20Hz如果你用了一個噪聲特別大的飛控板可以嘗試降到10Hz但如果P和D本身已經到了合理區(qū)間濾波扛不住不是因為調參而是硬件噪聲太大得考慮換減震泡沫墊。4.2 懸停漂移嚴重現象飛機在無風條件下懸停姿勢一直在緩慢漂移往某個方向一直偏需要不斷手動修正。排查思路優(yōu)先檢查傳感器校準。加速度計水平偏了一點姿態(tài)估計就會一直有誤差飛控為了姿態(tài)回中會把飛機往“錯誤”的方向推。重新做一次6面校準然后用遙控桿把飛機保持水平懸??慈罩纠飏oll/pitch是否接近0。如果加速度計已經校準了那就是I項的問題——看看飛機是不是偏向電機轉速高的一側如果是增大對應軸的I值。還有一種被忽略的情況電機和螺旋槳本身不對稱比如有一個電機有點退磁拉力下降這屬于硬件問題需要更換電機而不是盲目調參數。4.3 偏航軸“搖頭”或“鎖不緊”現象飛機懸停時機頭左右搖或者偏航后無法精確停住甚至出現低頻震蕩。排查思路偏航軸和橫滾俯仰完全不同它的轉動慣量小、響應快過大的P或者過大的D都極易引發(fā)振蕩。首先確認偏航軸的P不要比橫滾軸高太多然后檢查偏航軸的D是否過大。還有一點特別容易被忽視偏航軸角速度環(huán)的I項如果設得過大會導致偏航響應“軟”也就是機頭轉過去之后又慢慢彈回來??梢园袮TC_RAT_YAW_IMAX調低一些。如果電機排布是X型偏航力矩靠的是四個電機的差速電機響應跟不上偏航指令也會出現搖頭這時候可以檢查一下電機電調的響應時間盡量選響應快的電調。4.4 快速打桿后過沖現象快速把橫滾桿打到底再松手飛機不是立刻停住而是順著方向多轉了10°左右才回來。排查思路這是D項不足的典型表現。外環(huán)和P項已經把飛機“加速”到位但缺了阻尼飛機停不住。先增加橫滾/俯仰的D值每次增加0.0005左右直到快速打桿后能干凈利落停住。如果D已經加到0.006以上還是過沖回頭看看ATC_ANG_LIM_TC是不是設得太小因為外環(huán)反應過激會把一個很大的期望角速度灌給內環(huán)內環(huán)再激進也容易過沖。這個情況下降一點外環(huán)角度響應反而能改善手感。4.5 檢查清單速查表問題現象優(yōu)先檢查項次要檢查項高頻震蕩內環(huán)PID過高尤其D項INS_GYRO_FILTER過低減震墊問題懸停漂移加速度計校準偏差I項不足、重心偏移偏航搖頭偏航P/D過高電調響應慢、ATC_RAT_YAW_IMAX過大打桿過沖內環(huán)D不足ATC_ANG_LIM_TC過小、外環(huán)P過高響應遲緩內環(huán)P不足外環(huán)角度P不足、角加速度限幅過小電機發(fā)燙D項過大導致高頻調節(jié)電調頻率過低、電機損壞這里必須再強調一遍調試姿態(tài)控制最忌諱“想當然”。不要憑感覺擰參數一定要用日志輔助分析。Mission Planner的Flight Data界面把pil和期望值曲線疊加在一起看一眼就能判斷誤差是角度誤差還是角速度誤差。如果角度偷差一段時間持續(xù)說明外環(huán)有系統(tǒng)性問題如果角度幾乎一致但角速度震蕩內環(huán)問題跑不掉。日志是你和失控之間唯一的真相。根據我個人這么多年的調機經驗姿態(tài)控制調參其實有60%的時間是在排除硬件和傳感器問題只有40%的時間在真正碰PID。很多人一上來就調參數結果調了兩天發(fā)現是螺旋槳一個裝反了、電機一個堵轉白白浪費精力。先把硬件、重心、校準這些工作做實再動手調PID你會發(fā)現所謂的“姿態(tài)控制難點”其實沒有傳說中那么玄乎。最后再分享一個小技巧調參之前把Mission Planner里的“Pilot Tune”調參工具用起來它會自動幫你做一次往返掃掠然后給出一組推薦PID。雖說不一定完全貼合你的手感偏好但拿來做初始值和合理性驗證很靠譜。省下的時間夠你多炸兩架模擬器了。