Ubuntu搭建PX4无人机仿真环境(5) —— 仿真环境搭建(以Ubuntu 22.04,ROS2 Humble,Micro XRCE-DDS Agent为例)

Ubuntu搭建PX4无人机仿真环境(5) —— 仿真环境搭建(以Ubuntu 22.04,ROS2 Humble,Micro XRCE-DDS Agent为例)

目录

前言

本教程基于 ROS2 ,在搭建之前,需要把 ROS2、QGC 等基础环境安装配置完成。但是这块的资料相比较于 ROS1 下的少很多,不利于快速上手和后期开发,小白慎选!

小白必看:👇👇👇👇👇👇👇
本次安装是以 px4 v1.14.0 为例,不适用之前的 px4 版本。
我的配置如下:
虚拟机 Ubuntu 22.04 (运行内存 4G、硬盘内存 80G) 、ROS2 HumbleQGC禁止无脑复制:首先大部分命令都有先后顺序,就是要上一个命令执行成下一个才能执行成功,对于不熟悉的命令可以直接复制问AI 这样还能顺带学习学习;其次在有些情况下多个命令一起执行会出现奇怪的错误,而且有些命令旁边有注释,有时候复制上去可能也会出现错误。建议使用虚拟机:虽然虚拟机得性能有限,但是对于新手入门阶段是完全够用了,后续大型仿真再用双系统也比较熟悉了。而且虚拟机有一个快照功能,可以保存当前虚拟机的状态 (相当于存档),这样如果后面出了问题要重新搭建环境,可以用快照回到上一个状态,这样就不用重头开始(我一般是安装好 ROS 拍一个、安装好 mavros 拍一个…)。关于网络:由于一些懂得都得的原因,再加上每个人的网络环境不同,我们下载 GitHub上的资源、安装 Python 包、apt 安装包等会时快时慢,所以大家会换源,比如一开始的换 apt 软件安装源等。但是下载资源一定要耐心,如果是网络问题,可以尝试多执行几次命令,而且有些我也给了相应的解决方案。

基于 ROS2 的 PX4 仿真环境搭建系列: 👇👇👇
建议安装之前可以先看看这个 👉 ubuntu搭建PX4无人机仿真环境(1) —— 概念介绍

Ubuntu安装ROS(2) —— 安装ROS2 humble(最新、超详细图文教程,包含配置rosdep)-ZEEKLOG博客

ubuntu搭建PX4无人机仿真环境(1) —— 概念介绍_Tfly__的博客-ZEEKLOG博客

ubuntu搭建PX4无人机仿真环境(3) —— ubuntu安装QGC地面站_Tfly__的博客-ZEEKLOG博客

ROS1 请看 👇👇👇

ubuntu搭建PX4无人机仿真环境(4) —— 仿真环境搭建、基于ROS1-ZEEKLOG博客

如果想要自己编译 PX4 固件可以看 Ubuntu编译PX4固件 这篇教程

1. 准备

1.1 下载 PX4 源码

方式一:

从 Github 上下载,但是比较考验个人网速

sudoaptinstallgit

下载并切换版本:

git clone https://github.com/PX4/PX4-Autopilot.git # 下载源码mv PX4-Autopilot PX4_Firmware # 更改目录名cd PX4_Firmware git checkout v1.14.0 # 切换版本

更新子模块:

git submodule update --init --recursive # 更新下载子模块

方式二:

从提供的网盘里下载,或者从QQ群(961297255)里下载

链接: https://pan.baidu.com/s/1MJWtK8XkLsdzvJKrpCMz6Q
提取码: rbrk

下载后解压,然后执行下面命令:

cd PX4_Firmware wget https://gitee.com/tyx6/mytools/raw/main/px4/set_executable.sh chmod +x set_executable.sh ./set_executable.sh 

1.2 安装仿真依赖

sudoaptinstall ros-dev-tools cd ~/PX4_Firmware/Tools/setup 
修改文件并备份 (就把 pip 安装源换成了清华源),这一步是可做可不做,如果觉得python 包下载太慢了,可以试试
chmod +x ubuntu.sh ./ubuntu.sh --no-nuttx --no-sim-tools # 这是官方提供的脚本 有两个可选参数# --no-sim-tools 不安装仿真环境# --no-nuttx 不安装交叉编译环境#(如果需要自己编译飞控固件,烧录到飞控中,那就需要交叉编译环境)# 脚本执行时间,跟个人网络有关,可能需要一段时间

安装完成后,重启 Ubuntu

1.3 安装 Gazebo

Gazebo是一款强大的3D仿真软件,主要用于机器人学的研究和开发。它提供了高度逼真的物理模拟环境,包括动力学、碰撞检测、传感器模型以及与真实世界相似的物理属性如重力、摩擦力等。Gazebo可以模拟各种类型的机器人,从移动机器人、无人机到机械臂,甚至可以模拟整个城市环境。

在这里插入图片描述


根据上图说明,Gazebo 官方做了更新将之前的 Gazebo Ignition 命名为 Gazebo,以前的 Gazebo 现在叫 Gazebo Classic ,而 Ubuntu 22.04 及以后的版本就支持 Gazebo (Gazebo Ignition) 。
因为几年前官方对 Gazebo 进行了重大架构变更,然后将变更后的版本叫 Gazebo Ignition,旧的仍叫 Gazebo。后面Gazebo Ignition 逐渐成熟并经过使用验证,所以他结束了旧的 Gazebo ( Gazebo 11 是 Gazebo Classic 的最后一个版本,支持到 2025 年 ),并重新对它们命了名。而且两个应该不能共存,安装一个会卸载另一个。

cd ~/PX4_Firmware/Tools/setup ./ubuntu.sh --no-nuttx # 这一步会安装仿真环境依赖,包括 gazebo# 脚本执行时间,跟个人网络有关

再运行一下 gazebo

gz sim 
在这里插入图片描述

成功后再重启 Ubuntu

2. 安装 Micro XRCE-DDS Agent

在这里插入图片描述

在 ROS2 中 PX4 使用 uXRCE-DDS 中间件来允许在配套计算机上发布和订阅 uORB 消息,就像它们是 ROS2 话题一样。这提供了 PX4 和 ROS2 之间快速可靠的集成,并使 ROS2 应用程序更容易获取车辆信息和发送命令,如上图所示。(来自官方文档说明)

这应该跟 ROS2 将中间件改为 DDS 有关,但是官方又说明了在 ROS2 中仍可以使用 MAVROS ,可能官方觉得在 ROS2 中 Micro XRCE-DDS Agent 更好用 😂,也可能是因为 MAVLink 是外部通信协议,uORB 是内部通信协议。

注:如果想用 Mavros 请参考这篇文章 👉 ubuntu搭建PX4无人机仿真环境(2) —— MAVROS安装(适用于ROS1、ROS2)-ZEEKLOG博客
使用方法跟 ROS1 类似,这里不做描述。

Micro XRCE-DDS Agent 与 MAVROS 的对比(来自豆包AI,仅供参考)
MAVROS 是 ROS(机器人操作系统)生态中连接 MAVLink 协议设备(如 PX4、ArduPilot 飞控)的主流工具,本质是 ROS 与 MAVLink 的桥梁。二者的核心差异体现在如下方面:

维度Micro XRCE-DDS AgentMAVROS
核心定位资源受限设备与 DDS 分布式网络的通信代理,支持多设备协同ROS 与 MAVLink 设备(如飞控)的通信桥梁,专注无人机控制
生态兼容性兼容 DDS 生态(如 Fast DDS、Cyclone DDS),可与非 ROS 系统集成强依赖 ROS 生态,仅支持 ROS 节点与 MAVLink 设备交互
资源占用客户端(Client)极轻量(适合 MCU 等嵌入式设备),Agent 本身资源消耗中等依赖 ROS 节点和进程,资源占用较高(不适合极简嵌入式环境)
灵活性支持自定义数据类型,可灵活扩展消息结构,适应复杂分布式场景消息类型固定为 MAVLink 标准消息,扩展需修改协议或自定义消息
实时性原生支持实时性配置(通过 DDS QoS),适合低延迟场景实时性依赖 ROS 调度,默认配置下实时性中等
适用场景无人机集群协同、多传感器分布式融合、跨平台设备互联单无人机与 ROS 系统的通信(如地面站控制、数据日志、任务规划)
优点1. 分布式架构,支持多设备协同; 2. 轻量级客户端适合嵌入式; 3. 可自定义消息,灵活性高; 4. 强实时性与 QoS 保障1. 无缝集成 ROS 生态,开发便捷; 2. 成熟稳定,支持 MAVLink 全功能(控制、参数、日志等); 3. 社区活跃,问题易解决
缺点1. 学习成本高(需理解 DDS 概念),目前资料相比于mavros少很多; 2. 与 ROS 集成需额外适配; 3. 对单设备简单通信场景略显复杂1. 依赖 ROS,非 ROS 环境下使用不便,但非ROS环境也有其他基于mavlink的库可以使用; 2. 分布式多设备协同能力弱; 3. 资源占用较高,不适合极简嵌入式
  • 下载源码:
git clone -b v2.4.2 https://github.com/eProsima/Micro-XRCE-DDS-Agent.git 
  • 编译:
cd Micro-XRCE-DDS-Agent mkdir build cd build cmake ..make# make 的时候还会额外下载代码,跟个人网速有有关,大概要10-20分钟
在这里插入图片描述


如果出现如下图错误:

在这里插入图片描述


build 目录下执行下面命令,改完后再重新 make:

sed -i 's/checkout 2\.12\.x --/checkout v2.12.1 --/' ./fastdds/tmp/fastdds-gitclone.cmake 

也可以用文本编辑器打开fastdds-gitclone.cmake 文件,将 2.12.x 改为 v2.12.1 就行。

  • 安装:
sudomakeinstallsudo ldconfig /usr/local/lib/ # 更新动态链接器的缓存
在这里插入图片描述

3. 编译 PX4

cd ~/PX4_Firmware make px4_sitl gz_x500 # 这步可能有点慢

出现这个表示编译成功 😄

在这里插入图片描述


错误 1️⃣:如果在虚拟机中可能遇到下面错误,这是由于在虚拟机设置中开启了 3D 图形加速,导致系统的 OpenGL 版本降低。

在这里插入图片描述

参考这个 Issue 中的解决方法,降低仿真使用的渲染引擎的版本

打开文件,修改处大概在 73 行:

gedit ~/PX4_Firmware/ROMFS/px4fmu_common/init.d-posix/px4-rc.simulator 

修改前:

if[ -z "${HEADLESS}"];then# HEADLESS not set, starting gui${gz_command}${gz_sub_command} -g &fi

修改后:

if[ -z "${HEADLESS}"];then# HEADLESS not set, starting gui${gz_command}${gz_sub_command} -g --render-engine ogre &fi

错误 2️⃣:如果编译过程中出现类似下面错误,应该是 gz_bridge 启动超时

INFO [gz_bridge] world: default, model name: x500_0, simulation model: x500 ERROR [gz_bridge] Service call timed out ERROR [gz_bridge] Task start failed (-1) ERROR [init] gz_bridge failed to start ERROR [px4] Startup script returned with return value: 256

参考下面链接中给出的解决方法 👇
make px4_sitl gz_x500出错 - 哔哩哔哩

然后,再重新编译

4. 通信测试

打开一个终端,启动 MicroXRCEAgent:

MicroXRCEAgent udp4 -p 8888

打开另一个终端,启动仿真:

cd ~/PX4_Firmware make px4_sitl gz_x500 

都启动后,可以看到通信成功

在这里插入图片描述

5. 官方 offboard 程序

  • 创建工作空间:
mkdir -p ~/ros2_ws/src 
  • 下载源码:
cd ~/ros2_ws/src # 1.14git clone https://github.com/PX4/px4_msgs.git -b release/1.14 git clone https://github.com/PX4/px4_ros_com.git -b release/v1.14 # 1.15# git clone https://github.com/PX4/px4_msgs.git -b release/1.15# git clone https://github.com/PX4/px4_ros_com.git -b release/1.15
  • 编译:
cd ~/ros2_ws colcon build 
在这里插入图片描述
  • 更新环境:
echo"source ~/ros2_ws/install/setup.bash">> ~/.bashrc source ~/.bashrc #使环境生效

6. offboard 测试

先启动 QGC,然后执行下面命令

  • 终端一,启动 MicroXRCEAgent:
MicroXRCEAgent udp4 -p 8888
  • 终端二,启动仿真:
cd ~/PX4_Firmware make px4_sitl gz_x500 
  • 终端三,启动官方 offboard 案例(上升5米):
ros2 run px4_ros_com offboard_control 
在这里插入图片描述
注:如果过了一段时间,无人机无法 offboard 起飞,程序都正常启动,这时可以尝试下面命令

然后重新编译

编译成功后,记得 source 一下,再重新offboard测试

到这 PX4 无人机基本仿真环境就搭建完成了,大家可以基于此来拓展自己的仿真。
建了个交流群QQ群(961297255),方便大家交流学习,但是关于 ROS2 下的 PX4 仿真资料不多
😁

参考

ROS 2 用户指南 | PX4 Guide (main)
PX4 ROS 2 User Guide v1.14
PX4 documentation
uXRCE-DDS
Ubuntu Development Environment
a-new-era-for-gazebo

如有其他问题,或者发现文章有错误,请在评论区留言
Keep learning!

Read more

NWPU VHR-10数据集 无人机遥感目标检测数据集 飞机 储罐 棒球场 网球场篮球场 港口车辆桥梁检测 遥感图像中的地理空间目标检测

NWPU VHR-10数据集 无人机遥感目标检测数据集 飞机 储罐 棒球场 网球场篮球场 港口车辆桥梁检测 遥感图像中的地理空间目标检测

NWPU VHR-10数据集 遥感数据集 NWPU VHR-10数据集是 10个类别地理空间目标检测的挑战性数据集,共650张图片。 YOLO和COCO格式 数据集按默认划分比例:390张训练集、130张验证集、130张测试集。 手动标注了757架飞机、302艘船只、655个储罐、390个棒球场、524个网球场、159个篮球场、163个田径场、224个港口、124座桥梁和598辆车辆。 📊 一、数据集总体信息 项目描述数据集名称NWPU VHR-10(Northwestern Polytechnical University Very High Resolution 10-class Dataset)任务类型遥感图像中的地理空间目标检测(Object Detection in Remote Sensing Images)图像总数650 张(均为高分辨率遥感图像,源自 Google Earth 等平台)图像分辨率约 600×600

Clawdbot整合Qwen3:32B的低代码工作流:拖拽式Agent编排与条件分支

Clawdbot整合Qwen3:32B的低代码工作流:拖拽式Agent编排与条件分支 1. 为什么需要这个工作流:从“写代码”到“搭积木” 你有没有遇到过这样的情况:想让大模型帮自己自动处理一批客户咨询,但每次都要改Python脚本、调API参数、写if-else逻辑,改完还要测试、部署、查日志?或者想让AI根据用户提问类型自动走不同流程——比如问价格走报价分支,问售后走工单分支,问教程走知识库分支——可一想到要写状态机、维护路由表、处理异常跳转,就直接放弃了? Clawdbot + Qwen3:32B 的这套低代码工作流,就是为解决这类问题而生的。它不让你写一行后端逻辑,也不要求你懂FastAPI或LangChain内部机制。你只需要在界面上拖拽几个模块,连几条线,设几个判断条件,就能把一个320亿参数的大模型变成真正能干活的智能体(Agent)。 这不是概念演示,而是已经跑在生产环境里的真实配置:Qwen3:32B 模型私有部署在本地服务器,通过 Ollama 统一提供 API;Clawdbot 作为前端编排层,不碰模型推理,只负责“

一、FPGA到底是什么???(一篇文章让你明明白白)

一句话概括 FPGA(现场可编程门阵列) 是一块可以通过编程来“变成”特定功能数字电路的芯片。它不像CPU或GPU那样有固定的硬件结构,而是可以根据你的需求,被配置成处理器、通信接口、控制器,甚至是整个片上系统。 一个生动的比喻:乐高积木 vs. 成品玩具 * CPU(中央处理器):就像一个工厂里生产好的玩具机器人。它的功能是固定的,你只能通过软件(比如按不同的按钮)来指挥它做预设好的动作(走路、跳舞),但你无法改变它的机械结构。 * ASIC(专用集成电路):就像一个为某个特定任务(比如只会翻跟头)而专门设计和铸造的金属模型。性能极好,成本低(量产时),但一旦制造出来,功能就永远无法改变。 * FPGA:就像一盒万能乐高积木。它提供了大量基本的逻辑单元(逻辑门、触发器)、连线和接口模块。你可以通过“编程”(相当于按照图纸搭建乐高)将这些基本模块连接起来,构建出你想要的任何数字系统——可以今天搭成一个CPU,明天拆了重新搭成一个音乐播放器。 “现场可编程”

AI绘画电商产品提示词撰写指南

AI绘画电商产品提示词撰写指南

在电商领域,利用 AI 绘画生成产品图片正逐渐成为提升商品视觉吸引力、提高运营效率的重要手段。而撰写精准有效的提示词,是让 AI 理解并生成符合预期产品图片的关键。 一、明确产品关键信息 产品基础描述 产品类型与用途:清晰界定产品所属类别,无论是服装、电子产品、家居用品还是美妆产品等,这是 AI理解产品的基础。同时,简要说明产品的核心用途或目标受众,可分为3层结构(按优先级排序) * 基础层:明确产品核心属性(避免 AI 生成偏差),包括「产品类别 + 规格 + 材质 / 工艺」,例: “女士夏季短袖连衣裙(长度到膝盖),雪纺面料,蕾丝领口” * 场景层:搭建使用场景(增强代入感),包括「使用环境 + 搭配元素 + 人群画像」,例: “在海边沙滩场景,搭配草编帽和珍珠凉鞋,适合 25-35