【PX4+QGroundControl+MAVROS+Gazebo】PX4控制在Gazebo中控制自己的无人机

目录

前言

一、PX4、MAVROS、QGroundControl之间的关系

1.1 Gazebo与PX4通信

1.2 PX4与QGroundControl通信

1.3 总结

二、实现过程【以阿木实验室P230为例】

2.1 仿真环境

2.2 模型建立

2.3 建立gazebo和MAVROS之间的连接

2.4 建立MAVROS和PX4之间的连接

2.5 验证实验结果

三、一个失败的地方

总结


前言

笔者在准备用阿木实验室-P230无人机仿真的时候,发现官方给的该无人机仿真的代码依赖于该公司的Prometheus、Prometheus-PX4以及QGroundControl软件。但是笔者日后想把自己的项目上传到Github上,如果把整个阿木实验室的PX4上传上去显得不现实,且也占很大存储。因此,笔者会从小白的角度【因为笔者也是Green Bird】,介绍将自己的无人机连接PX4的办法。以下内容仅供参考,若有误,请指证。


一、PX4、MAVROS、QGroundControl之间的关系

下图展示了PX4是如何在SITL[全称:Software-in-the-loop,软件在环仿真]仿真环境中,通过MAVLink通信协议和QGroundControl之间进行的通信。

1.1 Gazebo与PX4通信

以下内容来自官方文档[笔者翻译]

所有模拟器除了Gazebo都使用MavLink API和PX4进行通信。这个API定义了一系列的消息类型。这些消息类型包括:从模拟世界传输到PX4的数据,并返回各种仿真交通工具在飞行模式下电机和执行器的数据。下面这张图展示了PX4如何与模拟其进行通信:

官方的文档可能会给你产生一种误解,Gazebo并不可以通过MAVROS和PX4进行通信。实际上,文档的意思是:其他的仿真器,如:JVAVSim、Airim等可以直接通过MAVLink进行通信。但是对于Gazebo,由于ROS操作的系统的原因,需要通过ROS插件+MAVLink封装才能和PX4进行通信。

1.2 PX4与QGroundControl通信

           

以上两图均来自PX4官方指南,网址:https://docs.px4.io/main/en/simulation/

系统与系统之间是通过UDP协议进行传输信息的,数据由Mavlink协议进行统一。

PX4的UDP端口14540-14549用于PX4与外部端口或者无人机Offboard进行通信。

PX4的UDP端口14550用于PX4与地面站通信,地面站可以通过外界遥控手柄对无人机进行控制

PX4的TCP端口4560用于与模拟器进行通信。

很显然,PX4可以和QGroundControl进行通信。

1.3 总结

从上述的分析中,可以很容易得出这样的结论:想要通过PX4控制我们自己的无人机(不是官方默认的iris无人机),得依次完成以下步骤:

  1. Gazebo负责加载P230模型
  2. PX4作为SITL程序启动
  3. MAVROS做桥接,即:QGC<---MAVROS--->PX4<---MAVROS+ROS--->Gazebo

二、实现过程【以阿木实验室P230为例】

2.1 仿真环境

Ubuntu版本:20.04

ROS版本:noetic

PX4版本:V1.13【不建议更高版本,因为该版本是gazebo11适配的最高版本】

Gazebo版本:11

2.2 模型建立

从阿木实验室开源的Prometheus下获取P230的模型,若是会Solidworks建图的小伙伴也可以自己画一个无人机,并根据Autopilot下iris模型的sdf文件进行参数的修改,因笔者不会Solidworks,不过多阐述。

Prometheus的github clone地址:

#将普罗米修斯克隆到文件夹下 git clone https://github.com/coolaogege/Prometheus/ #定位到p230无人机 cd ~/Prometheus/Prometheus/Simulator/gazebo_simulator/gazebo_models/uav_models/p230

在文件夹下我们可以看到模型的描述文件(sdf文件)和机械图(STL文件),如下图所示:

将整个文件夹复制到文件夹下:

以上是我自己建立的文件夹,分别放置:

  • config:配置文件夹
  • launch:发布文件夹
  • scripts:脚本文件夹
  • src:代码文件夹
  • world:世界文件夹【放一些模型】

将p230文件统一直接复制到worlds文件夹下,并建立p230.world,代码如下所示:

<?xml version = "1.0" ?> <sdf version ="1.7"> <world name = "p230_world"> <scene> <ambient>1.0 1.0 1.0 1</ambient><!--提高环境亮度,因为没有太阳--> <background>0.9 0.9 0.9 1</background><!--更亮背景颜色--> <shadows>false</shadows><!--关闭阴影取消渲染--> </scene> <!--加载地面--> <include> <uri>model://ground_plane</uri> </include> <!--添加太阳光源--> <include> <uri>model://sun</uri> </include> <!-- 加载P230的c初始化位置--> <!--移除无人机,已经在p230_px4_mavros中引用--> <include> <uri>model://p230</uri> <name>p230_drone</name> <!-- pose表示:x轴 Y轴 Z轴 Roll Pitch Yaw--> <pose>0 0 0.5 0 0 0</pose> <!-- 是否启用阴影 --> <static>false</static> </include> <!--物理引擎设置--> <physics type='ode'> <!--最大仿真步长(单位:秒)数值越小越精细--> <max_step_size>0.001</max_step_size> <!--real_time_factor:实时因子 1.0表示仿真与现实时间同步--> <real_time_factor>1</real_time_factor> <!--实时更新频率 1秒1000次 1000Hz--> <real_time_update_rate>1000</real_time_update_rate> </physics> </world> </sdf>

p.s.因为gazebo默认读取.gazebo文件夹,因此需要将文件再一次备份至/home/<用户名>/models文件夹下。

     (因为.gazebo是隐藏文件,因此需要在home下按快捷键ctrl+H进行取消隐藏文件夹。)

2.3 建立gazebo和MAVROS之间的连接

在launch文件夹下新建p230_gazebo.launch文件,将gazebo和mavros连接:

<launch> <!-- 设置Gazebo模型路径--> <env name="GAZEBO_MODEL_PATH" value="$(env GAZEBO_MODEL_PATH):$(env HOME)/.gazebo/models:$(find qr_landing)/worlds" /> <!--以上qr_landing更换成自己的软件文件夹> <!--以上qr_landing更换成自己的软件文件夹> <!--以上qr_landing更换成自己的软件文件夹> <!-- 启动 PX4(使用你写的脚本) --> <!--qr_landing换成自己的文件夹--> <!--qr_landing换成自己的文件夹--> <!--qr_landing换成自己的文件夹--> <node name="px4_sitl" pkg="qr_landing" type="start_px4.sh" output="screen"/> <!-- 启动Gazebo仿真环境(加载 p230.world) --> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="world_name" value="$(find qr_landing)/worlds/p230/p230.world"/> <arg name="paused" value="false"/> <arg name="use_sim_time" value="true"/> <arg name="gui" value="true"/> <arg name="headless" value="false"/> <arg name="debug" value="false"/> <arg name="verbose" value="true"/> <arg name="respawn_gazebo" value="false"/> </include> <!--qr_landing换成自己的文件夹--> <!--qr_landing换成自己的文件夹--> <!--qr_landing换成自己的文件夹--> <!-- 启动MAVROS --> <include file="$(find mavros)/launch/px4.launch"> <arg name="fcu_url" value="udp://:[email protected]:14557"/> <arg name="gcs_url"/> </include> </launch>

再次强调,一定要把里面的路径换成自己的文件夹。

2.4 建立MAVROS和PX4之间的连接

在Scripts文件夹下建立start_px4.sh脚本,脚本内容如下所示:

#!/bin/bash #将PX4和PX4_SITL放入路径 PX4_DIR=/home/tianhaofly/PX4_Autopilot BUILD_DIR=$PX4_DIR/build/px4_sitl_default #不输出仿真文件 export PX4_SIM_MODEL=none # 运行 PX4 SITL $BUILD_DIR/bin/px4 $PX4_DIR/ROMFS/px4fmu_common -s etc/init.d-posix/rcS

这是V1.13版本的PX4,别的版本路径可能要修改,最重要的是找到启动文件rcS就行了。

2.5 验证实验结果

输入命令行:

catkin_make source devel/setup.bash roslaunch qr_landing p230_sitl.launch

我们就可以看到p230无人机啦!!!

打开QGroundControl就可以控制无人机起飞!!

初学者也可以通过QGC添加手柄,进行无人机飞行的练习,培养自己的兴趣。

三、一个失败的地方

笔者一开始准备直接在PX4-Autopilot导入p230,但是最终没成功。

我看网上很多直接导入,但是make以下文件会直接删除,不知道那些真的成功了没。

我的过程是,在~/PX4_Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models这个文件夹下复制p230

在这个文件夹下复制了p230_airframe:

以及init版本的airframe:

修改了sitl_targets_gazebo-classic.cmake,在model下加上了p230

更新了git:

# 更新主项目的子模块引用 git add Tools/simulation/gazebo-classic/sitl_gazebo-classic git commit -m "Update sitl_gazebo-classic submodule with p230 model"

能够编译,但是build里就是没有复制p230过来,不知道为什么。

若有会的伙伴,也可以告诉我怎么做。


总结

本文基于gazebo、px4以及qgc之间可以通过mavros通信,给出一种可以通过px4在gazebo中控制自己无人机的方法。Control+

Read more

AIGC赋能插画创作:技术解析与代码实战详解

AIGC赋能插画创作:技术解析与代码实战详解

文章目录 * 一、技术架构深度解析 * 二、代码实战:构建AIGC插画生成器 * 1. 环境配置与依赖安装 * 2. 模型加载与文本提示词构建 * 3. 图像生成与参数调优 * 4. 风格迁移与多模型融合 * 三、进阶技巧:参数调优与效果增强 * 四、应用场景代码示例 * 1. 游戏角色设计 * 2. 广告海报生成 * 五、技术挑战与解决方案 * 六、未来趋势:AIGC插画创作生态 * 七、完整项目代码仓库 * 结语:重新定义插画创作边界 * 《一颗柚子的插画语言》 * 内容简介 * 作者简介 * 目录 * 前言 在数字艺术领域,AIGC(AI-Generated Content)技术正以指数级速度革新插画创作范式。下面将通过技术原理剖析与完整代码实现,展示如何从零构建AIGC插画生成系统,涵盖环境搭建、模型调用、参数调优到风格迁移全流程。 一、技术架构深度解析 AIGC插画生成的核心基于扩散模型(

AI编程神器大乱斗:GitHub Copilot、Trae、Cursor谁主沉浮?

AI编程神器大乱斗:GitHub Copilot、Trae、Cursor谁主沉浮?

引言:AI 编程时代的激烈角逐 在数字化浪潮汹涌澎湃的当下,AI 编程工具如璀璨星辰般崛起,正以前所未有的速度重塑软件开发的版图。从初出茅庐的新手开发者,到经验老到的编程大师,都被卷入这场由 AI 驱动的编程变革之中,体验着前所未有的高效与创新。曾经,编写代码是一项极度依赖人工的艰巨任务,开发者们需逐行敲下代码,反复调试,耗费大量时间与精力。而如今,AI 编程工具的横空出世,宛如为开发者们插上了一双翅膀,使得代码编写变得更加轻松、高效。它们不仅能快速生成高质量代码,还能精准定位并修复代码中的错误,成为了开发者不可或缺的得力助手。 在众多令人眼花缭乱的 AI 编程工具中,GitHub Copilot、Trae 和 Cursor 脱颖而出,成为了开发者们关注的焦点。GitHub Copilot,凭借与 GitHub 的深度融合以及强大的代码补全能力,在全球范围内收获了无数开发者的青睐;Trae,依托字节跳动强大的技术实力,为企业级应用开发带来了全新的解决方案;Cursor,则以其独特的对话式交互和强大的代码修改能力,给开发者们带来了焕然一新的编程体验。 那么,

2026最新AI聚合系统(渐进式AIGC系统):nano-banana-2第二代绘画、VEO3/VEO3.1、Sora-2视频生成大模型私有化独立系统+扣子工作流Agent智能体

2026最新AI聚合系统(渐进式AIGC系统):nano-banana-2第二代绘画、VEO3/VEO3.1、Sora-2视频生成大模型私有化独立系统+扣子工作流Agent智能体

SparkAi系统:渐进式AIGC系统,一款基于OpenAi/ChatGPT、GPT-5.2/GPT-5、最新旗舰大模型Claude-opus-4-6、nano-banana-2第二代绘画大模型、Gemini-3.1-pro、DeepSeek、Sora-2、VEO3.1、Agent智能体 扣子(coze)插件、工作流、函数、知识库 等AI大模型能力开发的一站式AI系统;支持「🤖AI聊天」、「🎨专业AI绘画」、「🧠AI智能体」、「🪟Agent应用」、「🎬AI视频生成」等,支持独立私有部署!提供面向个人用户 (ToC)、开发者 (ToD)、企业 (ToB)的全面解决方案。 一、SparkAi系统/官网 最新旗舰大模型Claude-opus-4-6、GPT-5.3-Codex、GPT-5.2、GPT-5-PRO、gpt-image-1.5绘画大模型、超强生图

Diffusion Transformer(DiT)——将扩散过程中的U-Net换成ViT:近频繁用于视频生成与机器人动作预测(含清华Prediction with Action详解)

Diffusion Transformer(DiT)——将扩散过程中的U-Net换成ViT:近频繁用于视频生成与机器人动作预测(含清华Prediction with Action详解)

前言 本文最开始属于此文《视频生成Sora的全面解析:从AI绘画、ViT到ViViT、TECO、DiT、VDT、NaViT等》 但考虑到DiT除了广泛应用于视频生成领域中,在机器人动作预测也被运用的越来越多,加之DiT确实是一个比较大的创新,影响力大,故独立成本文 第一部分 Diffusion Transformer(DiT):将扩散过程中的U-Net 换成ViT 1.1 什么是DiT 1.1.1 DiT:在VAE框架之下扩散去噪中的卷积架构换成Transformer架构 在ViT之前,图像领域基本是CNN的天下,包括扩散过程中的噪声估计器所用的U-net也是卷积架构,但随着ViT的横空出世,人们自然而然开始考虑这个噪声估计器可否用Transformer架构来代替 2022年12月,William Peebles(当时在UC Berkeley,Peebles在𝕏上用昵称Bill,在Linkedin上及论文署名时用大名William)、Saining Xie(当时在纽约大学)的两人通过论文《Scalable Diffusion Models with Trans