@ -24,7 +24,7 @@ def traversal_files(path, w2t):
return dirs , files
return dirs , files
def check_files ( path , data_dirs , data_files , w2t ) :
def check_files ( path , loadsel , data_dirs , data_files , w2t ) :
if len ( data_dirs ) != 0 or len ( data_files ) != 3 :
if len ( data_dirs ) != 0 or len ( data_files ) != 3 :
w2t ( ' 初始路径下不允许有文件夹,且初始路径下只能存在如下三个文件,确认后重新运行! ' , 0 , 0 , ' red ' , tab_name = ' Automatic Test ' )
w2t ( ' 初始路径下不允许有文件夹,且初始路径下只能存在如下三个文件,确认后重新运行! ' , 0 , 0 , ' red ' , tab_name = ' Automatic Test ' )
w2t ( ' 1. configs.xlsx \n 2. T_电机电流.xlsx \n 3. xxxx.zip ' , 0 , 1 , ' red ' , tab_name = ' Automatic Test ' )
w2t ( ' 1. configs.xlsx \n 2. T_电机电流.xlsx \n 3. xxxx.zip ' , 0 , 1 , ' red ' , tab_name = ' Automatic Test ' )
@ -44,12 +44,13 @@ def check_files(path, data_dirs, data_files, w2t):
if config_file and current_file and prj_file :
if config_file and current_file and prj_file :
w2t ( " 数据目录合规性检查结束,未发现问题...... " , tab_name = ' Automatic Test ' )
w2t ( " 数据目录合规性检查结束,未发现问题...... " , tab_name = ' Automatic Test ' )
os . mkdir ( f " { path } \\ single " )
if loadsel == ' tool100 ' :
os . mkdir ( f " { path } \\ s_1 " )
os . mkdir ( f " { path } \\ single " )
os . mkdir ( f " { path } \\ s_2 " )
os . mkdir ( f " { path } \\ s_1 " )
os . mkdir ( f " { path } \\ s_3 " )
os . mkdir ( f " { path } \\ s_2 " )
os . mkdir ( f " { path } \\ inertia " )
os . mkdir ( f " { path } \\ s_3 " )
os . mkdir ( f " { path } \\ hold " )
elif loadsel == ' inertia ' :
os . mkdir ( f " { path } \\ inertia " )
return config_file , current_file , prj_file
return config_file , current_file , prj_file
else :
else :
w2t ( ' 初始路径下不允许有文件夹,且初始路径下只能存在如下三个文件,确认后重新运行! ' , 0 , 0 , ' red ' , tab_name = ' Automatic Test ' )
w2t ( ' 初始路径下不允许有文件夹,且初始路径下只能存在如下三个文件,确认后重新运行! ' , 0 , 0 , ' red ' , tab_name = ' Automatic Test ' )
@ -61,8 +62,6 @@ def prj_to_xcore(prj_file):
ssh . set_missing_host_key_policy ( AutoAddPolicy ( ) )
ssh . set_missing_host_key_policy ( AutoAddPolicy ( ) )
ssh . connect ( ' 192.168.0.160 ' , 22 , username = ' luoshi ' , password = ' luoshi2019 ' )
ssh . connect ( ' 192.168.0.160 ' , 22 , username = ' luoshi ' , password = ' luoshi2019 ' )
sftp = ssh . open_sftp ( )
sftp = ssh . open_sftp ( )
# stdin, stdout, stderr = ssh.exec_command('rm /tmp/target.zip')
# ssh.exec_command('rm /tmp/target.zip')
sftp . put ( prj_file , ' /tmp/target.zip ' )
sftp . put ( prj_file , ' /tmp/target.zip ' )
cmd = ' cd /tmp; rm -rf target/; mkdir target; unzip -d target/ -q target.zip; '
cmd = ' cd /tmp; rm -rf target/; mkdir target; unzip -d target/ -q target.zip; '
cmd + = ' chmod 777 -R target/; rm target.zip '
cmd + = ' chmod 777 -R target/; rm target.zip '
@ -110,7 +109,7 @@ def execution(cmd, hr, w2t, **kwargs):
return _response
return _response
def data_proc ( path , filename , channel ) :
def data_proc_regular ( path , filename , channel , scenario_time ):
if channel in list ( range ( 6 ) ) :
if channel in list ( range ( 6 ) ) :
with open ( filename , ' r ' , encoding = ' utf-8 ' ) as f_obj :
with open ( filename , ' r ' , encoding = ' utf-8 ' ) as f_obj :
lines = f_obj . readlines ( )
lines = f_obj . readlines ( )
@ -175,69 +174,127 @@ def data_proc(path, filename, channel):
df_01 = pandas . DataFrame . from_dict ( _d2d_vel_0 )
df_01 = pandas . DataFrame . from_dict ( _d2d_vel_0 )
df_02 = pandas . DataFrame . from_dict ( _d2d_trq_0 )
df_02 = pandas . DataFrame . from_dict ( _d2d_trq_0 )
df = pandas . concat ( [ df_01 , df_02 ] , axis = 1 )
df = pandas . concat ( [ df_01 , df_02 ] , axis = 1 )
_filename = f ' { path } \\ s_ { channel - 5 } \\ j1_s_1 .data '
_filename = f ' { path } \\ s_ { channel - 5 } \\ j1_s_{ channel - 5 } _ { scenario_time } .data '
df . to_csv ( _filename , sep = ' \t ' , index = False )
df . to_csv ( _filename , sep = ' \t ' , index = False )
df_01 = pandas . DataFrame . from_dict ( _d2d_vel_1 )
df_01 = pandas . DataFrame . from_dict ( _d2d_vel_1 )
df_02 = pandas . DataFrame . from_dict ( _d2d_trq_1 )
df_02 = pandas . DataFrame . from_dict ( _d2d_trq_1 )
df = pandas . concat ( [ df_01 , df_02 ] , axis = 1 )
df = pandas . concat ( [ df_01 , df_02 ] , axis = 1 )
_filename = f ' { path } \\ s_ { channel - 5 } \\ j2_s_1 .data '
_filename = f ' { path } \\ s_ { channel - 5 } \\ j2_s_{ channel - 5 } _ { scenario_time } .data '
df . to_csv ( _filename , sep = ' \t ' , index = False )
df . to_csv ( _filename , sep = ' \t ' , index = False )
df_01 = pandas . DataFrame . from_dict ( _d2d_vel_2 )
df_01 = pandas . DataFrame . from_dict ( _d2d_vel_2 )
df_02 = pandas . DataFrame . from_dict ( _d2d_trq_2 )
df_02 = pandas . DataFrame . from_dict ( _d2d_trq_2 )
df = pandas . concat ( [ df_01 , df_02 ] , axis = 1 )
df = pandas . concat ( [ df_01 , df_02 ] , axis = 1 )
_filename = f ' { path } \\ s_ { channel - 5 } \\ j3_s_1 .data '
_filename = f ' { path } \\ s_ { channel - 5 } \\ j3_s_{ channel - 5 } _ { scenario_time } .data '
df . to_csv ( _filename , sep = ' \t ' , index = False )
df . to_csv ( _filename , sep = ' \t ' , index = False )
df_01 = pandas . DataFrame . from_dict ( _d2d_vel_3 )
df_01 = pandas . DataFrame . from_dict ( _d2d_vel_3 )
df_02 = pandas . DataFrame . from_dict ( _d2d_trq_3 )
df_02 = pandas . DataFrame . from_dict ( _d2d_trq_3 )
df = pandas . concat ( [ df_01 , df_02 ] , axis = 1 )
df = pandas . concat ( [ df_01 , df_02 ] , axis = 1 )
_filename = f ' { path } \\ s_ { channel - 5 } \\ j4_s_1 .data '
_filename = f ' { path } \\ s_ { channel - 5 } \\ j4_s_{ channel - 5 } _ { scenario_time } .data '
df . to_csv ( _filename , sep = ' \t ' , index = False )
df . to_csv ( _filename , sep = ' \t ' , index = False )
df_01 = pandas . DataFrame . from_dict ( _d2d_vel_4 )
df_01 = pandas . DataFrame . from_dict ( _d2d_vel_4 )
df_02 = pandas . DataFrame . from_dict ( _d2d_trq_4 )
df_02 = pandas . DataFrame . from_dict ( _d2d_trq_4 )
df = pandas . concat ( [ df_01 , df_02 ] , axis = 1 )
df = pandas . concat ( [ df_01 , df_02 ] , axis = 1 )
_filename = f ' { path } \\ s_ { channel - 5 } \\ j5_s_1 .data '
_filename = f ' { path } \\ s_ { channel - 5 } \\ j5_s_{ channel - 5 } _ { scenario_time } .data '
df . to_csv ( _filename , sep = ' \t ' , index = False )
df . to_csv ( _filename , sep = ' \t ' , index = False )
df_01 = pandas . DataFrame . from_dict ( _d2d_vel_5 )
df_01 = pandas . DataFrame . from_dict ( _d2d_vel_5 )
df_02 = pandas . DataFrame . from_dict ( _d2d_trq_5 )
df_02 = pandas . DataFrame . from_dict ( _d2d_trq_5 )
df = pandas . concat ( [ df_01 , df_02 ] , axis = 1 )
df = pandas . concat ( [ df_01 , df_02 ] , axis = 1 )
_filename = f ' { path } \\ s_ { channel - 5 } \\ j6_s_1 .data '
_filename = f ' { path } \\ s_ { channel - 5 } \\ j6_s_{ channel - 5 } _ { scenario_time } .data '
df . to_csv ( _filename , sep = ' \t ' , index = False )
elif channel in list ( range ( 9 , 15 ) ) :
with open ( filename , ' r ' , encoding = ' utf-8 ' ) as f_obj :
lines = f_obj . readlines ( )
_d2d_vel = { ' hw_joint_vel_feedback ' : [ ] }
_d2d_trq = { ' device_servo_trq_feedback ' : [ ] }
for line in lines :
data = eval ( line . strip ( ) ) [ ' data ' ]
for item in data :
if item . get ( ' channel ' , None ) == channel - 9 and item . get ( ' name ' , None ) == ' hw_joint_vel_feedback ' :
_d2d_vel [ ' hw_joint_vel_feedback ' ] . extend ( item [ ' value ' ] )
elif item . get ( ' channel ' , None ) == channel - 9 and item . get ( ' name ' , None ) == ' device_servo_trq_feedback ' :
_d2d_trq [ ' device_servo_trq_feedback ' ] . extend ( item [ ' value ' ] )
df1 = pandas . DataFrame . from_dict ( _d2d_vel )
df2 = pandas . DataFrame . from_dict ( _d2d_trq )
df = pandas . concat ( [ df1 , df2 ] , axis = 1 )
_filename = f ' { path } \\ single \\ j { channel - 8 } _hold.data '
df . to_csv ( _filename , sep = ' \t ' , index = False )
df . to_csv ( _filename , sep = ' \t ' , index = False )
def gen_result_file ( path , loadsel , disc , number ) :
def data_proc_inertia ( path , filename , channel ) :
with open ( filename , ' r ' , encoding = ' utf-8 ' ) as f_obj :
lines = f_obj . readlines ( )
_d2d_vel = { ' hw_joint_vel_feedback ' : [ ] }
_d2d_trq = { ' device_servo_trq_feedback ' : [ ] }
for line in lines :
data = eval ( line . strip ( ) ) [ ' data ' ]
for item in data :
if item . get ( ' channel ' , None ) == channel + 3 and item . get ( ' name ' , None ) == ' hw_joint_vel_feedback ' :
_d2d_vel [ ' hw_joint_vel_feedback ' ] . extend ( item [ ' value ' ] )
elif item . get ( ' channel ' , None ) == channel + 3 and item . get ( ' name ' , None ) == ' device_servo_trq_feedback ' :
_d2d_trq [ ' device_servo_trq_feedback ' ] . extend ( item [ ' value ' ] )
df1 = pandas . DataFrame . from_dict ( _d2d_vel )
df2 = pandas . DataFrame . from_dict ( _d2d_trq )
df = pandas . concat ( [ df1 , df2 ] , axis = 1 )
_filename = f ' { path } \\ inertia \\ j { channel + 4 } _inertia.data '
df . to_csv ( _filename , sep = ' \t ' , index = False )
def gen_result_file ( path , loadsel , disc , number , scenario_time ) :
filename = path + f ' \\ data.txt '
filename = path + f ' \\ data.txt '
with open ( filename , ' w ' , encoding = ' utf-8 ' ) as f_obj :
with open ( filename , ' w ' , encoding = ' utf-8 ' ) as f_obj :
for line in disc [ number ] [ 1 ] :
for line in disc [ number ] [ 1 ] :
f_obj . write ( str ( line ) + ' \n ' )
f_obj . write ( str ( line ) + ' \n ' )
if loadsel == ' tool100 ' :
if loadsel == ' tool100 ' :
data_proc ( path , filename , number )
data_proc_regular ( path , filename , number , scenario_time )
elif loadsel == ' inertia ' :
elif loadsel == ' inertia ' :
data_proc ( path , filename , ' all ' )
data_proc_inertia ( path , filename , number )
def regular_load ( path , hr , md , loadsel , w2t ) :
def run_rl ( path , hr , md , loadsel , w2t ) :
conditions = [
c_regular = [
" scenario(0, j1_p, j1_n, p_speed, p_tool)" ,
" scenario(0, j1_p, j1_n, p_speed, p_tool, i_tool ) " ,
" scenario(0, j2_p, j2_n, p_speed, p_tool)" ,
" scenario(0, j2_p, j2_n, p_speed, p_tool, i_tool ) " ,
" scenario(0, j3_p, j3_n, p_speed, p_tool)" ,
" scenario(0, j3_p, j3_n, p_speed, p_tool, i_tool ) " ,
" scenario(0, j4_p, j4_n, p_speed, p_tool)" ,
" scenario(0, j4_p, j4_n, p_speed, p_tool, i_tool ) " ,
" scenario(0, j5_p, j5_n, p_speed, p_tool)" ,
" scenario(0, j5_p, j5_n, p_speed, p_tool, i_tool ) " ,
" scenario(0, j6_p, j6_n, p_speed, p_tool)" ,
" scenario(0, j6_p, j6_n, p_speed, p_tool, i_tool ) " ,
" scenario(1, j5 _p, j5 _n, p_speed, p_tool)" ,
" scenario(1, j6 _p, j6 _n, p_speed, p_tool, i_tool ) " ,
" scenario(2, j5 _p, j5 _n, p_speed, p_tool)" ,
" scenario(2, j6 _p, j6 _n, p_speed, p_tool, i_tool ) " ,
" scenario(3, j5 _p, j5 _n, p_speed, p_tool)" ,
" scenario(3, j6 _p, j6 _n, p_speed, p_tool, i_tool ) " ,
" scenario(4, j1_hold, j1_hold, p_speed, p_tool, i_tool) " ,
" scenario(4, j2_hold, j2_hold, p_speed, p_tool, i_tool) " ,
" scenario(4, j3_hold, j3_hold, p_speed, p_tool, i_tool) " ,
" scenario(4, j4_hold, j4_hold, p_speed, p_tool, i_tool) " ,
" scenario(4, j5_hold, j5_hold, p_speed, p_tool, i_tool) " ,
" scenario(4, j6_hold, j6_hold, p_speed, p_tool, i_tool) " ,
]
]
c_inertia = [
" scenario(5, j4_p_inertia, j4_n_inertia, p_speed, p_tool, i_tool) " ,
" scenario(5, j5_p_inertia, j5_n_inertia, p_speed, p_tool, i_tool) " ,
" scenario(5, j6_p_inertia, j6_n_inertia, p_speed, p_tool, i_tool) " ,
]
disc_regular = {
0 : [ ' 一轴 ' , [ ] ] , 1 : [ ' 二轴 ' , [ ] ] , 2 : [ ' 三轴 ' , [ ] ] , 3 : [ ' 四轴 ' , [ ] ] , 4 : [ ' 五轴 ' , [ ] ] , 5 : [ ' 六轴 ' , [ ] ] ,
6 : [ ' 场景一 ' , [ ] ] , 7 : [ ' 场景二 ' , [ ] ] , 8 : [ ' 场景三 ' , [ ] ] , 9 : [ ' 一轴保持 ' , [ ] ] , 10 : [ ' 二轴保持 ' , [ ] ] ,
11 : [ ' 三轴保持 ' , [ ] ] , 12 : [ ' 四轴保持 ' , [ ] ] , 13 : [ ' 五轴保持 ' , [ ] ] , 14 : [ ' 六轴保持 ' , [ ] ]
}
disc_inertia = { 0 : [ ' 四轴惯量 ' , [ ] ] , 1 : [ ' 五轴惯量 ' , [ ] ] , 2 : [ ' 六轴惯量 ' , [ ] ] }
if loadsel == ' tool100 ' :
conditions = c_regular
disc = disc_regular
elif loadsel == ' inertia ' :
conditions = c_inertia
disc = disc_inertia
for condition in conditions :
for condition in conditions :
disc = {
0 : [ ' 一轴 ' , [ ] ] , 1 : [ ' 二轴 ' , [ ] ] , 2 : [ ' 三轴 ' , [ ] ] , 3 : [ ' 四轴 ' , [ ] ] , 4 : [ ' 五轴 ' , [ ] ] , 5 : [ ' 六轴 ' , [ ] ] ,
6 : [ ' 场景一 ' , [ ] ] , 7 : [ ' 场景二 ' , [ ] ] , 8 : [ ' 场景三 ' , [ ] ]
}
number = conditions . index ( condition )
number = conditions . index ( condition )
w2t ( f " 正在执行 { disc [ number ] [ 0 ] } 测试...... " , 0 , 0 , ' purple ' , ' Automatic Test ' )
w2t ( f " 正在执行 { disc [ number ] [ 0 ] } 测试...... " , 0 , 0 , ' purple ' , ' Automatic Test ' )
@ -283,6 +340,7 @@ def regular_load(path, hr, md, loadsel, w2t):
w2t ( " 未收到机器人的运行信号, 需要确认RL程序编写正确并正常执行... " , 0 , 111 , ' red ' , ' Automatic Test ' )
w2t ( " 未收到机器人的运行信号, 需要确认RL程序编写正确并正常执行... " , 0 , 111 , ' red ' , ' Automatic Test ' )
# 5. 打开诊断曲线,并执行采集
# 5. 打开诊断曲线,并执行采集
sleep ( 7 ) # 保证程序已经运行起来,其实主要是为了保持电流的采集而设定
_response = execution ( ' diagnosis.open ' , hr , w2t , open = True , display_open = True )
_response = execution ( ' diagnosis.open ' , hr , w2t , open = True , display_open = True )
display_pdo_params = [
display_pdo_params = [
{ " name " : " hw_joint_vel_feedback " , " channel " : 0 } ,
{ " name " : " hw_joint_vel_feedback " , " channel " : 0 } ,
@ -300,7 +358,8 @@ def regular_load(path, hr, md, loadsel, w2t):
{ " name " : " device_safety_estop " , " channel " : 0 } ,
{ " name " : " device_safety_estop " , " channel " : 0 } ,
]
]
_response = execution ( ' diagnosis.set_params ' , hr , w2t , display_pdo_params = display_pdo_params )
_response = execution ( ' diagnosis.set_params ' , hr , w2t , display_pdo_params = display_pdo_params )
if number < 6 :
scenario_time = 0
if number < 6 or number > 8 :
sleep ( 15 )
sleep ( 15 )
else :
else :
_t_start = time ( )
_t_start = time ( )
@ -315,14 +374,15 @@ def regular_load(path, hr, md, loadsel, w2t):
else :
else :
sleep ( 5 )
sleep ( 5 )
sleep ( 1 ) # 一定要延迟一秒再读一次scenario time寄存器, 因为一开始读取的数值不准确
sleep ( 1 ) # 一定要延迟一秒再读一次scenario time寄存器, 因为一开始读取的数值不准确
sleep ( float ( md . read_scenario_time ( ) ) * 0.2 ) # 再运行周期的20%即可
scenario_time = md . read_scenario_time ( )
sleep ( float ( scenario_time ) * 0.2 ) # 再运行周期的20%即可
# 6. 关闭诊断曲线,停止程序运行,下电并且换成手动模式
# 6. 关闭诊断曲线,停止程序运行,下电并且换成手动模式
_response = execution ( ' diagnosis.open ' , hr , w2t , open = False , display_open = False )
_response = execution ( ' diagnosis.open ' , hr , w2t , open = False , display_open = False )
_response = execution ( ' rl_task.stop ' , hr , w2t , tasks = [ ' current ' ] )
_response = execution ( ' rl_task.stop ' , hr , w2t , tasks = [ ' current ' ] )
_response = execution ( ' state.switch_motor_off ' , hr , w2t )
_response = execution ( ' state.switch_motor_off ' , hr , w2t )
_response = execution ( ' state.switch_manual ' , hr , w2t )
_response = execution ( ' state.switch_manual ' , hr , w2t )
sleep ( 2 ) # 保证所有数据均已返回
sleep ( 1 ) # 保证所有数据均已返回
# 7. 保留数据并处理输出
# 7. 保留数据并处理输出
for _msg in hr . c_msg :
for _msg in hr . c_msg :
if ' diagnosis.result ' in _msg :
if ' diagnosis.result ' in _msg :
@ -333,27 +393,19 @@ def regular_load(path, hr, md, loadsel, w2t):
if ' diagnosis.result ' in _msg :
if ' diagnosis.result ' in _msg :
_index = hr . c_msg . index ( _msg )
_index = hr . c_msg . index ( _msg )
break
break
del hr . c_msg [ _index - 10 : ]
del hr . c_msg [ _index : ]
hr . c_msg_xs . clear ( )
hr . c_msg_xs . clear ( )
gen_result_file ( path , loadsel , disc , number )
gen_result_file ( path , loadsel , disc , number , scenario_time )
else :
else :
w2t ( " 满载情况下,单轴和场景电机电流采集完毕。 " , 0 , 0 , ' green ' , ' Automatic Test ' )
if loadsel == ' tool100 ' :
w2t ( " 单轴和场景电机电流采集完毕,如需采集惯量负载,须切换负载类型,并更换惯量负载,重新执行。 " , 0 , 0 , ' green ' , ' Automatic Test ' )
elif loadsel == ' inertia ' :
def inertia_load ( path , hr , md , loadsel , w2t ) :
w2t ( " 惯量负载电机电流采集完毕,如需采集单轴/场景/保持电机电流,须切换负载类型,并更换偏置负载,重新执行。 " , 0 , 0 , ' green ' , ' Automatic Test ' )
pass
def run_rl ( path , hr , md , loadsel , w2t ) :
if loadsel == ' tool100 ' :
regular_load ( path , hr , md , loadsel , w2t )
elif loadsel == ' inertia ' :
inertia_load ( path , hr , md , loadsel , w2t )
def main ( path , hr , md , loadsel , w2t ) :
def main ( path , hr , md , loadsel , w2t ) :
data_dirs , data_files = traversal_files ( path , w2t )
data_dirs , data_files = traversal_files ( path , w2t )
config_file , current_file , prj_file = check_files ( path , data_dirs , data_files , w2t )
config_file , current_file , prj_file = check_files ( path , loadsel , data_dirs , data_files , w2t )
prj_to_xcore ( prj_file )
prj_to_xcore ( prj_file )
run_rl ( path , hr , md , loadsel , w2t )
run_rl ( path , hr , md , loadsel , w2t )