1010#include < diffbot_msgs/EncodersStamped.h>
1111#include < diffbot_msgs/WheelsCmdStamped.h>
1212#include < diffbot_msgs/AngularVelocities.h>
13+ #include < diffbot_msgs/PIDStamped.h>
1314#include < std_msgs/Empty.h>
1415#include < sensor_msgs/JointState.h>
1516
@@ -301,6 +302,24 @@ namespace diffbot {
301302 */
302303 void resetEncodersCallback (const std_msgs::Empty& reset_msg);
303304
305+ /* *
306+ * @brief Callback method to update the PID constants for the left motor.
307+ *
308+ * Publish to pid_left topic to update the PID constants of the left motor.
309+ *
310+ * @param pid_msg message containing the new PID constants
311+ */
312+ void pidLeftCallback (const diffbot_msgs::PIDStamped& pid_msg);
313+
314+ /* *
315+ * @brief Callback method to update the PID constants for the right motor.
316+ *
317+ * Publish to pid_right topic to update the PID constants of the right motor.
318+ *
319+ * @param pid_msg message containing the new PID constants
320+ */
321+ void pidRightCallback (const diffbot_msgs::PIDStamped& pid_msg);
322+
304323 private:
305324 // Reference to global node handle from main.cpp
306325 ros::NodeHandle& nh_;
@@ -345,7 +364,8 @@ namespace diffbot {
345364 int motor_cmd_left_ = 0 ;
346365 int motor_cmd_right_ = 0 ;
347366
348-
367+ ros::Subscriber<diffbot_msgs::PIDStamped, BaseController<TMotorController, TMotorDriver>> sub_pid_left_;
368+ ros::Subscriber<diffbot_msgs::PIDStamped, BaseController<TMotorController, TMotorDriver>> sub_pid_right_;
349369 PID motor_pid_left_;
350370 PID motor_pid_right_;
351371
@@ -372,6 +392,8 @@ diffbot::BaseController<TMotorController, TMotorDriver>
372392 , sub_wheel_cmd_velocities_(" wheel_cmd_velocities" , &BC<TMotorController, TMotorDriver>::commandCallback, this )
373393 , last_update_time_(nh.now())
374394 , update_rate_(UPDATE_RATE_IMU, UPDATE_RATE_CONTROL, UPDATE_RATE_DEBUG)
395+ , sub_pid_left_(" pid_left" , &BC<TMotorController, TMotorDriver>::pidLeftCallback, this )
396+ , sub_pid_right_(" pid_right" , &BC<TMotorController, TMotorDriver>::pidRightCallback, this )
375397 , motor_pid_left_(PWM_MIN, PWM_MAX, K_P, K_I, K_D)
376398 , motor_pid_right_(PWM_MIN, PWM_MAX, K_P, K_I, K_D)
377399{
@@ -461,6 +483,27 @@ void diffbot::BaseController<TMotorController, TMotorDriver>::resetEncodersCallb
461483}
462484
463485
486+ template <typename TMotorController, typename TMotorDriver>
487+ void diffbot::BaseController<TMotorController, TMotorDriver>::pidLeftCallback(const diffbot_msgs::PIDStamped& pid_msg)
488+ {
489+ // Callback function to update the pid values of the left motor
490+ // This callback function receives diffbot_msgs::PID message object
491+ // where diffbot_msgs::PID kp, ki, kd for one pid controller is stored
492+ motor_pid_left_.updateConstants (pid_msg.pid .kp , pid_msg.pid .ki , pid_msg.pid .kd );
493+ motor_pid_left_.updateConstants (pid_msg.pid .kp , pid_msg.pid .ki , pid_msg.pid .kd );
494+ }
495+
496+ template <typename TMotorController, typename TMotorDriver>
497+ void diffbot::BaseController<TMotorController, TMotorDriver>::pidRightCallback(const diffbot_msgs::PIDStamped& pid_msg)
498+ {
499+ // Callback function to update the pid values of the left motor
500+ // This callback function receives diffbot_msgs::PID message object
501+ // where diffbot_msgs::PID kp, ki, kd for one pid controller is stored
502+ motor_pid_left_.updateConstants (pid_msg.pid .kp , pid_msg.pid .ki , pid_msg.pid .kd );
503+ motor_pid_left_.updateConstants (pid_msg.pid .kp , pid_msg.pid .ki , pid_msg.pid .kd );
504+ }
505+
506+
464507template <typename TMotorController, typename TMotorDriver>
465508void diffbot::BaseController<TMotorController, TMotorDriver>::read()
466509{
@@ -518,16 +561,33 @@ void diffbot::BaseController<TMotorController, TMotorDriver>::eStop()
518561template <typename TMotorController, typename TMotorDriver>
519562void diffbot::BaseController<TMotorController, TMotorDriver>::printDebug()
520563{
521- String log_msg =
522- String (" \n Read:\n " ) +
523- String (" ticks_left_ \t ticks_right_ \t measured_ang_vel_left \t measured_ang_vel_right\n " ) +
524- String (ticks_left_) + String (" \t " ) + String (ticks_right_) + String (" \t " ) +
525- String (joint_state_left_.angular_velocity_ ) + String (" \t " ) + String (joint_state_right_.angular_velocity_ ) +
564+ /*
565+ String log_msg =
566+ String("\nRead:\n") +
567+ String("ticks_left_ \t ticks_right_ \t measured_ang_vel_left \t measured_ang_vel_right\n") +
568+ String(ticks_left_) + String("\t") + String(ticks_right_) + String("\t") +
569+ String(joint_state_left_.angular_velocity_) + String("\t") + String(joint_state_right_.angular_velocity_) +
526570 String("\nWrite:\n") +
527- String (" motor_cmd_left_ \t motor_cmd_right_ \t pid_left_error \t pid_right_error\n " ) +
528- String (motor_cmd_left_) + String (" \t " ) + String (motor_cmd_right_) + String (" \t " ) +
529- // String("pid_left \t pid_right\n") +
530- String (motor_pid_left_.error ()) + String (" \t " ) + String (motor_pid_right_.error ());
571+ String("motor_cmd_left_ \t motor_cmd_right_ \t pid_left_error \t pid_right_error\n") +
572+ String(motor_cmd_left_) + String("\t") + String(motor_cmd_right_) + String("\t") +
573+ //String("pid_left \t pid_right\n") +
574+ String(motor_pid_left_.error()) + String("\t") + String(motor_pid_right_.error());
575+ */
576+
577+ String log_msg =
578+ String (" \n Read:\n " ) +
579+ String (" ticks_left_: " ) + String (ticks_left_) +
580+ String (" \n ticks_right_: " ) + String (ticks_right_) +
581+ String (" \n measured_ang_vel_left: " ) + String (joint_state_left_.angular_velocity_ ) +
582+ String (" \n measured_ang_vel_right: " ) + String (joint_state_right_.angular_velocity_ ) +
583+ String (" \n wheel_cmd_velocity_left_: " ) + String (wheel_cmd_velocity_left_) +
584+ String (" \n wheel_cmd_velocity_right_: " ) + String (wheel_cmd_velocity_right_) +
585+
586+ String (" \n Write:\n " ) +
587+ String (" motor_cmd_left_: " ) + String (motor_cmd_left_) +
588+ String (" \n motor_cmd_right_: " ) + String (motor_cmd_right_) +
589+ String (" \n pid_left_errors (p, i, d): " ) + String (motor_pid_left_.proportional ()) + String (" " ) + String (motor_pid_left_.integral ()) + String (" " ) + String (motor_pid_left_.derivative ()) +
590+ String (" \n pid_right_error (p, i, d): " ) + String (motor_pid_right_.proportional ()) + String (" " ) + String (motor_pid_right_.integral ()) + String (" " ) + String (motor_pid_right_.derivative ());
531591 nh_.loginfo (log_msg.c_str ());
532592}
533593
0 commit comments