From c39e60f26edeb94e5323b43927beb339ce95ddcb Mon Sep 17 00:00:00 2001 From: Gabriele Buondonno <gbuondon@laas.fr> Date: Fri, 18 Jan 2019 10:28:44 +0100 Subject: [PATCH] Cleaned sot_utils --- .../sot_talos_balance/utils/run_test_utils.py | 6 +- python/sot_talos_balance/utils/sot_utils.py | 136 +++++------------- 2 files changed, 37 insertions(+), 105 deletions(-) diff --git a/python/sot_talos_balance/utils/run_test_utils.py b/python/sot_talos_balance/utils/run_test_utils.py index b479a3c..5ed1c5e 100644 --- a/python/sot_talos_balance/utils/run_test_utils.py +++ b/python/sot_talos_balance/utils/run_test_utils.py @@ -1,4 +1,8 @@ -'''This module contains utilities for running the tests.''' +""" +2019, LAAS/CNRS +@author: Gabriele Buondonno +This module contains utilities for running the tests +""" from __future__ import print_function import rospy diff --git a/python/sot_talos_balance/utils/sot_utils.py b/python/sot_talos_balance/utils/sot_utils.py index 01ad585..5de8372 100644 --- a/python/sot_talos_balance/utils/sot_utils.py +++ b/python/sot_talos_balance/utils/sot_utils.py @@ -1,135 +1,63 @@ # -*- coding: utf-8 -*-1 """ -2014, LAAS/CNRS -@author: Andrea Del Prete +2019, LAAS/CNRS +@author: Andrea Del Prete, Gabriele Buondonno +This module contains utilities for the SOT """ +from __future__ import print_function + import numpy as np from time import sleep import os - + class Bunch: def __init__(self, **kwds): - self.__dict__.update(kwds); + self.__dict__.update(kwds) def __str__(self, prefix=""): - res = ""; + res = "" for (key,value) in self.__dict__.iteritems(): if (isinstance(value, np.ndarray) and len(value.shape)==2 and value.shape[0]>value.shape[1]): - res += prefix+" - " + key + ": " + str(value.T) + "\n"; + res += prefix+" - " + key + ": " + str(value.T) + "\n" elif (isinstance(value, Bunch)): - res += prefix+" - " + key + ":\n" + value.__str__(prefix+" ") + "\n"; + res += prefix+" - " + key + ":\n" + value.__str__(prefix+" ") + "\n" else: - res += prefix+" - " + key + ": " + str(value) + "\n"; - return res[:-1]; + res += prefix+" - " + key + ": " + str(value) + "\n" + return res[:-1] def start_sot(): - os.system('rosservice call /start_dynamic_graph'); + os.system('rosservice call /start_dynamic_graph') def stop_sot(): - os.system('rosservice call /stop_dynamic_graph'); - -def start_tracer(robot, estimator_ft, estimator_kin, torque_ctrl, traj_gen, ctrl_manager, inv_dyn, adm_ctrl): - from dynamic_graph.sot.torque_control.create_entities_utils import create_tracer - tracer = create_tracer(robot.device, traj_gen, estimator_ft, estimator_kin, inv_dyn, torque_ctrl); - tracer.start(); - return tracer; - -def move_to_initial_configuration(traj_gen): - traj_gen.moveJoint('rhy', 0, 4.0); - traj_gen.moveJoint('rhr', 0, 4.0); - traj_gen.moveJoint('rhp',-0.6, 4); - traj_gen.moveJoint('rk', 1.1, 4); - traj_gen.moveJoint('rap',-0.6, 4); - traj_gen.moveJoint('rar', 0, 4.0); - traj_gen.moveJoint('lhy', 0, 4.0); - traj_gen.moveJoint('lhp', 0, 4.0); - traj_gen.moveJoint('lhr', 0.5, 4.0); - traj_gen.moveJoint('lk', 1.7, 4.0); - traj_gen.moveJoint('lap', 0, 4.0); - traj_gen.moveJoint('lar', 0, 4.0); - -def go_to_position(traj_gen,q,T=10.0): - #put the robot in position q - # RLEG TO 0 ********************** - traj_gen.moveJoint('rhy',q[0],T) #0 - traj_gen.moveJoint('rhr',q[1],T) #1 - traj_gen.moveJoint('rhp',q[2],T) #2 - traj_gen.moveJoint('rk' ,q[3],T) #3 - traj_gen.moveJoint('rap',q[4],T) #4 - traj_gen.moveJoint('rar',q[5],T) #5 - - # LLEG TO 0 ********************** - traj_gen.moveJoint('lhy',q[6],T) #6 - traj_gen.moveJoint('lhr',q[7],T) #7 - traj_gen.moveJoint('lhp',q[8],T) #8 - traj_gen.moveJoint('lk' ,q[9],T) #9 - traj_gen.moveJoint('lap',q[10],T) #10 - traj_gen.moveJoint('lar',q[11],T) #11 - - # TORSO TO 0 - traj_gen.moveJoint('ty' ,q[12],T) #12 - traj_gen.moveJoint('tp' ,q[13],T) #13 - - # HEAD TO 0 - traj_gen.moveJoint('hy' ,q[14],T) #14 - traj_gen.moveJoint('hp' ,q[15],T) #15 - - # RARM TO 0 ********************** - traj_gen.moveJoint('rsp',q[16],T) #16 - traj_gen.moveJoint('rsr',q[17],T) #17 - traj_gen.moveJoint('rsy',q[18],T) #18 - traj_gen.moveJoint('re' ,q[19],T) #19 - traj_gen.moveJoint('rwy',q[20],T) #20 - traj_gen.moveJoint('rwp',q[21],T) #21 - traj_gen.moveJoint('rh' ,q[22],T) #22 - - # LARM TO 0 ********************** - traj_gen.moveJoint('lsp',q[23],T) #23 - traj_gen.moveJoint('lsr',q[24],T) #24 - traj_gen.moveJoint('lsy',q[25],T) #25 - traj_gen.moveJoint('le' ,q[26],T) #26 - traj_gen.moveJoint('lwy',q[27],T) #27 - traj_gen.moveJoint('lwp',q[28],T) #28 - traj_gen.moveJoint('lh' ,q[29],T) #29 + os.system('rosservice call /stop_dynamic_graph') def smoothly_set_signal_to_zero(sig): - v = np.array(sig.value); + v = np.array(sig.value) for i in range(40): - v = 0.95*v; - sig.value = tuple(v); - sleep(1); - print 'Setting signal to zero'; - v[:] = 0.0; - sig.value = tuple(v); + v = 0.95*v + sig.value = tuple(v) + sleep(1) + print('Setting signal to zero') + v[:] = 0.0 + sig.value = tuple(v) def smoothly_set_signal(sig, final_value, duration=5.0, steps=500, prints = 10): - v = np.array(sig.value); + v = np.array(sig.value) vf = np.array(final_value) for i in range(steps+1): alpha = 1.0*i/steps - sig.value = tuple(vf*alpha+(1-alpha)*v); - sleep(1.0*duration/steps); - print 'Signal set'; - sig.value = tuple(final_value); + sig.value = tuple(vf*alpha+(1-alpha)*v) + sleep(1.0*duration/steps) + print('Signal set') + sig.value = tuple(final_value) def monitor_tracking_error(sig, sigRef, dt, time): - N = int(time/dt); - err = np.zeros((N,6)); + N = int(time/dt) + err = np.zeros((N,6)) for i in range(N): - err[i,:] = np.array(sig.value) - np.array(sigRef.value); - sleep(dt); + err[i,:] = np.array(sig.value) - np.array(sigRef.value) + sleep(dt) for i in range(6): - print 'Max tracking error for axis %d: %.2f' % (i, np.max(np.abs(err[:,i]))); - print 'Mean square tracking error for axis %d: %.2f' % (i, np.linalg.norm(err[:,i])/N); - -def dump_signal_to_file(sig_list, index, filename, T, dt): - N = int(T/dt); - m = len(sig_list); - f= open('/tmp/'+filename, 'a', 1); - for t in range(N): - for s in sig_list: - f.write('{0}\t'.format(s.value[index])) - f.write('\n'); - sleep(dt); - f.close(); + print( 'Max tracking error for axis %d: %.2f' % (i, np.max(np.abs(err[:,i]))) ) + print( 'Mean square tracking error for axis %d: %.2f' % (i, np.linalg.norm(err[:,i])/N) ) -- GitLab