7 在线雷达 - 高级主题
7.1 简介
RoboSense雷达可以工作在如下的场景。
单播/组播/广播模式。
运行在VLAN协议上。
向Packet加入用户自己的层。
接入多个雷达。
本文描述在这些场景下如何配置rslidar_sdk。
在阅读本文档之前, 请确保已经阅读过:
7.2 单播、组播、广播
7.2.1 广播
雷达发送 MSOP/DIFOP Packet到电脑主机。为简单起见,如下的图没有显示DIFOP端口。
雷达发送Packet到
255.255.255.255
:6699
, rslidar_sdk绑定到主机的端口6699
.
如下是配置config.yaml
的方式。
common:
msg_source: 1
send_point_cloud_ros: true
lidar:
- driver:
lidar_type: RS32
msop_port: 6699
difop_port: 7788
ros:
ros_frame_id: rslidar
ros_send_point_cloud_topic: /rslidar_points
这里列出了common
部分和lidar-ros
部分的设置。这两部分设置将在本文中后面的例子沿用,不再列出。
7.2.2 单播
为了减少网络负载,建议雷达使用单播模式。
雷达发送Packet到
192.168.1.102
:6699
, rslidar_sdk绑定端口6699
。
如下是配置config.yaml
的方式。这实际上与广播的方式一样。
lidar:
- driver:
lidar_type: RS32
msop_port: 6699
difop_port: 7788
7.2.3 组播
雷达也可以工作在组播模式。
雷达发送Packet到
224.1.1.1
:6699
rslidar_sdk绑定到端口
6699
。同时它将IP地址为192.168.1.102
的本地网络接口加入组播组224.1.1.1
。
如下是配置config.yaml
的方式。
lidar:
- driver:
lidar_type: RS32
msop_port: 6699
difop_port: 7788
group_address: 224.1.1.1
host_address: 192.168.1.102
7.3 多个雷达的情况
7.3.1 不同的目标端口
如果有两个或多个雷达,首选的配置是让它们有不同的目标端口。
第一个雷达发送Packet到
192.168.1.102
:6699
, 给rslidar_sdk配置的第一个driver节点绑定到6699
。第二个雷达发送Packet到
192.168.1.102
:5599
, 给rslidar_sdk配置的第二个driver节点绑定到5599
。
如下是配置config.yaml
的方式。
lidar:
- driver:
lidar_type: RS32
msop_port: 6699
difop_port: 7788
- driver:
lidar_type: RS32
msop_port: 5599
difop_port: 6688
7.3.2 不同的目标IP
也可以让多个雷达使用不同的目标IP。
主机有两个网卡, IP地址分别为
192.168.1.102
和192.168.1.103
。第一个雷达发送Packet到
192.168.1.102
:6699
, 给rslidar_sdk配置的第一个driver节点绑定到192.168.1.102:6699
。第二个雷达发送Packet到
192.168.1.103
:6699
, 给rslidar_sdk配置的第二个driver节点绑定到192.168.1.103:6699
。
如下是配置config.yaml
的方式。
lidar:
- driver:
lidar_type: RS32
msop_port: 6699
difop_port: 7788
host_address: 192.168.1.102
- driver:
lidar_type: RS32
msop_port: 6699
difop_port: 7788
host_address: 192.168.1.103
7.4 VLAN
在某些场景下,雷达工作在VLAN层之上。MSOP/DIFOP Packet有VLAN层,如下图。
rslidar_sdk不能解析VLAN层。
需要一个虚拟网卡来剥除掉这一层。举例如下。
雷达工作在VLAN id为
80
的VLAN层上。它发送Packet到192.168.1.102
:6699
,Packet有VLAN层。假设主机上有一个支持VLAN的物理网卡
eno1
. 它接收带VLAN层的Packet。
要剥离VLAN层,需要基于eno1
,创建一个虚拟网卡eno1.80
, 并且将它的IP设置为192.168.1.102
。
sudo apt-get install vlan -y
sudo modprobe 8021q
sudo vconfig add eno1 80
sudo ifconfig eno1.80 192.168.1.102 up
现在,rslidar_sdk可以将eno1.80
当做一个一般的网卡来处理,从这里接收不带VLAN层的Packet.
lidar:
- driver:
lidar_type: RS32
msop_port: 6699
difop_port: 7788
7.5 User Layer, Tail Layer
在某些场景下,用户可能在MSOP/DIFOP数据前后加入自己的层。
在前面的是USER_LAYER,在后面的是TAIL_LAYER。
这两个层是UDP数据的一部分,所以rslidar_sdk可以自己剥除它们。只需要指出这两个层的长度就可以了。
在下面的例子中,USER_LAYER是8字节,TAIL_LAYER是4字节。
lidar:
- driver:
lidar_type: RS32
msop_port: 6699
difop_port: 7788
user_layer_bytes: 8
tail_layer_bytes: 4