Pixhawk飞控源码目录结构及编译流程分析

2023-05-16

(PS:这是第一次写博客,以前也有记录一些经验总结心得什么的,不过都是手写笔记或者记在word上,csdn看了好久,总觉的只索取不付出心里有些过意不去,以后尽量都写到这吧,也会搬一些以前记在word里的东西过来,大家不要嫌弃就好……)


源码目录结构(获取源码的方法这里就不多说了,官网或者百度都找得到,用git工具 或者直接上github 下载都可以,推荐还是通过git工具去载, 毕竟在调用make编译之前其实还会通过git去载一些缺少模块,我的是vmware下的Ubuntu的环境。这博客在win下写吧,贴代码好像不是很方便,ubuntu下吧截图工具没有又qq截图来得好用,感觉博客写起来有点蛋疼,不知道你们都是咋写的……然后我关注的也是Copter部分,别的就没有深入了解也就不多说……)

 

一、Vehicle directory:ArduCopter(多旋翼)ArduPlane(固定翼)、APMrover2(巡逻车)、AntennaTracker(天线追踪站台?)

二、AP_HAL:硬件抽象层

三、Libraries:库文件

四、Tools directory: Tools/scripts/install-prereqs-ubuntu.sh//运行这个shell脚本会自动安装ubuntu环境下编译固件所需要工具,下面看下该文件的内容

     5    BASE_PKGS="gawk make git arduino-core curl"
     6    PYTHON_PKGS="pymavlink MAVProxy droneapi catkin_pkg"
     7    PX4_PKGS="python-serial python-argparse openocd flex bison libncurses5-dev \
     8              autoconf texinfo build-essential libftdi-dev libtool zlib1g-dev \
     9              zip genromfs python-empy"
    10    BEBOP_PKGS="g++-arm-linux-gnueabihf"
    11    SITL_PKGS="g++ python-pip python-setuptools python-matplotlib python-serial python-scipy python-opencv python-numpy python-pyparsing ccache realpath"
   。//这里列出了需要的一些外部库文件,

   。 

    66   $APT_GET install $BASE_PKGS $SITL_PKGS $PX4_PKGS $BEBOP_PKGS
    67    sudo pip2 -q install $PYTHON_PKGS
   。//这里将对上面列出的需要的库进行安装,当然如果已经装了,会自动跳过,这就是apt-get智能的一面

   101    apt-cache search arm-none-eabi
   102    
   103    (
   104     cd $ARDUPILOT_ROOT   
   105     git submodule init
   106     git submodule update
   107    )//自动下载或者更新飞控点某些模块

五、External support code:PX4Nuttx(板载实时系统)、PX4Firmware(px4固件源码目录)、mavlink(飞控与地面站通信协议)、uavcan(飞行器can总线通信协议)


编译流程

    了解了大致的目录结构,我们来看看Arduopter主目录下的Makefile(Makefile 见过很多了,简单的、复杂点都看过,最复杂的应该莫过于内核Makefile了吧,这里的Makefile也算比较复杂了)

linux@ubuntu:~/src/ardupilot/ArduCopter$ cat Makefile -n
     1    include ../mk/apm.mk
     2    

  好了,就一行……来看看apm.mk是什么名堂,(有点长,我们直接看关键部分)

linux@ubuntu:~/src/ardupilot/ArduCopter$ cat -n  ../mk/apm.mk
。。。

    22    # common makefile components
    23    include $(MK_DIR)/targets.mk
    24    include $(MK_DIR)/sketch_sources.mk
。。。

    36    
    37    ifeq ($(HAL_BOARD),HAL_BOARD_PX4)
    38    include $(MK_DIR)/board_px4.mk
    39    endif
    40    

。。。target.mk描述了所有平台下的编译目标,我们用不着,这里我们先看看具有针对性px4平台的board_px4.mk文件

linux@ubuntu:~/src/ardupilot/mk$ cat -n board_px4.mk
     1    TOOLCHAIN = NATIVE
     2    include $(MK_DIR)/find_tools.mk
     3    include $(MK_DIR)/px4_targets.mk

find_tools.mk从名字就可以知道他干的啥了,而这里的px4_targets.mk中描述的就是px4-v1、px4-v2....等等编译目标,内容比较多,我就不全贴了,反正到这里就明白了,

px4_targets.mk(注意px4_targets.mk  != target.mk)中声明的就是我们的编译目标,及烧写的命令(ardupilot官网编译教程中的,编译px4的时候make px4-v1,编译pixhawk的时候make px4-v2,烧写时make  xxx-upload)

。。。

    48    # we have different config files for V1 and V2
    49    PX4_V1_CONFIG_FILE=$(MK_DIR)/PX4/config_px4fmu-v1_APM.mk
    50    PX4_V2_CONFIG_FILE=$(MK_DIR)/PX4/config_px4fmu-v2_APM.mk  //这文件包含了编译目标的依赖,也就是具体编译的那些模块哪些驱动
    51    PX4_V4_CONFIG_FILE=$(MK_DIR)/PX4/config_px4fmu-v4_APM.mk

。。。

    98    px4-v2: $(BUILDROOT)/make.flags CHECK_MODULES $(MAVLINK_HEADERS) $(PX4_ROOT)/Archives/px4fmu-v2.export $(SKETCHCPP) module_mk px4-io-v2
    99        $(RULEHDR)
   100        $(v) cp $(PX4_V2_CONFIG_FILE) $(PX4_ROOT)/makefiles/nuttx/
   101        $(PX4_MAKE) px4fmu-v2_APM
   102        $(v) arm-none-eabi-size $(PX4_ROOT)/Build/px4fmu-v2_APM.build/firmware.elf
   103        $(v) cp $(PX4_ROOT)/Images/px4fmu-v2_APM.px4 $(SKETCH)-v2.px4
   104        $(v) $(SKETCHBOOK)/Tools/scripts/add_git_hashes.py $(HASHADDER_FLAGS) "$(SKETCH)-v2.px4" "$(SKETCH)-v2.px4"
   105        $(v) echo "PX4 $(SKETCH) Firmware is in $(SKETCH)-v2.px4"

。。

   139    px4-v2-upload: px4-v2      //烧写命令
   140        $(RULEHDR)
   141        $(v) $(PX4_MAKE) px4fmu-v2_APM upload
   142   

。。

 163    px4-io-v2: $(PX4_ROOT)/Archives/px4io-v2.export
   164        $(v)+ $(MAKE) -C $(PX4_ROOT) -f $(PX4_ROOT)/Makefile.make px4io-v2_default EXTRADEFINES="-DARDUPILOT_BUILD"
   165        $(v) cp $(PX4_ROOT)/Images/px4io-v2_default.bin px4io-v2.bin
   166        $(v) cp $(PX4_ROOT)/Build/px4io-v2_default.build/firmware.elf px4io-v2.elf
   167        $(v) mkdir -p $(MK_DIR)/PX4/ROMFS/px4io/
   168        $(v) cp px4io-v2.bin $(MK_DIR)/PX4/ROMFS/px4io/px4io.bin
   169        $(v) mkdir -p $(MK_DIR)/PX4/ROMFS/bootloader/
   170        $(v) cp $(SKETCHBOOK)/mk/PX4/bootloader/px4fmuv2_bl.bin $(MK_DIR)/PX4/ROMFS/bootloader/fmu_bl.bin
   171        $(v) echo "PX4IOv2 Firmware is in px4io-v2.bin"
   172    

 在第 50  行,   PX4_V2_CONFIG_FILE=$(MK_DIR)/PX4/config_px4fmu-v2_APM.mk  //这文件包含了编译目标的依赖,也就是具体编译的那些模块哪些驱动

     1    #
     2    # Makefile for the px4fmu-v2_APM configuration
     3    #
     4    include $(SKETCHBOOK)/mk/PX4/px4_common.mk
     5    
     6    MODULES        += drivers/lsm303d
     7    MODULES        += drivers/l3gd20
     8    MODULES        += drivers/mpu9250
     9    MODULES        += drivers/boards/px4fmu-v2
    10    MODULES        += drivers/pwm_input
    11    MODULES         += modules/uavcan
    12    MODULES         += lib/mathlib
    13    MODULES        += drivers/px4io
    14    MODULES        += drivers/px4flow
    15    MODULES        += drivers/oreoled


在看px4_common.mk文件,略多,就不全贴了,

    1    #
     2    # common makefile elements for all PX4 boards
     3    #
     4    
     5    #
     6    # Use the configuration's ROMFS.
     7    #
     8    ROMFS_ROOT     = $(SKETCHBOOK)/mk/PX4/ROMFS
     9    MODULES        += $(APM_MODULE_DIR)
    10    
    11    #
    12    # Board support modules
    13    #
    14    MODULES        += drivers/device
    15    MODULES        += drivers/stm32
    16    MODULES        += drivers/stm32/adc
    17    MODULES        += drivers/stm32/tone_alarm
    18    MODULES        += drivers/led
    19    MODULES        += drivers/px4fmu
    20    MODULES        += drivers/rgbled
    21    MODULES        += drivers/mpu6000
    22    MODULES        += drivers/hmc5883
    23    MODULES        += drivers/ms5611
    24    MODULES        += drivers/mb12xx
    25    MODULES        += drivers/ll40ls
    26    MODULES        += drivers/trone
    27    #MODULES    += drivers/gps
    28    #MODULES    += drivers/hil
    29    #MODULES    += drivers/hott_telemetry
    30    #MODULES    += drivers/blinkm
    31    #MODULES    += modules/sensors
    32    MODULES        += drivers/airspeed
    33    MODULES        += drivers/ets_airspeed
    34    MODULES        += drivers/meas_airspeed
    35    MODULES        += drivers/mkblctrl
    36    MODULES        += drivers/batt_smbus
    37    MODULES        += drivers/irlock
    38    。。。。

这些就给出了编译的各个模块!!


好了,先写到这吧……


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pixhawk飞控源码目录结构及编译流程分析 的相关文章

  • pixhawk飞控接口含义

    官方文档 xff1a https docs px4 io v1 9 0 en flight controller pixhawk html 1 spektrum DSM receiver2 xff0c 3 远程通信口 xff0c 接数传4
  • pixhawk使用WiFi模块

    pixhawk使用WiFi 前期准备刷固件安装刷固件软件进入刷固件模式下载固件刷固件 使用接线飞控参数更改使用方法 在使用pixhawk的时候有时候在无人机上不方便搭载处理器 xff0c 这个时候进行外部控制 或者QGC有线方式连接无人机不
  • pixhawk无人机避障

    本人最近用树莓派结合PX4做无人机避障 xff0c 使用激光雷达 xff0c 有没有一起的小伙伴 xff0c 我们一起交流 xff01 私信我 xff0c
  • PIXHAWK 4 中文资料 文档 PCB

    最先进的PX4自动驾驶仪开发工具包 PixHawk 4是PixHawk飞行控制器家族中最新最成功的产品 它是由Holybro 和 Auterion合作开发 xff0c 优化PX4 它预装了最新的PX4原生固件 它采用了目前最先进的STMic
  • PIXHAWK飞机侧翻原因

    转载自 xff1a http pix 1yuav com wen ti ji jin fei ji ce fan yuan yin html 飞机侧翻原因 飞机侧翻有以下几个原因 xff0c 请认真检查 1 电机顺序 xff0c 电机转向
  • APM、PIXHAWK、PX4的关系

    摘自 xff1a https bbs amovlab com forum php mod 61 viewthread amp tid 61 1202 amp extra 61 page 3D1 Pixhawk PX4 APM傻傻分不清 xf
  • 通过pixhawk飞行日志读取飞行路线以及对应地图

    px4飞行日志为 bin文件或者 log文件 xff0c 将文件数据导入到flightplot中 xff0c 输出轨迹 xff08 export track xff09 xff0c 下载一个Google地图 xff0c 将保存成的文件在Go
  • PIXHAWK机架类型的的设置选择与电机通道顺序设置

    1 共轴直升机 main1 左侧斜盘电机 xff0c 控制俯仰 main2 xff1a 左侧斜盘电机 xff0c 控制滚转 main3 xff1a 上面旋翼 xff0c 逆时针旋转 main4 xff1a 下面旋翼 xff0c 顺时针旋转
  • pixhawk飞控中添加uORB主题

    本说明针对 Firmware v1 2 0 参考 xff1a https pixhawk org start id 61 zh dev shared object communication 1 添加流程说明 在Firmware msg下新
  • Pixhawk-开篇

    Pixhawk 开篇 互联网上关于介绍Pixhawk的文章特别多 有心人自己去网上查看吧 本篇文章未完 可能会有更新 不足请指出 QQ 4862879 说重点 Pixhawk指的是一款开源的硬件 下图的那个 是把原来的PX4FMU 43 P
  • pixhawk飞控小车倒车_Pixhawk 系列

    Pixhawk 系列 Pixhawk opens new window is an independent open hardware project providing readily available low cost and hig
  • Pixhawk飞行模式的讨论

    手动模式 offboard 地面站 操控的区别 使用遥控操纵的模式 Simple and Super Simple 选项 加了这个选项之后 xff0c 它的磁力计会记录飞机解锁时 xff0c 朝向就是无人机的前方 每个飞行模式的旁边都有一个
  • pixhawk make文件分析

    由于笔者没学过Linux等系统 xff0c 对make文件所知甚少 xff0c 本节分析可能有大量错误 xff0c 只提供参考 xff0c 随着技术积累 xff0c 以后会回过头改正错误的地方 xff0c 也非常欢迎提出指导意见 其中分析大
  • pixhawk串口读取传感器数据

    1 Pixhawk板上串口说明 xff1a 测试 使用Pixhawk板上TELEM2接口的USART2 xff0c 对应的Nuttx UART设备文件尾 dev ttyS2 xff1a 2 读取数据测试 步骤 xff1a 在Firmware
  • 树莓派结合PIXHAWK飞控实现四轴双目视觉避障

    树莓派结合Pixhawk飞控实现四轴双目视觉避障 灰信网 xff08 软件开发博客聚合 xff09 无人机双目视觉避障的实现 本文将介绍如何使用树莓派结合PIX飞控实现无人机双目视觉避障的功能 主要硬件 我们以双目摄像头 43 树莓派 43
  • win7下 pixhawk (ardupilot) 的编译

    前几天都在搞pixhawk源码编译问题 xff0c 什么在window下用Console或者eclipse xff0c 还是在Ubuntu下 xff0c 都做了 xff0c 而且把 mk文件都看了 xff0c 结果还是有bug 总结一下三种
  • APM(pixhawk)飞控疑难杂症解决方法汇总(持续更新)

    原文链接 xff1a http www nufeichuiyun com p 61 28
  • 教程:使用树莓派连接Pixhawk飞控

    教程 xff1a 使用树莓派连接Pixhawk飞控 树莓派可以与Pixhawk飞控相连 xff0c 读取飞控中的状态信息 xff0c 同时对飞控发送指令 树莓派作为一个更高性能的计算平台 xff0c 可以运行图像识别 机器学习 实时路径规划
  • pixhawk px4 commander.cpp

    对于复杂的函数 xff0c 要做的就是看函数的输入是什么 来自哪里 xff0c 经过处理后得到什么 给谁用 xff0c 这样就可以把程序逻辑理清 中间的分析就是看函数如何处理的 span class hljs keyword extern
  • mission planner SITL仿真系统配置

    背景 主要参考ArduPilot的官网 作者还拥有个人公众号 会写一些感悟文章 知圈 二维码如下 欢迎扫描关注 关注后有作者微信 欢迎添加交流 链路图 图源 Cygwin 下载 去官网下载Cygwin 作者电脑windows 10 64位

随机推荐

  • 找工作经验贴----转自cc98 (作者ID:qzz88 ) 仅为收藏,感谢原作者的经验分享

    原帖地址 xff1a http www cc98 org dispbbs asp BoardID 61 248 amp id 61 3813130 amp page 61 amp replyID 61 3813130 amp star 61
  • QGC、PX4和AirSim的安装

    本教程视频地址 xff1a https www bilibili com video BV1dv411K71E 本教程将讲解QGC地面站的安装 PX4控制系统 xff08 包括jMAVSim ROS和Gazebo xff09 的安装 Air
  • Ominibus F4V3 Pro飞控原理图和接线图

    Ominibus F4V3 Pro飞控接线图如下图所示 部分实物接线图如下 注意上图中 xff0c 电流计入口 描述是错误的 xff0c 最形象的是第一个接线图 xff0c 那里表的很清楚 电源这块接线为电池接线到飞控板上的电池 43 和电
  • Mini Crossbow AAT自动跟踪云台设置(配合TeleFlyTiny模块)

    飞行器在空中 xff0c 位置和方位时刻变化 xff0c 而我们使用的图传接收机 xff0c 需要时刻保持跟随飞行器材能捕获较好的图像 xff0c 靠人去调整地面天线角度是不太合适的 xff0c 所以我们可以使用AAT自动跟踪云台来完成调整
  • Mission Planner安卓安装包

    可以在安卓手机上安装并使用的安装包 下载地址 xff1a https download csdn net download xjhappyarrow 22864716 spm 61 1001 2014 3001 5503
  • Docker 相关配置文件路径

    配置文件参数 xff1a 1 优先解析在config file命令行参数 2 在root模式下 Docker Daemon 默认配置文件路径 etc docker daemon json 3 在rootless模式下 默认配置文件路径在 d
  • 1. 【gRPC系列学习】 gRPC起源、优缺点

    gRPC是一项进程间通信技术 xff0c 可以用来连接 调用 操作 调试分布式异构应用程序 xff0c 就像调用本地函数一样 gRPC主要采用同步的请求 响应进行通信 xff0c 但建立连接后 xff0c 它可以完全以异步模式进行操作 1
  • stlink灯一直闪

    灯闪说明stlink工作不正常 原因可能是 xff1a 1 stlink供电不足 试着用外部电源和stlink同时给板子供电 2 电脑的USB口硬件 xff08 USB口烧了 xff0c 但可能性比较少 xff09 或USB相关驱动有问题
  • stlink使用笔记

    1 stlink灯一直闪 2 当用外部电源 xff08 外部 就是不直接使用stlink为板子供电 xff09 为板子供电时 xff0c 如果要用stlink xff08 SWD模式 xff09 xff0c 那么不能只插SWCLK和SWDI
  • 先电OpenStack创建云主机报错500

    现象 xff1a 从报错中可定位到问题出在nova的conductor组件中 日志 xff1a 查看 var log nova nova conductor log 从日志中可以观察到是因为找不到cpu特性 解决方法 xff1a 进入 us
  • MAVROS + APM + pixhawk 填坑日记(一)

    64 TOC MAVROS 43 APM 43 pixhawk 填坑日记 一 树莓派和pixhawk通过usb串口连接 xff0c 想通过mavros读取飞控上关于GPS的位置信息 rostopic list可以看到mavros发布的话题消
  • ubuntu搭建APT源简单方法

    一 为什么需要搭建APT源 原因如下 xff1a 1 在公司内网离线情况下 xff0c ubuntu无法通过apt原生源进行下载 2 有些源国内无法正常访问 xff0c 需要翻墙 基于以上原因 xff0c 需要自建APT源 二 准备条件 需
  • 加速度计参数讲解

    测量范围 FS也称量程 xff0c 单位为g 地球重力 xff0c 是指加速度计能测量到的正反方向最大加速度的额定值范围 常见有 xff08 2g 4g 8g 16g up to 400g 灵敏度 分辨率Sensitivity Resolu
  • vim 编辑器---批量注释和批量取消注释/去除黄色阴影

    添加注释 ctrl 43 v 进入块选泽模式 上下键选中需要注释的行 按大写 I 进入插入模式 xff0c 输入注释符 按两次 ESC 退出 xff0c 即完成添加注释 取消注释 ctrl 43 v 进入块选泽模式 上下键选中需要注释的行
  • 作业—FreeRTOS入门

    FreeRTOS入门 零 需求软件 xff08 自行下载 xff09 一 任务要求二 FreeRTOS的使用1 原理2 多任务程序3 烧录代码4 结果 三 注意事项四 参考资料 零 需求软件 xff08 自行下载 xff09 1 keil5
  • Flask 案例

    创建news xff0c 根目录下创建settings文件 config py文件 xff0c 编写配置项 xff0c 配置项必须大写 class DeFaultConfig SECRET KEY 61 39 39 SQLALCHEMY D
  • 三 Gazebo学习总结之制作一个模型及导入网格

    Models从简单的形状到复杂的机器人都有 它指的是 lt model gt SDF标签 xff0c 从本质上来说是links joints collision objects visuals和plugins的集合 xff0c 生成一个模型
  • STM32F103V跑NuttX之一——下载nuttX及编译烧录

    下载nuttX及编译 1 NuttX官方链接2 NuttX及App工程下载3 编译NuttX中STM32F103V nsh测试例程4 在ubuntu下使用串口来烧录目标文件至STM32F103V4 1 ubuntu下stm32flash工具
  • Win10遍历句柄表+修改权限过Callback保护

    本帖转载于http www m5home com bbs thread 8847 1 1 html 本想发到看雪 xff0c 但自己太菜 xff0c 看雪 牛人 又太多 xff0c 想想还是发到紫水晶吧 感谢 TA 的 WIN64 教程带我
  • Pixhawk飞控源码目录结构及编译流程分析

    xff08 PS xff1a 这是第一次写博客 xff0c 以前也有记录一些经验总结心得什么的 xff0c 不过都是手写笔记或者记在word上 xff0c csdn看了好久 xff0c 总觉的只索取不付出心里有些过意不去 xff0c 以后尽