00001 #ifndef YOUBOT_DATATRACE_H 00002 #define YOUBOT_DATATRACE_H 00003 00004 /**************************************************************** 00005 * 00006 * Copyright (c) 2011 00007 * All rights reserved. 00008 * 00009 * Hochschule Bonn-Rhein-Sieg 00010 * University of Applied Sciences 00011 * Computer Science Department 00012 * 00013 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00014 * 00015 * Author: 00016 * Jan Paulus, Nico Hochgeschwender, Michael Reckhaus, Azamat Shakhimardanov 00017 * Supervised by: 00018 * Gerhard K. Kraetzschmar 00019 * 00020 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00021 * 00022 * This sofware is published under a dual-license: GNU Lesser General Public 00023 * License LGPL 2.1 and BSD license. The dual-license implies that users of this 00024 * code may choose which terms they prefer. 00025 * 00026 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00027 * 00028 * Redistribution and use in source and binary forms, with or without 00029 * modification, are permitted provided that the following conditions are met: 00030 * 00031 * * Redistributions of source code must retain the above copyright 00032 * notice, this list of conditions and the following disclaimer. 00033 * * Redistributions in binary form must reproduce the above copyright 00034 * notice, this list of conditions and the following disclaimer in the 00035 * documentation and/or other materials provided with the distribution. 00036 * * Neither the name of the Hochschule Bonn-Rhein-Sieg nor the names of its 00037 * contributors may be used to endorse or promote products derived from 00038 * this software without specific prior written permission. 00039 * 00040 * This program is free software: you can redistribute it and/or modify 00041 * it under the terms of the GNU Lesser General Public License LGPL as 00042 * published by the Free Software Foundation, either version 2.1 of the 00043 * License, or (at your option) any later version or the BSD license. 00044 * 00045 * This program is distributed in the hope that it will be useful, 00046 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00047 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00048 * GNU Lesser General Public License LGPL and the BSD license for more details. 00049 * 00050 * You should have received a copy of the GNU Lesser General Public 00051 * License LGPL and BSD license along with this program. 00052 * 00053 ****************************************************************/ 00054 #include <vector> 00055 #include <sstream> 00056 #include <string> 00057 #include <cstdio> 00058 #include <stdexcept> 00059 #include <iostream> 00060 #include <stdlib.h> 00061 #include "boost/date_time/gregorian/gregorian.hpp" 00062 #include "boost/filesystem.hpp" 00063 #include "generic/Logger.hpp" 00064 #include "generic/Units.hpp" 00065 #include "generic/Time.hpp" 00066 #include "generic/ConfigFile.hpp" 00067 #include "generic/Exceptions.hpp" 00068 #include "youbot/YouBotJoint.hpp" 00069 #include "youbot/YouBotJointParameter.hpp" 00070 00071 using namespace boost::posix_time; 00072 namespace youbot { 00073 00074 00075 enum DataTraceCntrollerMode { 00076 POSITION_CONTROL_RAD, 00077 POSITION_CONTROL_ENC, 00078 VELOCITY_CONTROL_RAD_SEC, 00079 VELOCITY_CONTROL_RPM, 00080 CURRENT_CONTROL_MODE, 00081 TORQUE_CONTROL_MODE, 00082 NOT_DEFINED 00083 }; 00084 /////////////////////////////////////////////////////////////////////////////// 00085 /// Creates a trace of all process data and reads all configuration parameter from one joint 00086 /////////////////////////////////////////////////////////////////////////////// 00087 class DataTrace { 00088 public: 00089 DataTrace(YouBotJoint& youBotJoint, const std::string Name, const bool overwriteFiles = false); 00090 00091 virtual ~DataTrace(); 00092 00093 void startTrace(); 00094 00095 void stopTrace(); 00096 00097 void plotTrace(); 00098 00099 void updateTrace(const JointAngleSetpoint& setpoint); 00100 00101 void updateTrace(const JointVelocitySetpoint& setpoint); 00102 00103 void updateTrace(const JointRoundsPerMinuteSetpoint& setpoint); 00104 00105 void updateTrace(const JointCurrentSetpoint& setpoint); 00106 00107 void updateTrace(const JointTorqueSetpoint& setpoint); 00108 00109 void updateTrace(const JointEncoderSetpoint& setpoint); 00110 00111 void updateTrace(); 00112 00113 unsigned long getTimeDurationMilliSec(); 00114 00115 00116 private: 00117 DataTrace(const DataTrace & source); 00118 00119 DataTrace & operator=(const DataTrace & source); 00120 00121 void update(); 00122 00123 YouBotJoint& joint; 00124 00125 JointSensedAngle sensedAngle; 00126 00127 JointSensedEncoderTicks sensedEncoderTicks; 00128 00129 JointSensedVelocity sensedVelocity; 00130 00131 JointSensedRoundsPerMinute sensedRoundsPerMinute; 00132 00133 JointSensedCurrent sensedCurrent; 00134 00135 JointSensedTorque sensedTorque; 00136 00137 std::fstream file; 00138 00139 JointAngleSetpoint angleSetpoint; 00140 00141 JointVelocitySetpoint velocitySetpoint; 00142 00143 JointRoundsPerMinuteSetpoint roundsPerMinuteSetpoint; 00144 00145 JointCurrentSetpoint currentSetpoint; 00146 00147 JointTorqueSetpoint torqueSetpoint; 00148 00149 JointPWMSetpoint PWMSetpoint; 00150 00151 JointEncoderSetpoint encoderSetpoint; 00152 00153 std::fstream parametersBeginTraceFile; 00154 00155 std::fstream parametersEndTraceFile; 00156 00157 ptime traceStartTime; 00158 00159 time_duration timeDuration; 00160 00161 unsigned long timeDurationMicroSec; 00162 00163 DataTraceCntrollerMode controllerMode; 00164 00165 JointSensedPWM actualPWM; 00166 00167 std::vector<YouBotJointParameterReadOnly*> parameterVector; 00168 00169 std::string name; 00170 00171 std::string path; 00172 00173 int invertDirection; 00174 00175 JointRampGeneratorVelocity rampGenSetpoint; 00176 00177 JointCurrentSetpoint targetCurrent; 00178 00179 JointVelocitySetpoint targetVelocity; 00180 00181 JointAngleSetpoint targetAngle; 00182 00183 }; 00184 00185 } // namespace youbot 00186 #endif