Processing 电子罗盘校准(以 MPU9250为例)
使用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为例)的更多相关文章
- arduino 串口实时绘图(以mpu9250为例)
兴趣之余,利用晚上的时间,做一些个人兴趣方面的开发. 之前没接触过 arduino, 无意之中买了个开发板做一些小开发, 这里利用python 读取 mpu9250 数据实时绘图. 下位机代码 C++ ...
- Storm 系列(一)基本概念
Storm 系列(一)基本概念 Apache Storm(http://storm.apache.org/)是由 Twitter 开源的分布式实时计算系统. Storm 可以非常容易并且可靠地处理无限 ...
- Image Processing and Analysis_8_Edge Detection:Statistical edge detection_ learning and evaluating edge cues——2003
此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...
- Image Processing and Computer Vision_Review:Local Invariant Feature Detectors: A Survey——2007.11
翻译 局部不变特征探测器:一项调查 摘要 -在本次调查中,我们概述了不变兴趣点探测器,它们如何随着时间的推移而发展,它们如何工作,以及它们各自的优点和缺点.我们首先定义理想局部特征检测器的属性.接下来 ...
- 转债---Pregel: A System for Large-Scale Graph Processing(译)
转载:http://duanple.blog.163.com/blog/static/70971767201281610126277/ 作者:Grzegorz Malewicz, Matthew ...
- 【WP 8.1开发】电子罗盘
罗盘,估计也不用我过多介绍,学过初中物理的都知道,不管是指南针,还是指北针,其本质就是用来辨别方向的. 操作电子罗盘伟感器也不复杂,主要就是两个角度: 1.当前方向与磁北的夹角: 2.当前方向与地北的 ...
- DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)
转自:http://www.360doc.com/content/14/0116/16/15528092_345730642.shtml 以及参考网络. 首先,我们先了解一下内存的大体结构工作流程,这 ...
- MapReduce的模式、算法和用例
英文原文:<MapReduce Patterns, Algorithms, and Use Cases> https://highlyscalable.wordpress.com/2012 ...
- [翻译]MapReduce: Simplified Data Processing on Large Clusters
MapReduce: Simplified Data Processing on Large Clusters MapReduce:面向大型集群的简化数据处理 摘要 MapReduce既是一种编程模型 ...
随机推荐
- POJ 2481-树状数组
题意:给定几个区间,判断该区间是其余区间的真子集个数. 分析:真子集即寻找x,y满足a(小于或等于x),b(大于或等于y)的区间.跟star-POJ2352很类似. 转化:star那个题目是x,y都是 ...
- codeforces 722C (并查集)
题目链接:http://codeforces.com/contest/722/problem/C 题意:每次破坏一个数,求每次操作后的最大连续子串和. 思路:并查集逆向操作 #include<b ...
- ajax异步提交的两种方法
第一种是原始的ajax,第二种是在jQuery中使用ajax.这是我为测试两种提交方法而写的一段代码. 1.struts.xml <package name="json" e ...
- linux动态时钟探索
在早期的linux内核版本的时间概念都是由周期时钟提供的.虽然比较有效,但是,对于关注能耗电量的系统上,就不能满足长时间休眠的需求,因为周期系统要求必须在一定的频率下,周期性的处于活动状态.因此,li ...
- Android 学习第12课,应用出错信息
应用在运行时,出现的错误信息都会在LogCat中显示 如果调出LogCat ? 菜单:窗口 -> 显示视图 -> 其他 -> LogCat
- 分布式blog系统 TFS总结
解决的问题 文件总量太大 一台服务器无法存放 只能放在网络集群中分节点存放 也就是通过屏蔽网络部分 形成一个“ one big CPU” 和 “one big disk” .Client只需要向 ...
- Objective-C 代码块(block)的使用
代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱字符(^)是块的语法标记.按照我们熟悉的参数语法规约所定 ...
- C++预处理详解
本文在参考ISO/IEC 14882:2003和cppreference.com的C++ Preprocessor的基础上,对C++预处理做一个全面的总结讲解.如果没有特殊说明,所列内容均依据C++9 ...
- C(++) Websocket实现扫码二维码登录---GoEasy
最近在做一个扫码登录功能,为此我还在网上搜了一下关于微信的扫描登录的实现方式.当这个功能完成了后,我决定将整个实现思路整理出来,方便自己以后查看也方便其他有类似需求的程序猿些. 要实现扫码登录我们需要 ...
- web安全之sqlload_file()和into outfile()
load_file() 条件:要有file_priv权限 知道文件的绝对路径 能使用union 对web目录有读权限 如果过滤啦单引号,则可以将函数中的字符进行hex编码 步骤: 1.读/etc/in ...