開源飛控fmt軟件在環仿真環境搭建


tags:

  • 飛控


fmt開發環境搭建

fmt是國產開源飛控,特點是支持基于模型設計(基于simulink仿真),源碼結構目錄較清晰,項目體積較小。
此項目操作系統選擇的是國產實時操作系統rt-thread,也是開源項目。(雖然非硬實時操作系統,但是只要調度不阻塞應該是問題不大);
項目的編譯腳本是scons實現的,這個不太熟悉,它是基于python的,作用與cmake類似。可以先不考慮深入了解,現階段支持編譯就行。

fmt項目文檔地址

按照文檔提示下載代碼。

# 項目編譯
# 1. 進入項目目標目錄 /target/xxx/下
# 2. 執行編譯腳本
scons -j16 # 線程數可自選,一般是4線程編譯# 3. 編譯中如果出現錯誤,可嘗試清理編譯項目后重新編譯
scons -c # 清理scons項目編譯中間件
本人編譯過程中遇到下列問題

我是在macos系統上搭的。

  1. 編譯失敗,未找到相應編譯器。
    這個項目的開發提示過建議通過統一的編譯工具鏈進行開發。
    編譯器: arm-none-eabi- toolchain: 版本: 7-2018-q2-update.
    gnu編譯工具鏈下載地址

  2. 適配了編譯工具鏈以后仍然失敗,看起來雖然環境安裝了,但是工程不識別,記得配置完環境變量后source一下。

軟件在環仿真

下載安裝qgc

qgc裝好了,但是嘗試運行qemu半在環仿真時出錯了,看起來時運行qemu仿真的軟件正常運行,但是無法正確連接qgc,而且/sys路徑也找不到的問題。

/sys路徑找不到的問題找到了,是在創建qemu環境時使用了初始化命令mkfs.vfat sd.bin,不過macos并非天然支持這條命令。。。

1. 文件存在但格式化失敗:
- sd.bin 文件已創建(64MB)
- 但由于 mkfs.vfat 不存在,文件系統格式化失敗
- 導致是一個空的、未格式化的鏡像文件
這解釋了啟動錯誤:
- FMT-Firmware 嘗試掛載 SD 卡
- 發現沒有有效的文件系統
- 無法創建 /sys 目錄和日志文件
- 導致路徑變量損壞:pQ```/boot_log.txt

解決方法有兩個

  1. 修改啟動腳本中初始化sd.bin部分為 newfs_msdos sd.bin
  2. 安裝gnu工具
    brew install dosfstools # 提供 mkfs.vfat 命令
    我選擇方法二解決了,現在可以正確訪問boot_log了。

另一個問題是qgc和qemu始終無法建立連接。

# 我的本地qemu版本
?  qemu-vexpress-a9 git:(dev) ? qemu-system-arm -version
QEMU emulator version 10.0.2
Copyright (c) 2003-2025 Fabrice Bellard and the QEMU Project developers# 已安裝qgc版本估計是比較新的,我從官網安裝鏈接進去下載的,沒查版本。

期間嘗試抓包分析udp數據內容,發現數據包應該是沒問題的,復合MAVLINK協議的數據幀。端口號也沒有問題,默認的14550

這里卡了很久,不過最終還是被我找到問題。。

  • QGroundControl (PID 8897) 正在監聽 *:14550 (IPv4, 所有接口)
  • QEMU (PID 13779) 正在發送到 [::1]:14550 (IPv6, localhost)
    存在IP版本不匹配問題。
  • QGC監聽IPv4的14550端口
  • QEMU發送到IPv6的14550端口
    有點無語,遂修改項目自帶啟動腳本內容,從下面
qemu-system-arm -M vexpress-a9 -kernel build/fmt_qemu-vexpress-a9.bin -display none -sd sd.bin -serial stdio -serial udp:localhost:14550 -serial udp:localhost:14551

改成這樣,重點是強調ip地址. udp:127.0.0.1

qemu-system-arm -M vexpress-a9 -kernel build/fmt_qemu-vexpress-a9.bin -display none -sd sd.bin -serial stdio -serial udp:127.0.0.1:14550 -serial udp:127.0.0.1:14551

然后就連上了,也是有點無語-。-
后面會嘗試跟他們團隊咨詢下,這可能算是一個比較隱蔽的問題。

?  qemu-vexpress-a9 git:(dev) ? ./qemu.sh  啟動QEMU模擬器...WARNING: Image format was not specified for 'sd.bin' and probing guessed raw.Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.Specify the 'raw' format explicitly to remove the restrictions.[I/SDIO] SD card capacity 65536 KB.TOML: No config file finded: /sys/sysconfig.tomlDefault configuration loaded._____                               __ / __(_)_____ _  ___ ___ _  ___ ___  / /_/ _// / __/  ' \/ _ `/  ' \/ -_) _ \/ __/
/_/ /_/_/ /_/_/_/\_,_/_/_/_/\__/_//_/\__/ 
Firmware.....................FMT FW v1.1.0Kernel....................RT-Thread v4.0.3RAM................................8192 KBTarget....................QEMU vexpress-a9Vehicle........................MulticopterAirframe.................................1INS Model....................CF INS v1.0.0FMS Model....................MC FMS v1.0.0Control Model.........MC Controller v1.0.0Plant Model.............Multicopter v1.0.0Task Initialize:offboard..............................OKmavobc................................OKmavgcs................................OKlogger................................OKstatus................................OKvehicle...............................OK[1045] I/StatusTask: SIH Simulation[2044] W/MAVGCS: unhandled mavlink command:512[2083] W/MAVGCS: unhandled mavlink command:521[4410] W/MAVGCS: unhandled mavlink command:512[4806] W/MAVGCS: unhandled mavlink command:512[5200] W/MAVGCS: unhandled mavlink command:512

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83988.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83988.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83988.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何通過AI測試平臺實現自動化缺陷檢測和優化

在數字化轉型加速的今天,軟件質量保證已成為企業競爭力的關鍵要素之一。傳統的手工測試方法面臨著效率低下、成本高昂和覆蓋面有限等挑戰,而AI技術的融入為軟件測試領域帶來了革命性的變化。本文將深入探討如何構建一個完整的AI測試平臺,實現…

使用JeecgBoot配置

Jeecg 使用方法 本文以在環境配置好的前提下進行講解 如果不會配置環境 可在billbill網站的Jeecg官網搜索環境配置 第一步 打開redis,redis是一個服務,需要用命令行打開 且命令行不能關 不能實現一勞永逸效果 每次關閉都得重新打開一次。 第二步 啟動j…

NodeJS:版本及對應時間并對應的npm版本

versionltsrelease dateenginenpmnode下載更新日志文檔Node.js 24.0.1?2025-05-0813.61--下載更新日志文檔Node.js 22.12.0?2024-12-03---下載更新日志文檔Node.js 21.2.0 2023-11-1411.8.172.1710.2.3120下載更新日志文檔Node.js 20.10.0?2023-11-2211.3.244.810.2.3115下載…

UI前端大數據處理:應對海量數據的挑戰與策略

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在數字化轉型的深水區,全球每日產生的數據量已突破 500EB,相當于 10 億…

對微服務的了解

微服務是一種架構風格,我們可以把應用程序劃分為一組小型的、松散耦合的服務, 每個服務都運行在自己的進程中,并通過輕量級的通信機制進行通信, 每個服務都是獨立部署、獨立擴展、獨立更新的,從而提高了應用程序的可伸…

計算機視覺生物啟發視覺算法:如何模擬人眼與大腦?

計算機視覺生物啟發視覺算法:如何模擬人眼與大腦? 一、前言二、人眼與大腦視覺系統基礎概念?2.1 人眼的生理結構與功能?2.2 大腦視覺皮層的信息處理機制?三、生物啟發視覺算法的核心技術?3.1 視網膜啟發的特征提取算法?3.2 視覺皮層啟發的分層特征學習算法?3.3 注意力機…

stm32使用定時器功能之高精度定時(微秒級)、輸入捕獲以及超聲波測距

一、定時器功能之高精度定時(微秒級) 我們常用的延時函數中無論是HAL_Delay還是vTaskDelay()函數都是毫秒級的定時,我們可以借助定時器實現一個微秒級更高精度的延時函數。這個定時器不會影響FreeRtos的任務切換 這里就是用定時器的計數功能…

Git常用命令摘要

寫這篇博文的目的只是簡單的給自己及團隊的日常工作中需要用到的git命令作個匯總,這樣平時只需要查閱這篇文章就夠了,不用到處查找。如果能給有需要的朋友一點點的幫助,那也算是意外之喜吧。 一、基礎配置 # 設置用戶名和郵箱(首…

ubuntu 22.04 安裝部署kibana 7.10.0詳細教程

安裝部署kibana 7.10.0詳細教程 下載并安裝二、修改kibana.yml文件三、性能配置四、啟動服務驗證五、安裝啟動常見問題 【背景】 整個elk安裝是基于ubuntu 22.04和jdk 11環境。kibana均采用 *.deb方式安裝,需要服務器能聯網。ubuntu 22.04 安裝部署elk(elasticsearc…

nfs 服務器的搭建

nfs 服務器的搭建 1.配置yum源 mkdir /etc/yum.repos.d/bak mv /etc/yum.repo.d/*.repo /etc/yum.repos.d/bak/ curl -o /etc/yum.repos.d/centos.repo http://10.26.210.101/centos/centos.repo # 外網 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.c…

Yii2 基礎版實現 Token 認證 API 服務的完整框架方案

以下是一個基于 Yii2 基礎版實現 Token 認證 API 服務的完整框架方案,包含 JWT 實現和完整代碼: 1. 環境準備 composer create-project --prefer-dist yiisoft/yii2-app-basic yii2-api cd yii2-api2. 安裝必要擴展 composer require firebase/php-jw…

主流版本控制工具Git vs Perforce P4:架構模式、性能、大文件管理及分支管理對比詳解

Git和Perforce P4是兩個強大的源代碼管理工具,各有其獨特的功能優勢與適用場景。 本文中,Perforce中國授權合作伙伴-龍智將從架構設計、性能表現、文件管理及分支策略等維度,為您詳細解析兩者的關鍵差異,幫助您根據團隊需求&…

文件系統2(Linux下)

1 掛載分區 文件系統1中已經知道了能夠根據inode號在指定分區找文件了,也已經能根據目錄文件內容,找指定的inode了,在指定的分區內,就可以對文件進行操作了。但是還有幾個問題,那就是inode是不能跨分區的,…

Leetcode-?2537. 統計好子數組的數目?

Problem: 2537. 統計好子數組的數目 思路 滑動窗口 解題過程 思路: 使用滑動窗口來維護子數組,并通過組合計數動態調整滿足條件的數對數目。具體來說,我們維護一個窗口[l,r],使得窗口內相同元素的對數至少為 k,并計算…

js手寫代碼篇--手寫Object.assign

19、Object.assign 作用: Object.assign的作用是將源對象的所有可枚舉屬性復制到目標對象中。它返回目標對象。 const obj1 { a: 1, b: 2 };const obj2 { b: 3, c: 4 };const obj3 { d: 5 };const target {};Object.assign(target, obj1, obj2, obj3);console…

使用 C/C++ 和 OpenCV 構建智能停車場視覺管理系統

使用 C 和 OpenCV 構建智能停車場視覺管理系統 本文將詳細介紹如何利用 C 和 OpenCV 庫,從零開始創建一個智能停車場管理系統。該系統通過攝像頭捕捉的畫面,能自動完成兩項核心任務: 車位識別:通過檢測地面上的黃色停車線&#…

服務器靜態ip,網關不能占用*.*.*.1

網關不能占用*.*.*.1.1 通常用于運行關鍵服務(如DHCP、NAT、DNS代理),.1 是網絡世界的"VIP包廂",普通用戶強闖只會被"請出"。

自然語言處理【NLP】—— CBOW模型

文章目錄 引言一、CBOW模型概述1.1 什么是CBOW模型1.2 CBOW vs Skip-gram 二、CBOW模型原理詳解2.1 模型架構2.2 數學原理2.3 訓練過程 三、CBOW的PyTorch實現四、CBOW模型的應用與優化4.1 典型應用場景4.2 性能優化技巧 五、CBOW的局限性六、結語 引言 在自然語言處理(NLP)領…

為MTK 9300開發板移植Linux系統(以Debian為例)的詳細技術指南

以下是為MTK 9300開發板移植Linux系統(以Debian為例)的詳細技術指南,涵蓋環境搭建、內核移植、驅動適配(攝像頭/顯示器/WiFi)、系統集成與優化。 MTK 9300開發板Linux系統移植全流程指南 1 項目概述 1.1 硬件平臺 SoC:MediaTek MTK9300 (ARMv8-A架構,4Cortex-A78 + 4C…

Java Lambda 表達式與 Stream API 全解析:從基礎到進階

以下是對您博客內容的優化版本,在保留原有核心內容的基礎上,補充了Lambda表達式及Stream API的完整方法體系,并通過結構化排版和擴展說明提升可讀性。 Java Lambda表達式與Stream API全解析:從基礎到進階 一、Lambda表達式與Str…