@@ -83,6 +83,10 @@ controller_interface::CallbackReturn
8383ur_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