当前位置: 首页 > news >正文

【PX4】Ubuntu20.04+ROS Noetic 配置PX4-v1.12.2和Gazebo11联合仿真环境【教程】

【PX4】Ubuntu20.04+ROS Noetic 配置PX4-v-v1.12.2和Gazebo11联合仿真环境【教程】

文章目录

  • 【PX4】Ubuntu20.04+ROS Noetic 配置PX4-v-v1.12.2和Gazebo11联合仿真环境【教程】
    • 0. 安装Ubuntu+ROS
    • 1. 安装依赖
    • 2. 安装QGC地面站
    • 3. 配置PX4-v1.12.2
      • 3.1 安装PX4
      • 3.2 测试PX4是否成功安装
    • 4. 手动添加gazebo模型
    • 5. 配置Mavros
      • 5.1 安装Mavros(源码安装方法)不推荐
      • 5.2 安装Mavros(二进制安装方法)推荐
      • 5.3 测试mavros
    • 6. 测试mavros与sitl通信
    • Reference

写在前面,目前中文互联网上关于PX4飞控的学习资料较少,笔者查阅了大量的资料整理成这篇博客,贡献一些学习内容,码字不易,如果帮助到您,请您帮我点点赞。

0. 安装Ubuntu+ROS

安装Ubuntu可以查看这篇教程,安装ros可以查看这篇教程,这里就不再赘述了。

1. 安装依赖

● 在使用apt安装的过程中(包括之后ROS的安装),如果出现难以解决的依赖问题,可以使用aptitude install(没有aptitude的话,使用sudo apt install aptitude 安装),如sudo aptitude install ros-kinetic-desktop,它会依次推荐依赖解决方案,觉得可行就按y,不可行就按n。当然这个工具也不是万能的,如果它也解决不了依赖问题,还是需要靠自己分析解决。
● 有时候apt报错,提示“有几个软件包无法下载,要不运行 apt-get update 或者加上 --fix-missing 的选项再试试?”,这时按照提示进行操作即可。
● 注意仔细检查依赖都装成功没有,之前有些开发者遇到的编译过程中出现’pthread_create’未定义的引用,就是因为少装了依赖。

注意如果安装了Anaconda等虚拟环境管理器,要退出虚拟环境的激活,再进行依赖的安装,一下的安装过程我们默认退出了Anaconda的虚拟环境
比如我这里使用了anaconda包管理器,有一个虚拟环境base那么我需要推出这个虚拟环境再进行依赖的安装。

conda deactivate
Image

然后进行依赖的安装

sudo apt install ninja-build exiftool ninja-build protobuf-compiler libeigen3-dev genromfs xmlstarlet libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev python3-pip gawk
pip3 install pandas jinja2 pyserial cerberus pyulog==0.7.0 numpy toml pyquaternion empy pyyaml 
pip3 install packaging numpy empy toml pyyaml jinja2 pyargparse kconfiglib jsonschema future
pip install --upgrade setuptools
#若未报错不需要输入这两行命令
python -m pip install --upgrade pip

2. 安装QGC地面站

安装的教程参考于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 libqt5gui5 -y
sudo apt install libfuse2 -y

然后重启电脑,下载QGroundControl.AppImage
使用终端命令安装(并运行):

chmod +x ./QGroundControl.AppImage
./QGroundControl.AppImage  (or double click)

3. 配置PX4-v1.12.2

3.1 安装PX4

在创建工作空间之前一定要deactivate anaconda的虚拟环境
参考PX4官网上的安装流程
1、下载PX4源码
可以直接git进行下载,由于ros noetic自带gazebo11,所以我们不需要再额外安装gazebo

git clone https://github.com/PX4/PX4-Autopilot.git --recursive

如果下载比较慢,可以使用我已经打包好的源码,提取码hola

2、安装PX4
然后,轻量安装(不安装 sim tool 和 nuttx)

bash ./PX4-Autopilot/Tools/setup/ubuntu.sh --no-sim-tools --no-nuttx

3、安装相关依赖
然后安装一些依赖

sudo apt-get install protobuf-compiler libeigen3-dev libopencv-dev -y

4、编译PX4固件

mv PX4-Autopilot PX4_Firmware  #先进行改名,方便使用
cd PX4_Firmware
make px4_sitl_default gazebo

如果编译成功则会出现

Image

然后退出gazebo,修改 ~/.bashrc,在文件的末尾加入以下代码, 如下的配置参考自PX4论坛,如图所示

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

然后再

source ~/.bashrc

3.2 测试PX4是否成功安装

首先启动QGC地面站,然后启动测试结点

roslaunch px4 mavros_posix_sitl.launch

如果在终端输入

commander takeoff # 起飞
commander land    # 降落

无人机将会起飞和降落,如下图所示

Image

如果出现这种情况

Image

这个错误表明ROS无法找到名为"gazebo_ros"的资源包。使用下面语句安装ros-noetic-gazebo-ros-pkgs

sudo apt-get install ros-noetic-gazebo-ros-pkgs  # noetic
sudo apt-get install ros-melodic-gazebo-ros-pkgs # melodic
sudo apt-get install ros-kinetic-gazebo-ros-pkgs # kinetic

然后再次使用

roslaunch px4 mavros_posix_sitl.launch

即可成功启动

注意如果我们没有deactivate anaconda的虚拟环境,那么在启动中会报如下的错误,并且无法加载无人机模型

Image

正确启动是不会报错的,并且会出现无人机的模型,如下所示

4. 手动添加gazebo模型

手动添加gazebo模型文件,手动下载这个model.zip文件,提取码是hola

将该附件解压缩后放在~/.gazebo中,按住ctrl+h可以显示隐藏文件夹,此时在~/.gazebo/models/路径下可以看到很多模型。如果不做这一步,之后运行Gazebo仿真,可能会缺模型,这时会自动下载,Gazebo模型服务器在国外,自动下载会比较久。

在已经安装好Ubuntu 20.04ROS Noetic的前提下,如果我们是安装的是ros-noetic-desktop-full版本,那么就已经帮我安装好了gazebo11,我们首先查看我们自带的gazebo版本,在终端中输入

gazebo --version

便可以查看gazebo的版本, 如下

sjh@R9000X:~$ gazebo --version
Gazebo multi-robot simulator, version 11.13.0
Copyright (C) 2012 Open Source Robotics Foundation.
Released under the Apache 2 License.

5. 配置Mavros

mavros的配置参考于Mavros官网配置教程

5.1 安装Mavros(源码安装方法)不推荐

1、首先创建工作空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin init
wstool init src

如果报错wstool not found,则需要先安装

sudo apt-get install python-catkin-tools python-rosinstall-generator -y

如果是第一次使用wstool,则还需要

wstool init ~/catkin_ws/src

2、下载mavros源码

rosinstall_generator --rosdistro kinetic mavlink | tee /tmp/mavros.rosinstall
# We use the Kinetic reference for all ROS distros as it's not distro-specific and up to date
rosinstall_generator --upstream mavros | tee -a /tmp/mavros.rosinstall

这里使用了kinetic版本来指代了所有ros的版本,无需我们自己指定,然后进入工作空间开始构建

wstool merge -t src /tmp/mavros.rosinstall
wstool update -t src -j4
rosdep install --from-paths src --ignore-src -y

3、安装剩余依赖

./src/mavros/mavros/scripts/install_geographiclib_datasets.sh

4、编译

cd ~/catkin_ws
catkin build

如果出现下列信息则表明编译成功,我这里不是首次编译,所以编译很快,首次编译会比较慢。

Image

成功之后打开.bashrc文件,在其中写入

# >>> Mavros pkg initialize >>>
source ~/catkin_ws/devel/setup.bash
# <<< Mavros pkg initialize <<<

注意,这个一定要放置在PX4之前,如下图所示

Image

5.2 安装Mavros(二进制安装方法)推荐

直接运行以下指令即可,参考自XTDrone教程

sudo apt install ros-melodic-mavros ros-melodic-mavros-extras
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

5.3 测试mavros

在终端输入

roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"

来测试mavros是否安装成功,如果没有报错,那说明安装成功。如下所示

Image

6. 测试mavros与sitl通信

接下来我们测试MAVROSSITL通信是否正常,先打开QGC地面站,然后输入

roslaunch px4 mavros_posix_sitl.launch
rostopic echo /mavros/state

如果出现了connected: True,则表明通信成功,如下所示。

Image

如果在终端输入

commander takeoff # 起飞
commander land    # 降落

无人机将会起飞和降落,并且mavros显示信息会发生变化。


Reference

  • Ubuntu安装教程
  • ROS安装教程
  • Gazebo安装教程
  • QGC安装教程
  • PX4官网配置教程
  • Mavros官网配置教程

相关文章:

【PX4】Ubuntu20.04+ROS Noetic 配置PX4-v1.12.2和Gazebo11联合仿真环境【教程】

【PX4】Ubuntu20.04ROS Noetic 配置PX4-v-v1.12.2和Gazebo11联合仿真环境【教程】 文章目录 【PX4】Ubuntu20.04ROS Noetic 配置PX4-v-v1.12.2和Gazebo11联合仿真环境【教程】0. 安装UbuntuROS1. 安装依赖2. 安装QGC地面站3. 配置PX4-v1.12.23.1 安装PX43.2 测试PX4是否成功安装…...

msvcp120.dll丢失怎么办?(五种方法快速解决)

首先&#xff0c;让我们来了解一下msvcp120.dll这个文件。msvcp120.dll是一个动态链接库文件&#xff0c;它是Microsoft Visual C 2012 Redistributable Package的一部分。这个文件的作用是支持一些应用程序的运行&#xff0c;例如游戏、办公软件等。当我们在使用这些软件时&am…...

eslint写jsx报错

eslint写jsx报错 ChatGPT提示 在写JSX时&#xff0c;ESLint可能会报出一些语法错误&#xff0c;这些错误通常是由于ESLint默认配置中不支持JSX语法导致的。为了解决这些错误&#xff0c;我们需要在ESLint配置文件中启用对JSX语法的支持。 首先&#xff0c;需要安装eslint-pl…...

最新适合小白前端 Javascript 高级常见知识点详细教程(每周更新中)

1. window.onload 窗口或者页面的加载事件&#xff0c;当文档内容完全加载完成会触发的事件&#xff08;包括图形&#xff0c;JS脚本&#xff0c;CSS文件&#xff09;&#xff0c;就会调用处理的函数。 <button>点击</button> <script> btn document.q…...

积分值和面积、对称性

积分的基本含义要从积分符号说起&#xff0c;积分号含有加号的意思&#xff0c; ∫ a b f ( x ) d x \int ^b_af(x)dx ∫ab​f(x)dx可以理解为&#xff1a;区间[a,b]无限细分为无穷多个dx,无穷多个f(x)乘以dx的累积和。根据上面的描述&#xff0c;面积可以理解为 ∫ a b ∣ f (…...

springboot 整合es

Spring Boot可以轻松地与Elasticsearch进行整合&#xff0c;以实现高效的搜索和分析功能。 以下是如何在Spring Boot应用程序中使用Elasticsearch的步骤&#xff1a; 1.添加依赖项 在pom.xml文件中添加以下依赖项&#xff1a; <dependency><groupId>org.spring…...

MyBatisPlus使用自定义JsonTypeHandler实现自动转化JSON

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…...

LeetCode 2097. 合法重新排列数对【欧拉通路,DFS】2650

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

学习笔记-接口测试(postman、jmeter)

目录 一、什么是接口测试 二、前端和后端 三、get请求和post请求的区别 四、cookie和session 五、接口测试的依据 六、HTTP状态码 七、通用接口用例 八、postman接口测试 九、Jmeter接口测试 一、什么是接口测试 通常做的接口测试指的是系统对外的接口&#xff0c;比…...

如何高效批量查询快递单号,提高工作效率?

在日常生活中&#xff0c;快递单号的查询是一项常规任务。过去&#xff0c;这项任务需要通过人工一个一个地在快递平台上查询&#xff0c;既耗时又费力。然而&#xff0c;随着科技的发展&#xff0c;我们有了更多的工具可以帮助我们高效地完成这项任务。本文将介绍如何使用固乔…...

12万汉语源流词典汉字记性ACCESS\EXCEL数据库

《12万汉语源流词典汉字记性ACCESS数据库》在继承前人经验的基础上&#xff0c;注意吸收今人的研究成果&#xff0c;注重形音义的密切配合&#xff0c;尽可能历史地、正确地反映汉字形音义的发展。在字形方面&#xff0c;简要说明其结构的演变。语义解释遵循古今语义的发展变化…...

深度解剖数据在队列的应用

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大一&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 望小伙伴们点赞&#x1f44d;收藏✨加关注哟&#x1f495;&#x1…...

IMX6ULL移植篇-Linux内核源码目录分析二

一. Linux内核源码目录 本文继续来具体说明 Linux内核源码的一些重要文件含义。 本文续上一篇文章&#xff0c;地址如下&#xff1a; IMX6ULL移植篇-Linux内核源码目录分析一_凌肖战的博客-CSDN博客 二. Linux内核源码目录分析 9. init 目录 此目录存放 Linux 内核启动的…...

汽车行业数据治理方案,助力车企研产供销数据一体化

随着数字技术的不断革新和应用&#xff0c;汽车行业已转向大数据、新技术寻求生产力突破&#xff0c;以电动化、网联化、智能化、共享化为标志的“汽车新四化”&#xff0c;为汽车行业带来了翻天覆地的变化。如何抓住“新四化”的机会&#xff0c;在汽车产业变革中赢得先机&…...

canvas-绘图库fabric.js简介

一般情况下简单的绘制&#xff0c;其实canvas原生方法也可以满足&#xff0c;比如画个线&#xff0c;绘制个圆形、正方形、加个文案。 let canvas document.getElementById(canvas);canvas.width 1200;canvas.height 600;canvas.style.width 1200px;canvas.style.height 6…...

代码审计——任意文件下载详解(二)

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 网站可能提供文件查看或下载的功能&#xff0c;如果对用户查看或下载的文件不做限制&#xff0c;就能够查看或下载任意的文件&…...

19异常的学习笔记

异常 很重要&#xff0c;有利于我们平时处理问题 异常就是代表程序出现了问题 常见的异常比如说 数组越界除法除0 异常的体系是什么 java.lang.Throwable Error Exception RuntimeException 其他异常 Error 代表的是系统级别的错误&#xff0c;也就是一旦系统出现问题&…...

Jenkins学习笔记4

配置构建流程&#xff1a; Jenkins任务创建&#xff1a; 1&#xff09;创建新任务&#xff1a; 把这个Accept first connection改成 No Validation。问题得到解决。 构建触发器这块暂时没有需要配置的。 传输文件到nginx-server这个web服务器中。 将文件上传到/usr/share/n…...

自学 Java 需要具备哪些基本条件或技能?

新手初学者在自己学习Java时&#xff0c;需要注意两个方面&#xff0c;一个是学习方面&#xff0c;一个是知识点方面&#xff01; 学习方面&#xff1a; 1、做学习计划并保持自律 在我们学习Java的过程中&#xff0c;尽量减少干扰&#xff0c;把自己的全部注意力集中在Java上…...

[激光原理与应用-68]:如何消除50Hz工频干扰和差分信号应对工频干扰

目录 一、什么工频干扰 1.1 什么工频干扰 1.2 工频干扰的幅度 1.3 工频干扰如何进入设备 1.4 工频干扰的负面影响 二、如何消除工频干扰 2.1 要消除工频干扰&#xff0c;可以考虑以下方法&#xff1a; 2.2 要具体消除工频干扰&#xff0c;可以采取以下措施 2.3 使用差…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...