Skip to content

Commit 6eda9a5

Browse files
committed
First of version of the topic-based implementation
1 parent 673df98 commit 6eda9a5

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

ur_controllers/include/ur_controllers/freedrive_mode_controller.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
#include <rclcpp_action/server_goal_handle.hpp>
5353
#include <rclcpp/time.hpp>
5454
#include <rclcpp/duration.hpp>
55+
#include "std_msgs/msg/bool.hpp"
5556

5657
#include "freedrive_mode_controller_parameters.hpp"
5758

@@ -93,16 +94,19 @@ class FreedriveModeController : public controller_interface::ControllerInterface
9394
std::optional<std::reference_wrapper<hardware_interface::LoanedCommandInterface>> enable_command_interface_;
9495
std::optional<std::reference_wrapper<hardware_interface::LoanedCommandInterface>> abort_command_interface_;
9596

97+
std::shared_ptr<rclcpp::Subscription<std_msgs::msg::Bool>> enable_freedrive_mode_sub_;
9698

9799
rclcpp::TimerBase::SharedPtr goal_handle_timer_; ///< Timer to frequently check on the running goal
98100
rclcpp::Duration action_monitor_period_ = rclcpp::Duration(50ms);
101+
void readFreedriveModeCmd(const std_msgs::msg::Bool::SharedPtr msg);
99102

100103
std::shared_ptr<freedrive_mode_controller::ParamListener> freedrive_param_listener_;
101104
freedrive_mode_controller::Params freedrive_params_;
102105

103106
std::atomic<bool> freedrive_active_;
104107
std::atomic<bool> change_requested_;
105108
std::atomic<double> async_state_;
109+
std::atomic<double> first_log_;
106110

107111
static constexpr double ASYNC_WAITING = 2.0;
108112
/**

ur_controllers/src/freedrive_mode_controller.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ controller_interface::CallbackReturn
8383
ur_controllers::FreedriveModeController::on_configure(const rclcpp_lifecycle::State& previous_state)
8484
{
8585

86+
// Subscriber definition
87+
enable_freedrive_mode_sub_ = get_node()->create_subscription<std_msgs::msg::Bool>(
88+
"~/freedrive_mode_active", 10,
89+
std::bind(&FreedriveModeController::readFreedriveModeCmd, this, std::placeholders::_1));
8690

8791
const auto logger = get_node()->get_logger();
8892

@@ -105,6 +109,7 @@ ur_controllers::FreedriveModeController::on_activate(const rclcpp_lifecycle::Sta
105109
{
106110
change_requested_ = false;
107111
freedrive_active_ = false;
112+
first_log_ = false;
108113
async_state_ = std::numeric_limits<double>::quiet_NaN();
109114

110115
{
@@ -155,6 +160,11 @@ ur_controllers::FreedriveModeController::on_deactivate(const rclcpp_lifecycle::S
155160
{
156161
abort_command_interface_->get().set_value(1.0);
157162

163+
// Set enable value to false, so in the update
164+
// we can deactivate the freedrive mode
165+
//Old comment?
166+
freedrive_active_ = false;
167+
158168
return CallbackReturn::SUCCESS;
159169
}
160170

@@ -187,13 +197,37 @@ controller_interface::return_type ur_controllers::FreedriveModeController::updat
187197
async_success_command_interface_->get().set_value(ASYNC_WAITING);
188198
async_state_ = ASYNC_WAITING;
189199
}
200+
first_log_ = true;
190201
change_requested_ = false;
191202
}
203+
204+
if((async_state_ == 1.0) && (first_log_)){
205+
if(freedrive_active_){
206+
RCLCPP_INFO(get_node()->get_logger(), "Freedrive mode has been enabled successfully.");
207+
} else {
208+
RCLCPP_INFO(get_node()->get_logger(), "Freedrive mode has been disabled successfully.");
209+
}
210+
first_log_ = false;
211+
}
192212
return controller_interface::return_type::OK;
193213
}
194214

215+
void FreedriveModeController::readFreedriveModeCmd(const std_msgs::msg::Bool::SharedPtr msg)
195216
{
196217
// Process the freedrive_mode command.
218+
if(msg->data)
219+
{
220+
RCLCPP_INFO(get_node()->get_logger(), "Received command to start Freedrive Mode.");
221+
if((!freedrive_active_) && (!change_requested_)){
222+
freedrive_active_ = true;
223+
change_requested_ = true;
224+
}
225+
} else{
226+
RCLCPP_INFO(get_node()->get_logger(), "Received command to stop Freedrive Mode.");
227+
if((freedrive_active_) && (!change_requested_)){
228+
freedrive_active_ = false;
229+
change_requested_ = true;
230+
}
197231
}
198232
}
199233

0 commit comments

Comments
 (0)