7 在线雷达 - 高级主题

7.1 简介

Asensing 雷达可以工作在如下的场景。

  • 单播/组播/广播模式。

  • 运行在VLAN协议上。

  • 向Packet加入用户自己的层。

  • 接入多个雷达。

本文描述在这些场景下如何配置aglidar_sdk。

在阅读本文档之前, 请确保已经阅读过:

7.2 单播、组播、广播

7.2.1 广播

雷达发送 MSOP/DIFOP Packet 到电脑主机。为简单起见,如下的图没有显示 DIFOP 端口。

雷达发送 Packet 到 255.255.255.255:51180,aglidar_sdk 绑定到主机的端口 51180。

../../_images/07_01_broadcast.png

如下是配置 config.yaml 的方式。

common:
  msg_source: 1
  send_point_cloud_ros: true

lidar:
  - driver:
      lidar_type: A0
      msop_port: 51180
      difop_port: 7788
    ros:
      ros_frame_id: aglidar
      ros_send_point_cloud_topic: /aglidar_points

这里列出了 common 部分和 lidar-ros 部分的设置。这两部分设置将在本文中后面的例子沿用,不再列出。

7.2.2 单播

为了减少网络负载,建议雷达使用单播模式。

雷达发送Packet到 192.168.101.233:51180,aglidar_sdk 绑定端口 51180。

../../_images/07_02_unicast.png

如下是配置 config.yaml 的方式。这实际上与广播的方式一样。

lidar:
  - driver:
      lidar_type: A0
      msop_port: 51180
      difop_port: 7788

7.2.3 组播

雷达也可以工作在组播模式。

  • 雷达发送 Packet 到 224.1.1.1:51180

  • aglidar_sdk 绑定到端口 51180。同时它将 IP 地址为 192.168.101.233 的本地网络接口加入组播组 224.1.1.1

../../_images/07_03_multicast.png

如下是配置 config.yaml 的方式。

lidar:
  - driver:
      lidar_type: A0
      msop_port: 51180
      difop_port: 7788
      group_address: 224.1.1.1
      host_address: 192.168.101.233

7.3 多个雷达的情况

7.3.1 不同的目标端口

如果有两个或多个雷达,首选的配置是让它们有不同的目标端口。

  • 第一个雷达发送 Packet 到 192.168.101.233:51180,给 aglidar_sdk 配置的第一个 driver 节点绑定到 51180。

  • 第二个雷达发送 Packet 到 192.168.101.233:51190,给 aglidar_sdk 配置的第二个 driver 节点绑定到 51190。

../../_images/07_04_multi_lidars_port.png

如下是配置 config.yaml 的方式。

lidar:
  - driver:
      lidar_type: A0
      msop_port: 51180
      difop_port: 7788
  - driver:
      lidar_type: A0
      msop_port: 51190
      difop_port: 6688

7.3.2 不同的目标 IP

也可以让多个雷达使用不同的目标 IP。

  • 主机有两个网卡, IP 地址分别为 192.168.101.233192.168.101.234

  • 第一个雷达发送 Packet 到 192.168.101.233:51180, 给 aglidar_sdk 配置的第一个 driver 节点绑定到 192.168.101.233:51180

  • 第二个雷达发送 Packet 到 192.168.101.234:51180, 给 aglidar_sdk 配置的第二个 driver 节点绑定到 192.168.101.234:51180

../../_images/07_05_multi_lidars_ip.png

如下是配置 config.yaml 的方式。

lidar:
  - driver:
      lidar_type: A0
      msop_port: 51180
      difop_port: 7788
      host_address: 192.168.101.233
  - driver:
      lidar_type: A0
      msop_port: 51180
      difop_port: 7788
      host_address: 192.168.101.234

7.4 VLAN

在某些场景下,雷达工作在 VLAN 层之上。MSOP/DIFOP Packet 有 VLAN 层,如下图。

../../_images/07_06_vlan_layer.png

aglidar_sdk 不能解析 VLAN 层。

需要一个虚拟网卡来剥除掉这一层。举例如下。

  • 雷达工作在 VLAN id 为 80 的 VLAN 层上。它发送 Packet 到 192.168.101.233:51180,Packet 有 VLAN 层。

  • 假设主机上有一个支持 VLAN 的物理网卡 eno1。它接收带 VLAN 层的 Packet。

../../_images/07_07_vlan.png

要剥离 VLAN 层,需要基于 eno1,创建一个虚拟网卡 eno1.80, 并且将它的 IP 设置为 192.168.101.233

sudo apt-get install vlan -y
sudo modprobe 8021q

sudo vconfig add eno1 80
sudo ifconfig eno1.80 192.168.101.233 up

现在,aglidar_sdk 可以将 eno1.80 当做一个一般的网卡来处理,从这里接收不带 VLAN 层的 Packet。

lidar:
  - driver:
      lidar_type: A0
      msop_port: 51180
      difop_port: 7788

7.5 User Layer, Tail Layer

在某些场景下,用户可能在 MSOP/DIFOP 数据前后加入自己的层。

  • 在前面的是 USER_LAYER,在后面的是 TAIL_LAYER。

../../_images/07_08_user_layer.png

这两个层是 UDP 数据的一部分,所以 aglidar_sdk 可以自己剥除它们。只需要指出这两个层的长度就可以了。

在下面的例子中,USER_LAYER 是 8 字节,TAIL_LAYER 是 4 字节。

lidar:
  - driver:
      lidar_type: A0
      msop_port: 51180
      difop_port: 7788
      user_layer_bytes: 8
      tail_layer_bytes: 4