PX4开发(1):ubuntu下pixhawk开发环境搭建

2023-05-16

1. 介绍

之前买了个330的四轴,最近想利用起来,所以买了个pixhawk来玩。pixhawk是开源的,所以想看看能不能在其基础上开发出什么。
要做开发首先要配置环境,由于官方推荐在linux环境下开发,所以这里介绍ubuntu下pixhawk的开发环境配置。
首先,网上能够找到很多ubuntu下配置环境的博客,但是因为年代比较久远了,其中有很多坑的,我都一一踩过了,下面直接给出我测试可行的步骤。


2. 配置开发环境

官方的配置教程点击这里,需要梯子,没有梯子也可以参考这篇博文。

2.1. 安装工具链

(1) 权限设置
sudo usermod -a -G dialout $USER
(2) 安装

sudo add-apt-repository ppa:george-edison55/cmake-3.x -y
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

官方教程中还有仿真器的安装,这里先不装,只装必备软件。
(3) 基于NuttX的硬件
PX4不只支持我们的pixhawk,还支持其他的很多硬件,如高通骁龙飞控板,树莓派,派诺特等,所以基于NuttX的硬件就是指我们目标板子是pixhawk系列,参照下面方法配置。
(4) 删除管理代理
sudo apt-get remove modemmanager
(5) 更新包列表和安装依赖包

sudo apt-get install python-serial openocd \
    flex bison libncurses5-dev autoconf texinfo build-essential \
    libftdi-dev libtool zlib1g-dev \
    python-empy  -y

由于GFW,安装可能很慢,可以尝试切换软件源为主服务器,但是仍然很慢!
(6) 如果以前装过工具链,删除残余

sudo apt-get remove gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-none-eabi gcc-arm-embedded
sudo add-apt-repository --remove ppa:team-gcc-arm-embedded/ppa

(7) 安装工具链
官网给出的教程没有安装工具链的步骤,所以我是手动安装的工具链,手动安装执行下面脚本即可

pushd .
cd ~
wget https://launchpad.net/gcc-arm-embedded/5.0/5-2016-q2-update/+download/gcc-arm-none-eabi-5_4-2016q2-20160622-linux.tar.bz2
tar -jxf gcc-arm-none-eabi-5_4-2016q2-20160622-linux.tar.bz2
exportline="export PATH=$HOME/gcc-arm-none-eabi-5_4-2016q2/bin:\$PATH"
if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi
. ~/.profile
popd

这是安装最新的工具链,版本是5.4。如果不出意外的话,上述脚本下载会非常慢解决。办法是用迅雷。。。对,,,将脚本中的链接复制下来,打开迅雷,新建任务再下载,大概10分钟能下载完,迅雷大法好。下载好后复制到ubuntu中,再手动执行脚本后面内容即可。
也可以使用apt-get安装工具链。执行上一小节(删除残余)最后一条命令会打印出安装步骤

Step1: Inside Ubuntu, open a terminal and input
       "sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa"

Step2: Continue to input
       "sudo apt-get update"

Step3: Continue to input to install toolchain
       "sudo apt-get install gcc-arm-embedded"

2.2. 代码编译

(1) 下载源码

mkdir -p ~/src
cd ~/src
git clone https://github.com/PX4/Firmware.git

源码目录不一定要放在 ~/ 下,可以放在任意位置。这里克隆也是很慢的,挂在那里睡觉去吧,第二天就好了。或者从这里下载源码,但是这里的我没有试过
下载完后更新源码库

cd Firmware
git submodule update --init --recursive
cd ..

(2) 基于NuttX / Pixhawk的硬件板编译
pixhawk如下操作即可

cd Firmware
make px4fmu-v2_default

px4fmu-v2_default是构建基于pixhawk1的镜像,其中可能会报缺少一些依赖库,按安装编译器的提示安装即可。安装完后,继续make,编译器会报如下错误

CMake Error at platforms/nuttx/NuttX/CMakeLists.txt:113 (add_dependencies):
  add_dependencies Cannot add target-level dependencies to INTERFACE library
  target "nuttx_build".

如果出现了类似错误,是由于cmake版本过低造成的,使用apt-get安装的cmake版本为3.2.2,而在3.3版本以下就会报这个错误(使用cmake --version即可查看cmake版本)所以我们需要手动安装最新版本的cmake,从cmake官网下载最新版本,然后解压,进入解压出来的文件夹,使用如下命令安装

./configure 
make 
sudo make install

安装完成后再次执行make px4fmu-v2_default 即可编译源代码。出现以下提示说明编译完成

[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

(3) 上传到pixhawk

make px4fmu-v2_default upload

先将pixhawk连接到电脑,然后使用以上命令上传。我的电脑就卡在了这个地方

If the board does not respond within 1-2 seconds, unplug and re-plug the USB connector.

这里提示说如果板子在1-2秒内没有重启,那么重新插拔USB接口。但是我插拔了很多次依然卡在这个地方,google上搜了很久也没有找到解决办法,那么只有去看源码了,上传固件的代码放在Tools/px_uploader.py,我看了很长时间这个代码,最后把问题确定在:能识别并查找到USB端口,但是打开失败,那么失败的原因是什么呢?
其实很简单,打开的端口位于 /dev 目录下,都是一些驱动设备,一般来说打开这些驱动是需要管理员权限的,所以只需要命令前加上 sudo 即可(我看了那么久源码,结果就加个这?)

sudo make px4fmu-v2_default upload

如果你听到滴的一声,那么说明电脑已经连接上板子的BootLoader了,但是仍然会报错,大概是这样

Board can accept larger flash images (2M bytes) than board config (1M bytes). Please use the correct board configuration to avoid lacking critical functionality.

实际的报错信息不是2M和1M,具体数字我不记得了。这里意思是说板子能够接收2MB的flash镜像,这比板子配置的1MB还大,让我们重新对板子进行配置。
这里我找了很久也没有找到是哪里给板子配置的1MB的flash。
通过拆开板子查看芯片型号,主芯片为STM32F427VI系列,冗余系统芯片是STM32F103C8,主芯片的flash确实是2MB,就是说我买的硬件没有缩水,也说明编译器的报错是正确,错误的地方在板子的配置。
板子配置是官方出的,出错的可能性很小,更何况还是1MB和2MB将近2倍的严重错误,这就更不可能了,最可能出错的还是之前步骤。
回顾之前的步骤,编译的时候我们执行的是

cd Firmware
make px4fmu-v2_default

官方说明,px4fmu-v2_default是针对pixhawk1生成镜像,那么我们的板子确实是pixhawk1吗?官方图片中pixhawk1长这样
pixhawk1
我板子是淘宝上买的,外形其实差不多,但是再往下面看,官网写着。

Availability

This is no longer available. The mRo Pixhawk may be used as a direct replacement.

可以看到,mRo Pixhawk已经替换了Pixhawk1,再进入官网查看mRo Pixhawk,它长这样
mRo Pixhawk
好像没什么区别啊,然后官网写着:

The main difference is that it is based on the Pixhawk-project FMUv3 open hardware design, which corrects a bug that limited the original Pixhawk 1 to 1MB of flash.

好了,就是这个了,pixhawk1已经不再用了,而是使用mRo Pixhawk代替了Pixhawk1,mRo Pixhawk修复了一个将镜像限制到1MB的bug,并且mRo Pixhawk是用STM32F103C8作为冗余系统,而不是STM32F100,这和之前查看的芯片型号符合。再看官网对于各个型号的pixhawk的make命令

  • Pixhawk 1: make px4fmu-v2_default
  • HKPilot32: make px4fmu-v2_default
  • Pixfalcon: make px4fmu-v2_default
  • Dropix: make px4fmu-v2_default
  • mRo Pixhawk: make px4fmu-v3_default (supports 2MB Flash)
  • mRo X-2.1: make auav-x21_default
  • Pixhawk 2: make px4fmu-v3_default
  • Pixracer: make px4fmu-v4_default
  • MindPX/MindRacer: make mindpx-v2_default
  • Pixhawk Mini: make px4fmu-v3_default
  • Pixhawk 3 Pro: make px4fmu-v4pro_default
  • Crazyflie 2.0: make crazyflie_default
  • Intel® Aero Ready to Fly Drone: make aerofc-v1_default
  • Pixhawk 4: make px4fmu-v5_default
  • AUAV-X2 (Discontinued): make px4fmu-v2_default

所以这里只需把px4fmu-v2_default换成px4fmu-v3_default 即可

make clean
make px4fmu-v3_default
make px4fmu-v3_default upload

之后就能够成功上传了,上传成功显示

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

[100%] Built target upload

这里还是有点小问题的,就是我烧写的时候烧写了3次才成功,失败时报错是time out,还不明白这是怎么回事。不过烧写完成过后,就能够连接地面站进行校准了,说明成功烧写了。


3. 总结

  1. 遇到问题,多思考,不要怀疑源码出错,出错的地方肯定在我们自己身上。
  2. 找解决方案,首先百度,不行google,再不行读源码。
  3. 你以为你买的pixhawk1,其实它是mRo pixhawk.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PX4开发(1):ubuntu下pixhawk开发环境搭建 的相关文章

  • 如何使用手机微信实时查看安防网络摄像头直播?

    随着移动通信设备的普及 xff0c 传统监控如幼儿园 农场 养殖场 交通等信息 xff0c 都开始尝试通过手机微信进行直播 xff0c 实现随时随地 想看就看的需求 xff0c 具体如何实现 xff1f 实现难度如何 xff1f 本文就为大
  • 【米哈游】2022春季校园招聘

    作者 xff1a 咖喱吉吉 链接 xff1a 米哈游 2022春季校园招聘网申开始啦 xff01 校园大使内推 招聘信息 牛客网 来源 xff1a 牛客网 在这里有超多业界顶尖游戏制作大牛 xff0c 等你一起来创作最激动人心的面向未来的产
  • INT,INT32,_int64的范围

    在做游戏的开发中 xff0c 由于游戏运行的时间已经很长 xff0c 数据量非常大 xff0c 在内网测试 xff0c 怎么测都没有问题 xff0c 可是到外网就是时不时的挂了 xff0c 后来打log才看出问题 是我的int类型范围设置小
  • 内存分配函数

    1 malloc 函数 xff1a void malloc unsigned int size 在内存的动态分配区域中分配一个长度为size的连续空间 xff0c 如果分配成功 xff0c 则返回所分配内存空间的首地址 xff0c 否则返回
  • ORB_SLAM2+realsense运行稠密建图

    具体的环境及其细节 xff1a Ubuntu18 04 realsenseD435i ROS orbslam2 echo gou的博客 CSDN博客 下载代码 xff1a https github com gaoxiang12 ORBSLA
  • catkin_make学习总结

    catkin make学习总结 基础概念常用函数理解与注释其他有用的函数总结简单实例参考链接 基础概念 CMakeLists txt 文件中 xff0c 命令名字是不区分大小写的 xff0c 而参数和变量是大小写相关的ros的包 catki
  • 新手如何使用立创EDA完成电路设计

    软件简介 xff1a 立创EDA是一款基于浏览器的免费国产EDA绘图工具 下载方式 xff1a 百度 立创EDA 进入主页 xff0c 或主页点击 下载 客户端 xff0c 支持Wndows Luixus Mac系统下载安装 首先 xff0
  • Echart、Excel、highcharts、jfreechart对比

    Echart Excel highcharts jfreechart 柱状图 条形图 折线图 面积图 散点图 气泡图 K 线图 饼图 环形图 雷达图 力导布局图 和弦图 曲面图 地图
  • HAL库和标准库的区别

    本文回答来源于chat gpt4 xff0c 非原创 xff0c 也是我初学过程中所遇到的问题 xff0c 答案分享给大家 xff0c 如有侵权请联系删除 xff1a HAL 库 xff08 Hardware Abstraction Lay
  • 原来手机就能直接制作证件照,我也才知道,再也不用去照相馆了

    证件照选相信是我们大家日常所需 xff0c 但是去照相馆真的有点麻烦 xff0c 尤其是有时候仅仅只是需要换一个背景颜色 xff0c 其实不用这么麻烦 xff0c 现在手机上不仅能换背景颜色 xff0c 还能制作证件照 xff0c 还很简单
  • RTK基站 差分云共享技术,全套高精度定位解决方案

    针对区域内多个移动体高精度定位的需求 xff0c 为了最大程度的降低成本 xff0c FDISYSTEMS为DETA100系列具有联网功能的产品提供了免费的差分共享技术 xff0c 通过该技术可以将单一运载体从CORS服务器获取的差分修正R
  • STM32 Keil编程常见问题解决办法:(一)多行注释时出现红色下划线

    Problem xff1a 在STM32 Keil软件中进行多行注释时出现下图所示现象 xff0c 部分语句出现红色下划线 Solution xff1a 点击Keil软件上的小扳手 选择Text Completion 勾选ENTER TAB
  • 2017秋招求职历程总结

    2017秋招求职历程总结 从小的梦想就是有朝一日能够进入汽车行业工作 xff0c 很幸运刚毕业的第一份工作便实现了此梦想 xff0c 感谢大学遇到的那些人 终于在国庆之前拿到了一份还算满意的offer 9月1号从实习单位离职准备接下来的秋招
  • Win10常用命令:定时关机(shutdown命令)

    文章目录 一 单次 定时关机 xff1a Win 43 R 输入命令 xff1a 二 shutdown命令参数三 每天定时关机 一 单次 定时关机 xff1a Win 43 R 输入命令 xff1a 倒计时关机 xff1a shutdown
  • 如何实现超大文件(60G)传输给别人?

    2022 4 25 今天Ken问我要我工位上的一个虚拟机环境 xff0c 整个文件夹拷给他 但是这个CentOS的环境有60个G xff0c 我的U盘只有45G 想了几个办法 xff1a 压缩包 xff1a 用WinRAR压缩成压缩包 xf
  • CPU两大架构:X86与ARM的区别

    1 CPU 架构 Central Processing Unit Architecture X86 ARM MIPS PowerPC IA64 AMD64 x86 64 x64 是64位的CPU架构 区分ARM64 2 复杂指令集计算机CI
  • Linux(UOS、Ubuntu)虚拟机和Windows物理机之间无法复制粘贴

    我的UOS虚拟机和主机之间无法复制粘贴 xff0c 解决方案如下 xff1a 1 先更新一下软件列表 span class token function sudo span span class token function apt get
  • CMake、CMakeLists.txt

    2022 06 02 xff0c 今天开始研究cmake 不间断更新 一 说明 0 官方文档网址 xff1a www cmake org 1 cmake的定义 xff1a 高级编译配置工具 当多个人用不同的语言或者编译器开发一个项目 xff
  • ECMAScript6 入门 数组的扩展

    数组的扩展 1 xff1a 扩展运算符 xff1a 好比rest参数的逆运算 xff0c 将一个数组转换为用逗号分隔的参数序列 主要应用于函数调用 xff0c 将一个数组 xff0c 变为参数序列 如果扩展运算符后面是一个空的数组 xff0
  • CSDN排名记录

    文章目录 表格记录文字记录刷题记录 表格记录 时间 属性周排名总排名原创文章数收藏量粉丝数铁粉数2023年5月12日 xff1a 第20周3175593128893843912572023年5月6日 xff1a 第19周3211559128

随机推荐