Contents

ROS:TOPIC统计

本文采用知识共享署名 4.0 国际许可协议进行许可,转载时请注明原文链接,图片在使用时请保留全部内容,可适当缩放并在引用处附上图片所在的文章链接。

TOPIC 频率带宽延迟查看

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 查看节点topic 实时频率
ros2 topic hz /topic_name  # 消息发布频率
ros2 topic bw /topic_name  # 消息带宽(MB/s)
ros2 topic delay /topic_name  # 消息延迟


-d 2  # 每2秒输出一次统计信息
-w 50  # 改变统计窗口为50条消息

# 查看点云信息 
ros2 topic echo --no-arr /livox/lidar

输出:

1
2
average delay: 0.001
        min: 0.000s max: 0.015s std dev: 0.00105s window: 6399

统计原理:

订阅消息: ros2 topic hz 创建一个匿名订阅者订阅你指定的 topic。

记录时间戳: 每收到一条消息,记录 rclcpp::Time(或 rclpy 中的 rospy.Time) 的接收时间。

计算时间间隔: 根据当前消息与上一条消息的时间戳差值,得到一个时间间隔序列。

滑动窗口统计:

  • 默认保留最近 100 条消息之间的间隔(可通过 -w 修改窗口大小);
  • 对这些间隔值做统计分析,得到:
    • 平均频率(频率 = 1 / 平均时间间隔)
    • 最小/最大间隔
    • 标准差(衡量是否抖动大)

ros2 topic bw /topic_name 输出单位 MB/s 是 “兆字节每秒”,不是 Mbps(兆位每秒),两者相差 8 倍;

1 MB/s = 8 Mbps

实际问题分析

  1. 统一设备内订阅端延迟大

  2. 不同设备内订阅端延迟大

  3. Navi 项目IMU 数据缺失问题

常用命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sudo apt update
sudo apt install stress -y

# 模拟 1 个 CPU 核心 100% 占用,持续 60 秒
stress --cpu 1 --timeout 60s
# 同时压测 CPU 和内存
stress --cpu 2 --vm 1 --vm-bytes 128M --timeout 30s

# -u:UDP 模式
# -b 600M:目标带宽 600 Mbps
# -t 1:只测试 1 秒
iperf3 -c 192.168.41.3 -p 12345 -u -b 600M -t 1
iperf3 -s

# 查看网络路由
sudo apt-get install traceroute
traceroute 93.184.216.34

# 查看指定网口数据收情况
ifconfig eth0
ip -s link show dev eth0
ethtool -S eth0
sudo iftop -i eth0
sudo apt-get install nload
nload eth0