使用mavros启动多机SITL仿真

【ROS】MAVROS基础知识和使用 记录自己MAVROS的学习体会 阅读详情

为多个PX4 SITL无人机分别启动各自的 mavros 实例进行通信。每架无人机都用一组不同的 UDP 和 TCP 端口进行连接。我们只需要为每架无人机配置一组唯一的 fcu_url 来启动多个 mavros 节点。

方式1:使用roslaunch一键启动

Step1:创建一个新的 ROS 包或放到现有包里

cd ~/catkin_ws/src
catkin_create_pkg my_multi_mavros
mkdir -p my_multi_mavros/launch
cd ~/catkin_ws/src/my_multi_mavros/launch
touch multi_mavros.launch

Step2:编辑 multi_mavros.launch

<launch>
  <!-- UAV1 -->
  <group ns="uav1">
    <include file="$(find mavros)/launch/px4.launch">
      <arg name="fcu_url" value="udp://:20101@127.0.0.1:20100"/>
      <arg name="gcs_url" value=""/>
      <arg name="tgt_system" value="1"/>
    </include>
  </group>

  <!-- UAV2 -->
  <group ns="uav2">
    <include file="$(find mavros)/launch/px4.launch">
      <arg name="fcu_url" value="udp://:20103@127.0.0.1:20102"/>
      <arg name="gcs_url" value=""/>
      <arg name="tgt_system" value="2"/>
    </include>
  </group>

  <!-- UAV3 -->
  <group ns="uav3">
    <include file="$(find mavros)/launch/px4.launch">
      <arg name="fcu_url" value="udp://:20105@127.0.0.1:20104"/>
      <arg name="gcs_url" value=""/>
      <arg name="tgt_system" value="3"/>
    </include>
  </group>

  <!-- UAV4 -->
  <group ns="uav4">
    <include file="$(find mavros)/launch/px4.launch">
      <arg name="fcu_url" value="udp://:20107@127.0.0.1:20106"/>
      <arg name="gcs_url" value=""/>
      <arg name="tgt_system" value="4"/>
    </include>
  </group>
</launch>

Step3:构建工作空间并 source 环境

cd ~/catkin_ws
catkin_make
source devel/setup.bash

Step4:构建工作空间并 source 环境

roslaunch my_multi_mavros multi_mavros.launch

在这里插入图片描述

方式2:启动单架无人机 MAVROS

也可以单独启动 MAVROS 实例,比如:

roslaunch mavros px4.launch fcu_url:=udp://:20101@127.0.0.1:20100 \
  __ns:=uav1 tgt_system:=1

roslaunch mavros px4.launch fcu_url:=udp://:20103@127.0.0.1:20102 \
  __ns:=uav2 tgt_system:=2
  
roslaunch mavros px4.launch fcu_url:=udp://:20105@127.0.0.1:20104 \
  __ns:=uav3 tgt_system:=3
  
roslaunch mavros px4.launch fcu_url:=udp://:20107@127.0.0.1:20106 \
  __ns:=uav4 tgt_system:=4

问题1: PX4 SITL 启动时日志里写的是 17541/16541,那为什么 mavros 的 fcu_url 要用 20100/20101 而不是 17541/16541?

20100 和 20101 是你自己在仿真系统(例如Gazebo )中 人为分配给 MAVROS 与 PX4 通信的中间桥接端口对,它们并不等于 PX4 SITL 启动时用的 17541/16541 内部端口。

问题2: 为什么 uav1 用的是 20101/20100,而 uav2 用的是 20103/20102?为什么不是 20101/20100 和 20102/20101?

启动时已经为每架 MAVROS 与 PX4 的通信创建了一对端口:一个接收端(MAVROS本地端口)+一个发送端(PX4目标端口)。
端口增加“2”其实是人为设计的一种“互不冲突 + 成对编号”的方式 —— 每架无人机占用两个连续端口,一个作为收,一个作为发。

✅ MAVROS 与 PX4 通信是双向的:需要两个端口

fcu_url:=udp://:20101@127.0.0.1:20100

含义是:

  • MAVROS 接收数据:监听 20101(MAVROS本地UDP接收端)
  • MAVROS 发送数据:发到 PX4 的 127.0.0.1:20100

所以:

  • PX4 要配置为 将 MAVLink 数据发到 20101
  • PX4 要监听 20100 来接收来自 MAVROS 的数据

这对端口从 MAVROS 视角是:本地:20101 ← PX4:20100

问题1: WSL 与 NX 的运行环境或网络配置存在差异

在 WSL 中可以同时启动 4 个 roslaunch(即 4 个 MAVROS 实例),但在 NX(NVIDIA Jetson)上只能启动 1 个,这说明 WSL 与 NX 的运行环境或网络配置存在差异。

排查方案:

在 NX 上查看端口使用情况:

sudo netstat -anu | grep 201

或者使用:

sudo lsof -iUDP -P | grep 201

看是否端口已被占用。

结果显示没有任何输出

都没有任何输出,说明当前系统:

  • 没有任何进程监听或占用 20100、20101、20102、20103 等 MAVROS/PX4 的 UDP 端口。
  • 所以“端口占用或冲突”不是无法同时启动多个 MAVROS 的根本原因。

接下来进入 第二阶段排查:


步骤 1:确认 PX4 SITL 是否给每个 MAVROS 实例发包

在 Jetson 上可以使用 tcpdump 来监听 loopback(127.0.0.1)上的 MAVLink 流量:

sudo apt update
sudo apt install tcpdump
sudo tcpdump -i lo udp port 20100 or port 20102

然后尝试启动其中一个 MAVROS 实例,例如:

roslaunch mavros px4.launch fcu_url:=udp://:20101@127.0.0.1:20100 __ns:=uav1

观察是否有数据包在收发。抓包结果如下:

localhost.20101 > localhost.20100: UDP, length 28
...

这说明PX4 正在不断地向 20100 接收数据,来自 MAVROS 的 20101 端口

这意味着:

  • MAVROS 正常启动了,并在 20101 发数据。
  • PX4 正常监听了 20100,并收到了这些 MAVLink 数据包。
  • PX4 的 UDP 输入没问题,MAVROS 发包正常。

但问题来了,监听的是:

sudo tcpdump -i lo udp port 20100 or port 20102

说明并没有看到 PX4 发回给 MAVROS 的包(比如 localhost.20100 > localhost.20101),这说明:

PX4 只收了 MAVROS 发的包,但没有回发心跳等响应包

问题2:MAVROS 一直在等待心跳

MAVROS卡在:

MAVROS started. MY ID 1.240, TARGET ID 3.1

(表示它在等待心跳,但 PX4 根本没发)

最终解决方案:

执行完 mavros.py 后再启动 roslaunch

  • mavros.py 通知了 PX4 开启了 UDP 回传;
  • PX4 开始向 Jetson 的某个端口发 MAVLink 心跳;
  • 此时再 roslaunch MAVROS,它就能接收到心跳并完成握手。

mvros.py是一个自定义的py程序,用于开启UDP回传。MAVROS 实际上依赖 mavros.py 激活 PX4 的 UDP 通道与通信模式,否则 PX4 根本不会发送任何 MAVLink 包给 MAVROS。

APM仿真进阶:在Gazebo 9中搭建多旋翼仿真,并连接MAVROS与ROS进行控制 本文详细介绍了在Ubuntu系统中使用Gazebo 9搭建多旋翼仿真环境,并通过MAVROS连接ROS与APM飞控的全链路实践。从环境准备、Gazebo插件编译到SITL协同启动,再到MAVROS通信配置和ROS控制节点开发,为无人机算法开发者提供了完整的仿真验证方案,助力高效、安全的算法测试与验证。 阅读详情

相关推荐

从零构建ArduPilot全栈仿真:Gazebo、MAVROS与QGC的协同实战

本文详细介绍了如何从零开始搭建一个完整的ArduPilot全栈仿真环境,涵盖Gazebo物理引擎、MAVROS通信桥和QGroundControl地面站的集成与配置。通过分步教程,指导读者完成环境准备、软件安装、通信打通及实战调试,为无人机算法开发与测试提供了一个安全、低成本且功能强大的数字飞行实验室。

weixin_29197699的博客 104

Jetson Orin NX 开发指南(9): MAVROS 的安装、配置与运行

Jetson Orin NX 开发指南(9): Mavros 的安装与配置

Pulsar 8198

保姆级避坑指南:在Ubuntu 18.04上搞定MAVROS + ArduPilot + Gazebo无人机集群仿真

本文提供在Ubuntu 18.04上搭建MAVROS + ArduPilot + Gazebo无人机集群仿真环境的详细避坑指南。从系统配置、依赖安装到多机仿真配置,逐步解析常见错误及解决方案,帮助开发者高效完成无人机集群仿真环境搭建。

weixin_42625070的博客 199

无人机MAVROS保姆级配置及模拟、真机飞行(全)

无人机MAVROS保姆级配置及模拟、真机飞行(全),整合mavros配置及模拟实战飞行,为了实现从mavros搭建到真机飞行的全过程

weixin_65733623的博客 1万+

保姆级教程:在Ubuntu 20.04/ROS Noetic上从零搭建PX4无人机仿真环境(含QGC配置)

本文提供了一份详细的保姆级教程,指导读者在Ubuntu 20.04/ROS Noetic系统上从零搭建PX4无人机仿真环境,包括QGroundControl配置。教程涵盖基础环境准备、PX4源码编译、ROS集成、QGC安装及完整仿真测试流程,帮助开发者快速掌握无人机仿真技术,避开常见配置问题。

weixin_30421809的博客 216

XTDrone仿真平台入门:5分钟搞定PX4多旋翼无人机仿真环境搭建

本文详细介绍了如何快速搭建基于XTDrone仿真平台和PX4飞控的多旋翼无人机仿真环境。通过清晰的步骤指导,从系统环境准备、核心组件安装,到首次仿真启动与验证,帮助开发者高效完成配置,并提供了自定义机型、传感器及故障排查等进阶技巧,是入门无人机算法仿真的实用指南。

weixin_29051811的博客 215

超维小课堂 | 6、MAVROS与机载电脑Jetson nano通信

超维小课堂 | 6、MAVROS与机载电脑Jetson nano通信

qq_35598561的博客 1984

保姆级教程:PX4 v1.14+与ROS Melodic/Noetic Gazebo仿真环境完整搭建指南

本文提供PX4 v1.14+与ROS Melodic/Noetic Gazebo仿真环境的完整搭建指南,涵盖系统准备、PX4源码编译、ROS桥接配置及高级故障排除。通过详细步骤和实用技巧,帮助开发者快速搭建无人机仿真环境,实现`roslaunch px4 posix_sitl.launch`并验证飞行控制算法。

sym19862006的专栏 376

MAVROS安装心得及使用方法

重新配置环境时的安装心得,希望能帮助大家。

2301_76165902的博客 2249

从零到一:ROS与PX4在Gazebo中的协同仿真环境搭建指南

本文提供了一份详细的ROS与PX4在Gazebo中搭建协同仿真环境的完整指南。内容涵盖从Ubuntu系统配置、ROS Noetic安装、PX4源码编译到MAVROS桥接与QGroundControl地面站集成的全流程,并针对网络依赖、环境变量配置等常见问题给出了解决方案,旨在帮助开发者快速构建一个稳定可靠的无人机算法虚拟测试平台。

gold8的专栏 709

PX4 ROS Gazebo通用无人机仿真平台搭建与避坑指南

无人机研发中,真机试错成本高,飞行控制系统仿真成为降低风险的关键环节。PX4作为自动驾驶固件负责决策,Gazebo提供刚体动力学物理环境,ROS与MAVROS则承担飞控和算法之间的通讯管道,三者结合构成可复用的通用仿真平台。开发者无需更换硬件,即可验证起飞、巡航、返航、失效保护乃至路径规划与视觉避障等算法,也能先跑通offboard模式,再平滑迁移到真机。本文面向Ubuntu 22.04与ROS 2 Humble环境,梳理PX4 v1.14 LTS下的版本搭配、环境搭建、mavros连接、最小起飞脚本、换模

weixin_29189381的博客 105

【飞控开发实战·㉓】SITL/HITL仿真与调试详解:Gazebo+PX4 SITL、MAVROS2联合仿真与硬件在环测试

本文系统介绍了基于PX4和ROS2的无人机仿真开发方法。主要内容包括:1)SITL软件在环仿真环境搭建(Gazebo/PX4),涵盖单机/多机配置和启动命令;2)SITL与QGC地面站、MAVROS2的联合调试流程,提供Python测试脚本示例;3)HITL硬件在环仿真配置方法,包括参数设置和硬件连接;4)仿真到实机的迁移检查清单及参数对比工具;5)常见问题排查方法,涵盖编译错误、通信故障等场景。通过仿真验证可显著降低开发风险,建议在实际飞行前完成充分测试并严格校验参数一致性。

ZETTATREE的博客 715

Mininet 2.2.1 图形可视化界面使用注意事项

前言 关于mininet的安装,网上教程不少,大致可以参考以下这篇文章: https://blog.csdn.net/linyixiao88/article/details/65651390 安装的时候,也可以不必根据上面这篇文章这么麻烦,直接sudo apt-get install mininet,即可。 Mininet可视化 Mininet 2.2.0以上版本内置了...

裕东方的博客 4182

PX4 Gazebo 双机带负载仿真:从模型配置到 MAVROS 对接的完整实践

PX4 Gazebo 双机带负载仿真完整实践:复制 iris_1 模型并挂载球体负载,规划 14540/14541 端口与 mavros_1 命名空间,给出双机 launch 与 MAVROS 参数文件,roslaunch 启动后用 rostopic 验证双机话题,并排查心跳超时、端口冲突、模型重叠等报错。详见 TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_36444661的博客 142

Mac安装Weblogic教程

1.Weblogic的下载 这次安装的是最新版本12 官网下载地址: http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html 下载需要登录账号,如没有账号要注册一个 下载后的文件如下图,其中fmw_12.2.1.3.0_wls_quick.jar文件就是安装包了,注意现在不要对它进行解压 2.安装前的确...

weixin_40102675的博客 5056

Cadence Sigrity PowerSI实战:从.brd到S参数提取的完整避坑指南

本文详细介绍了使用Cadence Sigrity PowerSI进行信号完整性分析的完整流程,从.brd文件预处理到S参数提取的关键技巧。通过实战案例和避坑指南,帮助工程师高效解决高速PCB设计中的信号质量问题,提升仿真精度和设计效率。

carrot的博客 691

PX4仿真中的UDP端口匹配

摘自:https://www.yuque.com/xtdrone/manual_cn/udp_matching UDP端口匹配 图显示了对于任何支持的仿真器典型软件在回路(SITL) 仿真环境,系统的不同部分通过 UDP 端口连接,并且可以在同一台电脑或者同一网络上的不同电脑上运行。 在多机仿真环境的配置中,具体要从这几个文件入手: SITL 启动脚本: /Firmware/ROMFS/px4fmu_common/init.d-posix/rcS #v1.9之后的PX4固件版本 多机.

自主无人机 PX4 ROS SLAM 路径规划 MVS等技术分享 2881

逆向工程实战:如何用Frida和IDA破解AppleAccount的X-MMe-Nas-Qualify签名机制

本文通过逆向工程实战,详细解析了如何利用Frida动态Hook和IDA静态分析技术,破解AppleAccount服务中关键的X-MMe-Nas-Qualify签名机制。文章从环境搭建、动态追踪NSMutableURLRequest的签名注入点开始,逐步深入到AuthKit框架的静态剖析与算法还原,最终实现独立的签名生成,为安全研究和自动化测试提供了完整的技术路径。

bush的博客 691

ubuntu20.04+PX4+Gazebo+QGC 无人机模拟仿真

在官网上关于这部分source是没有更新的,我自己在安装时发现setup_gazebo.bash的安装路径是在Tools/simulation/gazebo-classic 下的,所以在输入之前,最好都检查一下自己setup_gazebo.bash的路径在哪里,不要照搬。值得注意的是,$(pwd)是要替换成对应的目录路径(PX4固件所在目录),我的路径是。其中的QGroundControl.AppImage要放在你自己命名的电脑名字的文件夹内,再运行终端命令进行安装。官方内容写的很清楚,按照步骤来就行。

qq_57813398的博客 7495

SMIC Memory配置与Library Compiler实战:从lib到db的高效转换

本文详细介绍了SMIC Memory Compiler的配置要点与使用Library Compiler将.lib文件高效转换为.db文件的完整流程。文章深入解析了关键配置参数对性能和面积的影响,并提供了从交互式操作到自动化脚本的实战指南,帮助数字芯片设计工程师顺利完成存储器模型的生成与集成,确保Design Compiler能正确调用。

weixin_28314575的博客 329

基于YOLOv8深度学习的夜视行人检测系统:UI界面 + YOLOv8 + 数据集的实现

为了解决这一问题,基于深度学习的行人检测技术,尤其是YOLO(You Only Look Once)系列算法,成为了一个有效的解决方案。本文将详细介绍如何构建一个夜视行人检测系统,利用YOLOv8模型实现高效的行人检测,并设计用户友好的界面以便于使用。本博客详细介绍了如何构建一个基于深度学习的夜视行人检测系统,包括数据准备、YOLOv8模型训练、用户界面设计和实时监控模块的实现。为了将数据集转换为YOLO格式,我们需要确保每个图像文件都有一个对应的标签文件,标签文件中包含行人的边界框信息。

YOLO 1170

用Python玩转PX4 Offboard模式:5行代码实现Gazebo无人机编队飞行

本文详细介绍了如何使用Python和ROS,在Gazebo仿真环境中通过PX4的Offboard模式控制多架无人机实现编队飞行。文章提供了从环境搭建、单机控制到多机编队的完整实战指南,核心在于理解ROS通信、Offboard安全逻辑及坐标系转换,并展示了如何将复杂控制封装为简洁接口,快速验证集群算法。

o1p2q3r的博客 206

华为OD机试真题 新系统【进制转换后自定义排序】

华为OD机试 新系统真题【进制转换后自定义排序】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【进制转换后自定义排序】多语言题解。

qq_45776114的博客 587

用PX4飞控+ROS(Noetic)玩转无人机仿真:Gazebo与JMAVSim环境搭建全攻略

本文详细介绍了如何使用PX4开源飞控与ROS Noetic搭建无人机仿真环境,涵盖Gazebo与JMAVSim两大平台的配置与实战应用。通过对比分析、环境配置、问题排查及ROS节点开发实例,帮助开发者高效实现无人机算法验证与测试,大幅降低开发成本与风险。

weixin_30786657的博客 169

SQL中的时间计算:员工每日工作时长

摘要:本文介绍了一个使用SQL查询计算员工每日工作时长的实用方法。通过分析包含员工打卡记录的数据库表,利用CTE(公共表表达式)将日期分组,计算最早和最晚打卡时间差,最终以"小时:分钟"格式输出工作时长。该方法适用于每日两次打卡的场景,并提示了处理漏打卡等特殊情况时的注意事项,为企业考勤管理提供了有效的数据支持方案。(148字)

m0_74337424的博客 407

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

PX4仿真通信选型:Micro XRCE-DDS与MAVROS深度对比与实战

在ROS2 Humble中集成PX4仿真时,通信桥接方案的选择直接影响系统延迟、带宽和扩展性。MAVROS通过MAVLink协议转换实现ROS话题映射,而Micro XRCE-DDS让PX4作为原生DDS参与者,实现低延迟、高频率的数据交换。DDS的分布式特性天然支持多机协同和自定义消息传输,适用于高频控制算法验证和多机编队场景。本文基于实际工程经验,对比两种方案在配置复杂度、延迟表现和多机支持上的差异,提供从环境搭建到跑通验证的完整指南,帮助开发者根据开发阶段和团队背景做出合理选型。

weixin_33509600的博客 301

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: 使用集群通信swarm_ros_bridge实现ros1多机通信
下一篇: 一篇学懂roslaunch文件语法
小坏坏的大世界
博客等级 码龄12年 1289粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值