Difference between revisions of "Creating PID Tuning Graphs"
(→Message Reference) |
(→Plot termination Criteria) |
||
Line 52: | Line 52: | ||
* [https://gist.github.com/alexsleat/1372845 Array message example] | * [https://gist.github.com/alexsleat/1372845 Array message example] | ||
− | = Plot termination Criteria = | + | = The Python Plot Code = |
+ | |||
+ | == Plot termination Criteria == | ||
There are two termination criteria 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 | ||
Line 59: | Line 61: | ||
* [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] | ||
+ | |||
+ | == Plotly Graphing Tools == | ||
+ | |||
+ | === Installing === | ||
+ | |||
+ | * [https://plot.ly/python/getting-started/ Getting Started] | ||
+ | |||
+ | sudo apt-get install python-pip | ||
+ | sudo pip install plotly | ||
+ | |||
+ | === Authentication === | ||
+ | |||
+ | * [https://plot.ly/python/getting-started/ getting Started] | ||
+ | * [https://plot.ly/settings/api Creating an Authentication String] | ||
+ | |||
+ | See authentication file in | ||
+ | ~/.plotly/.credentials | ||
+ | |||
+ | === Coding === | ||
+ | |||
+ | * [https://plot.ly/python/line-charts/ Coding Lint Charts] | ||
+ | |||
+ | Working around a bug in iplot. Change it to plot. | ||
+ | * [https://stackoverflow.com/questions/34929778/keyerror-plotly-domain-when-using-plotly-to-do-scatter-plot-in-python Keyerror] | ||
+ | * [https://stackoverflow.com/questions/38623249/keyerror-plotly-domain Keyerror] | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | changes to motor_controler_nav.cpp | ||
+ | http://wiki.ros.org/roscpp/Overview/Time | ||
+ | http://docs.ros.org/api/std_msgs/html/msg/Header.html | ||
+ | http://docs.ros.org/api/nav_msgs/html/msg/Odometry.html | ||
+ | http://wiki.ros.org/std_msgs | ||
+ | |||
+ | |||
+ | timers python | ||
+ | https://stackoverflow.com/questions/474528/what-is-the-best-way-to-repeatedly-execute-a-function-every-x-seconds-in-python |
Revision as of 13:42, 22 September 2017
Contents
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
Code
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);
Message Reference
General
- General Messages Primitive Data Types in Messages
- Common Messages ROS Specific Messages
- Standard Messages Primitive Data Messages
Float Array Specific
- 64 bit float array messages Message Detail
- Array message layout
- Array message example
The Python Plot Code
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.
Plotly Graphing Tools
Installing
sudo apt-get install python-pip sudo pip install plotly
Authentication
See authentication file in
~/.plotly/.credentials
Coding
Working around a bug in iplot. Change it to plot.
changes to motor_controler_nav.cpp
http://wiki.ros.org/roscpp/Overview/Time
http://docs.ros.org/api/std_msgs/html/msg/Header.html
http://docs.ros.org/api/nav_msgs/html/msg/Odometry.html
http://wiki.ros.org/std_msgs
timers python
https://stackoverflow.com/questions/474528/what-is-the-best-way-to-repeatedly-execute-a-function-every-x-seconds-in-python