ROS+PX4+Gazebo仿真环境配置全流程解析

上一期文章介绍了我们即将发布的仿真平台,并提到后续需要在Ubuntu系统上进行PX4软件在环仿真。本期文章将为大家详细介绍如何配置Ubuntu环境以及安装ROS和PX4仿真环境。具体配置包括:Ubuntu 20.04 + ROS Noetic + PX4 + Python3

需要注意的是,PX4版本迭代较快,新旧版本在默认参数配置上可能稍有出入。若非特殊需求,建议不要安装过旧的版本;此外,PX4+ROS的仿真环境实际上PX4只是作为一个工作空间,因此即使版本不符合要求,也仅需要重新下载编译,并更新环境变量,一般不会对整个ROS环境造成影响。

仿真平台搭建过程主要有三个步骤:

  1. 安装Ubuntu20.04;
  2. 安装ROS Noetic;
  3. 安装PX4环境。

1. Ubuntu安装

Ubuntu安装教程网上较多,此处不再详细叙述。下面简单介绍u盘安装Ubuntu的过程,该方法需要一台用于镜像烧录的电脑和制作启动盘的u盘。双系统和虚拟机安装过程类似可以自行寻找教程。具体步骤如下:

  1. 制作u盘启动盘。在Ubuntu官网下载Ubuntu20.04镜像文件,用rufus或者ultraISO等工具写入u盘中。(注意:此举会覆盖掉u盘中的内容并且修改u盘分区,使其不可用于文件拷贝,请确保u盘中没有重要文件;在系统安装完成后,可以使用diskgenius等工具修复u盘。)
  2. Ubuntu安装。u盘插入待安装系统的电脑,启动进入bios,选择从u盘启动,开始安装。(注意:真机和虚拟机的安装过程相同,因此可以参考这篇博客的安装过程。)
  3. 添加中文支持。部分教程会提供终端改为中文的教程。个人建议终端保持原样,这样在出现报错信息时便于搜索。
  4. 建议使用英文系统,文件夹路径不会有中文,避免一些潜在的bash路径问题。
  5. 如果安装双系统后,开机出现启动引导问题,无法启动Ubuntu系统或Windows系统,可以使用boot-repair工具。使用u盘启动盘,bios进入u盘的Ubuntu系统,下载boot-repair软件(需要联网)。下载方式参考此链接:https://help.ubuntu.com/community/Boot-Repair。
    打开boot-repair后,选择recommended repair即可,系统会自动为你创建Windows+Ubuntu的引导方式。进入bios可以修改启动顺序。

2. ROS Noetic安装

Ubuntu20.04对应的ros版本为ROS Noetic。强烈建议安装前先实现终端走代理,可解决大部分网络问题。

1.换源。由于官方源在国外,用官方源安装软件可能网速较慢,因此可以换用国内的镜像源。若已经实现终端代理,可直接使用官方源跳过此步。

2.更新源

sudo apt update
sudo apt upgrade

3.设置ros源:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

4.设置密钥:

curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

若提示没有安装curl,先安装:

sudo apt install curl

5.ros安装。ros提供 ros-noetic-desktop-fullros-noetic-desktopros-noetic-ros-base三种不同版本,其中ros-noetic-desktop-full包含附件最全,除非设备储存空间十分有限,否则建议安装此版本。安装命令

sudo apt update
sudo apt install ros-noetic-desktop-full

6.设置环境变量。在home目录下,按ctrl+h显示出隐藏文件,在.bashrc文件末尾添加如下一行指令。

source /opt/ros/noetic/setup.bash

这步是为了将ros的相关命令地址写入.bashrc文件,以便在终端调用ros相关指令。

7.rosdep安装。

sudo apt install python3-rosdep
sudo rosdep init
sudo rosdep update

在执行后两句是即使代理配置完成也有相当概率无法完成,此时可以使用国内大佬写的工具rosdepc,也可以通过手动更改文件实现。

8.测试。安装完成后,可进行简单测试:打开三个终端,分别输入以下指令并运行。

roscore 
rosrun turtlesim turtlesim_node 
rosrun turtlesim turtle_teleop_key

上述第一个命令是打开一个roscore,roscore用于统一协调管理所有ros话题、节点和服务,是ros运行的基础;第二个命令是打开海龟仿真界面,第三个命令用于打开键盘控制终端。

3 PX4安装

px4的安装有:px4下载编译、mavros安装、qground安装三步。其中px4是飞控代码,基于px4搭建的仿真环境即是用了其提供的软在环仿真功能;mavros是有mavlink封装而来的ros功能包,飞控的控制一般是采用mavlink协议,通过mavros我们可以直接利用ros提供的话题、服务等对与飞控进行通信;qground是地面站平台,直接与px4进行通信(无需通过ros),地面站可现实无人机状态、设置飞控参数、控制无人机飞行,还提供模拟摇杆功能,我们主要利用地面站进行无人机状态监视。

3.1 PX4+Gazebo

1.第一步中,px4并不一定需要安装在用户目录下,可根据个人习惯安装在指定路径。

cd 安装目录
git clone https://github.com/PX4/PX4-Autopilot.git --recursive

如果要使用其他版本的px4,例如1.13.0版本,则使用以下命令:

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

2.进入安装目录,下载安装相关组件

cd PX4-Autopilot/
git submodule update --init --recursive

3.执行.sh脚本

bash ./PX4-Autopilot/Tools/setup/ubuntu.sh

4.期间可能出错,需要更新一下pip和Pillow

python3 -m pip install --upgrade pip
python3 -m pip install --upgrade Pillow

如果有其他安装错误,可以尝试使用:

bash ./PX4-Autopilot/Tools/setup/ubuntu.sh --fix-missing

5.最后进入PX4-Autopilot目录下编译启动gazebo中的模型

make px4_sitl_default gazebo

在终端输入commander takeoff,可以控制无人机起飞;在终端输入commander land,可以控制无人机降落。

6.编译完成后,在home文件的.bashrc中添加环境变量,“安装目录”为你的PX4-Autopilot文件夹所在目录:

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

这里需要注意,不同版本的gazebo模型目录可能会不一致,如果使用旧版本,需要自行对照正确的路径。如果无法确定路径位置,可以找自己对应版本的px4 user guide。user guider的Drone Apps&APIs→ROS with MAVROS→ROS/MAVROS with Gazebo Simulation的文章中,有详细介绍对应的路径位置。

3.2 MAVROS

1.安装MAVROS

sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras

2.安装 GeographicLib 数据集

sudo /opt/ros/noetic/lib/mavros/install_geographiclib_datasets.sh

3.3 安装QGC

安装QGC地面站,参考官方网站即可。

3.4 仿真

通过以下命令可以开启px4软件在环仿真,打开qgc地面站会自动连接上飞机。

roslaunch px4 mavros_posix_sitl.launch

能看到gazebo中无人机模型,qgc地面站连接上无人机。在终端中输入commander takeoff, commander land可以控制无人机起飞和降落。

4 显卡驱动安装

这一步并非必须,只是为了提高gazebo运行流畅度,不影响仿真环境的正常使用,但是推荐安装显卡驱动。显卡驱动安装可以参考此篇教程。显卡驱动安装流程参考。推荐使用方法2,采用Ubuntu自带的驱动管理程序来安装显卡驱动。

笔者曾采用上述链接中的方法1进行安装后,开机黑屏,屏幕左上方光标闪烁。该问题是选用驱动不合理导致的。可以重启进入ubuntu的恢复模式,选择root选项,在命令行中删除nvidia显卡驱动

sudo apt --purge remove nvidia*

然后重新尝试安装其他版本的驱动程序。

5 总结

本文详细介绍了如何在 Ubuntu 20.04 系统上搭建 ROS Noetic + PX4 仿真环境,涵盖了从系统安装到仿真软件配置的全过程。通过本文的步骤,希望大家可以顺利完成环境搭建,如果出现一些安装问题,欢迎大家与我交流探讨。

END
后续会陆续带来规划、控制相关的文章、仿真分享。

迅翼SwiftWing致力于固定翼技术共享,汇聚固定翼领域技术极客,推动固定翼技术持续创新!

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

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

相关文章

【操作系统】为什么需要架构裁剪?

为什么需要架构裁剪? 原因 减小核心大小提高架构初始化速度降低内存占用提高系统性能移除不需要的功能,增加安全性 裁剪方法 初始化配置设置功能模块化移除不需要的驱动底层 一般裁剪对象(以操作系统为例) 文件系统的支持网…

鸿蒙app封装 axios post请求失败问题

这个问题是我的一个疏忽大意,在这里记录一下。如果有相同问题的朋友,可以借鉴。 当我 ohpm install ohos/axios 后,进行简单post请求验证,可以请求成功。 然后,我对axios 进行了封装。对axios 添加请求拦截器/添加响…

基础入门-APP应用微信小程序原生态开发H5+Vue技术WEB封装打包反编译抓包点

知识点: 1、基础入门-APP应用-开发架构安全问题 2、基础入门-小程序应用-开发架构安全问题 通用: 1、反编译-得到源码-源码提取资产(泄漏的配置信息)-安全测试 2、抓包-资产-安全测试 一、演示案例-移动App-开发架构-原生&H…

Elasticsearch:使用 Open Crawler 和 semantic text 进行语义搜索

作者:来自 Elastic Jeff Vestal 了解如何使用开放爬虫与 semantic text 字段结合来轻松抓取网站并使其可进行语义搜索。 Elastic Open Crawler 演练 我们在这里要做什么? Elastic Open Crawler 是 Elastic 托管爬虫的后继者。 Semantic text 是 Elasti…

Qt之自定义标题栏拓展(十)

Qt开发 系列文章 - user-defined-titlebars(十) 目录 前言 一、方式一 1.效果演示 2.创建标题栏类 3.可视化UI设计 4.定义相关函数 5.使用标题栏类 二、方式二 1.效果演示 2.创建标题栏类 3.定义相关函数 4.使用标题栏类 总结 前言 Qt自带…

vue3前端组件库的搭建与发布(一)

前言: 最近在做公司项目中,有这么一件事情,很是头疼,就是同一套代码,不同项目,要改相同bug,改好多遍,改的都想吐,于是就想做一个组件库,这样更新一下就全都可…

学技术学英文:代码中的锁:悲观锁和乐观锁

本文导读: 1. 举例说明加锁的场景: 多线程并发情况下有资源竞争的时候,如果不加锁,会出现数据错误,举例说明: 业务需求:账户余额>取款金额,才能取钱。 时间线 两人共有账户 …

django中cookie与session的使用

一、cookie cookie由服务器生成 ,存储在浏览器中的键值对数据,具有不安全性,对应敏感数据应该加密储存在服务端每个域名的cookie相互独立浏览器访问域名为A的url地址,会把A域名下的cookie一起传递到服务器cookie可以设置过期时间 django中设…

Qt编译MySQL数据库驱动

目录 Qt编译MySQL数据库驱动 测试程序 Qt编译MySQL数据库驱动 (1)先找到MySQL安装路径以及Qt安装路径 C:\Program Files\MySQL\MySQL Server 8.0 D:\qt\5.12.12 (2)在D:\qt\5.12.12\Src\qtbase\src\plugins\sqldrivers\mysql下…

CTFHUB-web(SSRF)

内网访问 点击进入环境,输入 http://127.0.0.1/flag.php 伪协议读取文件 /?urlfile:///var/www/html/flag.php 右击查看页面源代码 端口扫描 1.根据题目提示我们知道端口号在8000-9000之间,使用bp抓包并进行爆破 POST请求 点击环境,访问flag.php 查看页…

游戏引擎学习第43天

仓库 https://gitee.com/mrxiao_com/2d_game 介绍运动方程 今天我们将更进一步,探索运动方程,了解真实世界中的物理,并调整它们,以创建一种让玩家感觉愉悦的控制体验。这并不是在做一个完美的物理模拟,而是找到最有趣…

微服务中间件~nacos安全配置(含参考案例)

Nacos 是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台。为了确保 Nacos 的安全性,可以从以下几个方面入手: 1、启用身份验证: 在 application.properties 文件中启用身份验证功能:properties nacos.core.auth.enable…

【Leetcode 每日一题 - 扩展】45. 跳跃游戏 II

问题背景 给定一个长度为 n n n 的 0 0 0 索引 整数数组 n u m s nums nums。初始位置为 n u m s [ 0 ] nums[0] nums[0]。 每个元素 n u m s [ i ] nums[i] nums[i] 表示从索引 i i i 向前跳转的最大长度。换句话说,如果你在 n u m s [ i ] nums[i] nums[i…

UIP协议栈 TCP通信客户端 服务端,UDP单播 广播通信 example

文章目录 1. TCP通信 客户端(关键配置)2. TCP 服务端配置3. UDP 点播通信4. UDP 广播通信5. UIP_UDP_APPCALL 里边的处理example6. TCP数据处理 ,UIP_APPCALL调用的函数 UIP_APPCALL TCP的数据都在这个宏定义的函数里进行数据处理的 UDP 数据…

uniapp跨端适配—条件编译

在uniapp中,跨端适配是通过条件编译实现的。条件编译允许开发者根据不同的平台(如iOS、Android、微信小程序、百度小程序等)编写不同的代码。这样可以确保每个平台上的应用都能得到最优的性能和用户体验。 以下是uniapp中条件编译的基本语法…

YashanDB共享集群产品能力观测:细节足见功底

本文基于前泽塔数科研发总监-王若楠2024年11月在“2024年国产数据库创新生态大会”-“根”技术专场的演讲整理形成,主要对崖山共享集群YAC的架构、功能、高可用性、性能四大方面进行全面测试,并分享了测试环境和测试结论。 年初,基于某些商业…

VMware ubuntu16.04怎么设置静态IP联网

1.将VMware桥接到当前电脑使用的网络上面; 2.点击网络符号,编辑连接; 3.双击有线连接1; 4.选择IPv4设置,将地址,子网掩码,网关,DNS服务器设置好,保存; 5.在终…

用github镜像加速, --recursive还是去github站怎么处理?

小伙伴们大多碰到过github抽风的情况,时通时断,时快时慢,非常考验心情。 以前碰到连不上的时候,我大多就是在gitee和gitcode网站找一下镜像,找到后直接git clone 新地址即可。但是碰到 --recursive的时候就不行了&…

ElasticSearch的自动补全功能(拼音分词器、自定义分词器、DSL实现自动补全查询、RestAPI实现自动补全查询)

文章目录 1. 什么是自动补全2. 拼音分词器2.1 初识拼音分词器2.2 下载拼音分词器2.3 安装拼音分词器2.4 测试拼音分词器 3. 自定义分词器3.1 拼音分词器存在的问题3.2 分词器(analyzer)的组成3.3 如何自定义分词器3.4 拼音分词器的可选参数3.5 配置自定义…

Windows环境 (Ubuntu 24.04.1 LTS ) 国内镜像,用apt-get命令安装RabbitMQ,java代码样例

一、环境 Windows11 WSL(Ubuntu 24.04.1) 二、思路 1 用Windows中的Ubuntu安装RabbitMQ,贴近Linux的线上环境; 2 RabbitMQ用erlang语言编写的,先安装erlang的运行环境; 2 用Linux的apt-get命令安装,解决软件依赖…