
ArduPilot Lua 腳本指南3 步自定義飛行行為【免費下載鏈接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source項目地址: https://gitcode.com/GitHub_Trending/ar/ardupilotArduPilot 是開源無人機飛控固件覆蓋多旋翼、固定翼等機型。它內置的 Lua 腳本系統讓你不改固件就能擴展自定義飛行行為適合想給飛行功能加料的開發者和高階玩家。3 步啟用 Lua 腳本支持 圖STM32H7 級飛控板ArduPilot Lua 腳本的典型運行載體第 1 步確認硬件。閃存芯片里的存儲空間大于 1MB 的飛控會自動編譯進腳本引擎Pixhawk 4、CubeBlack 這類 STM32F7/H7 機型都滿足。第 2 步準備固件。從官方倉庫獲取源碼按 README 安裝依賴即可沒有硬件也能用 SITL軟件在環即把固件跑在電腦模擬器里先行驗證。第 3 步開啟并放腳本。在地面站把SCR_ENABLE設為 1 并重啟飛控再把.lua腳本放進 SD 卡的scripts文件夾開機自動加載。ArduPilot 腳本引擎如何工作 ??原理先講透。ArduPilot 在固件里內置了 Lua 5.3.6 解釋器源碼在 lua/ 目錄。腳本跑在獨立線程里不會卡住主飛行控制回路。每個腳本本質是個函數函數末尾return 函數名, 毫秒數引擎就會在毫秒數到達后再次調用它這就是每 100ms 更新一次的機制。另外任務執行到 SCRIPTING 指令時AP_Mission 任務模塊里的start_command_do_scripting函數會把它轉交給腳本所以任務也能驅動腳本。必備參數參數作用設置示例SCR_ENABLE腳本總開關改后需重啟設為 1SCR_HEAP_SIZE腳本內存字節平臺默認 43KB–200KB按腳本復雜度上調進階參數參數作用示例SCR_VM_I_COUNT虛擬機指令執行上限防腳本吃滿 CPU設為 200000SCR_THD_PRIORITY腳本線程優先級按實時性調按機型調整SCR_DEBUG_OPTS打開詳細日志排錯用調試時啟用SCR_LD_CHECKSUM腳本校驗和完整性檢查防篡改腳本執行正式環境開啟Lua 腳本 3 個實用場景 ?圖SITL 模擬器輸出的數據曲線ArduPilot Lua 腳本上機前可在此類環境驗證場景一自定義圓形軌跡。目標讓飛機繞某點飛 10 米半徑的圓。 實現每幀用當前航向機頭指向與正北的夾角算出圓周上的目標坐標喂給制導回路。function update() local angle ahrs:get_yaw() local radius 10 local x radius * math.cos(angle) local y radius * math.sin(angle) vehicle:set_target_position(x, y, 5) return update, 100 end return update()末尾的return update, 100就是告訴引擎100 毫秒后再來一次。效果目標點持續刷新飛機能一直保持在圓上不用人工干預。場景二電池低壓預警。目標電壓低于 10.5V 時給地面站推一條告警。 實現每秒讀一次電壓低于閾值就發文本消息告警處還能掛自動返航邏輯。function battery_monitor() local volt battery:voltage() if volt 10.5 then gcs:send_text(0, Low battery! Voltage: .. volt) end return battery_monitor, 1000 end return battery_monitor()檢查邏輯只有 5 行。效果地面站日志里每秒可見電壓狀態低電問題有足夠時間處置。場景三響應自定義任務指令。目標任務跑到自定義指令ID 100時執行腳本里的一段邏輯。 實現用mission:register_handler注冊處理器函數內判斷指令 ID。任務不再寫死新指令由腳本接管。function handle_mission_cmd(cmd) if cmd.id 100 then gcs:send_text(0, Custom mission command: .. cmd.param1) end end mission:register_handler(handle_mission_cmd)效果新增指令語義不用改固件任務與腳本配合地面站還能確認指令確實被執行。6 個 Lua 腳本常見坑 ?圖H7 級飛控板ArduPilot Lua 腳本真機驗證前的地面測試對象坑 1SCR_HEAP_SIZE給小了會內存溢出。解法留余量慣性推算示例腳本就要求至少 80000 字節。坑 2高頻回調里做重計算CPU 負載飆升。解法拉長返回的毫秒間隔必要時用collectgarbage()手動觸發垃圾回收即手動清理不再用的內存。坑 3沒開校驗和SCR_LD_CHECKSUM被篡改的腳本也能跑。解法對外發布的腳本先開校驗。坑 4忘了部分參數改完要重啟才生效誤判為 bug。解法SCR_ENABLE這類參數改完立即重啟飛控。坑 5直接真機試飛。解法先用 SITL 模擬器跑通SITL 模擬器 用Tools/autotest/sim_vehicle.py一鍵拉起再上機。坑 6出問題查不到痕跡。解法用gcs:send_text()打調試信息配合SCR_DEBUG_OPTS開詳細日志。上機之前腳本務必先在模擬器里驗證、再做地面測試這是成本最低的一道保險。想繼續深入讀 AP_Scripting 腳本模塊的源碼和 官方腳本示例目錄再動手寫你的第一個 Lua 腳本。【免費下載鏈接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source項目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot創作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考