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

news/2025/4/1 17:58:29/文章来源:https://www.cnblogs.com/zhengyan6/p/18772480

安装Ubuntu对应版本的Ros

此处省略

PX4固件下载

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

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

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

cd ~/PX4-Autopilot
#切换到1.14.0分支,当然也可以尝试其他版本
# 使用以下命令切换版本,以V1.14.0为例:
git checkout v1.14.0

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

# 此部分不执行,解释作用:
#在~/PX4-Autopilot目录下执行
#git submodule update --init --recursive 
#以上命令中,submodule是子模块的意思, —init 选项会初始化,并注册子模块的地址,—recursive选项会递归克隆子模块。
#此更新的链接来源于:~/PX4-Autopilot/.gitmodules(注意是隐藏文件)# 执行此部分:
#需要先进入~/PX4-Autopilot/.gitmodules文件vi ~/PX4-Autopilot/.gitmodules#将文件打开,可以看到里面都github的地址,直接用上面的命令,会很难成功
#所以:将其更新为 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目录中,该目录下的文件如下:

# 在执行脚本之前,需要手动安装一些模块,配置环境变量
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文件,打开该文件,在底部添加如下内容,保存:
vi ~/.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/Tools/setup# 可以看到里面有Arch/Macos和ubuntu系统的配置脚本。
# 因为是ubuntu系统,所以运行ubuntu.sh文件
# 这是一个脚本文件,里面是一些bash命令,可以理解为一系列下载px4开发环境的代码。在上图界面右键选择在终端打开,使用下列命令运行:bash ubuntu.sh# 然后进行编译:cd ~/PX4-Autopilot  # 也可以 roscd px4
make px4_sitl_default gazebo
**  如果出现下面的错误,一直在等待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
则需要在.bashrc文件的最后一行加入
source /opt/ros/noetic/setup.bash**  如果执行make px4_sitl_default gazebo显示:  **ninja: error: unknown target 'gazebo'
make: *** [Makefile:227:px4_sitl] 错误 1
# 则需要先安装gazebo:
sudo apt install gazebo libgazebo-dev# 然后手动检查仿真目标配置文件:
打开 PX4-Autopilot/boards/px4/sitl 目录。
检查是否存在 default.cmake 或 gazebo.cmake 文件。# 如果文件缺失或配置错误,可以从官方仓库重新下载:
git checkout origin/main -- boards/px4/sitl

然后再启动
终端出现如下,gazebo启动,中间有个小飞机,则代表开发环境搭建成功


MAVROS安装

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

安装MAVROS

sudo apt install ros-noetic-mavros ros-noetic-mavros-extraswget 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

看到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

下载链接(https://d176tv9ibo4jno.cloudfront.net/latest/QGroundControl.AppImage)
将该文件移动到主目录下面
通过指令更改权限,和运行

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

然后会运行QGC的软件

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

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

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

相关文章

jmeter性能测试(2)——插件和nmon

一、性能插件认识1.在jmeter中添加性能插件2.下载两个jar包和启动包3.存放路径 (1)路径1(2)启动插件(4)将所有插件添加到线程中 常用的性能指标插件 1. jp@gc - Bytes Throughput Over Time:不同时间吞吐量展示(图表) 聚合报告里,Throughput是按请求个数来展示的,比如…

jmeter性能测试(2)——实战

一、单接口性能测试(同一用户进行压力测试)POST http://49.233.201.254:8080/cms/manage/loginJump.do POST data:userAccount=admin&loginPwd=123456按100 压力测试(1)在线程中修改虚拟用户数线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数…

2025全国青少年信息素养大赛报名指南(内附报名全流程)

2025全国青少年信息素养大赛报名指南 (内附报名全流程)2025 年预估初赛在 28 万~32 万人次左右,今年竞争会比较激烈,大家提前备考,NOI官网发布了“关于参加CSP-J/S认证需符合年龄条件的公告”,报名参加CSP-J/S的被认证者在当年9月1日(不含)需满12周岁,包括第一轮和第…

Codeforces Round 1013 (Div. 3)(前5)

比赛链接 A:Olympiad Date 让我们开始一个数字计数器 cnt[i] ( 0≤i≤9) 3≤cnt[0],1≤cnt[1],2≤cnt[2], 1≤cnt[3],1≤cnt[5] 答案已找到。如果在计算所有数字之后,没有满足其中一个条件,则没有解决方案,答案为 0. 代码如下 #include <bits/stdc++.h> using namesp…

【题解】E - Replace

背景 这把报了 UnRated 从 E 开始看,于是非常惨烈的只拿下了 E。这个 2054 难度的题居然只有绿。E - Replace 题意 给你两个字符串 \(s,t\),你每次可以把 \(s\) 中的一种字符换成另一种,求把 \(s\) 变成 \(t\) 的最小操作数,可能无解。 思路 我们先考虑无解怎么判:可以得到…

质数筛——欧拉筛

欧拉筛 核心思想 和数只被它最小的质因数筛去 prime_number是当前小于i的所有质数集合 p是prime_number的元素,当没有找到最小质因数pi时,p是j的最小质因数,j可以被筛去,当找到最小质因数时就要退出循环,否则不能保证p是j的最小质因数 算法的时间复杂度:O(n),到n的所有和…

索引的分类

远离那些贬低你理想的人。狭隘的人经常如此,伟大的人会让你感觉自己也可以变好。 ——马克吐温按「数据结构」分类:B+tree索引、Hash索引、Full-text索引。 按「物理存储」分类:聚簇索引(主键索引)、二级索引(辅助索引) 按「字段特性」分类:主键索引、唯一索引、普通索引、前缀…

Linux基本使用-3

常用快捷键使用ctrl + c ==> 强制停止,结束当前命令运行或清空已输入命令ctrl + d ==> 退出登出,退出当前登录账户或退出程序history ==> 查看历史命令!命令前缀 ==> 自动匹配上一个命令ctrl + r ==> 搜索历史命令ctrl + a|e ==> 光…

评论夸一夸功能

评论夸一夸功能原文:https://www.tianyubk.com/863.html效果图1. 新建CSS文件 ​项目根目录/resouces/插件/小工具/评论​ (可以新建上述目录)新建 kuakua.css​ 文件 .kuakua-first-box {margin: auto;width: 440px;border-radius: 16px;bottom: auto;min-height: 10rem;le…

执行一条SQL请求的过程

远离那些贬低你理想的人。狭隘的人经常如此,伟大的人会让你感觉自己也可以变好。 ——马克吐温大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如…

pikachu-RCE

exec "ping" 注入方式和DVWA靶场 - Command Injection一致 exec "evel"通过代码可以看出用户输入的信息未经过任何过滤被直接执行 尝试传入phpinfo();

位运算的操作

代码展示: #include <iostream> using namespace std;int main() {int n, m;cin >> n >> m;while (m--) {int op;cin >> op;if (op == 1) {int x;cin >> x;cout << ((n >> x) & 1) << endl;} else if (op == 2) {int l, …