Ltf science
PF Users Navigation:
- PCB; Lifefix_users; Pf_users; benchtest_users; CalibFix Users; Hardware; Assembly ; iochan ;
- PCA : PCB ; AKENC SC/MC 218 ; FET 217 ; IMU219 ; Swifi ; Rev200_mods ; PCA Inventory
- Special Commands to the Ankle (PFCMD) : State Controller Commands; Motor Controller Commands; Python Examples; IMU Commands ;PFCMD_PY; Pf_calb_table_py; Virtual spring test; PF EEPROM
- DOC: Pf_users; Powerfoot Keyboard User Interface; Steps for Manual Tuning; "Dashboard" Program For Assisting with Tuning
- NEW (CEB) WIKI
- Torque Feedback Controller Guide
- LF: Lifefix_users; Ltf_science; lifefix_log ; Loadwasher ; Lifefix;
Contents
Jan 31 2010
- 10:30am at 205,000 cycles. The backlash continues to increase. The red line appears to fit the trend and has a slope of 41 counts (corrected) per hour. The limit is 22000, thus the expected stop time is 3 to 6am. [1]
- At 75 hrs the firmware was updated to make the encoder read atomic. The encoder range event errors have dropped significantly (but not fully). Possibly the read is still non-atomic.... [2]
- The workloop plot at 205k cycles shows a spike growing near the 0 motor position. [3]
- A comparison of the workloop at the start of the run on Jan 27th, and the present time. There has been a ~1/2 rotation position shift - which is possibly due to slop - as at the zero position there is alignment, as well as in the positive force, and negative position area. PNG FIG
notes
s = importdata('\\192.168.192.27\cbarn\src\pfcmd_python\support\parsed_log.txt'); tm = (s(:,1)-s(1,1))/3600; x=81:115;cnt1=2.075e4;cnt2=2.12e4;tm1=81;tm2=92; y=cnt1+(x-tm1)*(cnt2-cnt1)/(cnt2-cnt1); plot(tm, s(:,3),'.',[0,110],[2.2e4,2.2e4],'r',x,y,'r','LineWidth',2);grid on; ylabel('encoder counts');xlabel('hours into run');title('LTF Range of Motion (1-31-10)');
Jan 30 2010
- Some plots from 70 hours into the run.
- There is an interesting pattern in the excessive range of motion error condition.
- Backlash starts at 50hrs.
- Motor temperature is steady.
Dec 2009 - full range backdrive loops
time domain
- Backdrive was -31000 to +21000 (full range), robot applied either a constant +3 amps or -3 amps. This plot is versus time. JR3 data is correctly aligned with robot data. Notice that change in force reading with robot (and thus backdrive) position
http://bmech2.media.mit.edu/for_wiki/png/ltf/TN_fullrange_backdrive_wmp_3amps_and_jr3.JPG [7]
http://bmech2.media.mit.edu/for_wiki/png/ltf/TN_fullrange_backdrive_wmp_3amps_zoom.JPG [8]
force vs motor rotations
- Previous experiment with data ploted WRT to robot motor rotations - notice the periodic relationship in the forces wrt to motor.
http://bmech2.media.mit.edu/for_wiki/png/ltf/TN_fullrange_backdrive_vs_ak_motor_wmp_3amps_w_jr3.JPG [9]
- Zoom into edge of above to make apparent the 0.55 motor rotation shift when robot torque current changes from +3 amps to -3 amps.
http://bmech2.media.mit.edu/for_wiki/png/ltf/TN_fullrange_backdrive_vs_ak_motor_wmp_3amps_w_jr3_zoom.JPG [10]
Dec 2009 - dynamic tests
- 3 amp discrete discrete sine waves applied. This plot is versus time. (freq range ~10hz to 20hz)
http://bmech2.media.mit.edu/for_wiki/png/ltf/TN_discrete_sine_sweep_with_jr3.JPG [11]
- continuous time sine sweep from 1 to 200 hz. This plot is versus experiment time (but has a drive frq trace)
http://bmech2.media.mit.edu/for_wiki/png/ltf/TN_continuous_sine_sweep_w_jr3.JPG [12]
- Phase response - the movie:
http://bmech2.media.mit.edu/for_wiki/png/ltf/sine_drive_phase_response_8_to_30hz.avi
how to do dynamic test
- login as root, cd /root/pfcmd on lifefix
- after a power cycle of the robot on LTF - MAKE SURE BACKDRIVE IS OFF!!! (use ^C on ecat)
- python do_command.py -p 1 -s 1115 1500 0 2
- check for ~3 motor amps in MATLAB
- sets mode 2 which comutates the ankle motor
- python do_command.py -p 1 -s 1115 0 0 7
- zero the current offset
- python do_command.py -p 1 -s 1115 0 0 0
- go back to mode 0
- python do_command.py -p 1 -s 1115 1500 0 2
Requires the use of 3 programs on the LTF, and a number of programs on a support PC
- on the PC start wifi_fast and the matlab plotter "plot_lifefix". When starting wifi_fast, specify a log file (-f) that is descriptive of the test.
- for JR3 viewing, start a 2nd matlab plotter "plot_jr3"
- On LTF: python lifefix_test.py npv : to enable the LWactual and reset the charge amp
- start move_ecat with the desired position profile
- cd ecat
- to (slowly) sweep a position : ./move_ecat -m p2p -a 1 -d 1 -p 200 -r 100 -i -27000 -f 9000
- -p 200 -> 200 passes, -r 100 -> 100 rpm.
- -i and -f specify initial and final position end points (check for limits!).
- -h help display
- to hold position for a long seconds : ./move_ecat -m p2p -a 1 -d 1 -p 1 -r 100 -i 0 -f 0 -P 99999999
- start the jr3 logger (w/1000 hz sample rate) with optional UDP logger and a description logging file name.
- python log_loadcell.py -U 192.168.192.15 -R 1000 -f jr3_<TEST_DESCRIPTION>.txt
- matlab (plot_jr3.m) must be running on machine specified by -U option
- make sure that the charge amp is in the measure mode, be verifying that the LWactual plot is noisy.
- may require the use of charge_amp_control.py
- edit the lifefix_test.py stimulus program to set the desired amplitude of the tests.
- run the stimulus program
- python lifefix_test.py sweep
- often lifefix_test will run indefinitely, use the command "python lifefix_test.py stop" when enough data has been collected.
- stop all the data collectors
- load the data into matlab, and if necessary, align the JR3 data with the SWIFI data.
dc sine sweep tests of 12-26-09
- ran at 3 backdrive positions, 0, +15000, -25000
- data files live here: \\pedant\xxxxxFiles\xxxxx LLC\data\ltf\2009_dec_26_dynamic_tests
kca.set_fullscale_range(1000.0) lf.mc.dataport_set_readback_variable(position=2, variable_id=208); lf.mc.set_dataport_select(1); # MC dataport_select - routes lifefix to dataport, not SC data lf.set_parameter('ff_force_gain', 27.0e-3); # this value cancels newtons_to_amps lf.set_parameter('sine_amp', 2.5); lf.set_parameter('desired_dc_force',5.0); lf.set_force_mode(force_mode='dc_sweep', sweep_seconds=40.0, sweep_range=[1,200]) lf.set_parameter('current_limit',9); lf.send_run_command('start')
white noise constant table
- ran 6 test and 3 back drive positions, 0, +15k, -25k. Two tests run at each position - the difference being the sign of the DC component.
- data files live here: \\pedant\xxxxxFiles\xxxxx LLC\data\ltf\2009_dec_26_dynamic_tests
kca.set_fullscale_range(1000.0) lf.mc.dataport_set_readback_variable(position=2, variable_id=208); lf.mc.set_dataport_select(1); # MC dataport_select - routes lifefix to dataport, not SC data lf.set_parameter('ff_force_gain', 27.0e-3); # this value cancels newtons_to_amps lf.set_parameter('thrust_table_scale_factor', 5); lf.set_parameter('desired_dc_force',-5.0); lf.set_force_mode(force_mode='CONST_TABLE'); lf.set_parameter('current_limit',12); lf.send_run_command('start')
Dec 2009 - static test
some tricks to get things working
- use do_command.py -p 1 -s 1115 1500 0 2 to set the motor phase
- python static_test.py -J (use -J to avoid jr3_mean error)
- when starting static_test confirm there is an AC LWactual signal sync w/qIq
potential function @ BD -11000, sweep -9 to 9 amps (in reverse BD experiment)
- The backdrive motor was fixed at -11000, and the robot current was stepped with the following pattern: 0.2, -0.2, 0.4, -0.4, 0.6 amps, ..., 9, -9 amps. After the current step the system was allowed to settle. The LW was collected via RS232 - appx 87 samples averaged. This plot consists of appx 12 hrs of collection the full experiment cycled the backdrive motor from 21000 to -29000 (steps of -2000). This plot contains only the instances where the backdrive motor position == -11000. The LW (charge amp was not zeroed except at the very start of the experiment and its drift is apparent.) Ltf_matlab_source#ltf_pf-2009-12-16.m
http://bmech2.media.mit.edu/for_wiki/png/ltf/TN_ltf_potential_plot_9amps_bd_m11000.JPG [13]
force dependence on BD position (forward BD motion)
- the BD motor was driven in the forward direction on 12-15-09 - the result was a strong dependence of force on BD position. Ltf_matlab_source#ltf_bd_dep-121509.m
http://bmech2.media.mit.edu/for_wiki/png/ltf/TN_force_dependence_on_bd_posion_121509.JPG [14]
mile encoder study
- Bench test with +-6 amps for 20 hrs
bmech2.media.mit.edu http://bmech2.media.mit.edu/for_wiki/png/ltf/TN_inc_mile_encoder_hist_560000.JPG [15]
- MR encoder dependence on motor phase angle (no load, voltage limited)
http://bmech2.media.mit.edu/for_wiki/png/ltf/TN_ec30_w_mr_enc_mod1000.JPG [16]
- MILE encoder dependence on motor phase angle(RE40 negative voltage)
http://bmech2.media.mit.edu/for_wiki/png/ltf/TN_re40_drive_of_ec30_mile_qV_vs_mod2048_minus2600rpm.JPG [17]
- MILE encoder dependence on motor phase angle(RE40 positive voltage)
http://bmech2.media.mit.edu/for_wiki/png/ltf/TN_re40_drive_of_ec30_mile_qV_vs_mod2048_2600rpm.JPG [18]
- unloaded MILE at 7000-8000 rpm, voltage limited. Notice the very large motor amp spikes - but less on the qIq. This suggests there is a large qId term.
http://bmech2.media.mit.edu/for_wiki/png/ltf/TN_ec30_w_mile_enc_mod.JPG [19]
early experiments
resonance observed developing belt thrash test
- Holding the BD motor fixed, driving the robot motor w/current mode square wave at specified frequency.
http://bmech2.media.mit.edu/for_wiki/png/ltf/TN_belt_resonance.JPG [20]
zoom in - resonance observed developing belt thrash test
- Zooming into a specific section:
http://bmech2.media.mit.edu/for_wiki/png/ltf/TN_belt_resonance_zoom.JPG [21]