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既是一种编程模型 ...
随机推荐
- Android Studio 个人常用设置
1.主题 Darcula主题真的看起来舒服很多呢: 2.常用快捷键 "Toggle Case" "Quick Documentation" "Refo ...
- 使用Navicat修改SQLite数据库提示:no such collation sequence: LOCALIZED
今天在修改Android应用里用到的一个SQLite数据库文件,使用Navicat修改SQLite数据库提示:“no such collation sequence: LOCALIZED”错误,折腾了 ...
- Qt for Android开发Android应用时的各种错误汇总(此片博文不成熟,请大家略过)
“Qt for Android真的很脆弱,项目能跑起来靠的是奇迹,跑不起来,各种报错才是正常...” 问题一:Qt for Android编译不过:make (e=2): 系统找不到指定的文件. 之前 ...
- 实现PageProcessor
4.1 实现PageProcessor 这部分我们直接通过GithubRepoPageProcessor这个例子来介绍PageProcessor的编写方式.我将PageProcessor的定制分为三个 ...
- 电脑重装BIOS设置中文翻译
- c语言数据结构之 快速排序
编译器:VS2013 #include "stdafx.h"#include<stdlib.h> //函数声明 void QuickSort(int a[],int n ...
- 关于 ant 不同渠道自动打包的笔记
必要的java.android.ant文件及循环打包用到的ant的jar 下载Ant(这里的Ant不是eclipse和android SDk里面自带的ant) 官方下载地址:http://a ...
- html画布
一.<canvas>标签 Html5 引入了一个新的<canvas> 标签,这个标签所代表的区域就好象一块画布,你的所有图形绘制最后都要在这块画布上呈现.有了这个标签,浏览器的 ...
- Hibernate配置log4j日志环境
1.准备所需的jar 说明:具体所使用的jar包的版本与你所使用的Hibernate版本有关,我用的是(hibernate-release-4.3.11.Final) <1>准备slf4j ...
- operating system
一.对于子进程,系统调用fork()的返回值为0:而对于父进程,返回值为子进程的进程标识符