开源飞控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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…