【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
然后进行依赖的安装
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
如果编译成功则会出现
然后退出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 # 降落
无人机将会起飞和降落,如下图所示
如果出现这种情况
这个错误表明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的虚拟环境,那么在启动中会报如下的错误,并且无法加载无人机模型
正确启动是不会报错的,并且会出现无人机的模型,如下所示
4. 手动添加gazebo模型
手动添加gazebo模型文件,手动下载这个model.zip文件,提取码是hola
将该附件解压缩后放在~/.gazebo中,按住ctrl+h可以显示隐藏文件夹,此时在~/.gazebo/models/路径下可以看到很多模型。如果不做这一步,之后运行Gazebo仿真,可能会缺模型,这时会自动下载,Gazebo模型服务器在国外,自动下载会比较久。
在已经安装好Ubuntu 20.04和ROS 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
如果出现下列信息则表明编译成功,我这里不是首次编译,所以编译很快,首次编译会比较慢。
5.2 测试mavros
在终端输入
roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"
来测试mavros是否安装成功,如果没有报错,那说明安装成功。如下所示
6. 测试mavros与sitl通信
接下来我们测试MAVROS与SITL通信是否正常,先打开QGC地面站,然后输入
roslaunch px4 mavros_posix_sitl.launch
rostopic echo /mavros/state
如果出现了connected: True,则表明通信成功,如下所示。
如果在终端输入
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,代理模式 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。 代理模式的目的: (1)通过引入代理对象的方式来间接访问目标对象,防…...
打造基于终端命令行的IDE,Termux配置Vim C++开发环境
Termux配置Vim C开发环境,打造基于终端命令行的IDE 主要利用VimCoc插件,配置C的代码提示等功能。 Termux换源 打开termux,输入termux-change-repo 找到mirrors.tuna.tsinghua.edu.cn,清华源,空格选中,回…...
【初阶C语言】操作符2---表达式求值
前言:本节重点介绍操作符的使用,如,优先级高低、类型转换等 一、逻辑操作符 前言:逻辑操作符包括逻辑与(&&)和逻辑或(||),操作对象:两个 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编写一些文档,但是咱们就是用的少,很多操作或者技巧不太清楚,很多小问题处理起来反而需要消耗很多时间,所以在这里记录平时遇到的一些问题。 表格无法垂直居中 类似于上图的情况,总之…...
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单元格,可以作为公式使用,轻松用PY做数据分析。系好安全带,老司机带你玩一把。 实例需求:如下是AD用户的列表,每个用户拥有该应用程序的只读或读写权限,现在需要创建新的…...
VS2022+CMAKE+OPENCV+QT+PCL安装及环境搭建
VS2022安装: Visual Studio 2022安装教程(千字图文详解),手把手带你安装运行VS2022以及背景图设置_vs安装教程_我不是大叔丶的博客-CSDN博客 CMAKE配置: win11下配置vscodecmake_心儿痒痒的博客-CSDN博客 OPENCV配…...
JavaScript的内置类
一、认识包装类型 1.原始类型的包装类 JavaScript的原始类型并非对象类型,所以从理论上来说,它们是没有办法获取属性或者调用方法的。 但是,在开发中会看到,我们会经常这样操作: var message "hello world&q…...
6.英语的十六种时态(三面旗):主动、被动、肯定、否定、一般疑问句、特殊疑问句。
目录 一、do句型(以动词allow举例)。 (1)主动语态表格。 (2)被动语态表格。 (3)否定。 二、be句型(表格里的时态可以参考,查不到对应的资料)…...
SpringBoot连接Redis与Redisson【代码】
系列文章目录 一、SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】 二、SpringBoot连接Redis与Redisson【代码】 三、SpringBoot整合WebSocket【代码】 四、SpringBoot整合ElasticEearch【代码示例】 文章目录 系列文章目录代码下载地地址一、引入依赖二、修改配…...
ardupilot开发 --- MAVSDK 篇
概述 MAVSDK是各种编程语言的库集合,用于与MAVLink系统(如无人机、相机或地面系统)接口。这些库提供了一个简单的API,用于管理一个或多个车辆,提供对车辆信息和遥测的程序访问,以及对任务、移动和其他操作…...
腾讯云AI超级底座新升级:训练效率提升幅度达到3倍
大模型推动AI进入新纪元,对计算、存储、网络、数据检索及调度容错等方面提出了更高要求。在9月7日举行的2023腾讯全球数字生态大会“AI超级底座专场”上,腾讯云介绍异构计算全新产品矩阵“AI超级底座”及其新能力。 腾讯云副总裁王亚晨在开场致辞中表示&…...
AB测试结果分析
一、假设检验 根据样本(小流量)的观测结果,拒绝或接受关于总体(全部流量)的某个假设,称为假设检验。 假设检验的基本依据是小概率事件原理(小概率事件几乎不发生),如果…...
Python模块和包:sys模块、os模块和变量函数的使用
文章目录 模块(module)引入外部模块引入部分内容包 (package)示例代码开箱即用sys模块sys.argvsys.modulessys.pathsys.platformsys.exit() os模块os.environos.system()os模块中的变量、函数和类 测试代码模块中的变量和函数的使用 总结:pyt…...
计算机软件工程毕业设计题目推荐
文章目录 0 简介1 如何选题2 最新软件工程毕设选题3 最后 0 简介 学长搜集分享最新的软件工程业专业毕设选题,难度适中,适合作为毕业设计,大家参考。 学长整理的题目标准: 相对容易工作量达标题目新颖 1 如何选题 最近非常多的…...
嵌入式学习笔记(25)串口通信的基本原理
三根通信线:Tx Rx GND (1)任何通信都要有信息作为传输载体,或者有线的或则无线的。 (2)串口通信时有线通信,是通过串口线来通信的。 (3)串口通信最少需要2根ÿ…...
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_…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
PydanticAI快速入门示例
参考链接:https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...
