128线激光雷达如何与32线激光雷达作时间同步

本文详细描述了如何在嵌入式环境中通过天准授时服务实现主机与128线束激光雷达的时间同步,涉及主从机设置、PTP授时代码以及激光雷达参数配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、先行将天准授时(主从机)及授时三行脚本(主机)打开

主从机起终端授时:

sudo tztek-jetson-tool-cpld-test -d /dev/ttyTHS1 -t 3 -l 232 -b 9600
sudo systemctl restart gpsd
sudo systemctl restart chrony

 主机起终端(目前采用的是交换机,只对一个网口进行天准授时,后续采用域控制器直插就需要对每一个网口进行授时):

sudo jetson_clocks
sudo ptp4l -i eth1 -H -m --step_threshold=1

在主机上新起一个终端(不关闭上一个终端),将主机的系统时间同步到eth1网口 (目前采用的是交换机,只对一个网口进行天准授时,后续采用域控制器直插就需要对每一个网口进行授时):

sudo phc2sys -s CLOCK_REALTIME -c eth1 -w -E linreg -m -S 0.1

2、128线束激光雷达与32线束激光雷达时间相差8小时(UTC+8/UTC+0),保持时间一致性,在128线束激光雷达驱动中找到 lslidar_driver.cpp文件,找到PTP授时(硬件授时)在

if (use_time_service)
        {
            if ("ch128x1" == lidar_type || "ch64w" == lidar_type)
            {
                if (packet->data[1205] == 0x01)
                {
                    this->packetTimeStamp[4] = packet->data[1199];
                    this->packetTimeStamp[5] = packet->data[1198];
                    this->packetTimeStamp[6] = packet->data[1197];
                }
                else if (packet->data[1205] == 0x02)
                {
                    this->packetTimeStamp[4] = packet->data[1199];
                }

                // struct tm cur_time{};
                memset(&cur_time, 0, sizeof(cur_time));
                cur_time.tm_sec = this->packetTimeStamp[4];
                cur_time.tm_min = this->packetTimeStamp[5];
                cur_time.tm_hour = this->packetTimeStamp[6];
                cur_time.tm_mday = this->packetTimeStamp[7];
                cur_time.tm_mon = this->packetTimeStamp[8] - 1;
                cur_time.tm_year = this->packetTimeStamp[9] + 2000 - 1900;
                packet_timestamp_s = timegm(&cur_time);
                if (time_service_mode == "gps")
                { // gps
                    packet_timestamp_ns = (packet->data[1203] +
                                           packet->data[1202] * pow(2, 8) +
                                           packet->data[1201] * pow(2, 16) +
                                           packet->data[1200] * pow(2, 24)) *
                                          1e3; // ns
                }
                else
                { // ptp
                    packet_timestamp_ns = packet->data[1203] +
                                          packet->data[1202] * pow(2, 8) +
                                          packet->data[1201] * pow(2, 16) +
                                          packet->data[1200] * pow(2, 24); // ns
                }
                //packet_timestamp = packet_timestamp_s + packet_timestamp_ns * 1e-9;
                packet_timestamp = packet_timestamp_s + 28800 + packet_timestamp_ns * 1e-9;

packet_timestamp_s后+28800及在128线束激光雷达的params/lslidar_t23_ch128x1_main.yaml文件中use_time_service:true即可

/ch128x1_main/lslidar_driver_soild:
  ros__parameters:
    device_ip: 192.168.1.200
    lidar_type: ch128x1 # 雷达类型  ch16x1/ch64w/ch128x1/ch128s1
    msop_port: 2000
    difop_port: 2001
    # pcl_type: true
    pcl_type: false #false
    add_multicast: false
    group_ip: 224.1.1.2
    frame_id: laser_link
    min_range: 0.15
    max_range: 60.0
    packet_rate: 6737.0
    angle_disable_min: 0.0
    angle_disable_max: 0.0
    topic_name: /lslidar/main #主雷达
    horizontal_angle_resolution: 0.2 #10Hz:0.2  20Hz:0.4 5Hz: 0.1
    use_time_service: true #是否使用GPS/ptp/ntp授时
    echo_num: 0 #仅双回波模式下有效,0表示发布所有点云,1表示发布第一次回波点云,2表示发布第二次回波点云
    publish_scan: false
    channel_num: 8
    lidar_index: 1
    is_pretreatment: false #是否开启预处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值