CINXE.COM

Time Sync — Spot 4.1.0 documentation

<!DOCTYPE html> <html class="writer-html5" lang="en" > <head> <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Time Sync &mdash; Spot 4.1.0 documentation</title> <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" /> <link rel="stylesheet" href="../../../../../_static/style.css" type="text/css" /> <link rel="shortcut icon" href="../../../../../_static/bd-favicon.png"/> <link rel="canonical" href="https://dev.bostondynamics.com/python/bosdyn-client/src/bosdyn/client/time_sync.html" /> <!--[if lt IE 9]> <script src="../../../../../_static/js/html5shiv.min.js"></script> <![endif]--> <script src="../../../../../_static/jquery.js"></script> <script src="../../../../../_static/_sphinx_javascript_frameworks_compat.js"></script> <script data-url_root="../../../../../" id="documentation_options" src="../../../../../_static/documentation_options.js"></script> <script src="../../../../../_static/doctools.js"></script> <script src="../../../../../_static/sphinx_highlight.js"></script> <script src="../../../../../_static/js/theme.js"></script> <link rel="index" title="Index" href="../../../../../genindex.html" /> <link rel="search" title="Search" href="../../../../../search.html" /> <link rel="next" title="Token Cache" href="token_cache.html" /> <link rel="prev" title="Spot Check" href="spot_check.html" /> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-7602095-5"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-7602095-5'); </script>X-Content-Type-Options: nosniff<script type="text/javascript" src="//script.crazyegg.com/pages/scripts/0096/9626.js" async="async"></script></head> <body class="wy-body-for-nav"> <div class="wy-grid-for-nav"> <nav data-toggle="wy-nav-shift" class="wy-nav-side"> <div class="wy-side-scroll"> <div class="wy-side-nav-search" > <a href='/readme'> <img src="../../../../../_static/bd-official-white.png" class="logo" alt="Logo"/> </a> <div class="version"> 4.1.0 </div> <div role="search"> <form id="rtd-search-form" class="wy-form" action="../../../../../search.html" method="get"> <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </div> </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> <ul class="current"> <li class="toctree-l1"><a class='reference internal' href='/docs/concepts/readme'>Concepts</a><ul> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/about_spot'>About Spot</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/orbit/about_orbit'>About Orbit (formerly Scout)</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/orbit/orbit_api'>Orbit API</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/networking'>Networking</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/base_services'>Base services</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/geometry_and_frames'>Geometry and Frames</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/robot_services'>Robot services</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/estop_service'>E-Stop</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/keepalive_service'>KeepAlive (BETA)</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/lease_service'>Lease</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/developing_api_services'>Developing API Services</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/service_customization'>Service Customization</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/faults'>Faults</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/autonomy/readme'>Autonomy services</a><ul> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/graphnav_tech_summary'>Autonomy Technical Summary</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/autonomous_navigation_code_examples'>Autonomous navigation code examples</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/components_of_autonomous_navigation'>Components of autonomous navigation</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/docking'>Docking</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/typical_autonomous_navigation_use_case'>Typical autonomous navigation use case</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/autonomous_navigation_services'>Autonomous navigation services</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/graphnav_service'>GraphNav service</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/graphnav_map_structure'>GraphNav map structure</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/graphnav_area_callbacks'>GraphNav area callbacks</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/initialization'>Initialization</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/localization'>Localization</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/graphnav_and_robot_locomotion'>GraphNav and robot locomotion</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/missions_service'>Missions service</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/autowalk_service'>Autowalk service</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/network_compute_bridge'>Network compute bridge</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/auto_return'>AutoReturn service</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/directed_exploration'>Directed Exploration</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/autonomy/gps'>GPS</a></li> </ul> </li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/choreography/readme'>Choreography</a><ul> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/choreography/choreography_service'>Choreography Service</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/choreography/move_reference'>Move Reference Guide</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/choreography/custom_gait'>CustomGait Reference</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/choreography/choreographer_setup'>Choreographer Setup</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/choreography/choreographer'>Choreographer Overview</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/choreography/robot_controls_in_choreographer'>Robot Connections in Choreographer</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/choreography/animations_in_choreographer'>Animations in Choreography</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/choreography/animation_file_specification'>Animation File Format</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/choreography/choreography_in_tablet'>Tablet Choreography Mode</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/choreography/choreography_in_autowalk'>Choreography Actions in Autowalk</a></li> </ul> </li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/joint_control/readme'>Joint Control API</a><ul> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/joint_control/supplemental_data'>Supplemental Robot Information</a><ul> <li class="toctree-l4"><a class='reference internal' href='/docs/concepts/joint_control/knee_torque_limits'>Knee Torque Limits</a></li> </ul> </li> </ul> </li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/arm/readme'>Spot Arm</a><ul> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/arm/arm_specification'>Arm and Gripper Specification</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/arm/arm_concepts'>Concepts</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/arm/arm_services'>Services</a></li> </ul> </li> <li class="toctree-l2"><a class='reference internal' href='/docs/concepts/data'>Spot Data</a><ul> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/data_acquisition_overview'>Data Acquisition Overview</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/data_acquisition_output'>Data Acquisition Output</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/writing_services_for_data_acquisition'>Integrate Payloads with the API</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/data_buffer_overview'>Data Buffer Overview</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/bddf'>BDDF File Format</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/concepts/data_acquisition_thermal_raw'>Thermal Raw Data Format</a></li> </ul> </li> </ul> </li> <li class="toctree-l1 current"><a class='reference internal' href='/docs/python/readme'>Python</a><ul class="current"> <li class="toctree-l2"><a class='reference internal' href='/docs/python/quickstart'>Quickstart</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/python/understanding_spot_programming'>Understanding Spot Programming</a></li> <li class="toctree-l2"><a class='reference internal' href='/python/examples/readme'>Examples</a><ul> <li class="toctree-l3"><a class='reference internal' href='/python/examples/docs/basic_service_examples'>Basic Service Examples</a><ul> <li class="toctree-l4"><a class='reference internal' href='/python/examples/hello_spot/readme'>Hello Spot</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/directory/readme'>Directory</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/get_robot_state/readme'>Get Robot State</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/get_robot_state_async/readme'>Get Robot State Async</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/get_image/readme'>Get Image</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/get_world_objects/readme'>Get World Objects</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/get_mission_state/readme'>Get Mission State</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/estop/readme'>E-Stop</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/time_sync/readme'>Time Sync</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/comms_test/readme'>Comms Test</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/disable_ir_emission/readme'>IR Enable/Disable</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/reset_safety_stop/readme'>Reset Safety Stop</a></li> </ul> </li> <li class="toctree-l3"><a class='reference internal' href='/python/examples/docs/robot_behavior_examples'>Robot Behavior and Commands Examples</a><ul> <li class="toctree-l4"><a class='reference internal' href='/python/examples/stance/readme'>Stance</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/frame_trajectory_command/readme'>Frame Trajectory</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/spot_light/readme'>Spot Light</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/upload_choreographed_sequence/readme'>Upload Choreographed Sequence</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/xbox_controller/readme'>Xbox Controller</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/wasd/readme'>WASD</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/docking/readme'>Docking</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/animation_recorder/readme'>Animation Recorder</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/auto_return/readme'>Auto Return</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/fan_command/readme'>Fan Commands</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_wasd/readme'>ARM WASD</a></li> </ul> </li> <li class="toctree-l3"><a class='reference internal' href='/python/examples/docs/arm_examples'>Arm Command Examples</a><ul> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_simple/readme'>Simple Arm Motion</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_stow_unstow/readme'>Stow/unstow Arm</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_freeze/readme'>Arm Freeze</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_and_mobility_command/readme'>Arm and Mobility Command</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_with_body_follow/readme'>Arm Command with Body Following</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_constrained_manipulation/readme'>Arm Constrained Manipulation</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_trajectory/readme'>Arm Trajectory</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_trajectory/readme#long-trajectory'>Long Trajectory</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_joint_move/readme'>Arm Joint Move Command</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_force_control/readme'>Arm Force Control Command</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_grasp/readme'>Arm Grasp Command</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_grasp_carry_overrides/readme'>Arm Grasp and Carry Overrides</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_gaze/readme'>Arm Gaze Command</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_surface_contact/readme'>Arm Command with Surface Contact</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_door/readme'>Arm Door Opening Command</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_walk_to_object/readme'>Walk to And Pick Up Object</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_gcode/readme'>Writing Gcode</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/gripper_camera_params/readme'>Gripper Camera Parameters</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_impedance_control/readme'>Arm Impedance Control</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/inverse_kinematics/readme'>Inverse Kinematics</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/arm_wasd/readme'>Arm WASD</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/joint_control/readme'>Wiggle Arm</a></li> </ul> </li> <li class="toctree-l3"><a class='reference internal' href='/python/examples/docs/payloads_examples'>Payloads and Registration Examples</a><ul> <li class="toctree-l4"><a class='reference internal' href='/python/examples/payloads/readme'>Payloads</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/self_registration/readme'>Self Registration</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/service_faults/readme'>Faults</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/velodyne_client/readme'>Velodyne</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/core_io_gpio/readme'>CORE I/O GPIO</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/metrics_over_coreio/readme'>Overview</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/metrics_over_coreio/readme#usage'>Usage</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/metrics_over_coreio/readme#components'>Components</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/metrics_over_coreio/readme#recommended-debugging'>Recommended debugging</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/extensions/readme'>Extensions</a></li> </ul> </li> <li class="toctree-l3"><a class='reference internal' href='/python/examples/docs/perception_world_objects_examples'>Perception and World Objects Examples</a><ul> <li class="toctree-l4"><a class='reference internal' href='/python/examples/get_image/readme'>Get Image</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/get_world_objects/readme'>Get World Objects</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/world_object_with_image_coordinates/readme'>World Object With Image Coordinates</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/world_object_mutations/readme'>World Object Mutations</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/visualizer/readme'>Visualizer</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/ricoh_theta/readme'>Ricoh Theta</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/gripper_camera_params/readme'>Gripper Camera Parameters</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/spot_cam/readme'>Spot CAM Services</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/spot_cam/readme#spot-cam-video-core-io-extension-example'>Spot Cam Video Core IO Extension Example</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/stitch_front_images/readme'>Stitch Front Images</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/get_depth_plus_visual_image/readme'>Project Depth Data on Visual Images</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/service_customization/custom_parameter_image_server/readme'>Custom Parameter Image Server</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/fiducial_follow/readme'>Fiducial Follow</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/spot_tensorflow_detector/readme'>Tensorflow Detector</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/service_customization/custom_parameter_ncb_worker/readme'>Custom Parameter Tensorflow Detector</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/network_compute_bridge/readme'>Machine Learning with the Network Compute Bridge</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/network_compute_bridge/fire_extinguisher_server/readme'>Fire Extinguisher Detector with the Network Compute Bridge</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/ray_cast/readme'>Ray Cast</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/user_nogo_regions/readme'>No-Go Regions</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/gps_service/readme'>GPS</a></li> </ul> </li> <li class="toctree-l3"><a class='reference internal' href='/python/examples/docs/logging_examples'>Logging Examples</a><ul> <li class="toctree-l4"><a class='reference internal' href='/python/examples/bddf_download/readme'>BDDF Download</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/data_buffer/readme'>Data Buffer</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/data_service/readme'>Data Service</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/logging/readme'>Logging</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/log_status/readme'>Log Status</a></li> </ul> </li> <li class="toctree-l3"><a class='reference internal' href='/python/examples/docs/data_acquisition_examples'>Data Acquisition Examples</a><ul> <li class="toctree-l4"><a class='reference internal' href='/python/examples/data_acquisition_service/readme'>Data Acquisition Service</a><ul> <li class="toctree-l5"><a class='reference internal' href='/python/examples/data_acquisition_service/signals_coreio_modem_plugin/readme'>Modem Signals</a></li> </ul> </li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/service_faults/readme'>Faults</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/ricoh_theta/readme'>Ricoh Theta</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/service_customization/custom_parameter_image_server/readme'>Custom Parameter Image Service</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/service_customization/custom_parameters_data_acquisition/readme'>Custom Parameter Data Acquisition Plugin</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/get_image/readme'>Test Image Service Implementation with Get Image</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/post_docking_callbacks/readme'>Post Docking Callbacks</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/cloud_upload/readme'>Cloud Upload</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/comms_mapping/readme'>Comms image service</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/comms_mapping/readme#how-to-use'>How to use</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/data_acquisition_service/signals_coreio_modem_plugin/readme'>CoreIO Modem Signals Plugin</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/tester_programs/readme'>Tester Programs</a></li> </ul> </li> <li class="toctree-l3"><a class='reference internal' href='/python/examples/docs/autonomy_and_missions_examples'>Autonomy and Missions Examples</a><ul> <li class="toctree-l4"><a class='reference internal' href='/python/examples/graph_nav_anchoring_optimization/readme'>Graph Nav Anchoring Optimization</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/graph_nav_command_line/readme'>GraphNav and Recording Service Command Line Interfaces</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/graph_nav_command_line/readme#example-programs'>Example Programs</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/graph_nav_extract_point_cloud/readme'>Graph Nav Extract Point Cloud</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/graph_nav_view_map/readme'>Graph Nav View Map</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/graph_nav_view_gps/readme'>Graph Nav View GPS Data</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/get_mission_state/readme'>Get Mission State</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/remote_mission_service/readme'>Remote Mission Service</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/mission_question_answerer/readme'>Mission Question Answerer</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/mission_recorder/readme'>Mission Recorder</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/replay_mission/readme'>Replay Mission</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/post_docking_callbacks/readme'>Post Docking Callbacks</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/area_callback/readme'>Area Callbacks</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/edit_autowalk/readme'>Edit Autowalk</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/record_autowalk/readme'>Record Autowalk</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/extract_images_from_walk/readme'>Extract Images from Autowalk</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/network_request_callback/readme'>Network Request Callback</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/network_request_callback/readme#id1'>Network Request Callback</a></li> </ul> </li> <li class="toctree-l3"><a class='reference internal' href='/python/examples/docs/joint_control_examples'>Joint Control API Examples</a></li> <li class="toctree-l3"><a class='reference internal' href='/python/examples/docs/orbit'>Orbit</a><ul> <li class="toctree-l4"><a class='reference internal' href='/python/examples/orbit/hello_orbit/readme'>Hello Orbit</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/orbit/export_run_archives/readme'>Export Run Archives</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/orbit/export_site_walk_archives/readme'>Export Sitewalk Archives</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/orbit/anomalies/readme'>Anomalies</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/orbit/schedule_mission/readme'>Schedule Mission</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/orbit/runs_response/readme'>Runs Response</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/orbit/send_robot_back_to_dock/readme'>Return to Dock</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/orbit/toggle_mission_based_on_weather/readme'>Mission Toggle</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/orbit/webhook/readme'>Webhook</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/orbit/backups/readme'>Backups</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/orbit/webhook_integration/readme'>Webhook Integrations</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/examples/orbit/webhook_integration/readme#example-overview'>Example Overview</a></li> </ul> </li> </ul> </li> <li class="toctree-l2 current"><a class='reference internal' href='/python/readme'>Python Reference Guide</a><ul class="current"> <li class="toctree-l3 current"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/readme'>Client</a><ul class="current"> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/area_callback'>Area Callback</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/area_callback_region_handler_base'>Area Callback Region Handler</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/area_callback_service_runner'>Area Callback Service Runner</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/area_callback_service_servicer'>Area Callback Servicer</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/area_callback_service_utils'>Area Callback Service Utils</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/arm_surface_contact'>Arm Surface Contact</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/async_tasks'>Async Tasks</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/auth'>Auth</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/auto_return'>Auto Return</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/autowalk'>Autowalk</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/bddf'>BDDF</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/bddf_download'>BDDF Download</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/channel'>Channel</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/command_line'>Command</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/common'>Common</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/data_acquisition'>Data Acquisition</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/data_acquisition_helpers'>Data Acquisition Helpers</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/data_acquisition_plugin'>Data Acquisition Plugin</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/data_acquisition_plugin_service'>Data Acquisition Plugin Service</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/data_acquisition_store'>Data Acquisition Store</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/data_buffer'>Data Buffer</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/data_chunk'>Data Chunk</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/data_service'>Data Service</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/directory_registration'>Directory Registration</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/directory'>Directory</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/docking'>Docking</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/door'>Door</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/estop'>E-Stop</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/exceptions'>Exceptions</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/fault'>Fault</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/frame_helpers'>Frame Helpers</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/graph_nav'>Graph Nav</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/gripper_camera_param'>Gripper Camera Params</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/gps/readme'>GPS</a><ul> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/gps/aggregator_client'>Aggregator Client</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/gps/gps_listener'>GPS Listener</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/gps/nmeaparser'>NMEA Parser</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/gps/registration_client'>Registration Client</a></li> </ul> </li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/image'>Image</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/image_service_helpers'>Image Service Helpers</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/inverse_kinematics'>Inverse Kinematics</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/ir_enable_disable'>IR Enable/Disable</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/keepalive'>Keep Alive</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/lease'>Lease</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/lease_resource_hierarchy'>Lease Resource Hierarchy</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/lease_validator'>Lease Validator</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/license'>License</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/local_grid'>Local Grid</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/log_status'>Log Status</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/math_helpers'>Math Helpers</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/manipulation_api_client'>Manipulation API</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/map_processing'>Map Processing</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/metrics_logging'>Metrics Logging</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/network_compute_bridge_client'>Network Compute Bridge</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/payload_registration'>Payload Registration</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/payload'>Payload</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/point_cloud'>Point Cloud</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/power'>Power</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/processors'>Processors</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/ray_cast'>Ray casting</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/recording'>Recording</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/robot_command'>Robot Command</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/robot_id'>Robot ID</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/robot'>Robot</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/robot_state'>Robot State</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/sdk'>SDK</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/server_util'>Server Util</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/service_customization_helpers'>Service Customization Helpers</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/signals_helpers'>Signals Helpers</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/spot_cam/readme'>Spot CAM</a><ul> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/spot_cam/audio'>Audio</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/spot_cam/compositor'>Compositor</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/spot_cam/health'>Health</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/spot_cam/lighting'>Lighting</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/spot_cam/lights_helper'>Lights Helper</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/spot_cam/media_log'>Media Log</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/spot_cam/network'>Network</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/spot_cam/power'>Power</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/spot_cam/ptz'>PTZ</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/spot_cam/streamquality'>Stream Quality</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/spot_cam/version'>Version</a></li> </ul> </li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/spot_check'>Spot Check</a></li> <li class="toctree-l4 current"><a class="current reference internal" href="#">Time Sync</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/token_cache'>Token Cache</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/token_manager'>Token Manager</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/units_helpers'>Units Helpers</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/util'>Util</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/world_object'>World Object</a></li> </ul> </li> <li class="toctree-l3"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/readme'>Core</a><ul> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/readme'>BDDF</a><ul> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/base_data_reader'>Base Data Reader</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/block_writer'>Block Writer</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/bosdyn'>BDDF Conventions</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/common'>Common</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/data_reader'>Data Reader</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/data_writer'>Data Writer</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/file_indexer'>File Indexer</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/grpc_proto_reader'>GRPC Proto Reader</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/grpc_reader'>GRPC Reader</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/grpc_service_reader'>GRPC Service Reader</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/grpc_service_writer'>GRPC Service Writer</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/message_reader'>Message Reader</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/pod_series_reader'>POD Series Reader</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/pod_series_writer'>POD Series Writer</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/protobuf_channel_reader'>Protobuf Channel Reader</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/protobuf_reader'>Protobuf Reader</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/protobuf_series_writer'>Protobuf Series Writer</a></li> <li class="toctree-l5"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/bddf/stream_data_reader'>Stream Data Reader</a></li> </ul> </li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/geometry'>Geometry</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/util'>Util</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-core/src/bosdyn/deprecated'>Deprecated</a></li> </ul> </li> <li class="toctree-l3"><a class='reference internal' href='/python/bosdyn-mission/src/bosdyn/mission/readme'>Mission</a><ul> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-mission/src/bosdyn/mission/client'>Client</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-mission/src/bosdyn/mission/constants'>Constants</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-mission/src/bosdyn/mission/exceptions'>Exceptions</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-mission/src/bosdyn/mission/remote_client'>Remote Client</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-mission/src/bosdyn/mission/server_util'>Server Util</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-mission/src/bosdyn/mission/util'>Util</a></li> </ul> </li> <li class="toctree-l3"><a class='reference internal' href='/python/bosdyn-choreography-client/src/bosdyn/choreography/client/readme'>Choreography</a><ul> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-choreography-client/src/bosdyn/choreography/client/choreography'>Choreography</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_to_proto'>Animation File to Proto</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_conversion_helpers'>Animation File to Proto Helpers</a></li> </ul> </li> <li class="toctree-l3"><a class='reference internal' href='/python/bosdyn-orbit/src/bosdyn/orbit/readme'>Orbit (formerly Scout)</a><ul> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-orbit/src/bosdyn/orbit/client'>Client</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-orbit/src/bosdyn/orbit/utils'>Utils</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-orbit/src/bosdyn/orbit/exceptions'>Exceptions</a></li> </ul> </li> <li class="toctree-l3"><a class='reference internal' href='/python/bosdyn-scout/src/bosdyn/scout/readme'>Scout (deprecated)</a><ul> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-scout/src/bosdyn/scout/client'>Client</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-scout/src/bosdyn/scout/utils'>Utils</a></li> <li class="toctree-l4"><a class='reference internal' href='/python/bosdyn-scout/src/bosdyn/scout/exceptions'>Exceptions</a></li> </ul> </li> </ul> </li> <li class="toctree-l2"><a class='reference internal' href='/docs/python/fetch_tutorial/fetch1'>Fetch Tutorial</a><ul> <li class="toctree-l3"><a class='reference internal' href='/docs/python/fetch_tutorial/fetch2'>Part 2: Training the Model</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/python/fetch_tutorial/fetch3'>Part 3: Evaluating the Model</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/python/fetch_tutorial/fetch4'>Part 4: Autonomous Pick Up</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/python/fetch_tutorial/fetch5'>Part 5: Detecting People and Playing Fetch</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/python/fetch_tutorial/fetch6'>Part 6: Running the model on Core IO</a></li> </ul> </li> <li class="toctree-l2"><a class='reference internal' href='/docs/python/daq_tutorial/daq1'>Data Collection Tutorial</a><ul> <li class="toctree-l3"><a class='reference internal' href='/docs/python/daq_tutorial/daq2'>Part 2: Capturing images</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/python/daq_tutorial/daq3'>Part 3: Capturing other data</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/python/daq_tutorial/daq4'>Part 4: Deploying to the CORE I/O</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/python/daq_tutorial/daq5'>Part 5: Collecting data</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/python/daq_tutorial/daq6'>Part 6: Processing collected data</a></li> </ul> </li> </ul> </li> <li class="toctree-l1"><a class='reference internal' href='/docs/payload/readme'>Payloads</a><ul> <li class="toctree-l2"><a class='reference internal' href='/docs/payload/payload_configuration_requirements'>Payload configuration requirements</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/payload/mechanical_interfaces'>Mechanical interfaces</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/payload/robot_mounting_rails'>Robot mounting rails</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/payload/guidelines_for_robust_payload_design'>Guidelines for robust payload design</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/payload/robot_electrical_interface'>Robot electrical interface</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/payload/coreio_documentation'>CORE I/O Documentation</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/payload/coreio_openvpn_extension'>CORE I/O OpenVPN Extension</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/payload/configuring_payload_software'>Configuring payload software</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/payload/docker_containers'>Dockerize payload software</a></li> <li class="toctree-l2"><a class='reference internal' href='/docs/payload/spot_core_documentation'>Pre-3.2 Spot CORE Documentation</a><ul> <li class="toctree-l3"><a class='reference internal' href='/docs/payload/spot_core_portainer'>Configuring Docker containers in SpotCORE</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/payload/spot_core_cockpit'>Spot CORE system management tool: Cockpit</a></li> <li class="toctree-l3"><a class='reference internal' href='/docs/payload/spot_core_vnc'>Spot CORE VNC</a></li> </ul> </li> </ul> </li> <li class="toctree-l1"><a class='reference internal' href='/docs/protos/readme'>API Protocol</a><ul> <li class="toctree-l2"><a class='reference internal' href='/docs/protos/style_guide'>Style Guide</a></li> <li class="toctree-l2"><a class='reference internal' href='/protos/bosdyn/api/readme'>Proto Reference Guide</a><ul> <li class="toctree-l3"><a class='reference internal' href='/protos/bosdyn/api/proto_reference'>Protos</a></li> </ul> </li> </ul> </li> <li class="toctree-l1"><a class='reference internal' href='/docs/release_notes'>Release Notes</a></li> <li class="toctree-l1"><a class="reference external" href="https://github.com/boston-dynamics/spot-sdk">SDK Repository</a></li> </ul> </div> </div> </nav> <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > <i data-toggle="wy-nav-top" class="fa fa-bars"></i> <a href='/readme'>Spot</a> </nav> <div class="wy-nav-content"> <div class="rst-content"> <div role="navigation" aria-label="Page navigation"> <ul class="wy-breadcrumbs"> <li><a aria-label='Home' class='icon icon-home' href='/readme'></a></li> <li class="breadcrumb-item"><a href='/docs/python/readme'>Python Library</a></li> <li class="breadcrumb-item"><a href='/python/readme'>Boston Dynamics Python Reference Guide</a></li> <li class="breadcrumb-item"><a href='/python/bosdyn-client/src/bosdyn/client/readme'>Python Client</a></li> <li class="breadcrumb-item active">Time Sync</li> <li class="wy-breadcrumbs-aside"> </li> </ul> <hr/> </div> <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <section id="module-bosdyn.client.time_sync"> <span id="time-sync"></span><h1>Time Sync<a class="headerlink" href="#module-bosdyn.client.time_sync" title="Permalink to this heading"></a></h1> <p>A client for the time-sync service.</p> <p>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.</p> <dl class="py exception"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncError"> <em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">bosdyn.client.time_sync.</span></span><span class="sig-name descname"><span class="pre">TimeSyncError</span></span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimeSyncError'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncError" title="Permalink to this definition"></a></dt> <dd><p>Bases: <a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/exceptions#bosdyn.client.exceptions.Error' title='bosdyn.client.exceptions.Error'><code class="xref py py-class docutils literal notranslate"><span class="pre">Error</span></code></a></p> <p>General class of errors for TimeSync non-response / non-grpc errors.</p> </dd></dl> <dl class="py exception"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.NotEstablishedError"> <em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">bosdyn.client.time_sync.</span></span><span class="sig-name descname"><span class="pre">NotEstablishedError</span></span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#NotEstablishedError'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.NotEstablishedError" title="Permalink to this definition"></a></dt> <dd><p>Bases: <a class="reference internal" href="#bosdyn.client.time_sync.TimeSyncError" title="bosdyn.client.time_sync.TimeSyncError"><code class="xref py py-class docutils literal notranslate"><span class="pre">TimeSyncError</span></code></a></p> <p>Client has not established time-sync with the robot.</p> </dd></dl> <dl class="py exception"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimedOutError"> <em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">bosdyn.client.time_sync.</span></span><span class="sig-name descname"><span class="pre">TimedOutError</span></span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimedOutError'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimedOutError" title="Permalink to this definition"></a></dt> <dd><p>Bases: <a class="reference internal" href="#bosdyn.client.time_sync.TimeSyncError" title="bosdyn.client.time_sync.TimeSyncError"><code class="xref py py-class docutils literal notranslate"><span class="pre">TimeSyncError</span></code></a></p> <p>Exceeded deadline to achieve time-sync.</p> </dd></dl> <dl class="py exception"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.InactiveThreadError"> <em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">bosdyn.client.time_sync.</span></span><span class="sig-name descname"><span class="pre">InactiveThreadError</span></span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#InactiveThreadError'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.InactiveThreadError" title="Permalink to this definition"></a></dt> <dd><p>Bases: <a class="reference internal" href="#bosdyn.client.time_sync.TimeSyncError" title="bosdyn.client.time_sync.TimeSyncError"><code class="xref py py-class docutils literal notranslate"><span class="pre">TimeSyncError</span></code></a></p> <p>Time-sync thread is no longer running.</p> </dd></dl> <dl class="py class"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncClient"> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">bosdyn.client.time_sync.</span></span><span class="sig-name descname"><span class="pre">TimeSyncClient</span></span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimeSyncClient'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncClient" title="Permalink to this definition"></a></dt> <dd><p>Bases: <a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/common#bosdyn.client.common.BaseClient' title='bosdyn.client.common.BaseClient'><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseClient</span></code></a></p> <p>A client for establishing time-sync with a server/robot.</p> <dl class="py attribute"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncClient.default_service_name"> <span class="sig-name descname"><span class="pre">default_service_name</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'time-sync'</span></em><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncClient.default_service_name" title="Permalink to this definition"></a></dt> <dd></dd></dl> <dl class="py attribute"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncClient.service_type"> <span class="sig-name descname"><span class="pre">service_type</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'bosdyn.api.TimeSyncService'</span></em><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncClient.service_type" title="Permalink to this definition"></a></dt> <dd></dd></dl> <dl class="py method"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncClient.get_time_sync_update"> <span class="sig-name descname"><span class="pre">get_time_sync_update</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">previous_round_trip</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">clock_identifier</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimeSyncClient.get_time_sync_update'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncClient.get_time_sync_update" title="Permalink to this definition"></a></dt> <dd><p>Obtain an initial or updated timesync estimate with server.</p> <dl class="field-list simple"> <dt class="field-odd">Parameters<span class="colon">:</span></dt> <dd class="field-odd"><ul class="simple"> <li><p><strong>previous_round_trip</strong> (<em>bosdyn.api.TimeSyncRoundTrip</em>) – None on first rpc call, then fill out with previous response from server.</p></li> <li><p><strong>clock_identifier</strong> (<em>string</em>) – Empty on first call, assigned by server in first response.</p></li> </ul> </dd> <dt class="field-even">Raises<span class="colon">:</span></dt> <dd class="field-even"><p><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/exceptions#bosdyn.client.exceptions.RpcError' title='bosdyn.client.exceptions.RpcError'><strong>RpcError</strong></a> – Problem communicating with the robot.</p> </dd> </dl> </dd></dl> <dl class="py method"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncClient.get_time_sync_update_async"> <span class="sig-name descname"><span class="pre">get_time_sync_update_async</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">previous_round_trip</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">clock_identifier</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimeSyncClient.get_time_sync_update_async'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncClient.get_time_sync_update_async" title="Permalink to this definition"></a></dt> <dd><p>Async version of get_time_sync_update()</p> </dd></dl> </dd></dl> <dl class="py function"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.robot_time_range_from_nanoseconds"> <span class="sig-prename descclassname"><span class="pre">bosdyn.client.time_sync.</span></span><span class="sig-name descname"><span class="pre">robot_time_range_from_nanoseconds</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">start_nsec</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">end_nsec</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">time_sync_endpoint</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#robot_time_range_from_nanoseconds'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.robot_time_range_from_nanoseconds" title="Permalink to this definition"></a></dt> <dd><p>Generate timespan as a TimeRange proto, in robot time.</p> <dl class="simple"> <dt>If time_sync_endpoint is a TimeSyncEndpoint, the time_spec is in the local clock and will</dt><dd><p>be converted to robot_time.</p> </dd> <dt>If the input times are already in the robot clock, do not specify time_sync_endpoint and</dt><dd><p>the times will not be converted.</p> </dd> </dl> <dl class="field-list simple"> <dt class="field-odd">Parameters<span class="colon">:</span></dt> <dd class="field-odd"><ul class="simple"> <li><p><strong>None</strong> (<em>end_nsec nanoseconds since the Unix epoch or</em>) – </p></li> <li><p><strong>None</strong> – </p></li> <li><p><strong>None.</strong> (<em>time_sync_endpoint Either TimeSyncEndpoint or</em>) – </p></li> </ul> </dd> <dt class="field-even">Returns<span class="colon">:</span></dt> <dd class="field-even"><p>return bosdyn.api.TimeRange time range in robot time</p> </dd> </dl> </dd></dl> <dl class="py function"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.robot_time_range_from_datetimes"> <span class="sig-prename descclassname"><span class="pre">bosdyn.client.time_sync.</span></span><span class="sig-name descname"><span class="pre">robot_time_range_from_datetimes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">start_datetime</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">end_datetime</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">time_sync_endpoint</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#robot_time_range_from_datetimes'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.robot_time_range_from_datetimes" title="Permalink to this definition"></a></dt> <dd><p>Generate timespan as a TimeRange proto, in robot time.</p> <dl class="simple"> <dt>If time_sync_endpoint is a TimeSyncEndpoint, the time_spec is in the local clock and will</dt><dd><p>be converted to robot_time.</p> </dd> <dt>If the input times are already in the robot clock, do not specify time_sync_endpoint and</dt><dd><p>the times will not be converted.</p> </dd> </dl> <dl class="field-list simple"> <dt class="field-odd">Parameters<span class="colon">:</span></dt> <dd class="field-odd"><ul class="simple"> <li><p><strong>start_datetime</strong> – timestamp.timestamp or None</p></li> <li><p><strong>end_datetime</strong> – timestamp.timestamp or None</p></li> <li><p><strong>time_sync_endpoint</strong> – Either TimeSyncEndpoint or None.</p></li> </ul> </dd> <dt class="field-even">Returns<span class="colon">:</span></dt> <dd class="field-even"><p>return bosdyn.api.TimeRange time range in robot time</p> </dd> </dl> </dd></dl> <dl class="py function"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.timespec_to_robot_timespan"> <span class="sig-prename descclassname"><span class="pre">bosdyn.client.time_sync.</span></span><span class="sig-name descname"><span class="pre">timespec_to_robot_timespan</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">timespan_spec</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">time_sync_endpoint</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#timespec_to_robot_timespan'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.timespec_to_robot_timespan" title="Permalink to this definition"></a></dt> <dd><p>Generate timespan as TimeRange proto, in robot time.</p> <dl class="simple"> <dt>If time_sync_endpoint is a TimeSyncEndpoint, the time_spec is in the local clock and will</dt><dd><p>be converted to robot_time.</p> </dd> <dt>If the input times are already in the robot clock, do not specify time_sync_endpoint and</dt><dd><p>the times will not be converted.</p> </dd> </dl> <dl class="field-list simple"> <dt class="field-odd">Parameters<span class="colon">:</span></dt> <dd class="field-odd"><ul class="simple"> <li><p><strong>string</strong> (<em>timespan_spec '{val}-{val}'</em><em> or </em><em>'{val}' time spec</em>) – </p></li> <li><p><strong>None.</strong> (<em>time_sync_endpoint Either TimeSyncEndpoint or</em>) – </p></li> </ul> </dd> <dt class="field-even">Returns<span class="colon">:</span></dt> <dd class="field-even"><p>return bosdyn.api.TimeRange time range in robot time</p> </dd> </dl> </dd></dl> <dl class="py function"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.update_time_filter"> <span class="sig-prename descclassname"><span class="pre">bosdyn.client.time_sync.</span></span><span class="sig-name descname"><span class="pre">update_time_filter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timestamp</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timesync_endpoint</span></span></em><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#update_time_filter'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.update_time_filter" title="Permalink to this definition"></a></dt> <dd><p>Set or convert fields of the proto that need timestamps in the robot’s clock.</p> <dl class="field-list simple"> <dt class="field-odd">Parameters<span class="colon">:</span></dt> <dd class="field-odd"><ul class="simple"> <li><p><strong>timestamp</strong> (<em>float</em>) – Client time, such as from time.time().</p></li> <li><p><strong>timesync_endpoint</strong> (<a class="reference internal" href="#bosdyn.client.time_sync.TimeSyncEndpoint" title="bosdyn.client.time_sync.TimeSyncEndpoint"><em>TimeSyncEndpoint</em></a>) – A timesync endpoint associated with the robot object.</p></li> </ul> </dd> <dt class="field-even">Raises<span class="colon">:</span></dt> <dd class="field-even"><p><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/robot_command#bosdyn.client.robot_command.NoTimeSyncError' title='bosdyn.client.robot_command.NoTimeSyncError'><strong>bosdyn.client.robot_command.NoTimeSyncError</strong></a> – Could not find the timesync endpoint for the robot to convert the time.</p> </dd> </dl> </dd></dl> <dl class="py function"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.update_timestamp_filter"> <span class="sig-prename descclassname"><span class="pre">bosdyn.client.time_sync.</span></span><span class="sig-name descname"><span class="pre">update_timestamp_filter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timestamp</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timesync_endpoint</span></span></em><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#update_timestamp_filter'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.update_timestamp_filter" title="Permalink to this definition"></a></dt> <dd><p>Set or convert fields of the proto that need timestamps in the robot’s clock.</p> <dl class="field-list simple"> <dt class="field-odd">Parameters<span class="colon">:</span></dt> <dd class="field-odd"><ul class="simple"> <li><p><strong>timestamp</strong> (<em>google.protobuf.Timestamp</em>) – Client time.</p></li> <li><p><strong>timesync_endpoint</strong> (<a class="reference internal" href="#bosdyn.client.time_sync.TimeSyncEndpoint" title="bosdyn.client.time_sync.TimeSyncEndpoint"><em>TimeSyncEndpoint</em></a>) – A timesync endpoint associated with the robot object.</p></li> </ul> </dd> <dt class="field-even">Raises<span class="colon">:</span></dt> <dd class="field-even"><p><a class='reference internal' href='/python/bosdyn-client/src/bosdyn/client/robot_command#bosdyn.client.robot_command.NoTimeSyncError' title='bosdyn.client.robot_command.NoTimeSyncError'><strong>bosdyn.client.robot_command.NoTimeSyncError</strong></a> – Could not find the timesync endpoint for the robot to convert the time.</p> </dd> </dl> </dd></dl> <dl class="py class"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncEndpoint"> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">bosdyn.client.time_sync.</span></span><span class="sig-name descname"><span class="pre">TimeSyncEndpoint</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">time_sync_client</span></span></em><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimeSyncEndpoint'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncEndpoint" title="Permalink to this definition"></a></dt> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p> <p>A wrapper that uses a TimeSyncClient object to establish and maintain timesync with a robot.</p> <p>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.</p> <p>This object is thread-safe.</p> <dl class="py property"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncEndpoint.response"> <em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">response</span></span><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncEndpoint.response" title="Permalink to this definition"></a></dt> <dd><p>The last response message from the time-sync service.</p> <dl class="field-list simple"> <dt class="field-odd">Returns<span class="colon">:</span></dt> <dd class="field-odd"><p>The bosdyn.api.TimeSyncResponse proto last returned by the server, or None if unset.</p> </dd> </dl> </dd></dl> <dl class="py property"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncEndpoint.has_established_time_sync"> <em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">has_established_time_sync</span></span><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncEndpoint.has_established_time_sync" title="Permalink to this definition"></a></dt> <dd><p>Checks if the client has successfully established time-sync with the robot.</p> <dl class="field-list simple"> <dt class="field-odd">Returns<span class="colon">:</span></dt> <dd class="field-odd"><p>Boolean true if the previous time-sync update returned that time sync is OK.</p> </dd> </dl> </dd></dl> <dl class="py property"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncEndpoint.round_trip_time"> <em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">round_trip_time</span></span><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncEndpoint.round_trip_time" title="Permalink to this definition"></a></dt> <dd><p>The previous round trip time.</p> <dl class="field-list simple"> <dt class="field-odd">Returns<span class="colon">:</span></dt> <dd class="field-odd"><p>Round trip time as google.protobuf.Duration proto if available, otherwise None.</p> </dd> </dl> </dd></dl> <dl class="py property"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncEndpoint.clock_identifier"> <em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">clock_identifier</span></span><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncEndpoint.clock_identifier" title="Permalink to this definition"></a></dt> <dd><p>The clock identifier for the instance of the time-sync client.</p> <dl class="field-list simple"> <dt class="field-odd">Returns<span class="colon">:</span></dt> <dd class="field-odd"><p>A unique identifier for this client. Empty if get_new_estimate has not been called.</p> </dd> </dl> </dd></dl> <dl class="py property"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncEndpoint.clock_skew"> <em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">clock_skew</span></span><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncEndpoint.clock_skew" title="Permalink to this definition"></a></dt> <dd><p>The best current estimate of clock skew from the time-sync service.</p> <dl class="field-list simple"> <dt class="field-odd">Returns<span class="colon">:</span></dt> <dd class="field-odd"><p>The google.protobuf.Duration representing the clock skew.</p> </dd> <dt class="field-even">Raises<span class="colon">:</span></dt> <dd class="field-even"><p><a class="reference internal" href="#bosdyn.client.time_sync.NotEstablishedError" title="bosdyn.client.time_sync.NotEstablishedError"><strong>NotEstablishedError</strong></a> – Time sync has not yet been established.</p> </dd> </dl> </dd></dl> <dl class="py method"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncEndpoint.establish_timesync"> <span class="sig-name descname"><span class="pre">establish_timesync</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">max_samples</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">25</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">break_on_success</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimeSyncEndpoint.establish_timesync'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncEndpoint.establish_timesync" title="Permalink to this definition"></a></dt> <dd><p>Perform time-synchronization until time sync established.</p> <dl class="field-list simple"> <dt class="field-odd">Parameters<span class="colon">:</span></dt> <dd class="field-odd"><ul class="simple"> <li><p><strong>max_samples</strong> (<em>int</em>) – The maximum number of times to attempt to establish time-sync through time-synchronization.</p></li> <li><p><strong>break_on_success</strong> (<em>bool</em>) – If true, stop performing the time-synchronization after time-sync is established.</p></li> </ul> </dd> <dt class="field-even">Returns<span class="colon">:</span></dt> <dd class="field-even"><p>Boolean true if valid timesync has been established.</p> </dd> </dl> </dd></dl> <dl class="py method"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncEndpoint.get_new_estimate"> <span class="sig-name descname"><span class="pre">get_new_estimate</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimeSyncEndpoint.get_new_estimate'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncEndpoint.get_new_estimate" title="Permalink to this definition"></a></dt> <dd><p>Perform an update-cycle toward achieving time-synchronization.</p> <dl class="field-list simple"> <dt class="field-odd">Returns<span class="colon">:</span></dt> <dd class="field-odd"><p>Boolean true if valid timesync has been established.</p> </dd> </dl> </dd></dl> <dl class="py method"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncEndpoint.get_robot_time_converter"> <span class="sig-name descname"><span class="pre">get_robot_time_converter</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimeSyncEndpoint.get_robot_time_converter'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncEndpoint.get_robot_time_converter" title="Permalink to this definition"></a></dt> <dd><p>Get a RobotTimeConverter for current estimate for robot clock skew from local time.</p> <dl class="field-list simple"> <dt class="field-odd">Returns<span class="colon">:</span></dt> <dd class="field-odd"><p>An instance of RobotTimeConvertor for the time-sync client.</p> </dd> <dt class="field-even">Raises<span class="colon">:</span></dt> <dd class="field-even"><p><a class="reference internal" href="#bosdyn.client.time_sync.NotEstablishedError" title="bosdyn.client.time_sync.NotEstablishedError"><strong>NotEstablishedError</strong></a> – If time sync has not yet been established.</p> </dd> </dl> </dd></dl> <dl class="py method"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncEndpoint.robot_timestamp_from_local_secs"> <span class="sig-name descname"><span class="pre">robot_timestamp_from_local_secs</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">local_time_secs</span></span></em><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimeSyncEndpoint.robot_timestamp_from_local_secs'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncEndpoint.robot_timestamp_from_local_secs" title="Permalink to this definition"></a></dt> <dd><p>Convert a local time in seconds to a timestamp proto in robot time.</p> <dl class="field-list simple"> <dt class="field-odd">Parameters<span class="colon">:</span></dt> <dd class="field-odd"><p><strong>local_time_secs</strong> (<em>float</em>) – Timestamp in seconds since the unix epoch (e.g., from time.time()).</p> </dd> <dt class="field-even">Returns<span class="colon">:</span></dt> <dd class="field-even"><p><dl class="simple"> <dt>google.protobuf.Timestamp representing local_time_secs in robot clock, or None if</dt><dd><p>local_time_secs is None.</p> </dd> </dl> </p> </dd> <dt class="field-odd">Raises<span class="colon">:</span></dt> <dd class="field-odd"><p><a class="reference internal" href="#bosdyn.client.time_sync.NotEstablishedError" title="bosdyn.client.time_sync.NotEstablishedError"><strong>NotEstablishedError</strong></a> – Time sync has not yet been established.</p> </dd> </dl> </dd></dl> </dd></dl> <dl class="py class"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncThread"> <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">bosdyn.client.time_sync.</span></span><span class="sig-name descname"><span class="pre">TimeSyncThread</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">time_sync_client</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">time_sync_endpoint</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimeSyncThread'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncThread" title="Permalink to this definition"></a></dt> <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p> <p>Background thread for achieving and maintaining time-sync to the robot.</p> <dl class="py attribute"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncThread.DEFAULT_TIME_SYNC_INTERVAL_SEC"> <span class="sig-name descname"><span class="pre">DEFAULT_TIME_SYNC_INTERVAL_SEC</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">60</span></em><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncThread.DEFAULT_TIME_SYNC_INTERVAL_SEC" title="Permalink to this definition"></a></dt> <dd></dd></dl> <dl class="py attribute"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncThread.TIME_SYNC_SERVICE_NOT_READY_INTERVAL_SEC"> <span class="sig-name descname"><span class="pre">TIME_SYNC_SERVICE_NOT_READY_INTERVAL_SEC</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">5</span></em><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncThread.TIME_SYNC_SERVICE_NOT_READY_INTERVAL_SEC" title="Permalink to this definition"></a></dt> <dd></dd></dl> <dl class="py method"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncThread.start"> <span class="sig-name descname"><span class="pre">start</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimeSyncThread.start'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncThread.start" title="Permalink to this definition"></a></dt> <dd><p>Start the thread.</p> </dd></dl> <dl class="py method"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncThread.stop"> <span class="sig-name descname"><span class="pre">stop</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimeSyncThread.stop'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncThread.stop" title="Permalink to this definition"></a></dt> <dd><p>Shut down the thread if it is running.</p> </dd></dl> <dl class="py property"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncThread.time_sync_interval_sec"> <em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">time_sync_interval_sec</span></span><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncThread.time_sync_interval_sec" title="Permalink to this definition"></a></dt> <dd><p>Returns interval at which time-sync is updated in the thread.</p> </dd></dl> <dl class="py property"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncThread.should_exit"> <em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">should_exit</span></span><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncThread.should_exit" title="Permalink to this definition"></a></dt> <dd><p>Returns True if thread should stop iterating.</p> </dd></dl> <dl class="py method"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncThread.wait_for_sync"> <span class="sig-name descname"><span class="pre">wait_for_sync</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">timeout_sec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">3.0</span></span></em><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimeSyncThread.wait_for_sync'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncThread.wait_for_sync" title="Permalink to this definition"></a></dt> <dd><p>Wait for up to the given timeout for time-sync to be achieved</p> <dl class="field-list simple"> <dt class="field-odd">Parameters<span class="colon">:</span></dt> <dd class="field-odd"><p><strong>timeout_sec</strong> (<em>float</em>) – Maximum time (seconds) to wait for time-sync to be achieved.</p> </dd> <dt class="field-even">Raises<span class="colon">:</span></dt> <dd class="field-even"><ul class="simple"> <li><p><a class="reference internal" href="#bosdyn.client.time_sync.InactiveThreadError" title="bosdyn.client.time_sync.InactiveThreadError"><strong>InactiveThreadError</strong></a> – Thread is not running.</p></li> <li><p><a class="reference internal" href="#bosdyn.client.time_sync.TimedOutError" title="bosdyn.client.time_sync.TimedOutError"><strong>time_sync.TimedOutError</strong></a> – Deadline to achieve time-sync is exceeded.</p></li> <li><p><strong>Threading Exceptions</strong> – Errors from threading the processes.</p></li> </ul> </dd> </dl> </dd></dl> <dl class="py property"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncThread.has_established_time_sync"> <em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">has_established_time_sync</span></span><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncThread.has_established_time_sync" title="Permalink to this definition"></a></dt> <dd><p>Checks if the client has successfully established time-sync with the robot.</p> <dl class="field-list simple"> <dt class="field-odd">Returns<span class="colon">:</span></dt> <dd class="field-odd"><p>Boolean true if the previous time-sync update returned that time sync is OK.</p> </dd> </dl> </dd></dl> <dl class="py property"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncThread.stopped"> <em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">stopped</span></span><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncThread.stopped" title="Permalink to this definition"></a></dt> <dd><p>Returns True if thread is no longer running.</p> </dd></dl> <dl class="py property"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncThread.thread_exception"> <em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">thread_exception</span></span><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncThread.thread_exception" title="Permalink to this definition"></a></dt> <dd><p>Return any exception which ended the time-sync thread.</p> </dd></dl> <dl class="py property"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncThread.endpoint"> <em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">endpoint</span></span><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncThread.endpoint" title="Permalink to this definition"></a></dt> <dd><p>Return the TimeSyncEndpoint used by this thread.</p> </dd></dl> <dl class="py method"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncThread.get_robot_clock_skew"> <span class="sig-name descname"><span class="pre">get_robot_clock_skew</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">timesync_timeout_sec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimeSyncThread.get_robot_clock_skew'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncThread.get_robot_clock_skew" title="Permalink to this definition"></a></dt> <dd><p>Get current estimate for robot clock skew from local time.</p> <dl class="field-list simple"> <dt class="field-odd">Parameters<span class="colon">:</span></dt> <dd class="field-odd"><p><strong>timesync_timeout_sec</strong> (<em>float</em>) – Time to wait for timesync before doing conversion.</p> </dd> <dt class="field-even">Returns<span class="colon">:</span></dt> <dd class="field-even"><p>Clock skew as a google.protobuf.Duration object</p> </dd> <dt class="field-odd">Raises<span class="colon">:</span></dt> <dd class="field-odd"><ul class="simple"> <li><p><a class="reference internal" href="#bosdyn.client.time_sync.InactiveThreadError" title="bosdyn.client.time_sync.InactiveThreadError"><strong>InactiveThreadError</strong></a> – Time-sync thread exits before time-sync.</p></li> <li><p><a class="reference internal" href="#bosdyn.client.time_sync.TimedOutError" title="bosdyn.client.time_sync.TimedOutError"><strong>time_sync.TimedOutError</strong></a> – Deadline to achieve time-sync is exceeded.</p></li> <li><p><strong>Threading Exceptions</strong> – Errors from threading the processes.</p></li> </ul> </dd> </dl> </dd></dl> <dl class="py method"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncThread.get_robot_time_converter"> <span class="sig-name descname"><span class="pre">get_robot_time_converter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">timesync_timeout_sec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimeSyncThread.get_robot_time_converter'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncThread.get_robot_time_converter" title="Permalink to this definition"></a></dt> <dd><p>Get a RobotTimeConverter for current estimate for robot clock skew from local time.</p> <dl class="field-list simple"> <dt class="field-odd">Parameters<span class="colon">:</span></dt> <dd class="field-odd"><p><strong>timesync_timeout_sec</strong> (<em>float</em>) – Time to wait for timesync before doing conversion.</p> </dd> <dt class="field-even">Raises<span class="colon">:</span></dt> <dd class="field-even"><ul class="simple"> <li><p><a class="reference internal" href="#bosdyn.client.time_sync.InactiveThreadError" title="bosdyn.client.time_sync.InactiveThreadError"><strong>InactiveThreadError</strong></a> – Time-sync thread exits before time-sync.</p></li> <li><p><a class="reference internal" href="#bosdyn.client.time_sync.TimedOutError" title="bosdyn.client.time_sync.TimedOutError"><strong>time_sync.TimedOutError</strong></a> – Deadline to achieve time-sync is exceeded.</p></li> <li><p><strong>Threading Exceptions</strong> – Errors from threading the processes.</p></li> </ul> </dd> </dl> </dd></dl> <dl class="py method"> <dt class="sig sig-object py" id="bosdyn.client.time_sync.TimeSyncThread.robot_timestamp_from_local_secs"> <span class="sig-name descname"><span class="pre">robot_timestamp_from_local_secs</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">local_time_secs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timesync_timeout_sec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class='reference internal' href='/_modules/bosdyn/client/time_sync#TimeSyncThread.robot_timestamp_from_local_secs'><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#bosdyn.client.time_sync.TimeSyncThread.robot_timestamp_from_local_secs" title="Permalink to this definition"></a></dt> <dd><p>Convert a local time in seconds to a timestamp proto in robot time.</p> <dl class="field-list simple"> <dt class="field-odd">Parameters<span class="colon">:</span></dt> <dd class="field-odd"><ul class="simple"> <li><p><strong>local_time_secs</strong> (<em>float</em>) – Timestamp in seconds since the unix epoch (e.g., from time.time()).</p></li> <li><p><strong>timesync_timeout_sec</strong> (<em>float</em>) – Time to wait for timesync before doing conversion.</p></li> </ul> </dd> <dt class="field-even">Returns<span class="colon">:</span></dt> <dd class="field-even"><p>google.protobuf.Timestamp representing local_time_secs in robot clock, or None if local_time_secs is None.</p> </dd> <dt class="field-odd">Raises<span class="colon">:</span></dt> <dd class="field-odd"><ul class="simple"> <li><p><a class="reference internal" href="#bosdyn.client.time_sync.InactiveThreadError" title="bosdyn.client.time_sync.InactiveThreadError"><strong>InactiveThreadError</strong></a> – Time-sync thread exits before time-sync.</p></li> <li><p><a class="reference internal" href="#bosdyn.client.time_sync.TimedOutError" title="bosdyn.client.time_sync.TimedOutError"><strong>time_sync.TimedOutError</strong></a> – Deadline to achieve time-sync is exceeded.</p></li> <li><p><strong>Threading Exceptions</strong> – Errors from threading the processes.</p></li> </ul> </dd> </dl> </dd></dl> </dd></dl> </section> </div> </div> <footer> <hr/> <div role="contentinfo"> <p> &copy; Copyright 2024 Boston Dynamics. All rights reserved. <a href="https://www.bostondynamics.com/privacy-policy">Privacy Policy</a> | <a href="https://www.bostondynamics.com/terms">Terms of Use</a> </p> </div> </footer> </div> </div> </section> </div> <script> jQuery(function () { SphinxRtdTheme.Navigation.enable(false); }); </script> <!-- Theme Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-XXXXXXX-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-XXXXXXX-1', { 'anonymize_ip': false, }); </script> <!-- Start of HubSpot Embed Code --> <script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/4845432.js"></script> <!-- End of HubSpot Embed Code --></body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10