Gazebo 与 PX4 无人机仿真

1. Gazebo 是什么

Gazebo 是开源机器人三维仿真平台,用来构建虚拟世界、机器人模型、传感器、物理环境和控制接口。它常用于无人机、移动机器人、机械臂、自动驾驶小车、船舶、室内导航、视觉算法和多机协同测试。

需要注意:现在官方文档中的 Gazebo 通常指新一代 Gazebo,也曾叫 Ignition Gazebo;旧版本叫 Gazebo Classic。PX4 官方说明中,新 Gazebo 是 Ubuntu 22.04 及以后主要支持的版本。

Gazebo 能做的事:

能力 说明
三维场景 平地、墙体、仓库、草地、水域、移动平台、风场等
机器人模型 使用 SDF/URDF 描述机体、连杆、关节、质量、惯量、碰撞体
物理仿真 重力、碰撞、摩擦、关节约束、升力阻力插件、风、接触
传感器仿真 相机、深度相机、激光雷达、IMU、GPS、测距仪
控制接口 与 PX4、ArduPilot、ROS 2、MAVLink、ros_gz_bridge 配合
自动化测试 SITL、HITL、多机、回归测试、算法验证

2. Gazebo 的基本使用流程

#mermaid-svg-6q6UJjslQQsQnVOb{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-6q6UJjslQQsQnVOb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-6q6UJjslQQsQnVOb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-6q6UJjslQQsQnVOb .error-icon{fill:#552222;}#mermaid-svg-6q6UJjslQQsQnVOb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-6q6UJjslQQsQnVOb .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-6q6UJjslQQsQnVOb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-6q6UJjslQQsQnVOb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-6q6UJjslQQsQnVOb .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-6q6UJjslQQsQnVOb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-6q6UJjslQQsQnVOb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-6q6UJjslQQsQnVOb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-6q6UJjslQQsQnVOb .marker.cross{stroke:#333333;}#mermaid-svg-6q6UJjslQQsQnVOb svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-6q6UJjslQQsQnVOb p{margin:0;}#mermaid-svg-6q6UJjslQQsQnVOb .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-6q6UJjslQQsQnVOb .cluster-label text{fill:#333;}#mermaid-svg-6q6UJjslQQsQnVOb .cluster-label span{color:#333;}#mermaid-svg-6q6UJjslQQsQnVOb .cluster-label span p{background-color:transparent;}#mermaid-svg-6q6UJjslQQsQnVOb .label text,#mermaid-svg-6q6UJjslQQsQnVOb span{fill:#333;color:#333;}#mermaid-svg-6q6UJjslQQsQnVOb .node rect,#mermaid-svg-6q6UJjslQQsQnVOb .node circle,#mermaid-svg-6q6UJjslQQsQnVOb .node ellipse,#mermaid-svg-6q6UJjslQQsQnVOb .node polygon,#mermaid-svg-6q6UJjslQQsQnVOb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-6q6UJjslQQsQnVOb .rough-node .label text,#mermaid-svg-6q6UJjslQQsQnVOb .node .label text,#mermaid-svg-6q6UJjslQQsQnVOb .image-shape .label,#mermaid-svg-6q6UJjslQQsQnVOb .icon-shape .label{text-anchor:middle;}#mermaid-svg-6q6UJjslQQsQnVOb .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-6q6UJjslQQsQnVOb .rough-node .label,#mermaid-svg-6q6UJjslQQsQnVOb .node .label,#mermaid-svg-6q6UJjslQQsQnVOb .image-shape .label,#mermaid-svg-6q6UJjslQQsQnVOb .icon-shape .label{text-align:center;}#mermaid-svg-6q6UJjslQQsQnVOb .node.clickable{cursor:pointer;}#mermaid-svg-6q6UJjslQQsQnVOb .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-6q6UJjslQQsQnVOb .arrowheadPath{fill:#333333;}#mermaid-svg-6q6UJjslQQsQnVOb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-6q6UJjslQQsQnVOb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-6q6UJjslQQsQnVOb .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-6q6UJjslQQsQnVOb .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-6q6UJjslQQsQnVOb .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-6q6UJjslQQsQnVOb .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-6q6UJjslQQsQnVOb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-6q6UJjslQQsQnVOb .cluster text{fill:#333;}#mermaid-svg-6q6UJjslQQsQnVOb .cluster span{color:#333;}#mermaid-svg-6q6UJjslQQsQnVOb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-6q6UJjslQQsQnVOb .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-6q6UJjslQQsQnVOb rect.text{fill:none;stroke-width:0;}#mermaid-svg-6q6UJjslQQsQnVOb .icon-shape,#mermaid-svg-6q6UJjslQQsQnVOb .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-6q6UJjslQQsQnVOb .icon-shape p,#mermaid-svg-6q6UJjslQQsQnVOb .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-6q6UJjslQQsQnVOb .icon-shape .label rect,#mermaid-svg-6q6UJjslQQsQnVOb .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-6q6UJjslQQsQnVOb .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-6q6UJjslQQsQnVOb .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-6q6UJjslQQsQnVOb :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 安装 Gazebo/PX4/ROS
选择 world 场景
加载 SDF/URDF 模型
启动物理引擎和传感器
PX4 SITL 或 ROS 控制
QGroundControl/RViz/日志分析

2.1 PX4 中启动 Gazebo

在 PX4-Autopilot 根目录中运行:

bash 复制代码
make px4_sitl gz_x500

常见 PX4 Gazebo 目标:

目标 命令 用途
X500 四旋翼 make px4_sitl gz_x500 基础多旋翼飞行
X500 深度相机 make px4_sitl gz_x500_depth 避障、点云、视觉
X500 视觉里程计 make px4_sitl gz_x500_vision VIO、定位
X500 下视单目相机 make px4_sitl gz_x500_mono_cam_down 精准降落、ArUco
X500 2D 激光雷达 make px4_sitl gz_x500_lidar_2d 碰撞预防
固定翼 make px4_sitl gz_rc_cessna 固定翼飞控测试
VTOL make px4_sitl gz_standard_vtol 垂起固定翼
Rover make px4_sitl gz_rover_ackermann 地面车

2.2 改变仿真速度

PX4 Gazebo 支持 lockstep,同步 PX4 与 Gazebo 时间。可以加快或放慢仿真:

bash 复制代码
PX4_SIM_SPEED_FACTOR=2 make px4_sitl gz_x500
PX4_SIM_SPEED_FACTOR=0.5 make px4_sitl gz_x500

2.3 选择世界

PX4 支持默认世界、Aruco、Baylands、Rover、Walls、Windy、Moving Platform 等。示例:

bash 复制代码
PX4_GZ_WORLD=windy make px4_sitl gz_x500
PX4_GZ_MODEL_POSE=0,0,2.2 PX4_GZ_WORLD=moving_platform make px4_sitl gz_standard_vtol

3. PX4 的模型是怎么设计实现的

PX4 Gazebo 模型通常由这些部分组成:
#mermaid-svg-1aypGvQwAV6gCzml{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-1aypGvQwAV6gCzml .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-1aypGvQwAV6gCzml .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-1aypGvQwAV6gCzml .error-icon{fill:#552222;}#mermaid-svg-1aypGvQwAV6gCzml .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1aypGvQwAV6gCzml .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-1aypGvQwAV6gCzml .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1aypGvQwAV6gCzml .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1aypGvQwAV6gCzml .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-1aypGvQwAV6gCzml .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1aypGvQwAV6gCzml .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1aypGvQwAV6gCzml .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1aypGvQwAV6gCzml .marker.cross{stroke:#333333;}#mermaid-svg-1aypGvQwAV6gCzml svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1aypGvQwAV6gCzml p{margin:0;}#mermaid-svg-1aypGvQwAV6gCzml .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-1aypGvQwAV6gCzml .cluster-label text{fill:#333;}#mermaid-svg-1aypGvQwAV6gCzml .cluster-label span{color:#333;}#mermaid-svg-1aypGvQwAV6gCzml .cluster-label span p{background-color:transparent;}#mermaid-svg-1aypGvQwAV6gCzml .label text,#mermaid-svg-1aypGvQwAV6gCzml span{fill:#333;color:#333;}#mermaid-svg-1aypGvQwAV6gCzml .node rect,#mermaid-svg-1aypGvQwAV6gCzml .node circle,#mermaid-svg-1aypGvQwAV6gCzml .node ellipse,#mermaid-svg-1aypGvQwAV6gCzml .node polygon,#mermaid-svg-1aypGvQwAV6gCzml .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1aypGvQwAV6gCzml .rough-node .label text,#mermaid-svg-1aypGvQwAV6gCzml .node .label text,#mermaid-svg-1aypGvQwAV6gCzml .image-shape .label,#mermaid-svg-1aypGvQwAV6gCzml .icon-shape .label{text-anchor:middle;}#mermaid-svg-1aypGvQwAV6gCzml .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-1aypGvQwAV6gCzml .rough-node .label,#mermaid-svg-1aypGvQwAV6gCzml .node .label,#mermaid-svg-1aypGvQwAV6gCzml .image-shape .label,#mermaid-svg-1aypGvQwAV6gCzml .icon-shape .label{text-align:center;}#mermaid-svg-1aypGvQwAV6gCzml .node.clickable{cursor:pointer;}#mermaid-svg-1aypGvQwAV6gCzml .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-1aypGvQwAV6gCzml .arrowheadPath{fill:#333333;}#mermaid-svg-1aypGvQwAV6gCzml .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1aypGvQwAV6gCzml .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1aypGvQwAV6gCzml .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1aypGvQwAV6gCzml .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-1aypGvQwAV6gCzml .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1aypGvQwAV6gCzml .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-1aypGvQwAV6gCzml .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1aypGvQwAV6gCzml .cluster text{fill:#333;}#mermaid-svg-1aypGvQwAV6gCzml .cluster span{color:#333;}#mermaid-svg-1aypGvQwAV6gCzml div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1aypGvQwAV6gCzml .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-1aypGvQwAV6gCzml rect.text{fill:none;stroke-width:0;}#mermaid-svg-1aypGvQwAV6gCzml .icon-shape,#mermaid-svg-1aypGvQwAV6gCzml .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1aypGvQwAV6gCzml .icon-shape p,#mermaid-svg-1aypGvQwAV6gCzml .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-1aypGvQwAV6gCzml .icon-shape .label rect,#mermaid-svg-1aypGvQwAV6gCzml .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1aypGvQwAV6gCzml .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-1aypGvQwAV6gCzml .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-1aypGvQwAV6gCzml :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} PX4 Gazebo 模型目录
model.sdf
model.config
meshes 视觉/碰撞网格
传感器定义
Gazebo 插件
link: 机臂/机身/电机/云台
joint: 固定/转动/云台关节
质量/惯量/重心
PX4 GZ Bridge/MAVLink

核心设计点:

模块 设计内容
几何外形 视觉 mesh 和碰撞体 collision 可分开,视觉好看,碰撞简单
质量属性 每个 link 要设置 mass、inertia、pose,否则动力学不可信
电机/旋翼 由关节、推进力模型、控制通道映射共同决定
传感器 camera、depth camera、lidar、IMU、GPS 等在 SDF 中定义
插件 处理升力、阻力、风、传感器输出、飞控接口
参数映射 PX4 airframe 参数决定机型、执行器数量、控制分配

4. 怎么实现模拟仿真

无人机仿真不是只显示一个模型,而是把飞控、动力学、传感器、环境和地面站串起来:
ROS 2/RViz QGroundControl Gazebo PX4 SITL ROS 2/RViz QGroundControl Gazebo PX4 SITL #mermaid-svg-JVhMNOo54JuqAC35{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-JVhMNOo54JuqAC35 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-JVhMNOo54JuqAC35 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-JVhMNOo54JuqAC35 .error-icon{fill:#552222;}#mermaid-svg-JVhMNOo54JuqAC35 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-JVhMNOo54JuqAC35 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-JVhMNOo54JuqAC35 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-JVhMNOo54JuqAC35 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-JVhMNOo54JuqAC35 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-JVhMNOo54JuqAC35 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-JVhMNOo54JuqAC35 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-JVhMNOo54JuqAC35 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-JVhMNOo54JuqAC35 .marker.cross{stroke:#333333;}#mermaid-svg-JVhMNOo54JuqAC35 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-JVhMNOo54JuqAC35 p{margin:0;}#mermaid-svg-JVhMNOo54JuqAC35 .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-JVhMNOo54JuqAC35 text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-JVhMNOo54JuqAC35 .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-JVhMNOo54JuqAC35 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-JVhMNOo54JuqAC35 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-JVhMNOo54JuqAC35 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-JVhMNOo54JuqAC35 #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-JVhMNOo54JuqAC35 .sequenceNumber{fill:white;}#mermaid-svg-JVhMNOo54JuqAC35 #sequencenumber{fill:#333;}#mermaid-svg-JVhMNOo54JuqAC35 #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-JVhMNOo54JuqAC35 .messageText{fill:#333;stroke:none;}#mermaid-svg-JVhMNOo54JuqAC35 .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-JVhMNOo54JuqAC35 .labelText,#mermaid-svg-JVhMNOo54JuqAC35 .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-JVhMNOo54JuqAC35 .loopText,#mermaid-svg-JVhMNOo54JuqAC35 .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-JVhMNOo54JuqAC35 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-JVhMNOo54JuqAC35 .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-JVhMNOo54JuqAC35 .noteText,#mermaid-svg-JVhMNOo54JuqAC35 .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-JVhMNOo54JuqAC35 .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-JVhMNOo54JuqAC35 .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-JVhMNOo54JuqAC35 .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-JVhMNOo54JuqAC35 .actorPopupMenu{position:absolute;}#mermaid-svg-JVhMNOo54JuqAC35 .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-JVhMNOo54JuqAC35 .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-JVhMNOo54JuqAC35 .actor-man circle,#mermaid-svg-JVhMNOo54JuqAC35 line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-JVhMNOo54JuqAC35 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 电机/舵机控制输出物理积分、碰撞、传感器更新IMU/GPS/气压计/里程计数据MAVLink 状态、任务、姿态图像/点云/TF/里程计Offboard 控制指令

最常见实现路线:

  1. 用 PX4 SITL 运行真实飞控软件。
  2. 用 Gazebo 运行物理世界和机体模型。
  3. 用 QGroundControl 连接 MAVLink,执行起飞、降落、航点任务。
  4. 用 ROS 2 接收图像、点云、里程计,运行 SLAM、避障、路径规划。
  5. 用日志工具分析姿态、位置、执行器输出、电池、电机等数据。

5. Gazebo 使用方法和用途

5.1 机器人建模

Gazebo 可直接加载 SDF,也可通过 ROS 使用 URDF/Xacro。SDF 更适合完整仿真世界;URDF 更适合 ROS 机器人描述。复杂机器人常用 Xacro 生成 URDF,再给 Gazebo 增加 <gazebo> 标签或转 SDF。

5.2 传感器算法验证

可验证:

  • 相机目标识别
  • 深度相机点云避障
  • 2D/3D LiDAR 建图
  • GPS 丢失后的视觉/惯性定位
  • 光流定点
  • 精准降落

5.3 多机仿真

PX4 支持多机 Gazebo 仿真。关键是给每架飞机不同实例 ID、模型名、MAVLink 端口和 ROS 命名空间。

5.4 风场、移动平台和特殊环境

Gazebo 可以配置风、移动平台、墙体、地形、水面、动态障碍物。用于无人机甲板降落、强风稳定性、避障策略和编队控制。

5.5 能否做受力分析

Gazebo 可以做运行时动力学仿真,例如重力、碰撞、摩擦、升力、阻力、关节力矩、接触力等。但它不是专业有限元软件,不能替代 Ansys、Abaqus、COMSOL 对机臂强度、螺旋桨叶片应力、结构疲劳做高精度分析。工程上通常用:
#mermaid-svg-jfHiqrlx68PvBuEH{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-jfHiqrlx68PvBuEH .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-jfHiqrlx68PvBuEH .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-jfHiqrlx68PvBuEH .error-icon{fill:#552222;}#mermaid-svg-jfHiqrlx68PvBuEH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jfHiqrlx68PvBuEH .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-jfHiqrlx68PvBuEH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jfHiqrlx68PvBuEH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jfHiqrlx68PvBuEH .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-jfHiqrlx68PvBuEH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jfHiqrlx68PvBuEH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jfHiqrlx68PvBuEH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jfHiqrlx68PvBuEH .marker.cross{stroke:#333333;}#mermaid-svg-jfHiqrlx68PvBuEH svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jfHiqrlx68PvBuEH p{margin:0;}#mermaid-svg-jfHiqrlx68PvBuEH .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-jfHiqrlx68PvBuEH .cluster-label text{fill:#333;}#mermaid-svg-jfHiqrlx68PvBuEH .cluster-label span{color:#333;}#mermaid-svg-jfHiqrlx68PvBuEH .cluster-label span p{background-color:transparent;}#mermaid-svg-jfHiqrlx68PvBuEH .label text,#mermaid-svg-jfHiqrlx68PvBuEH span{fill:#333;color:#333;}#mermaid-svg-jfHiqrlx68PvBuEH .node rect,#mermaid-svg-jfHiqrlx68PvBuEH .node circle,#mermaid-svg-jfHiqrlx68PvBuEH .node ellipse,#mermaid-svg-jfHiqrlx68PvBuEH .node polygon,#mermaid-svg-jfHiqrlx68PvBuEH .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jfHiqrlx68PvBuEH .rough-node .label text,#mermaid-svg-jfHiqrlx68PvBuEH .node .label text,#mermaid-svg-jfHiqrlx68PvBuEH .image-shape .label,#mermaid-svg-jfHiqrlx68PvBuEH .icon-shape .label{text-anchor:middle;}#mermaid-svg-jfHiqrlx68PvBuEH .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-jfHiqrlx68PvBuEH .rough-node .label,#mermaid-svg-jfHiqrlx68PvBuEH .node .label,#mermaid-svg-jfHiqrlx68PvBuEH .image-shape .label,#mermaid-svg-jfHiqrlx68PvBuEH .icon-shape .label{text-align:center;}#mermaid-svg-jfHiqrlx68PvBuEH .node.clickable{cursor:pointer;}#mermaid-svg-jfHiqrlx68PvBuEH .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-jfHiqrlx68PvBuEH .arrowheadPath{fill:#333333;}#mermaid-svg-jfHiqrlx68PvBuEH .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jfHiqrlx68PvBuEH .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jfHiqrlx68PvBuEH .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jfHiqrlx68PvBuEH .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-jfHiqrlx68PvBuEH .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jfHiqrlx68PvBuEH .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-jfHiqrlx68PvBuEH .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jfHiqrlx68PvBuEH .cluster text{fill:#333;}#mermaid-svg-jfHiqrlx68PvBuEH .cluster span{color:#333;}#mermaid-svg-jfHiqrlx68PvBuEH div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-jfHiqrlx68PvBuEH .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-jfHiqrlx68PvBuEH rect.text{fill:none;stroke-width:0;}#mermaid-svg-jfHiqrlx68PvBuEH .icon-shape,#mermaid-svg-jfHiqrlx68PvBuEH .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jfHiqrlx68PvBuEH .icon-shape p,#mermaid-svg-jfHiqrlx68PvBuEH .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-jfHiqrlx68PvBuEH .icon-shape .label rect,#mermaid-svg-jfHiqrlx68PvBuEH .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jfHiqrlx68PvBuEH .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-jfHiqrlx68PvBuEH .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-jfHiqrlx68PvBuEH :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} CAD 建模
Ansys/COMSOL/SolidWorks Simulation
Gazebo 运动/控制仿真
质量/刚度/惯量/载荷参数

参考资料

相关推荐
小许同学记录成长16 小时前
几何体编辑与布尔运算
算法·无人机
GlobalInfo18 小时前
八旋翼无人机产业洞察与市场占有率演变:2026年趋势分析报告
人工智能·无人机
LONGZETECH18 小时前
软硬协同+故障注入:无人机仿真维修与操控仿真底层算法逻辑拆解
大数据·c语言·算法·3d·unity·无人机
小O的算法实验室18 小时前
2026年IEEE TITS,低空城市智能交通系统中的多无人机协同任务分配与路径规划
无人机
中达瑞和-高光谱·多光谱20 小时前
机载光谱遥感作业实用指南
无人机·高光谱·多光谱·高光谱相机
思茂信息1 天前
CST对一种用于中型无人机 433MHz 通信的宽带共形贴片天线
开发语言·单片机·嵌入式硬件·平面·无人机·cst
Evand J1 天前
【MATLAB程序】基于σ修正自适应律的多无人机菱形编队控制仿真,附下载链接
开发语言·matlab·无人机·控制·编队飞行·多uav
GlobalInfo1 天前
无人机高光谱相机全球市场全景、头部厂商与竞争格局研报
数码相机·无人机
大势智慧1 天前
矿影安巡版|无人机自主巡检,AI识别隐患,筑牢矿山安全防线
人工智能·安全·无人机·升级·智慧矿山·空间智能·露天矿山