13
Lecture 6: Servo Commands; Matlab “eval” function, switchcase structure Professor Carr Everbach Course web page: http://www.swarthmore.edu/NatSci/ceverba1/Class/e5/E5Index.html

Lecture6:’ ServoCommands;’ Matlab“ eval”function,’ switch ... · Some’MatLab: Open a serial connection (done only once). s=instrfind; %Find any serial links (we can have

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lecture6:’ ServoCommands;’ Matlab“ eval”function,’ switch ... · Some’MatLab: Open a serial connection (done only once). s=instrfind; %Find any serial links (we can have

Lecture  6:                                                                                          Servo  Commands;  Matlab  “eval”  function,  

switch-­‐case  structure  

Professor  Carr  Everbach  

Course  web  page:    http://www.swarthmore.edu/NatSci/ceverba1/Class/e5/E5Index.html  

Page 2: Lecture6:’ ServoCommands;’ Matlab“ eval”function,’ switch ... · Some’MatLab: Open a serial connection (done only once). s=instrfind; %Find any serial links (we can have

Remember…    If you can by Friday 10/7: 3nd MatLab is due (but will

accept any time before Monday 10/17)

  Next week is Fall Break

  After break: 4th Matlab involving simulation of your robot’s movements; neural networks and genetic algorithms to optimize complex behavior

  Robot races on November 8: cookies to the winner(s)

  Today: Professor Tali Moreshet speaking on her teaching and research in computer engineering

Page 3: Lecture6:’ ServoCommands;’ Matlab“ eval”function,’ switch ... · Some’MatLab: Open a serial connection (done only once). s=instrfind; %Find any serial links (we can have

Some  MatLab:  Open a serial connection (done only once).

s=instrfind; %Find any serial links (we can have only 1) delete(s); %... and delete.

%Create a new serial communications link s=serial('COM1','Baudrate',38400,'Terminator','CR'); fopen(s); %... and open it

Send a string to I/O board.

% set pulsewidth on motor 1 to 1000 microseconds (over 200 mS) fprintf(s,‘#1P1000T200');

Or build up the string out of components:

3  

Page 4: Lecture6:’ ServoCommands;’ Matlab“ eval”function,’ switch ... · Some’MatLab: Open a serial connection (done only once). s=instrfind; %Find any serial links (we can have

“eval”  func7on   How  to  obtain  user  input  such  as  filenames  and  include  that  input  in  a  programmed  command?  

  fname  =  input(‘Enter  name  of  file:  ’,  ‘s’);  %  get  filename  

 filestring  =  [‘save  ’,  fname,  ‘;’];  %  form  command  string  

  eval(filestring);  %  do  the  formed  command  

This  is  like  typing  the  filestring  directly  to  the  Matlab  command  prompt  >>  

Page 5: Lecture6:’ ServoCommands;’ Matlab“ eval”function,’ switch ... · Some’MatLab: Open a serial connection (done only once). s=instrfind; %Find any serial links (we can have

“find”  func7on    If  you  have  an  array  of  values,  use  the  “find”  function  to  discover  the  index  of  all  values  that  meet  a  Boolean  test.  

For  example:   P  =  [-­‐17,  pi,  2.4,  -­‐3,  sin(1.7),  42];   Q  =  Find(P>3  |  P<0)    fprintf(‘negative  or  greater  than  3:    %f\n’,  P(Q));  

Page 6: Lecture6:’ ServoCommands;’ Matlab“ eval”function,’ switch ... · Some’MatLab: Open a serial connection (done only once). s=instrfind; %Find any serial links (we can have

“switch-­‐case”  structure    If  you  have  complete  set  of  mutually  exclusive  possibilities,  you  can  test  each  one  and  execute  program  code  depending:  switch a case ’yes' % execute some code here for “yes” case ’no' % execute some code here for “no” case ’maybe' % execute some code here for “maybe” otherwise disp('Improper choice.')

end  

   

Page 7: Lecture6:’ ServoCommands;’ Matlab“ eval”function,’ switch ... · Some’MatLab: Open a serial connection (done only once). s=instrfind; %Find any serial links (we can have

Servo  Motors  (1)   Output  shaft  of  motor  turns  to  angle  specified  by  input  pulses.  

 We  send  a  stream  of  pulses  to  servo  through  wires  connected  to  it.    

 Width  of  pulses  defines  angle  of  output  shaft.   http://www.lynxmotion.com/images/Products/Full/hsr-5980.jpg

Image adapted from: http://www.electronicsteacher.com/robotics/images/pulsewidthdiagram.gif 7  

Page 8: Lecture6:’ ServoCommands;’ Matlab“ eval”function,’ switch ... · Some’MatLab: Open a serial connection (done only once). s=instrfind; %Find any serial links (we can have

Servo  Motors  (2)  

Images adapted from: http://www.lynxmotion.com/images/data/ssc-32.pdf

Relatively precise, but not accurate

8  

Page 9: Lecture6:’ ServoCommands;’ Matlab“ eval”function,’ switch ... · Some’MatLab: Open a serial connection (done only once). s=instrfind; %Find any serial links (we can have

Controlling  the  Servo  

  Open a serial port connection   Send a string of characters to the I/O board   The I/O board controls the motors by

varying the width of pulses sent to the servo

9  

Page 10: Lecture6:’ ServoCommands;’ Matlab“ eval”function,’ switch ... · Some’MatLab: Open a serial connection (done only once). s=instrfind; %Find any serial links (we can have

Control  Format  

  #<ch>P<pw>...#<ch>P<pw>T<time><cr>   <ch> = channel number (0-31)   <pw> = pulse width in microseconds (500-2500)   <time> = time in milliseconds for move (optional)

  <cr> = carriage return http://www.youtube.com/watch?v=Pp2IJIk5qvc  

10  

Page 11: Lecture6:’ ServoCommands;’ Matlab“ eval”function,’ switch ... · Some’MatLab: Open a serial connection (done only once). s=instrfind; %Find any serial links (we can have

Control  Format  Examples  #<ch>P<pw>...#<ch>P<pw>T<time><cr>

  Sending the string: ‘#1P1500T200<cr>’   ch=1, pw=1500, time=200   This will set the pulsewidth on motor 1 to 1500

microseconds, and will make the change over 200 milliseconds. (1500 ms ≈ 0°)

11  

Page 12: Lecture6:’ ServoCommands;’ Matlab“ eval”function,’ switch ... · Some’MatLab: Open a serial connection (done only once). s=instrfind; %Find any serial links (we can have

Another  Control  Format  Examples  #<ch>P<pw>...#<ch>P<pw>T<time><cr>

  Sending the string: ‘#1P900T300<cr>’   ch=1, pw=900, time=300   This will set the pulsewidth on motor 1 to 900

microseconds, and will make the change over 300 milliseconds. (900 ms ≈ -45°)

12  

Page 13: Lecture6:’ ServoCommands;’ Matlab“ eval”function,’ switch ... · Some’MatLab: Open a serial connection (done only once). s=instrfind; %Find any serial links (we can have

Control  Format  Example  Again  #<ch>P<pw>...#<ch>P<pw>T<time><cr>

  Sending the string: ‘#1P1200#5P2100T1500<cr>’   ch=1, pw=1200

ch=5, pw=2100 time=1500

  This will set   the pulsewidth on motor 1 to 900 microseconds,   the pulsewidth on motor 5 to 2100 microseconds,   and will make the change over 1500 milliseconds.

13