Contents

DDS:WAIC问题排查

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

DDS 架构

  • 协议层数据发送
    • 参与者加入/离开时的 PDP 消息
    • 端点创建/销毁时的 EDP 消息
    • 这些消息由 DDS 内部机制自动发送
  • 应用层数据发送
    • 用户 Publisher 发送的业务数据
    • 这些消息由用户应用程序触发发送

1.docker 网络路由情况

1
2
3
4
5
6
7
root@ubuntu:/# ip route show
default via 10.11.255.254 dev wlp2s0 proto dhcp metric 600
10.11.0.0/16 dev wlp2s0 proto kernel scope link src 10.11.67.117 metric 600
169.254.0.0/16 dev enp3s0 scope link metric 1000
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.11.0/24 dev enp3s0 proto kernel scope link src 192.168.11.11 metric 100
192.168.41.0/24 dev enp3s0 proto kernel scope link src 192.168.41.1 metric 100

2.同一个路由 Wi-Fi 下 模拟网络差测试

1
2
3
4
5
6
7
8
9
sudo apt install iperf3

iperf3 -s

iperf3 -c <server_ip> -t 3600 -P 10
iperf3 -c <server_ip> -u -b 100M -t 60

iperf3 -c 192.168.1.102 -u -b 1000M -t 60
iperf3 -c 192.168.1.104 -u -b 1000M -t 60
  • -t 3600 表示持续一小时;
  • -P 10 表示启动 10 个并发连接;
  • 可以加入 -u 切换到 UDP 模式。
  • -u:使用 UDP;
  • -b:发送速率(例如 100 Mbps)。
1
sudo tc qdisc add dev wlp2s0 root netem delay 100ms loss 10%
1
docker run -it --network host --name enp3s0 ubuntu22.04_moveit bash

使用 macvlan 网络驱动

macvlan 驱动允许你创建一个虚拟网络接口,它直接桥接到宿主机的某个物理网卡上。这可以为容器提供一个独立的 MAC 地址和 IP 地址,使其在物理网络中表现得像一个独立的设备。

通过这种方法,你可以创建一个 macvlan 网络并将其绑定到你的有线网卡,然后让容器连接到这个网络。这样容器将只能通过这个有线网卡访问外部网络,而与无线网卡无关。

命令示例:

  1. 创建一个 macvlan 网络,并指定其父接口为你的有线网卡(例如 eth0)。你需要根据你实际的子网和网关信息进行修改。

    Bash

    1
    2
    3
    4
    5
    6
    7
    
    docker network create -d macvlan \
      --subnet=192.168.41.0/24 \
      --gateway=192.168.41.1 \
      -o parent=enp3s0 \
      macvlan-net
    
      sudo tcpdump -i enp3s0
    
  2. 运行你的容器,并将其连接到你创建的 macvlan-net 网络。

    Bash

    1
    
    docker run -it --network macvlan-net my-image bash
    

现在,这个容器将只能通过 eth0 这个有线网卡进行通信,无法使用宿主机的无线网卡。

  1. 编译替换

    docker run -it –network host
    –env ROS_MASTER_URI=http://localhost:11311
    –env ROS_IP=192.168.1.123 \ # 替换为宿主机实际 IP –name ros_node
    ros:noetic bash