ROS+Gazebo+PX4仿真步骤

2023-05-16

本文参考链接:[入门教程] PX4-Gazebo仿真 - 知乎 (zhihu.com)

1、参照上一个帖子 手把手教你如何安装ROS+Gazebo+PX4开发环境(ubuntu18.04 + Melodic)完成开发环境的安装。

2、了解PX4包含哪些仿真工具

仿真首先分为软件在环仿真(SITL)和硬件在环仿真(HITL)。软件在环仿真一共是有jMAVSim、Gazebo、AirSim这三种。jMAVSim是一个轻量级的仿真器,目前只支持四旋翼仿真。AirSim我不太清楚,没有使用过,这里就不评价了。Gazebo是我们今天的主角,支持旋翼、固定翼、倾转、小车等,是所有仿真器里支持平台最多的,也能支持多个无人机的仿真。

如果用到px4_command及mavros包来进行offboard模式的测试,推荐使用Gazebo仿真。比如在机载电脑中修改了一些控制逻辑,打开Gazebo仿真,同时运行mavros及相应节点,将仿真的无人机切换至offboard模式,在Gazebo中测试修改的代码是否正确,十分好用!

3、PX4是如何进行仿真的

Flight stack代表飞控即PX4,Simulator代表仿真器(如Gazebo)。所有仿真器与PX4的通讯都是通过MAVLink消息来进行的,SITL使用simulator模块中的simulator_mavlink.cpp来处理这些消息,而HITL是使用mavlink模块中的mavlink_receiver.cpp来处理这些消息。梳理一下这里的消息流向:

PX4到仿真器。PX4给仿真器只会发送一个HIL_ACTUATOR_CONTROLS的MAVLink消息,熟悉PX4的应该知道这个对应的uORB消息是actuator_outputs.msg,也就是姿态控制器最后的输出控制量。这里也就意味着,混控是在仿真器中进行的,仿真器中也包含电机的模型。

仿真器到PX4。仿真器的作用就是模拟真实飞行,即模拟计算出真实飞行时的传感器状态,包括GPS,IMU等,将这些信息发送给飞控后,再由飞控中的估计模块计算出飞机状态量。

外部到PX4。这里的外部就比如地面站QGC(可以外接遥控器),Mavros,Dronecode SDK等,这里也就可以模拟我们平时控制飞机的方式。

端口号:
PX4是使用UDP来进行这些消息通讯的。单个飞机仿真时,默认的UDP设置如下:

  • UDP端口 14540 用于offboard模式的通讯。is used for communication with offboard APIs. Offboard APIs are expected to listen for connections on this port.
  • UDP端口 14550 用地面站的通讯。
  • TCP端口 4560 用于与仿真器的通讯。 PX4 listens to this port, and simulators are expected to initiate the communication by broadcasting data to this port.

如果不涉及多个飞机的仿真,端口号默认都是设置好的,不需要修改及配置。如果是多个飞机的仿真,则需要配置每个飞机的端口号,不能重复,后续会详细介绍配置。

上述介绍适用所有的仿真器。

4、Gazebo仿真

环境搭建我这里基本就是照搬+翻译PX4的开发手册了,如有疑惑,请留言或移步手册。还是和以前的看法一致,千万不要百度,里面的解答大部分都是带着你走歪路。

首先,你要成功搭建PX4固件开发环境,你要能成功编译PX4代码。(这一步都没成功,那就先搞好这一步)如果你在搭建PX4环境时,没有顺带装一下Gazebo,可能需要单独安装(打开终端输入gazebo可以检测你的电脑是否安装gazebo)。

下面的内容我将分成非ROS下的Gazebo仿真和ROS下的Gazebo仿真。个人是推荐后者的,如果你不使用ROS,也没必要上Gazebo仿真了。

可以发现,在PX4固件中有一个文件夹Firmware/Tools这里面就是包含了jMAVSim、Gazebo仿真等一系列代码。而Gazebo仿真对应的文件夹是sitl_gazebo,这其实是一个子库,即sitl_gazebo这个git仓库。

大致看看这个文件夹里都有些什么内容。

  • src文件夹。这里是核心代码,即plugin(插件)代码。比如gps、imu、电机的插件,简单说如何模拟产生gps信号,就是这里的代码负责的。Gazebo自身也会提供一些默认插件,或者第三方也会提供插件,比如你要新增一个传感器,就可以找到相应的插件。
  • models文件夹。存放各种Gazebo模型文件。
  • worlds文件夹。存放Gazebo的世界环境文件。

个人认为涉及到Gazebo仿真二次开发就是如上三个文件夹(如果你只是使用Gazebo仿真工具,这里你什么都不需要修改,因为已经完全搭建好了),分别对应修改模型、修改模型参数、修改世界。

5、ROS下的Gazebo仿真

除了上述的教程,在PX4开发手册中,还有一个属于Gazebo仿真的教程:ROS with Gazebo Simulation。这就是指导大家如何在ROS环境下,联合Mavros功能包进行仿真调试。我的固件按照这个教程一步一步走下来,没有任何问题。(PX4项目太大,各个部件分散,也不是商业项目,坑还是多~)

对于ROS、Mavros、Offboard模式还不清楚的小伙伴,先去补补相关概念,这里就不多做介绍了。

注意:第一步和第二步只需要做一次,设置成功后,每次直接执行第三步。但如果修改了PX4固件,那你需要重新执行第一步。

第一步:编译

cd PX4-Autopilot
make px4_sitl_default gazebo

第二步:source。了解ros功能包应该知道这一步是为了让系统知道有这个功能包存在,相当于设置环境变量,这样终端执行的时候就不会报找不到功能包的错误。

source Tools/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd):$(pwd)/Tools/sitl_gazebo

推荐大家手动source,打开终端输入gedit .bashrc。在弹出的txt文件最后一行,加入上述内容。值得注意的是,$(pwd)是要替换成对应的目录路径(PX4固件所在目录),我的路径是 /home/cgd/PX4-Autopilot(cgd是我的电脑名字,PX4-Autopilot是我存放固件的文件夹名字)。于是我的修改内容如下:

source /home/cgd/PX4-Autopilot/Tools/setup_gazebo.bash /home/cgd/PX4-Autopilot /home/cgd/PX4-Autopilot/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/cgd/PX4-Autopilot:/home/cgd/PX4-Autopilot/Tools/sitl_gazebo

每次打开新终端,如下图所示,这是正确的。

第三步:运行Gazebo仿真

roslaunch px4 posix_sitl.launch

因为会运行Gazebo,第一次启动会比较慢,耐心等待。启动成功后,会看到Gazebo中有一个iris无人机。这时你可以打开QGC地面站,地面站会默认连接这台飞机,你可以尝试利用地面站发送起飞指令测试。

ubuntu版QGC下载地址:Download and Install · QGroundControl User Guide

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
chmod +x ./QGroundControl.AppImage
./QGroundControl.AppImage

这个启动脚本位于Firmware/launch文件夹中,同时在此文件夹中,你还能看到其他类似的启动脚本。这里建议大家单独启动Mavros,而不是用它提供的另一个启动脚本同时启动(因为一个终端显示太多东西的话,报错你都看不到)。

 

第四步:运行Mavros

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

此处我建议Mavros功能包使用二进制安装,比较省事。可以看到这里启动mavros时配置了一些端口参数(端口匹配才能成功连接),后续我会在PX4仿真模块中找到与之对应的参数配置。

尝试读取飞空的IMU数据,打开终端,输入

rostopic echo /mavros/imu/data

当然,除去imu消息,还有很多其他消息,可以使用下面指令查看都有哪些消息。

rostopic list

6、多机Gazebo仿真

在单个飞机仿真没问题之后,才能执行这一步。

roslaunch px4 multi_uav_mavros_sitl.launch

这是官方提供的多机仿真启动脚本,只提供了两架飞机,现在给出如何增加一台飞机的方法。

  • 在启动脚本中 multi_uav_mavros_sitl.launch增加 UAV3
    • 复制一个组 (UAV1 or UAV2)
    • 将 ID 这个参数设置为 3
    • mavlink_udp_port 这个参数选择一个新的端口号,用于与Gazebo通信。
    • 修改fcu_url 这个参数,用于与mavros通信。
  • 创建一个新的rcS启动文件:

    • 从启动文件中复制一个 (iris_1 or iris_2),并重命名为 iris_3。
    • MAV_SYS_ID 修改为 3;
    • SITL_UDP_PRT 值要与位于启动脚本中 mavlink_udp_port 参数匹配;
    • 第一个 mavlink start 端口号要与 mavlink stream 端口号一致,用于与QGC通信。
    • 第二个 mavlink start 端口号要与启动脚本中 fcu_url 参数一致。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS+Gazebo+PX4仿真步骤 的相关文章

  • 【硬核】 ROS Navigation 局部路径规划常见算法

    简介 最近 作者参加了关于RMUS 高校 SimReal挑战赛 首次接触到了机器人导航领域 这里记录一下这段时间的收货 sim2real的全称是simulation to reality 是强化学习的一个分支 同时也属于transfer l
  • gazebo通过sdf搭建仿真环境和机器人Husky

    具体格式要求可参考 http sdformat org spec ver 1 6 elem sdf
  • 无人飞行器智能感知竞赛--模拟器安装

    开发环境 win11 wsl2 注意事项 请配合视频使用 如果不看视频会对下面的配置过程迷惑 因为一开始我是想安装在ubuntu18 04的 中途发现ubuntu18 04没有ros noetic 所以转入ubuntu20 04配置 视频链
  • Moveit简单使用,在rviz中实现手动拖动-记录

    GAZEBO下载 一 首先需要准备模型文件 可以是自己的solidworks用URDF工具导出的 也可以是在网上下载的URDF文件包 1 我用的是solidworks手动导出的模型 b站博主导出SOLIDWORKS模型至URDF这个教程比较
  • ROS学习(1)——ROS1和ROS2的区别

    因为机器人是一个系统工程 它包括了机械臂结构 电子电路 驱动程序 通信框架 组装集成 调试和各种感知决策算法等方面 任何一个人甚至是一个公司都不可能完成机器人系统的研发工作 但是我们又希望自己能造出一个机器人跑一跑 验证一下自己的算法 所以
  • Ubuntu下vscode配置ROS环境

    摘要 最近准备放弃用clion开发ROS使用更主流的vscode 整理一下在ubuntu18 04下的VSCode安装和ROS环境配置流程 安装 方法一 软件商店安装 个人还是推荐使用ubuntu软件下载vscode 简单不容易出错 方法二
  • ModuleNotFoundError: No module named ‘rosbag‘

    1 ModuleNotFoundError No module named rosbag File opt ros kinetic lib python2 7 dist packages roslib launcher py line 42
  • ROS 第四天 ROS中的关键组件

    1 Launch文件 通过XML文件实现多节点的配置和启动 可自动启动ROS Master
  • 程序“catkin_init_workspace”尚未安装。 您可以使用以下命令安装: sudo apt install catkin

    程序 catkin init workspace 尚未安装 您可以使用以下命令安装 sudo apt install catkin 问题如图 先贴上解决后的效果 运行环境 ubuntu 16 04 ros版本 kinetic 问题解释 这个
  • 【ROS】usb_cam相机标定

    1 唠叨两句 当我们要用相机做测量用途时 就需要做相机标定了 不然得到的计算结果会有很大误差 标定的内容包括三部分 内参 外参还有畸变参数 所以标定的过程就是要求得上面这些参数 以前弄这个事估计挺麻烦 需要做实验和计算才能得到 现在通过ro
  • ROS1 ROS2学习

    ROS1 ROS2学习 安装 ROS ROS1 ROS2 命令行界面 ROS2 功能包相关指令 ROS 命令行工具 ROS1 CLI工具 ROS2 CLI工具 ROS 通信核心概念 节点 Node 节点相关的CLI 话题 Topic 编写发
  • 如何将从 rospy.Subscriber 数据获得的数据输入到变量中?

    我写了一个示例订阅者 我想将从 rospy Subscriber 获得的数据提供给另一个变量 以便稍后在程序中使用它进行处理 目前 我可以看到订阅者正在运行 因为当我使用 rospy loginfo 函数时 我可以看到打印的订阅值 虽然我不
  • 可视化点云

    我在找到的视差图像上有来自 gpu reprojectImageTo3D 的 3D 点 我现在想显示这个点云 如何将找到的点云转换为OpenCV to sensor msgs PointCloud2 我不需要发布点云 这仅用于调试可视化 是
  • 从 pcl::PointCloud 中删除点

    我是 PCL 新手 我正在使用 PCL 库 并且正在寻找一种从点云中提取点或将特定点复制到新点的方法 我想验证每个点是否符合条件 并且我想获得仅包含优点的点云 谢谢 使用 ExtractIndices 类 将要删除的点添加到 PointIn
  • 不使用ros编译roscpp(使用g++)

    我正在尝试在不使用ROS其余部分的情况下编译roscpp 我只需要订阅一个节点 但该节点拥有使用旧版本ROS的节点 并且由于编译问题 我无法将我的程序与他的程序集成 我从git下载了源代码 https github com ros ros
  • 错误状态:平台不允许不安全的 HTTP:http://0.0.0.0:9090

    我正在尝试从我的 flutter 应用程序连接到 ws local host 9090 使用 rosbridge 运行 的 Ros WebSocket 服务 但我在 Flutter 中收到以下错误 错误状态 平台不允许不安全的 HTTP h
  • Caught exception in launch(see debug for traceback)

    Caught exception in launch see debug for traceback Caught exception when trying to load file of format xml Caught except
  • 可以在catkin工作区之外创建ROS节点吗?

    我想在catkin工作区之外创建一个ROS发布者节点 可以创建吗 当然可以 像对待任何其他 cpp 库或 python 包一样对待 ROS 在Python中你必须保留PYTHONPATH环境变量指向ros包 opt ros kinetic
  • Exception sending a multicast message:Network is unreachable故障

    出现这个故障就是没有连接到网络 如果虚拟机没有连接到本机 那么就会出现这个情况 当虚拟机连接到本机就会自动消失 同时如果是用电脑直接安装Ubuntu运行也会出现这个情况 应该是要连接到一个路由器里面这个情况才会消失
  • 如何在Windows上安装机器人操作系统ROSJava?

    ROS 的文档很糟糕 一个很大的讽刺是 ROS 的 Groovy 和 ROSJava 版本的创建是为了让 Windows 等平台上的开发人员能够利用出色的机器人 SDK 而所有安装说明仍然面向 Linux ubuntu 用户 The ROS

随机推荐

  • C/C++中局部变量static用法实例

    1 普通局部变量存储于进程栈空间 xff0c 使用完毕会立即释放 xff0c 静态局部变量使用static修饰符定义 xff0c 即使在声明时未赋初值 xff0c 编译器也会把它初始化为0 xff0c 并且静态局部变量存储于进程的全局数据区
  • 嵌入式C语言经典面试题(一)

    1 用预处理指令 define 声明一个常数 xff0c 用以表明1年中有多少秒 xff08 忽略闰年问题 xff09 define SECONDS PER YEAR 60 60 24 365 UL 我在这想看到几件事情 xff1a 1 d
  • 更新Ubuntu内核到最新版本

    想起自己多年前玩Linux的时候知道了两个命令 xff1a sudo apt get update sudo apt get upgrade 以为是能够更新所有软件的 xff0c 后来发现 系统还是不能够更新的 那么 xff0c 系统应该如
  • RK3308 按键Key与LED灯

    硬件原理图 LED指示灯 麦克风阵列子板上使用12颗RGB灯作为效果指示灯 用户可以通过I2C总线配置LED灯驱动IC来是实现不同场景下的灯效 按键Key 麦克风阵列子板上集成五个控制按键 xff0c 分别为 xff1a 控制音量增减的VO
  • if选择结构

    if单选择结构 if双选择结构 if多选择结构 span class token keyword if span span class token punctuation span score span class token operat
  • Windows10下Eclipse+Python环境配置与新项目创建

    最近心血来潮 xff0c 突然想学一下python xff0c 按理说应该不用Eclipse xff0c 但是一想以后还可能会用Java xff0c 那还是装这个 xff0c 然后配置一下环境吧 xff0c 其中也有很多坑 xff0c 希望
  • 理解地址空间和逻辑地址生成

    1 1 地址空间 物理地址 xff1a 硬件 例如内存条 所支持地址空间 xff0c 地址空间的管理由硬件完成 逻辑地址 虚拟地址 xff1a 运行地址所看到的地址空间 xff0c 地址空间是一维的 xff0c 应用程序更加容易访问和管理
  • QT DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x800c000d ()

    使用QT播放音频的时候出现如下错误 DirectShowPlayerService doSetUrlSource Unresolved error code 0x800c000d 原因是url错误
  • 3种蓝牙架构实现方案(蓝牙协议栈方案)

    导言 不同的蓝牙架构可以用在不同的场景中 从而协议帧的架构方案也会不同 转载自 xff1a https www cnblogs com schips p 12293141 html 三种蓝牙架构实现方案 xff08 蓝牙协议栈方案 xff0
  • 驱动遍历句柄表

    xfeff xfeff 驱动遍历句柄表附加第二个方法的反汇编代码 其中还有对其拦截的方式的一些需要HOOK处比如伪造句柄表 因为大量使用硬编码所以此份代码通用性不强一切均在虚拟机XP3下操作 include 34 ntddk h 34 ty
  • Javascript案例:猜数字游戏

    要求 程序随机生成一个1 10之间的数字 xff0c 并让用户输入一个数字 如果大于该数字 xff0c 就提示 xff0c 数字大了 xff0c 继续猜如果小于该数字 xff0c 就提示 xff0c 数字小了 xff0c 继续猜如果等于该数
  • 操作系统之进程 (五) --- 进程、进程实体、PCB...

    文章目录 进程什么叫进程什么叫进程实体进程与进程实体的关系PCB的存储信息与分类 进程的组织方式链接方式索引方式 进程的特征总结感谢 进程 什么叫进程 进程和程序差不多 xff0c 他们有所联系也有所区别 我们以我们熟悉的程序入手 xff0
  • 如何让树莓派默认启动进入图形界面

    设置Raspbian图形启动 当你第一次安装Raspbian系统时 xff0c 确实有一些选项需要你来配置 xff0c 由于匆忙 xff0c 我没有注意到这些 xff0c 只是快速完成屏幕上的选项 如果你遇到了和我一样的情况 xff0c 最
  • ROS与stm32通信

    0 概述 ros和stm32等嵌入式单片机的最大区别在于ros主要用于处理slam 机器视觉 人工智能这种对于算力要求高 xff0c 算法复杂的问题 xff1b 而stm32和arduino等主要用来处理一些边缘事件 xff0c 比如亮个L
  • 硬件仪器的使用

    示波器的使用 用于红外捕捉 xff0c 一开始可以把探头扣在探头补偿的位置 xff0c 显示出一个正常的方波信号5V 1KHz 按下CH1的菜单 xff0c 能够弹出右边的选项 xff0c 注意设置为直流和10X电压 按下触发处的Menu菜
  • pytorch显存越来越多的一个潜在原因-- 这个函数还没有在torch.cuda.Tensor中定义

    最近在用pytorch跑实验 xff0c 有如下操作需要用到 xff08 pytorch版本为0 3 1 xff09 class SpatialFilter nn Module def init self mode 61 True sf r
  • KPI异常检测【一】- 时间序列分解算法

    目录 1 相关概念 2 常见的时间序列 3 时间序列分解 3 1 方法介绍 3 2 经典方法 3 3 Holt Winter 指数平滑 3 4 STL分解 4 异常准则 5 异常检测算法 1 相关概念 1 1 异常 时序异常检测通常形式化为
  • KPI异常检测【三】- 机器学习算法

    目录 1 相关概念 1 1 异常类型 1 2 检测方法 2 点异常检测算法 2 1 基于统计 2 2 基于相似度 2 2 1 基于距离 2 2 2 基于密度 2 2 3 基于聚类 2 2 4 基于树 2 3 基于谱 spectral 3 上
  • 手把手教你如何安装ROS+Gazebo+PX4开发环境(ubuntu18.04 + Melodic)

    参考PX4官网 xff0c 做如下总结 xff1a 1 安装 Ubuntu 43 ROS 步骤省略 xff0c 提前配置好梯子 xff0c 很多安装问题都是网络原因引起的 2 下载并安装PX4源码 git clone https githu
  • ROS+Gazebo+PX4仿真步骤

    本文参考链接 xff1a 入门教程 PX4 Gazebo仿真 知乎 zhihu com 1 参照上一个帖子 手把手教你如何安装ROS 43 Gazebo 43 PX4开发环境 xff08 ubuntu18 04 43 Melodic xff