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

news2024/9/27 7:26:22

【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官网配置教程

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

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

相关文章

国泰君安基本操作学习

对于主面板 1.放大或者缩小k线方法&#xff1a;按着ctrl键滚轮 2.切到历史k线&#xff1a;不断缩小k线后&#xff0c;把鼠标放置k线位置再按着ctrl滚轮放到可以切到当时的历史数据。 ★3.上下切换股票&#xff1a;滚轮。 ★4.面板直接输入股票代码后&#xff0c;自动弹出窗…

EasySwipeMenuLayout - 独立的侧滑删除

官网 GitHub - anzaizai/EasySwipeMenuLayout: A sliding menu library not just for recyclerview, but all views. 项目介绍 A sliding menu library not just for recyclerview, but all views. Recommended in conjunction with BaseRecyclerViewAdapterHelper Feature…

LabVIEW开发气动悬浮系统教学平台

LabVIEW开发气动悬浮系统教学平台 目前&#xff0c;通过使用可编程逻辑控制器&#xff0c;几乎可以实现任何工业生产过程的自动化。工业自动化可以提高流程效率&#xff0c;提高生产水平并减少损失。 在此背景下&#xff0c;介绍了工业自动化教育系统的设计和实现以及气动悬浮…

接口自动化中cookies的处理技术

一&#xff0c;理论知识 为什么有cookie和session&#xff1f; 因为http协议是一种无状态的协议&#xff0c;即每次服务端接受到客户端的请求时都时一个全新的请求&#xff0c;服务器并不知道客户端的请求记录&#xff0c;session和cookie主要目的就是弥补http的无状态特性 …

Redis代码实践总结

一、背景&#xff1a; redis从安装到实践&#xff0c;做一些具体的记录。 1.1 Redis和 RedisStack和Redis Enterprise redis简介 Redis 是一种开源&#xff08;BSD 许可&#xff09;内存中数据结构存储&#xff0c;用作数据库、缓存、消息代理和流引擎。 Redis 提供数据结构…

2023/9/20 -- C++/QT

时钟: widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPaintEvent> #include <QDateTime> #include <QLabel> #include <QTimer> #include <QDebug>QT_BEGIN_NAMESPACE namespac…

WebGL层次模型——多节点模型

目录 多节点模型 MultiJointModel中的层次结构 控制各部件旋转角度的变量 示例程序——共用顶点数据&#xff0c;通过模型矩阵缩放实现&#xff08;MultiJointModel.js&#xff09; MultiJointModel.js&#xff08;按键响应部分&#xff09; MultiJointModel.js&#x…

CentOS 7.5 centos failed to load selinux policy 错误解决方法

这是个 selinux 使能导致的&#xff0c; 关闭即可 在进入到内核选中界面&#xff0c;选中要启动的内核&#xff0c; 按键盘 e 就会进入启动参数界面 进入启动参数界面如图&#xff0c;按上下键找到 UTF8 UTF8如图&#xff0c; 添加 selinux0 添加完成如图&#xff0c; 按 ctr…

编译工具:CMake(八) | cmake 常用指令

编译工具&#xff1a;CMake&#xff08;八&#xff09; | cmake 常用指令 基本指令 基本指令 ADD_DEFINITIONS向 C/C编译器添加-D 定义&#xff0c;比如:ADD_DEFINITIONS(-DENABLE_DEBUG-DABC)&#xff0c;参数之间用空格分割。 如果你的代码中定义了#ifdef ENABLE_DEBUG #end…

OpenCV实现“蓝线挑战“特效

原理 算法原理可以分为三个流程&#xff1a; 1、将视频&#xff08;图像&#xff09;从&#xff08;顶->底&#xff09;或&#xff08;左->右&#xff09;逐行&#xff08;列&#xff09;扫描图像。 2、将扫描完成的行&#xff08;列&#xff09;像素重新生成定格图像…

【JAVA-Day31】深入解析冒泡、选择和插入排序在数组排序中的应用

深入解析冒泡、选择和插入排序在数组排序中的应用 深入解析冒泡、选择和插入排序在数组排序中的应用摘要引言冒泡排序&#xff1a;基本原理和应用场景冒泡排序算法的工作原理什么情况下选择冒泡排序冒泡排序的时间复杂度和空间复杂度 选择排序&#xff1a;精确排序策略和最佳实…

chroma 向量库使用;查询、更新与插入

参考: https://docs.trychroma.com/usage-guide https://blog.csdn.net/weixin_46515328/article/details/131855650 chroma 支持保存文档、向量&#xff0c;和向量的ids值 ##安装 pip install chromadb1、使用 import chromadb##这句可以数据库默认时刻保存&#xff0c;启动…

岭回归与LASSO回归:解析两大经典线性回归方法

文章目录 &#x1f34b;引言&#x1f34b;岭回归&#xff08;Ridge Regression&#xff09;&#x1f34b;实战---岭回归&#x1f34b;LASSO回归&#xff08;LASSO Regression&#xff09;&#x1f34b;实战---LASSO回归&#x1f34b;岭回归和LASSO哪个更容易是直线&#x1f34b…

Cannot read properties of null bug解决方法

项目场景&#xff1a; vue3element plusts。 问题描述 本地运行没有任何错误&#xff0c;在生产环境中&#xff0c;当点击按钮&#xff0c;展示el-dialog时第一次正常&#xff0c;关闭时报错 原因分析&#xff1a; 定位到el-dialog组件&#xff0c;最初认为是dialog中table依…

IMAGEBIND: One Embedding Space To Bind Them All论文笔记

论文https://arxiv.org/pdf/2305.05665.pdf代码https://github.com/facebookresearch/ImageBind 1. Motivation 像CLIP这一类的方法只能实现Text-Image这两个模态的 Embedding 对齐&#xff0c;本文提出的ImageBind能够实现六个模态&#xff08;images, text, audio, depth, t…

进阶指针(一)

✨博客主页&#xff1a;小钱编程成长记 &#x1f388;博客专栏&#xff1a;进阶C语言 进阶指针&#xff08;一&#xff09; 0.回顾初阶指针1.字符指针1.1 相关面试题 2.数组指针3.指针数组3.1 数组指针的定义3.2 &数组名VS数组名3.3 数组指针的使用 4.数组传参和指针传参4.…

linux下解决tomcat错误问题

错误一&#xff1a; Linux下Tomcat启动报错&#xff1a;Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 原因&#xff1a;可能是Linux环境变了&#xff0c;需要在catalina.sh文件里指定JDK路径 解决方式&#xff1a; 在/bin/catalina.sh配置文件中加…

基于springboot+vue的爱心助农网站(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

Linux离线安装telnet

TELNET rmp地址 链接: https://pan.baidu.com/s/1Yl3zt1p3zjp2fYTwByf7dQ?pwdgdcg 提取码: gdcg 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 命令 rpm -ivh xinetd-2.3.15-14.el7.x86_64.rpm rpm -ivh telnet-0.17-65.el7_8.x86_64.rpm rpm -ivh telnet-…

autoware.ai docker安装

1.进行docker安装 sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerprint 0EBFCD88sudo add-apt-reposi…