# 7 在线雷达 - 高级主题 ## 7.1 简介 Asensing 雷达可以工作在如下的场景。 + 单播/组播/广播模式。 + 运行在VLAN协议上。 + 向Packet加入用户自己的层。 + 接入多个雷达。 本文描述在这些场景下如何配置aglidar_sdk。 在阅读本文档之前, 请确保已经阅读过: + 雷达用户手册 + [参数介绍](../intro/02_parameter_intro_CN.md) + [连接在线雷达](./06_how_to_decode_online_lidar_CN.md) ## 7.2 单播、组播、广播 ### 7.2.1 广播 雷达发送 MSOP/DIFOP Packet 到电脑主机。为简单起见,如下的图没有显示 DIFOP 端口。 雷达发送 Packet 到 `255.255.255.255:51180`,aglidar_sdk 绑定到主机的端口 51180。 ![](./img/07_01_broadcast.png) 如下是配置 `config.yaml` 的方式。 ```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。 ![](./img/07_02_unicast.png) 如下是配置 `config.yaml` 的方式。这实际上与广播的方式一样。 ```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`。 ![](./img/07_03_multicast.png) 如下是配置 `config.yaml` 的方式。 ```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。 ![](./img/07_04_multi_lidars_port.png) 如下是配置 `config.yaml` 的方式。 ```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.233` 和 `192.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`。 ![](./img/07_05_multi_lidars_ip.png) 如下是配置 `config.yaml` 的方式。 ```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 层,如下图。 ![](./img/07_06_vlan_layer.png) aglidar_sdk 不能解析 VLAN 层。 需要一个虚拟网卡来剥除掉这一层。举例如下。 + 雷达工作在 VLAN id 为 `80` 的 VLAN 层上。它发送 Packet 到 `192.168.101.233:51180`,Packet 有 VLAN 层。 + 假设主机上有一个支持 VLAN 的物理网卡 `eno1`。它接收带 VLAN 层的 Packet。 ![](./img/07_07_vlan.png) 要剥离 VLAN 层,需要基于 `eno1`,创建一个虚拟网卡 `eno1.80`, 并且将它的 IP 设置为 `192.168.101.233`。 ```bash 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。 ```yaml lidar: - driver: lidar_type: A0 msop_port: 51180 difop_port: 7788 ``` ## 7.5 User Layer, Tail Layer 在某些场景下,用户可能在 MSOP/DIFOP 数据前后加入自己的层。 + 在前面的是 USER_LAYER,在后面的是 TAIL_LAYER。 ![](./img/07_08_user_layer.png) 这两个层是 UDP 数据的一部分,所以 aglidar_sdk 可以自己剥除它们。只需要指出这两个层的长度就可以了。 在下面的例子中,USER_LAYER 是 8 字节,TAIL_LAYER 是 4 字节。 ```yaml lidar: - driver: lidar_type: A0 msop_port: 51180 difop_port: 7788 user_layer_bytes: 8 tail_layer_bytes: 4 ```