RoboSense雷达可以工作在如下的场景。
- 单播/组播/广播模式。
- 运行在VLAN协议上。
- 向Packet加入用户自己的层。
- 接入多个雷达。
本文描述在这些场景下如何配置rslidar_sdk。
在阅读本文档之前, 请确保已经阅读过:
雷达发送 MSOP/DIFOP Packet到电脑主机。为简单起见,如下的图没有显示DIFOP端口。
如下是配置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
部分的设置。这两部分设置将在本文中后面的例子沿用,不再列出。
为了减少网络负载,建议雷达使用单播模式。
如下是配置config.yaml
的方式。这实际上与广播的方式一样。
lidar:
- driver:
lidar_type: RS32
msop_port: 6699
difop_port: 7788
雷达也可以工作在组播模式。
如下是配置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
如果有两个或多个雷达,首选的配置是让它们有不同的目标端口。
- 第一个雷达发送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
也可以让多个雷达使用不同的目标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
在某些场景下,雷达工作在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
在某些场景下,用户可能在MSOP/DIFOP数据前后加入自己的层。
这两个层是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