Difference between revisions of "Creating PID Tuning Graphs"

From wikidb
Jump to: navigation, search
(Message Additions to the Motor Controller)
(Plot termination Criteria)
Line 40: Line 40:
 
= Plot termination Criteria =
 
= Plot termination Criteria =
  
There are two termination criteria for termination 1) cnt-c and 2) time. After one of the criteria is
+
There are two termination criteria 1) cnt-c and 2) time. After one of the criteria is
 
met, the graph is drawn.  
 
met, the graph is drawn.  
  
 
* [https://stackoverflow.com/questions/1112343/how-do-i-capture-sigint-in-python Capture Ctl-C in Python]
 
* [https://stackoverflow.com/questions/1112343/how-do-i-capture-sigint-in-python Capture Ctl-C in Python]
 
* [https://stackoverflow.com/questions/474528/what-is-the-best-way-to-repeatedly-execute-a-function-every-x-seconds-in-python capture timer event]
 
* [https://stackoverflow.com/questions/474528/what-is-the-best-way-to-repeatedly-execute-a-function-every-x-seconds-in-python capture timer event]

Revision as of 13:17, 22 September 2017

Overview

This page documents a Python program designed to graph the first few seconds of power applied to the motors and robot speed. It is used to help calibrate PID parameters. I didn't know how to configure rqt_plot to display snapshots.

Message Additions to the Motor Controller

A "wheels" message of type Float64MultiArray is published in the setMotorPower function. It has five elements.

  • data[0]: time is seconds since the motor controller was started.
  • data[1]: wheel 0 speed in m/sec
  • data[2]: percent of full power applied to wheel 0
  • data[3]: wheel 1 speed
  • data[4]: wheel 1 power

Wheel published global declaration

   ros::Publisher wheel_pub_;
   ros::Time beginning_time_;

Publisher initialization in the main.

   wheel_pub_ = n.advertise<std_msgs::Float64MultiArray>("wheels", 100);

Initializing beginning time in InitMotorPower

   beginning_time_ = ros::Time::now();

Publishing a wheel status message in setMotorPower

    std_msgs::Float64MultiArray wheel_data;
    wheel_data.data.clear();
    ros::Time odom_time(odom_.header.stamp.sec, odom_.header.stamp.nsec);
    ros::Duration elapsed_time = odom_time - beginning_time_;
    wheel_data.data.push_back(elapsed_time.toSec());
    wheel_data.data.push_back(wheel0_speed);
    wheel_data.data.push_back(power_wheel0_);
    wheel_data.data.push_back(wheel1_speed);
    wheel_data.data.push_back(power_wheel1_);
    wheel_pub_.publish(wheel_data);

Plot termination Criteria

There are two termination criteria 1) cnt-c and 2) time. After one of the criteria is met, the graph is drawn.