44 #define _USE_MATH_DEFINES 57 #define DEMO_BENCHMARK_USE_COMBINED_SET_GET 1 67 "Simple script to benchmark communication speed of the SDH:\n" 68 "The hand will move to a start position in coordinated position control\n" 69 "mode first. Then periodic movements are performed using the velocity\n" 70 "with acceleration ramp controller while the communication and control\n" 74 " - Make SDH connected via Ethernet move.\n" 75 " The SDH has IP-Address 192.168.1.42 and is attached to TCP port 23.\n" 76 " (Requires at least SDH-firmware v0.0.3.1)\n" 77 " > demo-benchmark --tcp=192.168.1.42:23\n" 79 " - Make SDH connected to port 2 = COM3 move:\n" 80 " > demo-benchmark -p 2 --dsaport=3\n" 82 " - Make SDH connected to USB to RS232 converter 0 move:\n" 83 " > demo-benchmark --sdh_rs_device=/dev/ttyUSB0 --dsa_rs_device=/dev/ttyUSB1\n" 85 " - Get the version info of both the joint controllers and the tactile \n" 86 " sensor firmware from an SDH connected via Ethernet.\n" 87 " The joint controllers and the tactile sensors have a common IP-Address,\n" 88 " here 192.168.1.42. The SDH controller is attached to the \n" 89 " default TCP port 23 and the tactile sensors to the default TCP port 13000.\n" 90 " (Requires at least SDH-firmware v0.0.3.2)\n" 91 " > demo-benchmark --tcp=192.168.1.42 --dsa_tcp -v\n" 93 " - Get the version info of both the joint controllers and the tactile \n" 94 " sensor firmware from an SDH connected to:\n" 95 " - port 2 = COM3 (joint controllers) and \n" 96 " - port 3 = COM4 (tactile sensor controller) \n" 97 " > demo-benchmark --port=2 --dsaport=3 -v\n";
98 char const*
__author__ =
"Dirk Osswald: dirk.osswald@de.schunk.com";
99 char const*
__url__ =
"http://www.schunk.com";
100 char const*
__version__ =
"$Id: demo-benchmark.cpp 10895 2013-11-11 14:15:08Z Osswald2 $";
107 "usage: demo-benchmark [options]\n" 120 sRecordedData(
double _t, std::vector<double>
const& _aaa, std::vector<double>
const& _aav, std::vector<double>
const& _atv ) :
147 int main(
int argc,
char** argv )
167 cdbg <<
"Debug messages of " << argv[0] <<
" are printed like this.\n";
177 cdbg <<
"Connecting to joint controller...\n";
179 cdbg <<
"Successfully created cSDH instance\n";
183 cdbg <<
"Successfully opened communication to SDH\n";
194 std::vector<double> start_pose;
195 start_pose.push_back( 10 );
196 start_pose.push_back( -10 );
197 start_pose.push_back( 0 );
198 start_pose.push_back( -10 );
199 start_pose.push_back( 0 );
200 start_pose.push_back( -10 );
201 start_pose.push_back( 0 );
204 std::vector<double> end_pose;
205 end_pose.push_back( 80.0 );
206 end_pose.push_back( -80.0 );
207 end_pose.push_back( -80.0 );
208 end_pose.push_back( -80.0 );
209 end_pose.push_back( -80.0 );
210 end_pose.push_back( -80.0 );
211 end_pose.push_back( -80.0 );
224 std::vector<double> aperiod;
225 aperiod.push_back( 10.0 );
226 aperiod.push_back( 5.0 );
227 aperiod.push_back( 4.0 );
228 aperiod.push_back( 3.0 );
229 aperiod.push_back( 4.0 );
230 aperiod.push_back( 5.0 );
231 aperiod.push_back( 3.0 );
235 std::vector<double> aamplitude( aperiod.size(), 0.0 );
237 for ( ai=0; ai<nb_axes; ai++ )
239 aamplitude[ai] = (end_pose[ai]-start_pose[ai]) * M_PI / aperiod[ai];
241 ToRange( aamplitude[ai], -max_vel[ai]+1.0, +max_vel[ai]-1.0 );
254 cdbg <<
" Moving with velocity with acceleration ramp controller.\n";
261 std::vector<double>
aaa(nb_axes, 0.0);
262 std::vector<double>
aav(nb_axes, 0.0);
263 std::vector<double>
atv(nb_axes, 0.0);
271 std::vector<sRecordedData> recorded_data;
276 double const duration = 10.0;
287 for ( ai=0; ai<nb_axes; ai++ )
289 atv[ai] = aamplitude[ai] * sin( 2.0*M_PI/aperiod[ai] * t );
292 #if DEMO_BENCHMARK_USE_COMBINED_SET_GET 305 recorded_data.push_back(
sRecordedData( t, aaa, aav, atv ) );
306 }
while ( t < duration );
313 double brake_time = 0.5;
317 for ( ai=0; ai<nb_axes; ai++ )
319 atv[ai] = aav[ai] * ( 1.0-t/brake_time);
336 cdbg <<
"Successfully disabled joint controllers of SDH and closed connection\n";
341 double dt_min = 1000.0;
347 std::cout <<
"# combined gnuplot commands + data. Use plot.py for easy viewing\n";
348 std::cout <<
"## plot using 2:3 with lines title 'dt [s]'\n";
349 std::cout <<
"## plot using 2:4 with lines title 'aaa[0] [deg]'\n";
350 std::cout <<
"## plot using 2:5 with lines title 'aaa[1] [deg]'\n";
351 std::cout <<
"## plot using 2:6 with lines title 'aaa[2] [deg]'\n";
352 std::cout <<
"## plot using 2:7 with lines title 'aaa[3] [deg]'\n";
353 std::cout <<
"## plot using 2:8 with lines title 'aaa[4] [deg]'\n";
354 std::cout <<
"## plot using 2:9 with lines title 'aaa[5] [deg]'\n";
355 std::cout <<
"## plot using 2:10 with lines title 'aaa[6] [deg]'\n";
356 std::cout <<
"## plot using 2:11 with lines title 'aav[0] [deg/s]'\n";
357 std::cout <<
"## plot using 2:12 with lines title 'aav[1] [deg/s]'\n";
358 std::cout <<
"## plot using 2:13 with lines title 'aav[2] [deg/s]'\n";
359 std::cout <<
"## plot using 2:14 with lines title 'aav[3] [deg/s]'\n";
360 std::cout <<
"## plot using 2:15 with lines title 'aav[4] [deg/s]'\n";
361 std::cout <<
"## plot using 2:16 with lines title 'aav[5] [deg/s]'\n";
362 std::cout <<
"## plot using 2:17 with lines title 'aav[6] [deg/s]'\n";
363 std::cout <<
"## plot using 2:18 with lines title 'atv[0] [deg/s]'\n";
364 std::cout <<
"## plot using 2:19 with lines title 'atv[1] [deg/s]'\n";
365 std::cout <<
"## plot using 2:20 with lines title 'atv[2] [deg/s]'\n";
366 std::cout <<
"## plot using 2:21 with lines title 'atv[3] [deg/s]'\n";
367 std::cout <<
"## plot using 2:22 with lines title 'atv[4] [deg/s]'\n";
368 std::cout <<
"## plot using 2:23 with lines title 'atv[5] [deg/s]'\n";
369 std::cout <<
"## plot using 2:24 with lines title 'atv[6] [deg/s]'\n";
370 std::cout <<
"## set xlabel 'Time [s]'\n";
371 std::cout <<
"## set ylabel 'Control-Period / Position / Velocity [s] / [deg] / [deg/s]'\n";
372 std::cout <<
"## set grid\n";
373 std::cout <<
"## set title \"demo-benchmark: SDH moving in acceleration + velocity control mode\"\n";
375 std::vector<sRecordedData>::iterator it0 = recorded_data.begin();
376 std::vector<sRecordedData>::iterator it1 = recorded_data.begin();
377 std::cout <<
"# i, t, dt, aaa[0..6], aav[0..6], atv[0..6]\n";
378 std::cout << r <<
", " << it1->t <<
", " << dt <<
", " << it1->aaa <<
", " << it1->aav <<
", " << it1->atv <<
"\n";
379 for ( it1++; it1 < recorded_data.end(); it1++, it0++, r++ )
381 dt = it1->t - it0->t;
393 std::cout << r <<
", " << it1->t <<
", " << dt <<
", " << it1->aaa <<
", " << it1->aav <<
", " << it1->atv <<
"\n";
395 double dt_avg = start_time.
Elapsed( end_time ) / recorded_data.size();
396 std::cout <<
"## set label 'dt_min=" << dt_min <<
"' at " << t_dt_min <<
"," << dt_min <<
" front point\n";
397 std::cout <<
"## set label 'dt_max=" << dt_max <<
"' at " << t_dt_max <<
"," << dt_max <<
" front point\n";
398 std::cout <<
"## set label 'dt_avg=" << dt_avg <<
"' at " << it0->t <<
"," << dt_avg <<
" front point\n";
399 std::cout <<
"## set title \"demo-benchmark.cpp: SDH moving in acceleration + velocity control mode\\ndt_avg = " << dt_avg <<
" fps = " << 1.0/dt_avg;
406 std::cerr <<
"demo-benchmark main(): An exception was caught: " << e->
what() <<
"\n";
A meta-value that means "access all possible values".
#SDH::cSDH is the end user interface class to control a SDH (SCHUNK Dexterous Hand).
int Parse(int argc, char **argv, char const *helptext, char const *progname, char const *version, char const *libname, char const *librelease)
This file contains the interface to class #SDH::cSDH, the end user class to access the SDH from a PC...
std::vector< double > GetAxisMaxVelocity(std::vector< int > const &axes)
std::vector< double > aaa
#define SDH_ASSERT_TYPESIZES()
macro to assert that the defined typedefs have the expected sizes
std::vector< double > aav
double Elapsed(void) const
Return time in seconds elapsed between the time stored in the object and now.
A class to print colored debug messages.
void SetOutput(std::ostream *fd)
velocity controller with acceleration ramp, velocities and accelerations of axes are controlled indep...
virtual const char * what() const
Implementation of a class to parse common SDH related command line options.
static char const * GetLibraryName(void)
sRecordedData(double _t, std::vector< double > const &_aaa, std::vector< double > const &_aav, std::vector< double > const &_atv)
std::vector< double > atv
coordinated position controller (position per axis => "pose controller"), all axes start and stop mov...
void SetAxisTargetAcceleration(std::vector< int >const &axes, std::vector< double >const &accelerations)
void OpenCommunication(NS_SDH cSDH &hand)
Base class for exceptions in the SDHLibrary-CPP.
void SetController(cSDHBase::eControllerType controller)
Interface of auxilliary utility functions for SDHLibrary-CPP.
void Close(bool leave_enabled=false)
void SetAxisTargetVelocity(std::vector< int > const &axes, std::vector< double > const &velocities)
This file contains interface to #SDH::cDSA, a class to communicate with the tactile sensors of the SD...
std::vector< int > all_real_axes
A vector with indices of all real axes (in natural order), excluding the virtual axis.
void SetAxisTargetAngle(std::vector< int > const &axes, std::vector< double > const &angles)
double ToRange(double v, double min, double max)
std::vector< double > GetAxisMinAngle(std::vector< int > const &axes)
#define USING_NAMESPACE_SDH
void GotoPose(cSDH &hand, std::vector< double > &ta)
static char const * GetLibraryRelease(void)
structure to hold current hand state while recording with demo-benchmark
char const * __copyright__
double MoveAxis(std::vector< int >const &axes, bool sequ=true)
int main(int argc, char **argv)
This file contains settings to make the SDHLibrary compile on differen systems:
Very simple class to measure elapsed time.
std::vector< double > GetAxisActualAngle(std::vector< int > const &axes)
std::vector< double > GetAxisMaxAngle(std::vector< int > const &axes)
This file contains some basic definitions (defines, macros, datatypes)
class for command line option parsing holding option parsing results
std::vector< double > SetAxisTargetGetAxisActualVelocity(std::vector< int > const &axes, std::vector< double > const &velocities)
std::vector< double > GetAxisActualVelocity(std::vector< int >const &axes)
USING_NAMESPACE_SDH NAMESPACE_SDH_START std::ostream * g_sdh_debug_log
#define DEMO_BENCHMARK_USE_COMBINED_SET_GET