px4原生源码学习一

PX4代码解析(1) 前言 做pixhawk飞控有一段时间了,但在学习过程中遇到许多困难,目前网上找不到比较完整的PX4学习笔记,我打算结合自己理解,写写自己对PX4源码的理解,不一定对,只是希望与各位大佬交流交流,同时梳理一下无人机知识。 目前打算分享以下几个内容:代码架构;通信协议;姿态解算算法,控制算法。先这样,后面想到再加。本章先来聊聊px4代码结构 一、代码整体结构 既然要聊px4代码结构,那就先把px4代码结构图放出来,因为px4源码仍然在不断更新迭代,因此老版本与新版本目录结构可能有些不同,我的代码解析参考版本为V 阅读详情

接触px4代码有几天了,想把自己所学所想记录下来.

  px4就不过多介绍了,算得上目前使用的最广泛的开源飞控了。为什么说”px4原生代码学习呢”,这还得追溯到被大疆干死的3DR,3DR想做消费级无人机,但苦于团队难建,所以索性就纠集起那几个著名的开源飞控团队,让大家一起搞一起发财(熟知还是被大疆搞死),但还是留下了这个宝贵的开源飞控遗产。这些开源团队中出名的当数APM团队和pixhawk团队,其中APM早已名声在外,早期一直是开源飞控的头头,但早期的代码属于状态机阶段,而且据说很烂,没有条理。后来加入项目后,将原来的代码移植到新的系统中来就有了现在的APM(基于px4修改的),这个应该是现在大家学习最多的了。但其实这个代码并不怎么好,因为其中冗余了太多对于各种开源电路板和传感器的驱动适配的代码。而原生的px4就没有那么多冗余的代码了。

  /**************************************************************************************************************

  po上我使用到的硬件和开发环境

  px4硬件:某宝销量最高的pixhawk套件(主机,gps+指南针,数传,pwm转pmm,安全开关,蜂鸣器,电源转换接头)

  遥控器:某国产神器

  开发环境:虚拟机vm12+ubuntu14

 ps:此文章只针对纯代码分析,关于那些个飞机类型啦,硬件什么的我就不多说了,这个得自己去亲身体验才行,切不可贸然飞行,这个还是很危险的!!!!!

 还有就是什么git,linux,make什么的也不会多说,毕竟只是工具属性。

 获得更好支持可以访问http//:px4.io 我知道的大部分来自这个网站。

  **************************************************************************************************************/

  好!废话不多说,开始吧!

  第一步:设置好你linux用户的权限,不要什么都直接sudo,这样会产生很多问题的!!!

 将用户添加到dialout组

 sudo usermod -a -G dialout $USER
  然后退出系统登录,在登进来就可以了。

 第二步:安装依赖工具(这些工具对所有的px4硬件都是必须的,本文只针对pixhawk硬件,其它的什么骁龙板子,树莓派的,自己去官网看http://dev.px4.io)

  

 sudo add-apt-repository ppa:george-edison55/cmake-3.x -y
 sudo apt-get update
 sudo apt-get install python-argparse git-core wget zip \
     python-empy qtcreator cmake build-essential genromfs -y
 # simulation tools
 sudo apt-get install ant protobuf-compiler libeigen3-dev libopencv-dev openjdk-8-jdk openjdk-8-jre clang-3.5 lldb-3.5 -y


 第三步:安装Ninja编译系统(可选项)

 Ninja是google 浏览器开发中产生的附加产物,它是一个编译器,可以有效加快编译速度,px4官方推荐使用这个编译器,用不用看你自己了,make也还是挺好的(事实上当你安装了ninja时,使用make命令会自动调用ninja,你基本感觉不到他的存在)。

 首先使用命令:sudo apt-get install ninja    安装ninja,但由于linux支持的ninja版本较低,你安装的ninja不能用于编译px4,因为px4要求高版本的,怎么办?曲线救国!!!

 下载并解压最新的ninja文件并删除压缩文件包

 wget https://github.com/martine/ninja/releases/download/v1.6.0/ninja-linux.zip
 unzip ninja-linux.zip
 rm ninja-linux.zip
  将解压文件夹下的ninja可执行文件复制到/usr/bin目录下替换原有的ninja可执行文件。

  这样就可以了。


 第四步:移除linux下的串口管理器。

 linux下的串口管理器会导致px4硬件同linux通信产生错误,所以要把他移除。

 sudo apt-get remove modemmanager

  第五步:安装编译系统及其依赖

  值得注意的是要安装好对应的版本,版本不对可能会出现错误

 sudo apt-get remove gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-none-eabi
 sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
 sudo apt-get update
 sudo apt-get install python-serial openocd \
    flex bison libncurses5-dev autoconf texinfo build-essential \
    libftdi-dev libtool zlib1g-dev \
    python-empy gcc-arm-embedded -y
  如果出现 gcc-arm-none-eabi version produces build errors for PX4/Firmware master  那么就得手动安装4.9或者5.4的版本

 以上就是编译环境的搭建了。



下面就来试试下载和编译px4原生代码吧!

 从github下载代码

mkdir -p ~/src     #创建src文件夹
cd ~/src  
git clone https://github.com/PX4/Firmware.git  #clone px4原生代码
cd Firmware 
git submodule update --init --recursive  #clone px4项目中使用到的依赖(主要是Nuttx实时操作系统)
cd ..
mkdir -p ~/src
cd ~/src
git clone https://github.com/PX4/Firmware.git
cd Firmware
git submodule update --init --recursive
cd ..

编译源码

cd Firmware
make px4fmu-v2_default
针对PX4 FMU v2.X的板子

如果你没有按照ninja编译器,你看到的应该是下面的结果代表成功

[100%] Linking CXX executable firmware_nuttx
[100%] Built target firmware_nuttx
Scanning dependencies of target build_firmware_px4fmu-v2
[100%] Generating nuttx-px4fmu-v2-default.px4
[100%] Built target build_firmware_px4fmu-v2

如果你使用了ninja编译器,看到下面内容代表编译成功

PX4 CONFIG: /home/lyonlui/src/Firmware/build_px4fmu-v2_default
ninja: Entering directory `/home/lyonlui/src/Firmware/build_px4fmu-v2_default'
[500/500] Generating nuttx-px4fmu-v2-default.px4

 同所有单片机系统和硬件设备一样,px4编译也会产生一个固件,这个固件就在文件夹/Firmware/build_px4fmu-v2_default/src/firmware/nuttx下面,文件名为nuttx-px4fmu-v2-default.px4

将你的px4同电脑连接,电脑会自动安装驱动,不自动安装就使用驱动精灵,实在不行就问卖硬件的客服吧!!

驱动安装好后你会设备管理器里面看到以下内容:


打开虚拟机ubuntu,如何在工具栏选中虚拟机->可移动设备->PX4 FMU v2.x ->连接






设备就可以和linux连接了,接下来就是将编译好的固件下载到板子上了

使用命令:

make px4fmu-v2_default upload
下载成功你会看到:

Erase  : [====================] 100.0%
Program: [====================] 100.0%
Verify : [====================] 100.0%
Rebooting.

[100%] Built target upload
自此你就完成了px4开发环境的搭建了。


最后说说关于图形开发环境,我按照官网给的教程一步一步搭建,最后也能编译,但始终无法生成可烧录文件,而且新工程内的makefile文件并无upload功能,所以图形开发环境我是没搭建出来的。(官方说px4官方支持的图形开发环境是qt,所以我就搭了qt的,没搭成功,不知道eclipes怎么样)。有那位大神搭建好qt集成开发环境的告知小弟一声。

PX4代码解析(2) 前言 在大致了解PX4代码架构后,我们需要了解PX4的通信机制。在PX4代码架构中,通信总线主要分为两个部分,一是内部通信总线uORB,二是外部通信总线Mavlink, 阅读详情

相关推荐

px4原生源码学习-(4)--Nuttx 实时操作系统编程

前面说到px4是基于Nuttx实时操作系统上的,那么px4也是由一些程序所构成,这些程序实现了飞行器的自主控制,只不过这些程序并不是我们通常所见到的单片机或者windows编程那样的程序,但基本编程思想是一致的。我认为如果要看懂px4的源码,那你一定要了解px4的那些程序是怎么编写出来,怎么运行的。所以本章我就大概介绍一下基于Nuttx的编程,我以一个所有编程入门都会介绍的一个程序作为例子。这个程

lyonlui的博客 1万+

【PX4-AutoPilot教程-源码】PX4源码文件目录架构分析

PX4源代码的结构复杂,本文介绍了源代码的总目录结构(以v1.13.0为例)。

在后厂村路努力科研搬砖的无人机控制方向练习生一名~ 1万+

px4原生源码学习-(3)--Nuttx实时操作系统的使用

/**************************************************************************************************************   po上我使用到的硬件和开发环境   px4硬件:某宝销量最高的pixhawk套件(主机,gps+指南针,数传,pwm转pmm,安全开关,蜂鸣器,电源转换接头)   遥

lyonlui的博客 1万+

PX4原生固件源码分析(挖坑)--1、代码结构

写在开头 最近开始学习PX4源码,并进行二次开发,苦于网上缺少有关PX4源码的分析,于是在这开个坑,记录自己学习PX4的过程,以此自勉,笔者第一次写博客,若有不足之处,还请多包涵。 硬件、固件版本 硬件:雷迅V5+飞控 固件版本:v1.11(PX4固件源码在20年有一次很大的改动) ...

lmh081910的博客 6865

搭建PX4开发系统(Ubuntu 22.04)

本文是《从零开始学 PX4 无人机开发》系列第二篇,适合开发者在 Ubuntu 系统下快速搭建 PX4 编译与仿真环境,支持 QGroundControl、Gazebo、MAVSDK 等完整工具链。

qq_15856721的博客 4196

PX4-做飞控二次开发需要知道的事情-Cxm

PX4飞控开发需要了解的事情

chen_taifu的博客 5453

px4原生源码学习-(1)

接触px4代码有几天了,想把自己所学所想记录下来.   px4就不过多介绍了,算得上目前使用的最广泛的开源飞控了。为什么说”px4原生代码学习呢”,这还得追溯到被大疆干死的3DR,3DR想做消费级无人机,但苦于团队难建,所以索性就纠集起那几个著名的开源飞控团队,让大家一起搞一起发财(熟知还是被大疆搞死),但还是留下了这个宝贵的开源飞控遗产。这些开源团队中出名的当数APM团队和pixhawk团队,

lyonlui的博客 1万+

在Windows下搭建PX4编译环境——基于Bash On Windows

前言:以前装双系统,在Linux下编译PX4源码,但是对于我这种非程序员来说用起来确实难受,而且有许多工作还需要在windows下做,切换来切换去很烦躁。然而,在windows下用px4toolchain编译,不论是两年前还是现在,我都没成功过。Win10平台支持Bash on Windows后,PX4也跟进了基于Bash On Windows 的编译过程,试了一下,还算比较顺畅。当然,也可以装虚

Algorithm Lab - Innovation&Creation 5737

【Pixhawk】Ubuntu下编译原生固件PX4

环境: PC:Ubuntu20.0.4主机 1、下载PX4源码 新建一个pixhawk/source目录,cd进去git源码 cd pixhawk/source git clone https://github.com/PX4/Firmware.git 下载完成后,该目录下会出现一个Firmware目录 2、更新子模块 到Firmware目录中更新子模块 cd Firmware git submodule update --init --recursive 中途可能因为网络原因卡住,直接ctrl+

徐腾腾的博客 5731

从零开始学习PX4源码4(PID控制器)

本节主要学习PX4的PID控制源码,欢迎批评指正。

陌城烟雨 920

PX4学习笔记

目录网址Pixhawk、PX4、APM 、 ArduPilot关系硬件照片、示意图逻辑图 集多旋翼控制框架软件框架辅助工具、软件说明(误区)裸机运行基于OS运行例子可执行程序、应用、源码(代码)、进程、线程源码、固件的区分Pixhawk的启动流程大概逻辑 网址 PX4原生固件及其地面站网址 https://github.com/PX4 http://px4.io/ https://github.com/mavlink/qgroundcontrol 原生固件代码:C++,构架清晰,容易维护修改,多进程 目

记录老板的每次pua,分享领导每天的毒鸡汤... 1万+

Ubuntu下编译PX4原生飞控固件

PX4是一个由Lorenz Meier所在的瑞士小组所开发的学校项目,其拥有一个32位处理器,提供更多内存、运用分布处理方式并且包含一个浮点运算协处理器。相比APM,PX4 具有相对于前者10倍以上的CPU性能及其他更多方面的改进,Diydrones和3DRobotics把PX4系统视作他们下一代飞控的基础。

金戈鐡馬 1390

从零开始学习PX4源码6(uORB)

本节主要讲义px4-uorb的原理及如何添加一个自定义的uorb消息,并发布出和订阅查看信息。后续所用到的软硬件资源:固件版本1.14.2,硬件赫星:cubeorangeuORB(Micro Object Request Broker,微对象请求代理器)是PX4/Pixhawk系统中非常重要且关键的一个模块,它肩负了整个系统的数据传输任务,所有的传感器数据、GPS、PPM信号、遥控器、姿态控制等等都要从芯片获取后通过uORB进行传输到各个模块进行计算处理。

陌城烟雨 1781

PX4源码学习-1.源码文件目录架构分析

本文分析了PX4飞控系统中/boards/px4/fmu-v2目录的架构组成。该目录包含编译脚本(.px4board)、元数据文件(.prototype)、BootLoader(extras)、启动脚本(init)、NuttX配置(nutt-config)和硬件专用源码(src)等关键组件。这些文件分别对应不同的编译命令、硬件描述、系统引导、初始化流程、操作系统配置和硬件驱动实现。通过理解这种架构,开发者可以针对Pixhawk 1等飞控板进行PX4系统的二次开发,包括修改配置文件、调整硬件驱动等操作。完整的

weixin_44742992的博客 759

PX4固件源码,亲测可编译

PX4固件源码,亲测可编译

NOIP2008年普及组初赛题目答案及解析

NOIP2008年初赛详细题解

城南蝈蝈 926

PX4源码学习一--Pix和APM的区别

PX4

znr1995的博客 1万+

自动控制原理之控制系统的数学模型(类比神经网络学习数学模型)

控制系统的数学模型背景建模方法常用的数学模型时域数学模型的建立建立微分方程的步骤复数域模型的建立传递函数的性质系统的典型环节及传递函数比例环节惯性环节积分环节微分环节理想微分环节一阶微分环节二阶微分环节振荡环节延时环节(时滞环节) 背景 数学模型就像是真实世界的写照,它就像一个虚拟的世界,我们可以通过建模的方式了解这个真实世界的运作规律。 这一点很像强化学习,强化学习需要一个供智能体探索、学习的环境,于是,我们通常会事先建立一个虚拟的仿真环境。举个例子,对于人类来说,可能需要经过不断地尝试,甚至是生命的代价

zbp_12138的博客 6569

PX4学习(2)——原生固件框架分析

本文转自阿木社区:          搭建好了编译环境,装上了QT,就迫不及待的想看看代码的内容,结果。。。一看框架是懵逼的状态。。。怎么办,查阅资料慢慢梳理呗~ 框架分析(一) 推荐一个比较好的参考资料:PX4中文维基  https://legacy.gitbook.com/book/fantasyjxf/px4-wiki/details 一 原生固件工程目录源码分析 这是原生固件...

wb790238030的博客 4029

arcgis导出自身相交数据

今天接到一个客户需求,一份面文件,里面有好多元素是两两相交甚至是三个相交的,现在要把这些重叠部分提取出来,并且把相交部分的原始要素的名称也保留在字段中,也就是说名称这个会有好多个名称字段,如果两个要素相交那就是前两个名称字段有值,后面的为空,如果是三个要素相交,那么输出的这个要素就是前三个名称字段有值,后面的为空,嗯,这里也不太确定会出现多少个名称字段,这个需要依照数据来定。 这是原始数据,...

miaowumi92的博客 6787

最新Mamba环境配置教程:从CUDA到causal-conv1d的完整安装流程

本文提供最新Mamba环境配置教程,涵盖从CUDA到causal-conv1d的完整安装流程。针对深度学习领域的长序列处理需求,详细指导如何正确配置CUDA工具链、安装PyTorch及关键依赖causal-conv1d,解决常见报错问题,并验证mamba-ssm集成效果。

bush的博客 416

px4原生源码学习-(2)--实时操作系统篇

/**************************************************************************************************************   po上我使用到的硬件和开发环境   px4硬件:某宝销量最高的pixhawk套件(主机,gps+指南针,数传,pwm转pmm,安全开关,蜂鸣器,电源转换接头)   遥

lyonlui的博客 7351

【Zephyr存储专题】09_LittleFs文件系统操作

本文档旨在为开发者介绍Zephyr下Littlef's文件系统相关配置使用指南

zero的博客 3246
上一篇: C++操作符的优先级 及其记忆方法
下一篇: px4原生源码学习二--实时操作系统篇
csshuke
博客等级 码龄16年 1517粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值