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
A class to print colored debug messages.
void SetOutput(std::ostream *fd)
double Elapsed(void) const
Return time in seconds elapsed between the time stored in the object and now.
velocity controller with acceleration ramp, velocities and accelerations of axes are controlled indep...
Implementation of a class to parse common SDH related command line options.
sRecordedData(double _t, std::vector< double > const &_aaa, std::vector< double > const &_aav, std::vector< double > const &_atv)
static char const * GetLibraryRelease(void)
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.
virtual const char * what() const
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)
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)
static char const * GetLibraryName(void)
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