Difference between revisions of "Trajectory from gyro/accellerometer/compas with 9DOF IMU (Michal Zemko, Peter Svitok)"

From RoboWiki
Jump to: navigation, search
(Zdrojový kód pre pohyb)
(Download)
 
(19 intermediate revisions by the same user not shown)
Line 27: Line 27:
  
 
== 2. etapa ==
 
== 2. etapa ==
== Zdrojový kód pre pohyb ==
+
V druhej etape sme začali programovať aplikáciu na vykresľovanie pohybu súčiastky.
'''Pohyb do ľubovoľného smeru'''
 
{GGGGGGGGGGGG
 
  
}
+
Program je naprogramovaný v Jave :
 +
 
 +
== Zdrojový kód==
 +
'''Vykreslovanie'''
 +
 
 +
<pre style="white-space: pre-wrap;
 +
white-space: -moz-pre-wrap;
 +
white-space: -pre-wrap;
 +
white-space: -o-pre-wrap;
 +
word-wrap: break-word;">
 +
 
 +
    static JFrame frame = new JFrame("Points");
 +
 +
public class pokus extends JPanel{
 +
  public void paintComponent(Graphics g) {
 +
      //super.paintComponent(g);
 +
 
 +
      Graphics2D g2d = (Graphics2D) g;
 +
 
 +
      g2d.setColor(Color.black);
 +
 
 +
      Dimension size = getSize();
 +
      Insets insets = getInsets();
 +
 
 +
      int w =  size.width - insets.left - insets.right;
 +
      int h =  size.height - insets.top - insets.bottom;
 +
 
 +
      Random r = new Random();
 +
 
 +
//       int x = Math.abs(r.nextInt()) % w;
 +
//       int y = Math.abs(r.nextInt()) % h;
 +
      int x = data_new[0]-data_old[0];
 +
      int y = data_new[1]-data_old[1];
 +
      startx+=x;
 +
      starty+=y;
 +
      x=startx;
 +
      y=starty;
 +
      int x2 = 0;
 +
      int y2 = 0;
 +
     
 +
      if(((x>0)&&(x<800))&&((y>0)&&(y<600))){
 +
      array.add(x);
 +
      array.add(y);
 +
 
 +
      for(int i=0;i<array.size();i+=2){
 +
        x=array.get(i).intValue();
 +
        y=array.get(i+1).intValue();
 +
        if(i>1){
 +
        x2=array.get(i-2).intValue();
 +
        y2=array.get(i-1).intValue();
 +
        g2d.drawLine(x, y, x2, y2);
 +
        }
 +
        g2d.drawLine(x, y, x, y);
 +
      g2d.drawLine(x+1, y, x-1, y);
 +
      g2d.drawLine(x, y+1, x, y-1);
 +
      }
 +
      }
 +
  }
 +
}
 +
</pre>
 +
 
 +
'''Vytvorenie spojenia s čipom 9DOF Razor IMU'''
 +
<pre style="white-space: pre-wrap;
 +
white-space: -moz-pre-wrap;
 +
white-space: -pre-wrap;
 +
white-space: -o-pre-wrap;
 +
word-wrap: break-word;">
 +
 
 +
void connect(String portName) throws Exception {
 +
paint();
 +
 +
CommPortIdentifier portIdentifier = CommPortIdentifier
 +
.getPortIdentifier(portName);
 +
if (portIdentifier.isCurrentlyOwned()) {
 +
System.out.println("Error: Port is currently in use");
 +
} else {
 +
CommPort commPort = portIdentifier.open(this.getClass().getName(),
 +
2000);
 +
 
 +
if (commPort instanceof SerialPort) {
 +
SerialPort serialPort = (SerialPort) commPort;
 +
serialPort.setSerialPortParams(38400, SerialPort.DATABITS_8,
 +
SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
 +
 
 +
InputStream in = serialPort.getInputStream();
 +
OutputStream out = serialPort.getOutputStream();
 +
 
 +
(new Thread(new SerialReader(in))).start();
 +
(new Thread(new SerialWriter(out))).start();
 +
 
 +
} else {
 +
System.out
 +
.println("Error: Only serial ports are handled by this example.");
 +
}
 +
}
 +
}
 +
 
 +
</pre>
 +
 
 +
 
 +
 
 +
'''Kontrola prijatých dát'''
 +
 
 +
<pre style="white-space: pre-wrap;
 +
white-space: -moz-pre-wrap;
 +
white-space: -pre-wrap;
 +
white-space: -o-pre-wrap;
 +
word-wrap: break-word;">
 +
 
 +
 
 +
public boolean isOK(String input) {
 +
int comma = 0;
 +
for (int i = 0; i < input.length(); i++) {
 +
if ((Character.isDigit(input.charAt(i)))||(input.charAt(i) == '$')||
 +
(input.charAt(i) == '#')||(input.charAt(i) == ',')||(input.charAt(i) == '-')) {
 +
if (input.charAt(i) == ',') {
 +
comma++;
 +
}
 +
}
 +
else {
 +
System.out.println("bad input");
 +
return false;
 +
}
 +
}
 +
if (comma != 10) {
 +
return false;
 +
}
 +
return true;
 +
}
 +
 
 +
</pre>
  
 
== 3. etapa ==
 
== 3. etapa ==
 +
V tretej etape sme pristúpili k testovaniu aplikácie a pozorovaniu vykreslených bodov do kresliacej plochy
 +
 +
[[Image:Airob02.png|400px|9DOF IMU]]
 +
 +
 +
== Download ==
 +
 +
 +
[[Media:RobotikaZemkoSvitok.rar|Trajectory from gyro/accellerometer/compas with 9DOF IMU]]

Latest revision as of 17:35, 28 June 2013

Zadanie

Trajectory from gyro/accellerometer/compas. Requirement: must use this part: 9DOF IMU

O súčiastke

9DOF IMU

V projekte sme mali využiť súčiastku 9DOF IMU a následne zo získaných dát vykresliť prejdenú trajektóriu robota.

Na doske 9DOF IMU sa nachádzajú nasledujúce komponenty:


Etapy

  • 1. Oboznamánie sa s projektom
  • 2. Naprogramovanie v Jave
  • 3. Záverečné prípravy

1. etapa

V prvej etape sme dostali súčiastku a cez program Putty skúšali jej funkčnosť.


9DOF IMU

2. etapa

V druhej etape sme začali programovať aplikáciu na vykresľovanie pohybu súčiastky.

Program je naprogramovaný v Jave :

Zdrojový kód

Vykreslovanie


    static JFrame frame = new JFrame("Points");
	
	public class pokus extends JPanel{
		  public void paintComponent(Graphics g) {
		      //super.paintComponent(g);

		      Graphics2D g2d = (Graphics2D) g;

		      g2d.setColor(Color.black);

		      Dimension size = getSize();
		      Insets insets = getInsets();

		      int w =  size.width - insets.left - insets.right;
		      int h =  size.height - insets.top - insets.bottom;

		      Random r = new Random();

//		      int x = Math.abs(r.nextInt()) % w;
//		      int y = Math.abs(r.nextInt()) % h;
		      int x = data_new[0]-data_old[0];
		      int y = data_new[1]-data_old[1];
		      startx+=x;
		      starty+=y;
		      x=startx;
		      y=starty;
		      int x2 = 0;
		      int y2 = 0;
		      
		      if(((x>0)&&(x<800))&&((y>0)&&(y<600))){
			      array.add(x);
			      array.add(y);

			      for(int i=0;i<array.size();i+=2){
			        x=array.get(i).intValue();
			        y=array.get(i+1).intValue();
			        if(i>1){
				        x2=array.get(i-2).intValue();
				        y2=array.get(i-1).intValue();
				        g2d.drawLine(x, y, x2, y2);
			        }
			        g2d.drawLine(x, y, x, y);
			      	g2d.drawLine(x+1, y, x-1, y);	
			      	g2d.drawLine(x, y+1, x, y-1);		
			      }
		      }
		  }
	}	

Vytvorenie spojenia s čipom 9DOF Razor IMU


void connect(String portName) throws Exception {
		paint();
		
		CommPortIdentifier portIdentifier = CommPortIdentifier
				.getPortIdentifier(portName);
		if (portIdentifier.isCurrentlyOwned()) {
			System.out.println("Error: Port is currently in use");
		} else {
			CommPort commPort = portIdentifier.open(this.getClass().getName(),
					2000);

			if (commPort instanceof SerialPort) {
				SerialPort serialPort = (SerialPort) commPort;
				serialPort.setSerialPortParams(38400, SerialPort.DATABITS_8,
						SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

				InputStream in = serialPort.getInputStream();
				OutputStream out = serialPort.getOutputStream();

				(new Thread(new SerialReader(in))).start();
				(new Thread(new SerialWriter(out))).start();

			} else {
				System.out
						.println("Error: Only serial ports are handled by this example.");
			}
		}
	}


Kontrola prijatých dát



public boolean isOK(String input) {
			int comma = 0;
			for (int i = 0; i < input.length(); i++) {
				if ((Character.isDigit(input.charAt(i)))||(input.charAt(i) == '$')||
					(input.charAt(i) == '#')||(input.charAt(i) == ',')||(input.charAt(i) == '-')) {
					if (input.charAt(i) == ',') {
						comma++;
					}
				}
				else {
					System.out.println("bad input");
					return false;
				}
			}
			if (comma != 10) {
				return false;
			}
			return true;
		}

3. etapa

V tretej etape sme pristúpili k testovaniu aplikácie a pozorovaniu vykreslených bodov do kresliacej plochy

9DOF IMU


Download

Trajectory from gyro/accellerometer/compas with 9DOF IMU