Time Synchronization - RobustFieldAutonomyLab/bluerov GitHub Wiki

This function (https://github.com/RobustFieldAutonomyLab/bluerov/commit/df5509b20be00a5d19c9cf2d138f75cf101984e6) implements the algorithm in https://github.com/ros-drivers/urg_node/blob/d2722c60f1b4713bbe1d39f32849090dece0104d/src/urg_c_wrapper.cpp#L1052, which is to synchronize the time between hardware and system (ros::Time). A more advanced algorithm could be added https://github.com/ethz-asl/cuckoo_time_translator.

def sync_time(time_stamp, system_time_stamp):
    global hardware_clock, last_hardware_time_stamp, hardware_clock_adj, adj_count
    delta = time_stamp - last_hardware_time_stamp
    hardware_clock += delta
    cur_adj = system_time_stamp.to_sec() - hardware_clock
    if adj_count > 0:
        hardware_clock_adj = adj_alpha * cur_adj + (1.0 - adj_alpha) * hardware_clock_adj
    else:
        hardware_clock_adj = cur_adj
    
    adj_count += 1
    last_hardware_time_stamp = time_stamp
    
    stamp = system_time_stamp
    if adj_count > 100:
        stamp = stamp.from_sec(hardware_clock + hardware_clock_adj)
        
        if abs((stamp - system_time_stamp).to_sec()) > 0.1:
            adj_count = 0
            hardware_clock = 0.0
            last_hardware_time_stamp = 0.0
            stamp = system_time_stamp
    return stamp

DVL

IMU

Oculus Sonar

The hardware clock of Oculus sonar is not stable.