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

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

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

文章目录

  • 【ROS】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
    • 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,在文件的末尾加入以下代码,注意路径匹配,前两个source顺序不能颠倒。

# >>> PX4 initialize >>>
source ~/PX4_Firmware/Tools/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/sitl_gazebo
# <<< 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

5.2 测试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官网配置教程

相关文章:

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

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

Java 代理模式之静态代理与动态代理

1&#xff0c;代理模式 代理模式给某一个对象提供一个代理对象&#xff0c;并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。 代理模式的目的&#xff1a; &#xff08;1&#xff09;通过引入代理对象的方式来间接访问目标对象&#xff0c;防…...

打造基于终端命令行的IDE,Termux配置Vim C++开发环境

Termux配置Vim C开发环境&#xff0c;打造基于终端命令行的IDE 主要利用VimCoc插件&#xff0c;配置C的代码提示等功能。 Termux换源 打开termux&#xff0c;输入termux-change-repo 找到mirrors.tuna.tsinghua.edu.cn&#xff0c;清华源&#xff0c;空格选中&#xff0c;回…...

【初阶C语言】操作符2---表达式求值

前言&#xff1a;本节重点介绍操作符的使用&#xff0c;如&#xff0c;优先级高低、类型转换等 一、逻辑操作符 前言&#xff1a;逻辑操作符包括逻辑与&#xff08;&&&#xff09;和逻辑或&#xff08;||&#xff09;&#xff0c;操作对象&#xff1a;两个 1.逻辑与&…...

代码随想录day50|123. 买卖股票的最佳时机 III188. 买卖股票的最佳时机 IV

123. 买卖股票的最佳时机 III class Solution:def maxProfit(self, prices: List[int]) -> int:dp[[0]*5 for _ in range(len(prices))]dp[0][0]0dp[0][1]-prices[0]dp[0][2]0dp[0][3]-prices[0]dp[0][4]0for i in range(1,len(prices)):dp[i][0] dp[i-1][0]dp[i][1] max…...

Word 表格单元格无法垂直居中

Word使用 由于平时也需要用到word编写一些文档&#xff0c;但是咱们就是用的少&#xff0c;很多操作或者技巧不太清楚&#xff0c;很多小问题处理起来反而需要消耗很多时间&#xff0c;所以在这里记录平时遇到的一些问题。 表格无法垂直居中 类似于上图的情况&#xff0c;总之…...

python实现Flask POST Demo

数据处理逻辑 from flask import Flask, requestapp Flask(__name__)app.route(/, methods[POST]) def index():username request.form[username]password request.form[password]if username "Jhon" and password "1":return f"<html>&l…...

3-Pytorch张量的运算、形状改变、自动微分

3-Pytorch张量的运算、形状改变、自动微分 1 导入必备库2 张量的运算3 张量的算数运算4 一个元素的张量可以使用tensor.item()方法转成标量5 torch.from_numpy()和tensor.numpy()6 张量的变形7 张量的自动微分8 使用with torch.no_grad():包含上下文中使其不再跟踪计算9 使用te…...

用户权限数据转换为用户组列表(3/3) - Excel PY公式

最近Excel圈里的大事情就是微软把PY塞进了Excel单元格&#xff0c;可以作为公式使用&#xff0c;轻松用PY做数据分析。系好安全带&#xff0c;老司机带你玩一把。 实例需求&#xff1a;如下是AD用户的列表,每个用户拥有该应用程序的只读或读写权限&#xff0c;现在需要创建新的…...

VS2022+CMAKE+OPENCV+QT+PCL安装及环境搭建

VS2022安装&#xff1a; Visual Studio 2022安装教程&#xff08;千字图文详解&#xff09;&#xff0c;手把手带你安装运行VS2022以及背景图设置_vs安装教程_我不是大叔丶的博客-CSDN博客 CMAKE配置&#xff1a; win11下配置vscodecmake_心儿痒痒的博客-CSDN博客 OPENCV配…...

JavaScript的内置类

一、认识包装类型 1.原始类型的包装类 JavaScript的原始类型并非对象类型&#xff0c;所以从理论上来说&#xff0c;它们是没有办法获取属性或者调用方法的。 但是&#xff0c;在开发中会看到&#xff0c;我们会经常这样操作&#xff1a; var message "hello world&q…...

6.英语的十六种时态(三面旗):主动、被动、肯定、否定、一般疑问句、特殊疑问句。

目录 一、do句型&#xff08;以动词allow举例&#xff09;。 &#xff08;1&#xff09;主动语态表格。 &#xff08;2&#xff09;被动语态表格。 &#xff08;3&#xff09;否定。 二、be句型&#xff08;表格里的时态可以参考&#xff0c;查不到对应的资料&#xff09;…...

SpringBoot连接Redis与Redisson【代码】

系列文章目录 一、SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】 二、SpringBoot连接Redis与Redisson【代码】 三、SpringBoot整合WebSocket【代码】 四、SpringBoot整合ElasticEearch【代码示例】 文章目录 系列文章目录代码下载地地址一、引入依赖二、修改配…...

ardupilot开发 --- MAVSDK 篇

概述 MAVSDK是各种编程语言的库集合&#xff0c;用于与MAVLink系统&#xff08;如无人机、相机或地面系统&#xff09;接口。这些库提供了一个简单的API&#xff0c;用于管理一个或多个车辆&#xff0c;提供对车辆信息和遥测的程序访问&#xff0c;以及对任务、移动和其他操作…...

腾讯云AI超级底座新升级:训练效率提升幅度达到3倍

大模型推动AI进入新纪元&#xff0c;对计算、存储、网络、数据检索及调度容错等方面提出了更高要求。在9月7日举行的2023腾讯全球数字生态大会“AI超级底座专场”上&#xff0c;腾讯云介绍异构计算全新产品矩阵“AI超级底座”及其新能力。 腾讯云副总裁王亚晨在开场致辞中表示&…...

AB测试结果分析

一、假设检验 根据样本&#xff08;小流量&#xff09;的观测结果&#xff0c;拒绝或接受关于总体&#xff08;全部流量&#xff09;的某个假设&#xff0c;称为假设检验。 假设检验的基本依据是小概率事件原理&#xff08;小概率事件几乎不发生&#xff09;&#xff0c;如果…...

Python模块和包:sys模块、os模块和变量函数的使用

文章目录 模块&#xff08;module&#xff09;引入外部模块引入部分内容包 (package)示例代码开箱即用sys模块sys.argvsys.modulessys.pathsys.platformsys.exit() os模块os.environos.system()os模块中的变量、函数和类 测试代码模块中的变量和函数的使用 总结&#xff1a;pyt…...

计算机软件工程毕业设计题目推荐

文章目录 0 简介1 如何选题2 最新软件工程毕设选题3 最后 0 简介 学长搜集分享最新的软件工程业专业毕设选题&#xff0c;难度适中&#xff0c;适合作为毕业设计&#xff0c;大家参考。 学长整理的题目标准&#xff1a; 相对容易工作量达标题目新颖 1 如何选题 最近非常多的…...

嵌入式学习笔记(25)串口通信的基本原理

三根通信线&#xff1a;Tx Rx GND &#xff08;1&#xff09;任何通信都要有信息作为传输载体&#xff0c;或者有线的或则无线的。 &#xff08;2&#xff09;串口通信时有线通信&#xff0c;是通过串口线来通信的。 &#xff08;3&#xff09;串口通信最少需要2根&#xff…...

c++学习第十三

1)循环引用的案例及解决办法: #include <iostream> #include <memory> using namespace std; class A;class B { public:B(){cout<<"B constructor---"<<endl;}~B(){cout<<"B deconstructor----"<<endl;}std::weak_…...

java复习-线程的同步和死锁

线程的同步和死锁 同步问题引出 当多个线程访问同一资源时&#xff0c;会出现不同步问题。比如当票贩子A&#xff08;线程A&#xff09;已经通过了“判断”&#xff0c;但由于网络延迟&#xff0c;暂未修改票数的间隔时间内&#xff0c;票贩子B&#xff08;线程B&#xff09;…...

Qt指示器设置

目录 1. 样式设置 2. 行为设置 3. 交互设置 创建一个进度指示器控件 在Qt中设置指示器&#xff08;Indicator&#xff09;的外观和行为通常需要操作相关部件的属性和样式表。以下是如何在Qt中设置指示器的一些常见方式&#xff1a; 1. 样式设置 你可以使用样式表&#xf…...

计算机网络第四节 数据链路层

一&#xff0c;引入数据链路层的目的 1.目的意义 数据链路层是体系结构中的第二层&#xff1b; 从发送端来讲&#xff0c;物理层可以将数据链路层交付下来的数据&#xff0c;装换成光&#xff0c;电信号发送到传输介质上了 从接收端来讲&#xff0c;物理层能将传输介质的光&…...

Vue.js not detected解决方法

扩展程序》管理扩展程序》详情》允许访问文件地址打开...

Window10安装PHP7.4

1. 下载PHP 7 首先需要下载PHP 7的安装包&#xff0c;可以从PHP官网&#xff08;https://www.php.net/downloads.php&#xff09;或者Windows下的PHP官网&#xff08;http://windows.php.net/download/&#xff09;下载Windows版本的PHP 7安装包。根据自己的系统架构&#xff…...

【C++刷题】二叉树进阶刷题

根据二叉树创建字符串 class Solution { public:/** ()的省略有两种情况* 1.左右都为空&#xff0c;省略* 2.左子树不为空&#xff0c;右子树为空&#xff0c;省略*/string tree2str(TreeNode* root){string s;if(root nullptr){return s;}s to_string(root->val);if(root…...

有效的数独

有效的数独 题目: 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。示例 1&#xff1a; 输…...

Vue导航守卫beforeRouteEnter,beforeRouteUpdate,beforeRouteLeave

Vue导航守卫以我自己的理解就是监听页面进入,修改,和离开的功能。每个守卫接受三个参数 to: Route: 即将要进入的目标路由对象 from: Route: 当前导航正要离开的路由 next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。 next(): 进行…...

小红书《乡村振兴战略下传统村落文化旅游设计》中南大许少辉八一新著

小红书《乡村振兴战略下传统村落文化旅游设计》中南大许少辉八一新著...

Android13 下拉菜单栏中添加快捷截图按钮

Android 13 原生系统下拉状态栏中是没有快捷截图按钮,现在需要添加快捷截图功能。 添加快捷截图功能后的效果图: 涉及修改的文件如下: modified: vendor/mediatek/proprietary/packages/apps/SystemUI/res/values/config.xml modified: vendor/mediatek/proprietary/…...

网站建设需要/app注册拉新平台

通过 route -n命令获取网络信息&#xff0c;再通过C语言解析&#xff0c;获取 代码如下&#xff1a; 44 int main()45 {46 char Cmd[100]{0};47 char readline[100]{0};48 memset( Cmd, 0, sizeof( Cmd ) );49 sprintf( Cmd,"route |grep default|awk \{…...

搭建什么网站最赚钱/hao123主页

欢迎参考 SQL反模式(前言)的数据库设计 此文章只是给自己做一个小抄&#xff0c;如有冒犯&#xff0c;还忘见谅 1. 取整错误 目标&#xff1a; 使用小数取代整数 反模式&#xff1a; 使用 FLOAT 类型 IEEE 754-1985MySQL数据库float数据类型 解决方案&#xff1a; 使用 NUMERI…...

怎样做酒店网站ppt模板/seo推广排名

CentOS搭建Apache&plus;php&plus;MySQL&plus;Redis环境要搭建一个本地linux服务器环境,按照网络教程依葫芦画瓢,噼里啪啦搭好后,发现redis服务怎么也弄不好,不喜欢那种明知有问题却无从下手又无能为力的感觉,碰了无数次壁以后,我决定卸载,重头来过,并尽 ...windows…...

网站做推广需要多少钱/西安seo关键词排名优化

我曾是 Connections 系列节目的一名超级爱好者&#xff0c;这是在《探索频道》(Discovery Channel) 中由 James Burke 主持的节目。其基本假定是&#xff1a;看起来毫不相关的发现是如何影响其他发现&#xff0c;而这些发现最终又为现代生活提供了便利。其寓意是&#xff0c;如…...

b战网站建设策划书/有什么推广的平台

参考解答见: http://www.cnblogs.com/zhangzujin/p/3527416.html 4.1.1 设 $f(x)$ 在 $[0,1]$ 上连续, 且 $f(x)>0$, 求极限 $\vlm{n}\sqrt[n]{f\sex{\f{1}{n}}f\sex{\f{2}{n}}\cdots f\sex{\f{n-1}{n}}f(1)}$. 4.1.2 考虑积分 $\dps{\int_0^1 (1-x)^n\rd x}$, 证明 $$…...

做网站前台需要学什么 后台/东莞seo外包平台

CSS简写就是指将多行的CSS属性声明化成一行&#xff0c;又称为CSS代码优化。CSS简写的最大好处就是能够显着减少CSS文件的大小&#xff0c;其实还有很多其他益处。臃肿而杂乱的CSS样式表会使你遇到问题是难以调试。尤其是当一个团队在进行设计的时候&#xff0c;你的臃肿的CSS代…...