Linux系统ubuntu20.04 无人机PX4 开发环境搭建(失败率很低)

Linux系统ubuntu20.04 无人机PX4 开发环境搭建

  • PX4固件下载
  • 开发环境搭建
  • MAVROS安装
  • 安装地面站QGC

PX4固件下载

PX4的源码处于GitHub,因为众所周知的原因git clone经常失败,此处从Gitee获取PX4源码和依赖模块。

git clone https://gitee.com/voima/PX4-Autopilot.git

正克隆到 ‘PX4-Autopilot’…
remote: Enumerating objects: 454209, done.
remote: Total 454209 (delta 0), reused 0 (delta 0), pack-reused 454209
接收对象中: 100% (454209/454209), 215.48 MiB | 2.32 MiB/s, 完成.
处理 delta 中: 100% (334699/334699), 完成.
在这里插入图片描述在这里插入图片描述

使用cd命令切换到 px4项目文件目录:

cd ~/PX4-Autopilot

使用以下命令切换版本,以V1.14.0为例:

git checkout v1.14.0 #切换到1.14.0分支,当然也可以尝试其他版本

因为PX4的完整项目是嵌套子模块存储的,以上命令只下载了px4的基本代码,所以我们要进行子模块的下载,运行下列命令:

 git submodule update --init --recursive # 在~/PX4-Autopilot目录下执行

以上命令中,submodule是子模块的意思, --init 选项会初始化,并注册子模块的地址,–recursive选项会递归克隆子模块。

此更新的链接来源于~/PX4-Autopilot/.gitmodules(注意是隐藏文件)

将文件打开,粘贴到下面,可以看到里面都github的地址,直接用上面的命令,会很难成功

[submodule "src/modules/mavlink/mavlink"]path = src/modules/mavlink/mavlinkurl = https://github.com/mavlink/mavlink.gitbranch = master
[submodule "src/drivers/uavcan/libuavcan"]path = src/drivers/uavcan/libuavcanurl = https://github.com/dronecan/libuavcan.gitbranch = main
[submodule "Tools/simulation/jmavsim/jMAVSim"]path = Tools/simulation/jmavsim/jMAVSimurl = https://github.com/PX4/jMAVSim.gitbranch = main
[submodule "Tools/simulation/gazebo-classic/sitl_gazebo-classic"]path = Tools/simulation/gazebo-classic/sitl_gazebo-classicurl = https://github.com/PX4/PX4-SITL_gazebo-classic.gitbranch = main
[submodule "src/drivers/gps/devices"]path = src/drivers/gps/devicesurl = https://github.com/PX4/PX4-GPSDrivers.gitbranch = main
[submodule "platforms/nuttx/NuttX/nuttx"]path = platforms/nuttx/NuttX/nuttxurl = https://github.com/PX4/NuttX.gitbranch = px4_firmware_nuttx-10.3.0+-v1.14
[submodule "platforms/nuttx/NuttX/apps"]path = platforms/nuttx/NuttX/appsurl = https://github.com/PX4/NuttX-apps.gitbranch = px4_firmware_nuttx-10.3.0+
[submodule "Tools/flightgear_bridge"]path = Tools/simulation/flightgear/flightgear_bridgeurl = https://github.com/PX4/PX4-FlightGear-Bridge.git
[submodule "Tools/simulation/jsbsim/jsbsim_bridge"]path = Tools/simulation/jsbsim/jsbsim_bridgeurl = https://github.com/PX4/px4-jsbsim-bridge.git
[submodule "src/drivers/cyphal/libcanard"]path = src/drivers/cyphal/libcanardurl = https://github.com/opencyphal/libcanard.git
[submodule "src/drivers/cyphal/public_regulated_data_types"]path = src/drivers/cyphal/public_regulated_data_typesurl = https://github.com/opencyphal/public_regulated_data_types.git
[submodule "src/drivers/cyphal/legacy_data_types"]path = src/drivers/cyphal/legacy_data_typesurl = https://github.com/PX4/public_regulated_data_types.gitbranch = legacy
[submodule "src/lib/crypto/monocypher"]path = src/lib/crypto/monocypherurl = https://github.com/PX4/Monocypher.gitbranch = px4
[submodule "src/lib/events/libevents"]path = src/lib/events/libeventsurl = https://github.com/mavlink/libevents.gitbranch = main
[submodule "src/lib/crypto/libtomcrypt"]path = src/lib/crypto/libtomcrypturl = https://github.com/PX4/libtomcrypt.gitbranch = px4
[submodule "src/lib/crypto/libtommath"]path = src/lib/crypto/libtommathurl = https://github.com/PX4/libtommath.gitbranch = px4
[submodule "src/modules/uxrce_dds_client/Micro-XRCE-DDS-Client"]path = src/modules/uxrce_dds_client/Micro-XRCE-DDS-Clienturl = https://github.com/PX4/Micro-XRCE-DDS-Client.gitbranch = px4

将其更新为 gitee 的地址,已经整理测试好了,直接替换掉文件的内容即可

[submodule "src/modules/mavlink/mavlink"]path = src/modules/mavlink/mavlinkurl = https://gitee.com/wtp95/mavlink.gitbranch = master[submodule "Tools/flightgear_bridge"]path = Tools/simulation/flightgear/flightgear_bridgeurl = https://gitee.com/seokhb/PX4-FlightGear-Bridge.git[submodule "Tools/simulation/gazebo-classic/sitl_gazebo-classic"]path = Tools/simulation/gazebo-classic/sitl_gazebo-classicurl = https://gitee.com/seokhb/PX4-SITL_gazebo-classic.gitbranch = main[submodule "Tools/simulation/jmavsim/jMAVSim"]path = Tools/simulation/jmavsim/jMAVSimurl = https://gitee.com/seokhb/jMAVSim.gitbranch = main[submodule "Tools/simulation/jsbsim/jsbsim_bridge"]path = Tools/simulation/jsbsim/jsbsim_bridgeurl = https://gitee.com/seokhb/px4-jsbsim-bridge.git[submodule "platforms/nuttx/NuttX/apps"]path = platforms/nuttx/NuttX/appsurl = https://gitee.com/seokhb/NuttX-apps.gitbranch = px4_firmware_nuttx-10.3.0+[submodule "platforms/nuttx/NuttX/nuttx"]path = platforms/nuttx/NuttX/nuttxurl = https://gitee.com/seokhb/NuttX.gitbranch = px4_firmware_nuttx-10.3.0+-v1.14[submodule "src/drivers/cyphal/public_regulated_data_types"]path = src/drivers/cyphal/public_regulated_data_typesurl = https://gitee.com/seokhb/public_regulated_data_types.git[submodule "src/drivers/cyphal/legacy_data_types"]path = src/drivers/cyphal/legacy_data_typesurl = https://gitee.com/jiyuanwangxs/legacy_data_types.gitbranch = legacy[submodule "src/drivers/cyphal/libcanard"]path = src/drivers/cyphal/libcanardurl = https://gitee.com/seokhb/libcanard.git[submodule "src/drivers/gps/devices"]path = src/drivers/gps/devicesurl = https://gitee.com/seokhb/PX4-GPSDrivers.gitbranch = main[submodule "src/drivers/uavcan/libuavcan"]path = src/drivers/uavcan/libuavcanurl = https://gitee.com/seokhb/libuavcan.git[submodule "src/lib/crypto/libtomcrypt"]path = src/lib/crypto/libtomcrypturl = https://gitee.com/seokhb/libtomcrypt.gitbranch = px4[submodule "src/lib/crypto/libtommath"]path = src/lib/crypto/libtommathurl = https://gitee.com/seokhb/libtommath.gitbranch = px4[submodule "src/lib/crypto/monocypher"]path = src/lib/crypto/monocypherurl = https://gitee.com/seokhb/Monocypher.gitbranch = px4[submodule "src/lib/events/libevents"]path = src/lib/events/libeventsurl = https://gitee.com/seokhb/libevents.gitbranch = main[submodule "src/modules/uxrce_dds_client/Micro-XRCE-DDS-Client"]path = src/modules/uxrce_dds_client/Micro-XRCE-DDS-Clienturl = https://gitee.com/seokhb/Micro-XRCE-DDS-Client.gitbranch = px4

然后执行下面的命令,就可以

git submodule update --init --recursive

有的子模块还是走的github,失败了就多试几次,直到用上面命令不再下载东西了就可以了
在这里插入图片描述

开发环境搭建

PX4的完整代码已经下载完了,接下来就是配置开发环境。PX4源码中已经提供了开发环境配置的脚本,在/PX4-Autopilot/Tools/setup目录中,该目录下的文件如下:
在这里插入图片描述
可以看到里面有Arch/Macos和ubuntu系统的配置脚本。
ubuntu系统,运行ubuntu.sh文件
这是一个脚本文件,里面是一些bash命令,可以理解为一系列下载px4开发环境的代码。在上图界面右键选择在终端打开,使用下列命令运行:

bash ubuntu.sh

如果出现很多错误,和镜像源有关,那么则手动安装一些模块

sudo apt install python3-pip
pip3 install kconfiglib
pip3 install --user jinja2
pip3 install --user jsonschema
sudo apt-get update
sudo apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

然后需配置~/.bashrc文件,打开该文件,在底部添加如下内容,保存。

# >>> PX4 initialize >>>
source ~/PX4-Autopilot/Tools/simulation/gazebo-classic/setup_gazebo.bash ~/PX4-Autopilot ~/PX4-Autopilot/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4-Autopilot
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic
# <<< PX4 initialize <<<

然后进行编译

cd ~/PX4-Autopilot  # 也可以 roscd px4
make px4_sitl_default gazebo
```cd ~/PX4-Autopilot 
如果出现下面的错误,一直在等待master> [Msg] Waiting for master.
[Err] [ConnectionManager.cc:121] Failed to connect to master in 30 seconds.
[Err] [gazebo_shared.cc:78] Unable to initialize transport.
[Err] [gazebo_client.cc:56] Unable to setup Gazebo
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/db19e2b420d54580b3a52f053d642fbf.png)则需要在.bashrc文件的最后一行加入```c
source /opt/ros/noetic/setup.bash

然后再启动

终端出现如下,gazebo启动,中间有个小飞机,则代表开发环境搭建成功
在这里插入图片描述
在这里插入图片描述

MAVROS安装

安装geographiclib数据库(GeographicLib是一个用于解决地理坐标转换、大地测量(geodesy)和地图投影等问题的库,广泛用于航空航天和GIS(地理信息系统)领域)

安装MAVROS

sudo apt install ros-noetic-mavros ros-noetic-mavros-extras

准备解压 …/ros-noetic-mavros_1.18.0-1focal.20240304.150259_amd64.deb …
正在解压 ros-noetic-mavros (1.18.0-1focal.20240304.150259) 并覆盖 (1.15.0-1focal
.20230216.003459) …
准备解压 …/ros-noetic-mavros-extras_1.18.0-1focal.20240304.151354_amd64.deb .

正在解压 ros-noetic-mavros-extras (1.18.0-1focal.20240304.151354) 并覆盖 (1.15.0
-1focal.20230216.014052) …
正在设置 ros-noetic-mavros (1.18.0-1focal.20240304.150259) …
正在设置 ros-noetic-mavros-extras (1.18.0-1focal.20240304.151354) …
在这里插入图片描述

安装geographiclib数据库(GeographicLib是一个用于解决地理坐标转换、大地测量(geodesy)和地图投影等问题的库,广泛用于航空航天和GIS(地理信息系统)领域)

wget https://gitee.com/robin_shaun/XTDrone/raw/master/sitl_config/mavros/install_geographiclib_datasets.sh
sudo chmod a+x ./install_geographiclib_datasets.sh
sudo ./install_geographiclib_datasets.sh 

检查MAVROS是否安装成功可输入如下命令:

roslaunch px4 mavros_posix_sitl.launch

新打开一个终端,输入:

rostopic echo mavros/state

header:
seq: 27
stamp:
secs: 27
nsecs: 524000000
frame_id: ‘’
connected: True
armed: False
guided: True
manual_input: False
mode: “AUTO.LOITER”
system_status: 3
在这里插入图片描述
看到connected为True 则 MAVROS安装成功

安装地面站QGC

首先执行下面指令

sudo usermod -a -G dialout $USER
sudo apt-get remove modemmanager -y

安装一些依赖库

sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y
sudo apt install libfuse2 -y
sudo apt install libxcb-xinerama0 libxkbcommon-x11-0 libxcb-cursor0 -y

然后系统登出再登入,确定改变了用户权限

下面开始安装QGC
下载QGroundControl.AppImage,下载链接
将该文件移动到主目录下面
通过指令更改权限,和运行

chmod +x ./QGroundControl.AppImage
./QGroundControl.AppImage  

然后会运行QGC的软件
在这里插入图片描述

之后双击 QGroundControl.AppImage 图标也可以运行该软件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/30910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基 CanMV 的 C 开发环境搭建(Linux,Ubuntu篇)

不论是使用 CanMV 提供的基于 C 语言和 FreeRTOS 的应用开发方式开发应用程序或是编译 CanMV 固件&#xff0c;都需要搭建基于 CanMV 的 C 开发环境&#xff0c;用于编译 CanMV 源码。 1. 开发环境搭建说明 CanMV 提供了基于 C 语言和 FreeRTOS 的应用开发…

傅里叶级数在不连续点会怎么样???

文章目录 一、前言背景二、用狄利克雷核表达傅里叶级数三、狄利克雷核与狄拉克函数四、傅里叶级数在不连续点的表示五、吉伯斯现象的解释六、总结参考资料 一、前言背景 笔者最近在撸《信号与系统》&#xff0c;写下此博客用作记录和分享学习笔记。由于是笔者为电子爱好者&…

ENVI实战—一文搞定非监督分类

实验1&#xff1a;使用isodata法分类 目的&#xff1a;学会使用isodata法开展非监督分类 过程&#xff1a; ①导入影像&#xff1a;打开ENVI&#xff0c;按照“文件→打开为→光学传感器→ESA→Sentinel-2”的顺序&#xff0c;打开实验1下载的哨兵2号数据。 图1 ②区域裁剪…

一文简述AI自动化漏洞修复实践

2024年&#xff0c;人工智能&#xff08;AI&#xff09;技术正以其前所未有的速度和影响力&#xff0c;革新着网络安全领域。AI在自动化漏洞修复方面的应用&#xff0c;标志着我们迈入了一个全新的网络安全时代。近日&#xff0c;在中国电信组织的一场技术交流会上&#xff0c;…

鸿蒙开发通信与连接:【@ohos.rpc (RPC通信)】

RPC通信 本模块提供进程间通信能力&#xff0c;包括设备内的进程间通信&#xff08;IPC&#xff09;和设备间的进程间通信&#xff08;RPC&#xff09;&#xff0c;前者基于Binder驱动&#xff0c;后者基于软总线驱动。 说明&#xff1a; 本模块首批接口从API version 7开始支…

番外篇 | 基于改进YOLOv5的安全帽佩戴检测 | 重参数化结构RepVGG + 空间对象注意力机制RCS-OSA模块

前言:Hello大家好,我是小哥谈。RCS-YOLO是一种目标检测算法,它是基于YOLOv3算法的改进版本。通过查看RCS-YOLO的整体架构可知,其中包括RCS-OSA模块。RCS-OSA模块在模型中用于堆叠RCS模块,以确保特征的复用并加强不同层之间的信息流动。本文针对安全帽佩戴的检测就是基于RC…

Vue 的 axios二次封装

&#xff08;以下的接口地址链接换成自己的写&#xff01;&#xff01;&#xff01;&#xff09; 首先在项目中src的目录下创建一个api的文件夹&#xff0c;在api的文件下在穿件两个文件用于二次封装 别忘了先安装axios&#xff1a;&#xff08;在根目录下安装axios&#xff0…

Linux内核开发-替换内核

0.前言 上一章&#xff08;点击返回上一章&#xff09;提到如何编译内核源码&#xff0c;本章主要介绍如何将编好的内核替换已有的内核。 1. 替换内核 第1步&#xff1a;查看当前内核版本 cat /proc/version第2步&#xff1a; 查看机器上的内核信息 grep menuentry /boot/…

Mware Fusion Pro 13 mac版:一键掌控虚拟世界

VMware Fusion Pro 13是一款功能卓越的虚拟化软件&#xff0c;专为Mac操作系统量身打造。这款软件为用户提供了一个一站式的虚拟化解决方案&#xff0c;能够满足各种多样化的需求。 VMware Fusion Pro 13 Mac获取 VMware Fusion Pro 13的强大之处在于其采用了最 先进的虚拟化…

食品安全无小事:EasyCVR+AI技术助力食品加工厂管理透明化,构建食品安全防线

一、背景需求 近期有新闻记者曝光某省禽类屠宰加工厂脏乱差问题严重&#xff0c;工人脚踩鹅肠鸭肠混杂洗地水、烟头随手扔进鸭肠筐、污水捞出死鸭再上生产线…卫生情况十分堪忧。食品卫生安全频频出现负面新闻&#xff0c;如何实现源头治理&#xff1f;如何将各类食品安全风险隐…

C++ Primer Plus第五版+习题重点笔记(p250-300)

第七章 类&#xff08;下&#xff09; clear需要访问Screen的私有成员;而要想令这种访问合法&#xff0c;Screen需要把 window mgr 指定成它的友元 如果一个类指定了友元类&#xff0c;则友元类的成员函数可以访问此类包括非公有成员在内的所有成员 每个类负责控制自己的友元…

电子书(chm)-加载JS--CS上线

免责声明: 本文仅做技术交流与学习... 目录 cs--web投递 html(js)代码 html生成chm工具--EasyCHM 1-选择powershell 模式 生成 2-选择bitsadmin模式生成 chm反编译成html cs--web投递 cs配置监听器--->攻击---->web投递---> 端口选择没占用的, URL路径到时候会在…

《昇思25天学习打卡营第1天 | 认识MindScope AI框架和昇思大模型平台》

活动地址&#xff1a;https://xihe.mindspore.cn/events/mindspore-training-camp 昇思MindSpore学习笔记&#xff1a;探索AI的无限可能 嗨&#xff0c;AI爱好者们&#xff01;今天&#xff0c;我要带你们深入了解一个强大的全场景深度学习框架——昇思MindSpore。 准备好了吗…

AWR1843BOOST上的TM4C1294NCPDT是干啥用的?

摘要&#xff1a;AWR1843BOOST上面有2个体积较大的芯片&#xff0c;一片是雷达&#xff0c;另一片是什么呢&#xff1f; 答案&#xff1a;它就是XDS110仿真器。 有了它&#xff0c;就不用再买一个仿真器了。 从AWR1843BOOST的原理图中可以看到整个 BOOST板子上只有2个比较大的…

C++switch陈述

C 使用关键字 switch、case、default对一个常数执行不同的分流&#xff0c;这构成多重选择的结构&#xff0c;形式如下 简单来说&#xff0c;switch后头接一小括弧&#xff0c;小括弧内为一常数运算式&#xff0c;计算出常数值若与其后case的位标(label) 相符&#xff0c;就会执…

Prometheus入门

Prometheus入门 Setup Reference:https://prometheus.io/docs/introduction/overview/ exporters:你可以部署在你想要获取metrics的应用旁&#xff0c;接收Prometheus请求&#xff0c;从应用程序中收集数据并转换为正确的格式&#xff0c;最后返回给Prometheus;Service Dis…

创建百度百科词条要多少钱?看这篇

“百度百科词条人人可编辑&#xff0c;词条创建和修改均为免费&#xff0c;不存在官方及代理商付费代编。” 是的&#xff0c;百度百科免费开放&#xff0c;任何人都可以自己做&#xff0c;但是作为一个给上百家企业和个人创建百度百科词条的专业人士来说&#xff0c;给大家一…

模型预测控制MPC详解(附带案例实现)

模型预测控制MPC详解&#xff08;附带案例实现&#xff09; 文章目录 模型预测控制MPC详解&#xff08;附带案例实现&#xff09;1. 最优控制问题2. 什么是MPC3. 二次规划Quadratic Programming4. MPC为什么可以转换成QP问题&#xff08;推导过程&#xff09;5. MPC总结5.1 MPC…

基于51单片机的篮球计分器设计

一.硬件方案 本设计用由AT89C51编程控制LED七段数码管作显示的球赛计时计分系统。该系统具有赛程定时设置、赛程时间暂停、及时刷新甲乙双方的成绩等功能。 电路主要由STC89C52单片机最小系统数码管显示模块数码管驱动模块蜂鸣器模块按键模块&#xff1b; 二.设计功能 &…

哔哩哔哩视频URL解析原理

哔哩哔哩视频URL解析原理 视频网址解析视频的原理通常涉及以下几个步骤&#xff1a; 1、获取视频页面源代码&#xff1a;通过HTTP请求获取视频所在网页的HTML源代码。这一步通常需要处理反爬虫机制&#xff0c;如验证码或用户登录。 2、解析页面源代码&#xff1a;分析HTML源代…