MAVROS和DDS虽然都用于机器人系统的通信,但设计理念和架构层级完全不同。MAVROS本质上是ROS(机器人操作系统)与MAVLink协议之间的"翻译官",而DDS则是分布式系统的底层通信中间件。
MAVROS采用典型的客户端-服务器架构,通过建立ROS节点与飞控器的双向通信管道,将MAVLink消息转换为ROS话题和服务。这种设计带来几个典型特征:
DDS则采用发布-订阅模型,实现去中心化的数据分发。其核心特性包括:
关键区别:MAVROS是特定领域(无人机)的协议适配层,DDS是通用的通信基础设施
code复制ROS节点 ↔ MAVROS(ROS包) ↔ MAVLink(串口/UDP) ↔ 飞控
典型延迟在10-50ms量级,适合:
瓶颈通常出现在串口波特率(常见1.5Mbps)和ROS Master的通信吞吐量上。
code复制发布者 ↔ DDS中间件(RTPS协议) ↔ 订阅者
采用端到端直连模式,延迟可低至微秒级,支持:
实测案例:在千兆以太网环境下,Cyclone DDS可实现<100μs的端到端延迟,吞吐量达900Mbps。
python复制# 典型MAVROS代码示例
rospy.init_node('offboard_ctrl')
mavros.set_namespace('/mavros')
# 设置飞行模式
set_mode = rospy.ServiceProxy('/mavros/set_mode', SetMode)
set_mode(custom_mode='GUIDED')
# 发布位置指令
pose_pub = rospy.Publisher('/mavros/setpoint_position/local', PoseStamped, queue_size=10)
优势:
局限:
cpp复制// 典型Fast DDS代码
DomainParticipant* participant = DomainParticipantFactory::create_participant(0);
Topic* topic = participant->create_topic("PositionData", type_name);
DataWriter* writer = publisher->create_datawriter(topic);
PositionData data;
data.latitude(47.6);
data.longitude(-122.3);
writer->write(&data);
优势:
挑战:
| 特性 | MAVROS | DDS |
|---|---|---|
| 通信模型 | 客户端-服务器 | 发布-订阅 |
| 典型延迟 | 10-50ms | 100μs-5ms |
| 最大吞吐量 | ~3MB/s(串口限制) | >900MB/s(千兆网络) |
| 节点发现机制 | 依赖ROS Master | 内置动态发现 |
| 数据序列化 | MAVLink固定格式 | CDR动态编码 |
| 跨平台支持 | Linux为主 | Windows/Linux/RTOS/嵌入式 |
| 实时性保障 | 无硬实时保证 | 可配置QoS实现确定性延迟 |
在实际无人机系统中,两种技术可以协同工作:
code复制[飞控]--MAVLink-->[MAVROS]--ROS2(DDS)-->[其他计算节点]
配置要点:
避坑经验:
根据项目需求选择的技术路径:
是否需要与现有ROS1节点集成?
是否要求μs级确定性延迟?
是否涉及多机协同?
开发团队主要技能?
bash复制# 提升串口通信效率
rosrun mavros mavros_node _serial_baud:=921600 _fcu_protocol:=v2.0
# 关闭不用的插件
roslaunch mavros px4.launch fcu_url:=/dev/ttyACM0:921600 gcs_url:=none
关键参数:
serial_baud:根据硬件支持最大化fcu_protocol:v2.0比v1.0效率提升40%tgt_system:多机时明确指定目标IDxml复制<!-- Cyclone DDS配置示例 -->
<Domain id="0">
<Internal>
<MinimumSocketBufferSize>1MB</MinimumSocketBufferSize>
</Internal>
<Tracing>
<Verbosity>config</Verbosity>
</Tracing>
<Participant>
<RTPS>
<SendBufferSize>65536</SendBufferSize>
<Discovery>
<ParticipantIndex>0</ParticipantIndex>
</Discovery>
</RTPS>
</Participant>
</Domain>
优化方向:
症状:/mavros/state丢失连接
症状:指令延迟波动大
top检查系统负载bash复制# 查看DDS实体状态
ros2 topic list --show-types
ros2 node info /node_name
# 网络诊断
tshark -i eth0 -Y "rtps" -V
关键指标:
MAVROS正在向ROS2迁移,新一代架构特点:
DDS在无人机领域的新发展:
实际项目中,我们团队发现混合使用MAVROS和DDS时,需要特别注意时钟同步问题。建议在系统设计早期就部署PTP时间同步网络,避免因时间戳不一致导致的状态估计误差。对于关键控制回路,我们通常会保留MAVROS的直接通道作为保障,同时通过DDS分发辅助信息。这种架构在多次野外试验中表现出良好的鲁棒性。