11 #include <std_srvs/Trigger.h>
15 #include <franka_msgs/ErrorRecoveryAction.h>
22 bool success = CombinedRobotHW::init(root_nh, robot_hw_nh);
25 std::make_unique<actionlib::SimpleActionServer<franka_msgs::ErrorRecoveryAction>>(
26 robot_hw_nh,
"error_recovery",
27 [&](
const franka_msgs::ErrorRecoveryGoalConstPtr&) {
31 auto* franka_combinable_hw_ptr =
33 if (franka_combinable_hw_ptr !=
nullptr && franka_combinable_hw_ptr->connected()) {
36 ROS_ERROR(
"FrankaCombinedHW: failed to reset error. Is the robot connected?");
39 franka_msgs::ErrorRecoveryResult(),
40 "dynamic_cast from RobotHW to FrankaCombinableHW failed");
46 }
catch (
const franka::Exception& ex) {
56 robot_hw_nh.advertiseService<std_srvs::Trigger::Request, std_srvs::Trigger::Response>(
58 [
this](std_srvs::Trigger::Request& request,
59 std_srvs::Trigger::Response&
response) ->
bool {
62 ROS_INFO(
"FrankaCombinedHW: successfully connected robots.");
65 }
catch (
const std::exception& e) {
66 ROS_INFO(
"Combined: exception %s", e.what());
69 "FrankaCombinedHW: Failed to connect robot: " + std::string(e.what());
75 robot_hw_nh.advertiseService<std_srvs::Trigger::Request, std_srvs::Trigger::Response>(
77 [
this](std_srvs::Trigger::Request& request,
78 std_srvs::Trigger::Response&
response) ->
bool {
80 response.success = success ? 1u : 0u;
82 ?
"FrankaCombinedHW: Successfully disconnected robots."
83 :
"FrankaCombinedHW: Failed to disconnect robots. All active "
84 "controllers must be stopped before you can disconnect.";
98 CombinedRobotHW::read(time, period);
104 bool controller_reset =
false;
107 if (franka_combinable_hw_ptr !=
nullptr) {
110 ROS_ERROR(
"FrankaCombinedHW: dynamic_cast from RobotHW to FrankaCombinableHW failed.");
114 return controller_reset;
125 bool has_error =
false;
128 if (franka_combinable_hw_ptr !=
nullptr) {
129 has_error = has_error || franka_combinable_hw_ptr->
hasError();
131 ROS_ERROR(
"FrankaCombinedHW: dynamic_cast from RobotHW to FrankaCombinableHW failed.");
142 if (franka_combinable_hw_ptr !=
nullptr) {
145 ROS_ERROR(
"FrankaCombinedHW: dynamic_cast from RobotHW to FrankaCombinableHW failed.");
153 if (franka_combinable_hw_ptr !=
nullptr && !franka_combinable_hw_ptr->connected()) {
154 franka_combinable_hw_ptr->
connect();
163 if (franka_combinable_hw_ptr !=
nullptr && franka_combinable_hw_ptr->controllerActive()) {
172 if (franka_combinable_hw_ptr !=
nullptr && !franka_combinable_hw_ptr->disconnect()) {