47#include <eigen3/Eigen/Dense>
56 std::atomic_bool* break_loops_;
57 std::shared_ptr<ShutdownSignaler> shutdown_signaler_;
58 std::tuple<VectorXd, VectorXd> joint_limits_;
59 VectorXd joint_velocities_;
60 VectorXd joint_torques_;
62 std::unique_ptr<sas::Clock> clock_;
63 std::unique_ptr<std::thread> watchdog_thread_;
64 std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> time_point_from_the_client_;
65 std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> time_point_from_the_server_;
66 bool watchdog_status_;
68 std::mutex mutex_watchdog_;
69 double max_acceptable_delay_ = 0.1;
70 double watchdog_period_;
72 RobotDriver(
const std::shared_ptr<ShutdownSignaler>& shutdown_signaler_);
73 [[deprecated(
"Use RobotDriver(const std::shared_ptr<ShutdownSignaler>& shutdown_signaler_) instead.")]]
79 std::exception_ptr watchdog_exception_{
nullptr};
80 std::mutex watchdog_exception_mutex_;
147 virtual void set_joint_limits(
const std::tuple<VectorXd, VectorXd>& joint_limits);
161 void watchdog_trigger(
const std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds>& time_point_from_the_client,
162 const std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds>& time_point_from_the_server,
Definition sas_robot_driver.hpp:54
virtual void disconnect()=0
Disconnect from the underlying robot/hardware.
virtual void set_target_joint_positions(const VectorXd &set_target_joint_positions_rad)=0
Set target joint positions.
virtual VectorXd get_joint_torques()
Get current joint torques.
Definition sas_robot_driver.cpp:68
void watchdog_set_maximum_acceptable_delay(const double &max_acceptable_delay)
Set the maximum acceptable delay for the watchdog (seconds)
Definition sas_robot_driver.cpp:185
void check_for_watchdog_exceptions()
Check for exceptions thrown by the watchdog thread and rethrow if present.
Definition sas_robot_driver.cpp:193
virtual void connect()=0
Connect to the underlying robot/hardware.
virtual void set_target_joint_torques(const VectorXd &set_target_joint_torques)
Set target joint torques.
Definition sas_robot_driver.cpp:73
virtual VectorXd get_joint_velocities()
Get current joint velocities.
Definition sas_robot_driver.cpp:58
~RobotDriver()
Virtual destructor for RobotDriver.
Definition sas_robot_driver.cpp:50
void _watchdog_thread_function()
RobotDriver::_watchdog_thread_function throws an exception if the elapsed time since the last trigger...
Definition sas_robot_driver.cpp:93
virtual std::tuple< VectorXd, VectorXd > get_joint_limits()
Get joint limits (min, max)
Definition sas_robot_driver.cpp:78
virtual void deinitialize()=0
Deinitialize the driver resources.
virtual void set_joint_limits(const std::tuple< VectorXd, VectorXd > &joint_limits)
Set joint limits (min, max)
Definition sas_robot_driver.cpp:83
Functionality
Enumeration of optional driver functionalities.
Definition sas_robot_driver.hpp:86
virtual void set_target_joint_velocities(const VectorXd &set_target_joint_velocities)
Set target joint velocities.
Definition sas_robot_driver.cpp:63
void watchdog_start(const std::chrono::nanoseconds &period)
Start the watchdog thread with the given period.
Definition sas_robot_driver.cpp:144
virtual VectorXd get_joint_positions()=0
Get current joint positions.
virtual void initialize()=0
Initialize the driver resources.
void watchdog_trigger(const std::chrono::time_point< std::chrono::system_clock, std::chrono::nanoseconds > &time_point_from_the_client, const std::chrono::time_point< std::chrono::system_clock, std::chrono::nanoseconds > &time_point_from_the_server, const bool &status)
Trigger the watchdog with timestamps from client/server and the current status.
Definition sas_robot_driver.cpp:166
Timing utilities for control loops and statistics collection.
Cross-module shutdown signaling helper.