Time Sync
A client for the time-sync service.
The time-sync service helps track the difference between the robot’s system clock and the system clock of clients, and sends an estimate of this difference to the client. The client uses this information when it needs to send a timestamp to the robot in a request proto. Timestamps in request protos generally need to be specified relative to the robot’s system clock.
- exception bosdyn.client.time_sync.TimeSyncError[source]
- Bases: - Error- General class of errors for TimeSync non-response / non-grpc errors. 
- exception bosdyn.client.time_sync.NotEstablishedError[source]
- Bases: - TimeSyncError- Client has not established time-sync with the robot. 
- exception bosdyn.client.time_sync.TimedOutError[source]
- Bases: - TimeSyncError- Exceeded deadline to achieve time-sync. 
- exception bosdyn.client.time_sync.InactiveThreadError[source]
- Bases: - TimeSyncError- Time-sync thread is no longer running. 
- class bosdyn.client.time_sync.TimeSyncClient[source]
- Bases: - BaseClient- A client for establishing time-sync with a server/robot. - default_service_name = 'time-sync'
 - service_type = 'bosdyn.api.TimeSyncService'
 - get_time_sync_update(previous_round_trip, clock_identifier, **kwargs)[source]
- Obtain an initial or updated timesync estimate with server. - Parameters:
- previous_round_trip (bosdyn.api.TimeSyncRoundTrip) – None on first rpc call, then fill out with previous response from server. 
- clock_identifier (string) – Empty on first call, assigned by server in first response. 
 
- Raises:
- RpcError – Problem communicating with the robot. 
 
 
- bosdyn.client.time_sync.robot_time_range_from_nanoseconds(start_nsec, end_nsec, time_sync_endpoint=None)[source]
- Generate timespan as a TimeRange proto, in robot time. - If time_sync_endpoint is a TimeSyncEndpoint, the time_spec is in the local clock and will
- be converted to robot_time. 
- If the input times are already in the robot clock, do not specify time_sync_endpoint and
- the times will not be converted. 
 - Parameters:
- None (end_nsec nanoseconds since the Unix epoch or) – 
- None – 
- None. (time_sync_endpoint Either TimeSyncEndpoint or) – 
 
- Returns:
- return bosdyn.api.TimeRange time range in robot time 
 
- bosdyn.client.time_sync.robot_time_range_from_datetimes(start_datetime, end_datetime, time_sync_endpoint=None)[source]
- Generate timespan as a TimeRange proto, in robot time. - If time_sync_endpoint is a TimeSyncEndpoint, the time_spec is in the local clock and will
- be converted to robot_time. 
- If the input times are already in the robot clock, do not specify time_sync_endpoint and
- the times will not be converted. 
 - Parameters:
- start_datetime – timestamp.timestamp or None 
- end_datetime – timestamp.timestamp or None 
- time_sync_endpoint – Either TimeSyncEndpoint or None. 
 
- Returns:
- return bosdyn.api.TimeRange time range in robot time 
 
- bosdyn.client.time_sync.timespec_to_robot_timespan(timespan_spec, time_sync_endpoint=None)[source]
- Generate timespan as TimeRange proto, in robot time. - If time_sync_endpoint is a TimeSyncEndpoint, the time_spec is in the local clock and will
- be converted to robot_time. 
- If the input times are already in the robot clock, do not specify time_sync_endpoint and
- the times will not be converted. 
 - Parameters:
- string (timespan_spec '{val}-{val}' or '{val}' time spec) – 
- None. (time_sync_endpoint Either TimeSyncEndpoint or) – 
 
- Returns:
- return bosdyn.api.TimeRange time range in robot time 
 
- bosdyn.client.time_sync.update_time_filter(client, timestamp, timesync_endpoint)[source]
- Set or convert fields of the proto that need timestamps in the robot’s clock. - Parameters:
- timestamp (float) – Client time, such as from time.time(). 
- timesync_endpoint (TimeSyncEndpoint) – A timesync endpoint associated with the robot object. 
 
- Raises:
- bosdyn.client.robot_command.NoTimeSyncError – Could not find the timesync endpoint for the robot to convert the time. 
 
- bosdyn.client.time_sync.update_timestamp_filter(client, timestamp, timesync_endpoint)[source]
- Set or convert fields of the proto that need timestamps in the robot’s clock. - Parameters:
- timestamp (google.protobuf.Timestamp) – Client time. 
- timesync_endpoint (TimeSyncEndpoint) – A timesync endpoint associated with the robot object. 
 
- Raises:
- bosdyn.client.robot_command.NoTimeSyncError – Could not find the timesync endpoint for the robot to convert the time. 
 
- class bosdyn.client.time_sync.TimeSyncEndpoint(time_sync_client)[source]
- Bases: - object- A wrapper that uses a TimeSyncClient object to establish and maintain timesync with a robot. - This class manages internal state, including a clock identifier and previous best time sync estimates. This class automatically builds requests passed to the TimeSyncClient, so users don’t have to worry about the details of establishing and maintaining timesync. - This object is thread-safe. - property response
- The last response message from the time-sync service. - Returns:
- The bosdyn.api.TimeSyncResponse proto last returned by the server, or None if unset. 
 
 - property has_established_time_sync
- Checks if the client has successfully established time-sync with the robot. - Returns:
- Boolean true if the previous time-sync update returned that time sync is OK. 
 
 - property round_trip_time
- The previous round trip time. - Returns:
- Round trip time as google.protobuf.Duration proto if available, otherwise None. 
 
 - property clock_identifier
- The clock identifier for the instance of the time-sync client. - Returns:
- A unique identifier for this client. Empty if get_new_estimate has not been called. 
 
 - property clock_skew
- The best current estimate of clock skew from the time-sync service. - Returns:
- The google.protobuf.Duration representing the clock skew. 
- Raises:
- NotEstablishedError – Time sync has not yet been established. 
 
 - establish_timesync(max_samples=25, break_on_success=False)[source]
- Perform time-synchronization until time sync established. - Parameters:
- max_samples (int) – The maximum number of times to attempt to establish time-sync through time-synchronization. 
- break_on_success (bool) – If true, stop performing the time-synchronization after time-sync is established. 
 
- Returns:
- Boolean true if valid timesync has been established. 
 
 - get_new_estimate()[source]
- Perform an update-cycle toward achieving time-synchronization. - Returns:
- Boolean true if valid timesync has been established. 
 
 - get_robot_time_converter()[source]
- Get a RobotTimeConverter for current estimate for robot clock skew from local time. - Returns:
- An instance of RobotTimeConvertor for the time-sync client. 
- Raises:
- NotEstablishedError – If time sync has not yet been established. 
 
 - robot_timestamp_from_local_secs(local_time_secs)[source]
- Convert a local time in seconds to a timestamp proto in robot time. - Parameters:
- local_time_secs (float) – Timestamp in seconds since the unix epoch (e.g., from time.time()). 
- Returns:
- google.protobuf.Timestamp representing local_time_secs in robot clock, or None if
- local_time_secs is None. 
 
- Raises:
- NotEstablishedError – Time sync has not yet been established. 
 
 
- class bosdyn.client.time_sync.TimeSyncThread(time_sync_client, time_sync_endpoint=None)[source]
- Bases: - object- Background thread for achieving and maintaining time-sync to the robot. - DEFAULT_TIME_SYNC_INTERVAL_SEC = 60
 - TIME_SYNC_SERVICE_NOT_READY_INTERVAL_SEC = 5
 - property time_sync_interval_sec
- Returns interval at which time-sync is updated in the thread. 
 - property should_exit
- Returns True if thread should stop iterating. 
 - wait_for_sync(timeout_sec=3.0)[source]
- Wait for up to the given timeout for time-sync to be achieved - Parameters:
- timeout_sec (float) – Maximum time (seconds) to wait for time-sync to be achieved. 
- Raises:
- InactiveThreadError – Thread is not running. 
- time_sync.TimedOutError – Deadline to achieve time-sync is exceeded. 
- Threading Exceptions – Errors from threading the processes. 
 
 
 - property has_established_time_sync
- Checks if the client has successfully established time-sync with the robot. - Returns:
- Boolean true if the previous time-sync update returned that time sync is OK. 
 
 - property stopped
- Returns True if thread is no longer running. 
 - property thread_exception
- Return any exception which ended the time-sync thread. 
 - property endpoint
- Return the TimeSyncEndpoint used by this thread. 
 - get_robot_clock_skew(timesync_timeout_sec=0)[source]
- Get current estimate for robot clock skew from local time. - Parameters:
- timesync_timeout_sec (float) – Time to wait for timesync before doing conversion. 
- Returns:
- Clock skew as a google.protobuf.Duration object 
- Raises:
- InactiveThreadError – Time-sync thread exits before time-sync. 
- time_sync.TimedOutError – Deadline to achieve time-sync is exceeded. 
- Threading Exceptions – Errors from threading the processes. 
 
 
 - get_robot_time_converter(timesync_timeout_sec=0)[source]
- Get a RobotTimeConverter for current estimate for robot clock skew from local time. - Parameters:
- timesync_timeout_sec (float) – Time to wait for timesync before doing conversion. 
- Raises:
- InactiveThreadError – Time-sync thread exits before time-sync. 
- time_sync.TimedOutError – Deadline to achieve time-sync is exceeded. 
- Threading Exceptions – Errors from threading the processes. 
 
 
 - robot_timestamp_from_local_secs(local_time_secs, timesync_timeout_sec=0)[source]
- Convert a local time in seconds to a timestamp proto in robot time. - Parameters:
- local_time_secs (float) – Timestamp in seconds since the unix epoch (e.g., from time.time()). 
- timesync_timeout_sec (float) – Time to wait for timesync before doing conversion. 
 
- Returns:
- google.protobuf.Timestamp representing local_time_secs in robot clock, or None if local_time_secs is None. 
- Raises:
- InactiveThreadError – Time-sync thread exits before time-sync. 
- time_sync.TimedOutError – Deadline to achieve time-sync is exceeded. 
- Threading Exceptions – Errors from threading the processes.