35#include <rclcpp/rclcpp.hpp>
36#include <geometry_msgs/msg/pose_stamped.hpp>
37#include <std_msgs/msg/float64_multi_array.hpp>
38#include <std_msgs/msg/int32_multi_array.hpp>
39#include <sensor_msgs/msg/joint_state.hpp>
40#include <sas_msgs/msg/watchdog_trigger.hpp>
41#include <sas_core/sas_robot_driver.hpp>
42#include <sas_core/sas_object.hpp>
43#include <sas_msgs/msg/bool.hpp>
71 std::shared_ptr<rclcpp::Node> node_;
73 std::vector<MODE_BLACKLIST_FLAG> blacklisted_modes_;
74 std::atomic_bool enabled_;
75 std::string topic_prefix_;
77 rclcpp::Subscription<sensor_msgs::msg::JointState>::SharedPtr subscriber_joint_states_;
78 Eigen::VectorXd joint_positions_;
79 Eigen::VectorXd joint_velocities_;
80 Eigen::VectorXd joint_forces_;
81 rclcpp::Subscription<std_msgs::msg::Float64MultiArray>::SharedPtr subscriber_joint_limits_min_;
82 Eigen::VectorXd joint_limits_min_;
83 rclcpp::Subscription<std_msgs::msg::Float64MultiArray>::SharedPtr subscriber_joint_limits_max_;
84 Eigen::VectorXd joint_limits_max_;
85 rclcpp::Subscription<std_msgs::msg::Int32MultiArray>::SharedPtr subscriber_home_state_;
86 Eigen::VectorXi home_states_;
88 rclcpp::Publisher<std_msgs::msg::Float64MultiArray>::SharedPtr publisher_target_joint_positions_;
89 rclcpp::Publisher<std_msgs::msg::Float64MultiArray>::SharedPtr publisher_target_joint_velocities_;
90 rclcpp::Publisher<std_msgs::msg::Float64MultiArray>::SharedPtr publisher_target_joint_forces_;
91 rclcpp::Publisher<std_msgs::msg::Int32MultiArray> ::SharedPtr publisher_homing_signal_;
92 rclcpp::Publisher<std_msgs::msg::Int32MultiArray> ::SharedPtr publisher_clear_positions_signal_;
93 rclcpp::Publisher<sas_msgs::msg::WatchdogTrigger> ::SharedPtr publisher_watchdog_trigger_;
94 rclcpp::Publisher<sas_msgs::msg::Bool> ::SharedPtr publisher_shutdown_signal_;
96 void _callback_joint_states(
const sensor_msgs::msg::JointState& msg);
97 void _callback_joint_limits_min(
const std_msgs::msg::Float64MultiArray& msg);
98 void _callback_joint_limits_max(
const std_msgs::msg::Float64MultiArray& msg);
99 void _callback_home_states(
const std_msgs::msg::Int32MultiArray& msg);
112 const std::string topic_prefix=
"GET_FROM_NODE",
113 const std::vector<MODE_BLACKLIST_FLAG>& blacklisted_modes = std::vector<MODE_BLACKLIST_FLAG>{});
158 const double& period_in_seconds = 1.0,
159 const double& maximum_acceptable_delay = 0.5);
207 bool is_enabled(
const RobotDriver::Functionality& supported_functionality=RobotDriver::Functionality::PositionControl)
const;
Base class for SAS objects.
Definition sas_object.hpp:40
Client interface for robot driver ROS topics.
Definition sas_robot_driver_client.hpp:59
std::string get_topic_prefix() const
Get the configured topic prefix.
Definition sas_robot_driver_client.cpp:296
Eigen::VectorXd get_joint_forces() const
Get the last received joint forces.
Definition sas_robot_driver_client.cpp:245
Eigen::VectorXi get_home_states() const
Get the last received home states vector.
Definition sas_robot_driver_client.cpp:263
MODE_BLACKLIST_FLAG
Flags used to blacklist client modes when constructing the client.
Definition sas_robot_driver_client.hpp:65
void send_target_joint_velocities(const Eigen::VectorXd &target_joint_velocities)
Publish target joint velocities.
Definition sas_robot_driver_client.cpp:142
bool is_enabled(const RobotDriver::Functionality &supported_functionality=RobotDriver::Functionality::PositionControl) const
Check whether the client is enabled for a given functionality.
Definition sas_robot_driver_client.cpp:274
void send_shutdown_signal()
Request a shutdown via the robot driver topics.
Definition sas_robot_driver_client.cpp:222
Eigen::VectorXd get_joint_positions() const
Get the last received joint positions.
Definition sas_robot_driver_client.cpp:229
void send_clear_positions_signal(const Eigen::VectorXi &clear_positions_signal)
Send a signal to clear positions on the controller side.
Definition sas_robot_driver_client.cpp:180
std::tuple< Eigen::VectorXd, Eigen::VectorXd > get_joint_limits() const
Retrieve the joint limits as a tuple (min, max).
Definition sas_robot_driver_client.cpp:253
void send_target_joint_forces(const Eigen::VectorXd &target_joint_forces)
Publish target joint forces/torques.
Definition sas_robot_driver_client.cpp:155
void send_target_joint_positions(const Eigen::VectorXd &target_joint_positions)
Publish target joint positions.
Definition sas_robot_driver_client.cpp:129
Eigen::VectorXd get_joint_velocities() const
Get the last received joint velocities.
Definition sas_robot_driver_client.cpp:237
void send_watchdog_trigger(const bool &watchdog_trigger_status, const double &period_in_seconds=1.0, const double &maximum_acceptable_delay=0.5)
Trigger the watchdog from the client.
Definition sas_robot_driver_client.cpp:200
void send_homing_signal(const Eigen::VectorXi &homing_signal)
Send a homing signal to the robot.
Definition sas_robot_driver_client.cpp:168