时间同步器使用手册

2025/12/25

时间硬件同步器

该文档为说明时间同步器的使用方法。作者:重建世界LAB(bilibili)

1. 概述

本产品为Fast-LIVO2算法专用的时间硬件同步器,作为是实现雷达和相机之间的硬件同步。本产品适用的硬件如下:

  1. 雷达:Livox AVIA 和 Livox Mid360
  2. 相机:海康威视 MV-CU013-A0UC (或其他型号相近的相机)

2. 硬件连接

硬件同步器一共有一个开关一个按钮一个指示灯三根线两个接口

开关的作用为:启动雷达的供电。

按钮的作用为切换固件,通过长按按钮可以实现AVIA和MID360两种雷达固件的切换,通过指示灯的颜色分辨不同的固件:

  1. 当指示灯为蓝色时,固件为 mid360
  2. 当指示灯为绿色时,固件为 AVIA

三根线分别为:

  1. M12航空接口线:连接到雷达接口
  2. M6航空接口线:连接到相机的外部触发接口
  3. RJ45网线接口:连接到主机上的网口

两个接口分别为:

  1. type-c接口:通过USB线(随同步器附赠)连接到主机的USB口
  2. DC-5525直流供电接口:该接口需要输入12V直流稳压电源。可以使用typc-c转DC-5525的PD诱骗线(随同步器附赠)连接到支持PD协议的充电宝上。

2.1 M12航空接口线的连接

  1. 该部分负责将雷达的供电、信号接口和数据接口斗引出到时间硬件同步器上。
  2. 此部分较难连接,可以查阅我们提供的安装视频。我们可以看到,雷达(AVIA和MID360相同)上的M12公口上有一个突出的小块,而同步器的线上的M12母口有一个缺口。这是接口的防呆设计,如果连接过程中遇到较大的阻力,请停止连接,查看是否对齐。
  3. 在连接时,首先严格对齐这两个标志,将端子初步推入定位。随后先旋转外部锁紧环 1-2 圈让螺纹咬合,然后再将插头本体向内推进一步,再继续旋紧锁紧环。如此推进一点,拧紧几圈反复 2-3 次,直至插头完全贴合且锁紧环拧紧到位。

2.2 M6航空接口线

  1. 该部分负责将硬件同步器产生的10Hz方波信号发送给相机。
  2. 此部分比较简单,我们捏着M6航空接口线的黑色胶圈末端,然后将金属接口抵在相机的接口上,轻轻旋转找到他们正确的连接位置,此时轻轻推动接口就能将其连接到相机上。
  3. 如果要取下这个触发线,则捏住前端的金属部分,往黑色胶线处轻轻拉动即可脱落。

2.3 RJ45网线接口

RJ45网口线连接主机的网口上即可。该部分负责将雷达的数据回传到主机上。

2.4 type-c接口

这部分的type-c接口负责给时间同步器进行供电(如果是AVIA,还会给主机发送对应的串口信号),通过type-c线(随同步器附赠绿联USB线)连接到主机。另一端需要连接到主机的USB口上。

2.5 DC5525 直流供电口

时间同步器上的DC5525直流供电接口,需要输入12V直流电源。这里有两种方案:

  1. 推荐:使用随同步器附赠的type-c转DC5525诱骗线,然后将type-c线连接到带有PD协议的充电宝进行供电。
  2. 使用一个带有DC5525公口的12V直流电源进行供电。

3 软件的安装

对应b站视频的《三维扫描仪制作教程第三期:时间硬件同步器超详细制作教程、ROS驱动的安装、启动与录rosbag包(fast-livo2)》链接的ROS驱动安装章节。

我们需要安装:

  1. 海康威视的驱动:负责驱动相机
  2. LIVOX的驱动:负责驱动雷达
  3. ROS的驱动:在ROS中调用上面的两个驱动去获取传感器信息

3.1 安装海康威视驱动

在海康的官网中安装对应的客户端:https://www.hikrobotics.com/cn/machinevision/service/download/?module=0 这一步主要是为了安装海康相关的环境,可以运行以下MVS软件查看。

cd /opt/MVS/bin
export LD_LIBRARY_PATH=/opt/MVS/bin/:$LD_LIBRARY_PATH
./MVS
# 或者
./MVS.sh

3.2 LIVOX驱动安装

#AVIA 需要安装 LIVOX-SDK 
#MID360 则对应 LIVOX-SDK2
git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
cd build && cmake ..
make
sudo make install

3.3. 下载ROS驱动

在github仓库下载 https://github.com/xuankuzcr/LIV_handhold

然后将对应的相机和雷达的ROS包移动到工作空间的src下,之后进行编译:

catkin_make

如果是MID360:livox_ros_driver2可以被编译为ros1和ros2两个版本,默认ROS2需要指定ROS1

catkin_make -DROS_EDITION=ROS1

3.4 修改雷达配置文件

首先要修改有线连接的IP地址

  1. 将IP地址改为:192.168.1.50
  2. 将子网掩码改为:255.255.255.0
  3. 将网关改为:192.168.1.254

对于AVIA,修改配置的方式为:然后修改雷达序列号,路径为:src/livox_ros_driver/config/livox_lidar_config.json。将这里的"broadcast_code": "3JEDK3U0014C561"修改你自己的雷达序号。这个序号在雷达的外壳上可以找到。两种雷达的序号分别在下图的红框标示处。

    "lidar_config": [
        {
            // 修改这个地方为你雷达后的序列号
            "broadcast_code": "3JEDK3U0014C561",  
            "enable_connect": false,
            "return_mode": 0,
            "coordinate": 0,
            "imu_rate": 0,
            "extrinsic_parameter_source": 0,
            "enable_high_sensitivity": false
        },

对于MID360,修改配置的方式为:修改src/livox_ros_driver2/config/MID360_config.json中的:

  "lidar_configs" : [
    {
      # 将ip 修改为 192.168.1.1xx 其中xx为雷达序列号的最后两位,如果上图为28,则修改为192.168.1.128
      "ip" : "192.168.1.3",  
      "pcl_data_type" : 1,
      "pattern_mode" : 0,  
      "extrinsic_parameter" : {
        "roll": 0.0,
        "pitch": 0.0,
        "yaw": 0.0,
        "x": 0,
        "y": 0,
        "z": 0
      }
    }
  ]

3.5 修改相机的配置文件

路径为:src/mvs_ros_driver/config/left_camera_trigger.yaml

%YAML:1.0

#--------------------------------------------------------------------------------------------
# Camera Parameters. Adjust them!
#--------------------------------------------------------------------------------------------
SerialNumber: "DA2099368" # Not needed for single camera. Specify serial number for multiple cameras. 
TopicName: "left_camera/image"

TriggerEnable: 1 # 0 stands for Off, 1 stands for On

ExposureAutoMode: 0 # 0 stands for Off, 1 stands for Once, 2 stands for Continues
ExposureTime: 5000 # us

# ExposureAutoMode: 2
# AutoExposureTimeLower: 100
# AutoExposureTimeUpper: 20000

image_scale: 0.5 # 1 0.5
GainAuto: 2 # Gain Auto, 0 stands for Off, 1 stands for Once, 2 stands for Continues
Gain: 15 # min: 0   max: 17.0166
Gamma: 0.7  # min: 0   max: 17.0166
GammaSelector: 1 # 0 stands for user, 1 stands for sRGB
# GammaEnable: 1

PixelFormat: 0 # 0: RGB8, 1: BayerRG8, 2: BayerRG12Packed, 3: BayerGB12Packed, 4: BayerGB8

这里默认为是这样的,但是用了相机MV-CU013-A0UC,需要把PixelFormat改为4才能运行

4. 启动与录包

编译完成后,我们分别启动雷达和相机

4.1 启动雷达

AVIA:启动雷达前记得给USB权限,否则无法读写:在终端里输入查看当前有哪些端口,然后在src/livox_ros_driver/config/livox_lidar_config.json将端口修改为对应的名称。在启动前给端口加上读写的权限。

source devel/setup.zsh
ls /dev/ttyUSB* /dev/ttyACM*
sudo chmod 777 /dev/ttyUSB0
roslaunch livox_ros_driver livox_lidar_msg.launch

MID360:则不需要给串口权限了。也不需要修改config。直接启动对应的launch文件即可:

source devel/setup.zsh
roslaunch livox_ros_driver2 msg_MID360.launch

4.2 启动相机

source devel/setup.zsh
roslaunch mvs_ros_driver mvs_camera_trigger.launch 

4.3 录包和启动

录制bag包

rosbag record /livox/lidar /livox/imu left_camera/image

或者也可以直接启动了:

source devel/setup.zsh
roslaunch fast_livo mapping_avia.launch

如果这个时候说启动不了,错误显示:

/hone/xx/catkin_ws/devel/lib/fast_livo/fastlivo_mapping:symbol lookup error: /lib/x86_64-linux-gnu/libpcl_io.so.1.10: undefined symbol:libusb_set_optionlaserHapping-1l process has died [pid 4188, exit code 127, cmd /home/xx/catkins/devel/lib/fast_livo/fastlivo_mapping _nane:=laserMapping __log:=/home/xx/.ro/1og/642d1c14-eab1-11f0-8eff-0f57792b7c44/laserMapping-1.log].o9 file:/

这是由于MVS导致环境冲突,我们只需要在启动mapping节点前,加入:

export LD_PRELOAD=/lib/x86_64-linux-gnu/libusb-1.0.so.0

4.4 验证时间同步器是否生效

当我们录制完包后,可以通过ls命令看到目录下有这样的一个.bag文件。这就是我们录制好的bag包,我们可以通过ls命令行查看当前的bag包的名字,通常为录制时的时间:

然后我们通过:

rqt_bag <bag包路径>

就可以查看bag包录制时间,数据到达ros系统时的时间,这个时间是不会对齐的,官方提供的数据集也是一样的。

这个时间是到达主机的时间,并非录制时间,还需要通过共享内存机制去对齐他们。我们通过下面的命令查看对齐后的时间:

# 录制bag包后查看前几帧的时间戳
rostopic echo -b <rosbag_name.bag> -n 2 /livox/lidar/header
rostopic echo -b <rosbag_name.bag> -n 2 /left_camera/image/header
# 或
rostopic echo -b <rosbag_name.bag> -n 2 /left_camera/image/compressed/header

例如:

可以看到,我们打印出来了前两帧的雷达和相机的数据的header的时间信息。这里他们的secs应该是完全一样的,而nsecs的前两位应该是一样的。

两帧之间应该刚好在nsecs第1位上相差1,这表明时间同步器在正常工作了!

bilibili:重建世界LAB

时间同步器使用手册 | 博客