码迷,mamicode.com
首页 > 其他好文 > 详细

Processing 电子罗盘校准(以 MPU9250为例)

时间:2016-04-18 00:48:15      阅读:466      评论:0      收藏:0      [点我收藏+]

标签:

  使用Processing 软件, 通过 arduino 输入 电子罗盘的数据,通过PC端进行校准,程序如下:

 

import processing.serial.*;

Serial myPort;
ArrayList<Float> xList = new ArrayList<Float>();
ArrayList<Float> yList = new ArrayList<Float>();
ArrayList<Float> zList = new ArrayList<Float>();

float minX,maxX;
float minY,maxY;
float minZ,maxZ;
float moX,moY;
float count;

void setup() {
  size(600, 600, P3D);
  myPort = new Serial(this,"COM5", 38400);
  myPort.bufferUntil(10);
}

void draw() { 
  background(100); 
  float midX = (minX+maxX)/2;
  float midY = (minY+maxY)/2;
  float midZ = (minZ+maxZ)/2;
  if (mousePressed) {
    moX= mouseX;
    moY= mouseY;
  }
  
  //camera(moX,moY, (height/2) / tan(PI/5), midX, midY,midZ, 0, 1, 0);
  camera(moX,moY,(height/2) / tan(PI/5), width/2, height/2,0, 0, 1, 0);
  translate(width/2, height/2, -100);
  strokeWeight(2);  // Default 
  stroke(255);
  noFill();

  //x
  line(midX-100,midY,midZ,midX+100,midY,midZ);
  //y
  line(midX,midY+100,midZ,midX,midY-100,midZ);
  //z
  line(midX,midY,midZ-100,midX,midY,midZ+100);

  
  //box(200);
 
  for(int i = 0;i<xList.size();i++){
    point(xList.get(i),yList.get(i),zList.get(i));
  }
  println(count);
  println("midX:"+midX+","+"midY"+midY+","+"midZ:"+midZ);
  
}


void serialEvent (Serial myPort)
{
  
  float mX = 0;
  float mY = 0;
  float mZ = 0;
  String inString = myPort.readStringUntil(10);

 

  if (inString != null)
  {
   inString = trim(inString);
   String[] list = split(inString, ‘,‘);
   if(list.length ==4){
     count = float(list[0]);
     mX  = float(list[1])/100;
     mY  = float(list[2])/100;
     mZ  = float(list[3])/100;
     
     //-------------------------
     if(mX < minX){
       minX = mX;
     }
 
     if(mX > maxX){
       maxX = mX;
     }
 
     //----------------------------
     if(mY < minY){
       minY = mY;
     }
     
     if(mY > maxY){
       maxY = mY;
     }
     //----------------------------
     if(mZ > maxZ){
       maxZ = mZ;
     }
     if(mZ < minZ){
       minZ = mZ;
     }
     
      
     xList.add(mX);
     yList.add(mY);
     zList.add(mZ); 
   } 

  }
}

  

arduino 代码如下:

   int mx,my,mz;
   : 
   :
   :  略

    Serial.print(count);  
    Serial.print(",");    
    Serial.print(mx);  //Inclination X axis (as measured by accelerometer)
    Serial.print(",");
    Serial.print(my);  //Inclination X axis (estimated / filtered)
    Serial.print(",");
    Serial.print(mz);  //Inclination X axis (estimated / filtered)
    
    Serial.println("");
    count++;

  

PC端获取的效果如下图:

 

技术分享

 

最终坐标系完全落入球内表示校准成功.

 

 

视频:

 

 

Processing 电子罗盘校准(以 MPU9250为例)

标签:

原文地址:http://www.cnblogs.com/dreamfactory/p/5402691.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!