Skip to content

Commit

Permalink
feat: complete magnetometer calibration
Browse files Browse the repository at this point in the history
  • Loading branch information
jeki committed Mar 5, 2021
1 parent 36cb429 commit b2c3949
Show file tree
Hide file tree
Showing 14 changed files with 213 additions and 218 deletions.
2 changes: 1 addition & 1 deletion .vscode/arduino.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"board": "esp8266:esp8266:d1_mini_pro",
"configuration": "xtal=160,vt=flash,exception=legacy,ssl=all,eesz=16M14M,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=921600",
"port": "/dev/tty.wchusbserial14340",
"port": "COM140",
"sketch": "wemos-gps.ino"
}
2 changes: 0 additions & 2 deletions SparkFunMPU9250-DMP.h
Original file line number Diff line number Diff line change
Expand Up @@ -378,8 +378,6 @@ class MPU9250_DMP
// computeCompassHeading -- Compute heading based on most recently read mx, my, and mz values
// Output: class variable heading will be updated on exit
float computeCompassHeading(void);

float calcCompassHeadingTilt(float acc_x, float acc_y, float acc_z, float mag_x, float mag_y, float mag_z);

// selfTest -- Run gyro and accel self-test.
// Output: Returns bit mask, 1 indicates success. A 0x7 is success on all sensors.
Expand Down
Binary file modified data/assets/compass_indicator.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/assets/compass_rose.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
136 changes: 0 additions & 136 deletions data/assets/compass_rose.svg

This file was deleted.

44 changes: 34 additions & 10 deletions data/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ <h1 id="loaderTxt">Loading...</h1>
<tr>
<td>IP Address</td>
<td><input id="ip"></input></td>
<td></td>
<td></td>
<td><button onclick="HideInfo()">Hide Info</button></td>
<td><button onclick="ShowInfo()">Show Info</button></td>
<td></td>
</tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
</table>
<table id="tableInfo">
<tr>
<td>Quaternion</td>
<td><input id="qw" value="1"></input></td>
Expand All @@ -49,9 +49,9 @@ <h1 id="loaderTxt">Loading...</h1>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
<tr>
<td>RPY</td>
<td><input id="roll" value="invalid"></input></td>
<td><input id="pitch" value="invalid"></input></td>
<td><input id="yaw" value="invalid"></input></td>
<td><input id="r" value="invalid"></input></td>
<td><input id="p" value="invalid"></input></td>
<td><input id="y" value="invalid"></input></td>
<td></td>
</tr>
<tr>
Expand All @@ -63,6 +63,30 @@ <h1 id="loaderTxt">Loading...</h1>
</tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td>MAGNETOMETER</td><td></td><td></td><td></td><td></td></tr>
<tr>
<td>Mag Values</td>
<td><input type="text" name="mvx" id="mvx" value="0"></td>
<td><input type="text" name="mvy" id="mvy" value="0"></td>
<td><input type="text" name="mvz" id="mvz" value="0"></td>
<td><button onclick="ReadMagParam()">Read Mag Param</button></td>
</tr>
<tr>
<td>Mag Bias</td>
<td><input type="text" name="mbx" id="mbx" value="0"></td>
<td><input type="text" name="mby" id="mby" value="0"></td>
<td><input type="text" name="mbz" id="mbz" value="0"></td>
<td><button onclick="MagCalibrate()">Calibrate</button></td>
</tr>
<tr>
<td>Mag Scale</td>
<td><input type="text" name="msx" id="msx" value="0"></td>
<td><input type="text" name="msy" id="msy" value="0"></td>
<td><input type="text" name="msz" id="msz" value="0"></td>
<td><input id="stat" value="stat"></input></td>
</tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
<tr>
<td>LatLong</td>
<td><input id="latitude" value="latitude"></input></td>
Expand All @@ -71,7 +95,7 @@ <h1 id="loaderTxt">Loading...</h1>
<td></td>
</tr>
<tr>
<td>Heading</td>
<td>Compass</td>
<td><input id="heading" value="invalid"></input></td>
<td></td>
<td></td>
Expand All @@ -80,14 +104,14 @@ <h1 id="loaderTxt">Loading...</h1>
</table>
</div>
<div id="compass">
<img id="compass-img" src="/assets/compass_rose.svg" alt="Compass">
<img id="compass-ind" src="/assets/compass_indicator.png">
<img id="compass-img" src="/assets/compass_rose.png" alt="Compass">
</div>
<div id="container">
</div>
<div id="log">
<h3>Log&nbsp;<button onclick="clearLog()">Clear</button></h3>
<textarea id=r readonly rows=40 style="min-width: 100%;"></textarea>
<textarea id=lr readonly rows=40 style="min-width: 100%;"></textarea>
</div>
<script src="OrbitControls.js"></script>
<script src="webglhandler.js"></script>
Expand Down
14 changes: 7 additions & 7 deletions data/main.css
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@
z-index: 1;
}
#compass-img{
width: 300px;
width: 250px;
position: absolute;
left: 20px;
bottom: 20px;
left: 45px;
bottom: 45px;
}
#compass-ind{
width: 120px;
height: 200px;
width: 300px;
height: 300px;
position: absolute;
left: 110px;
bottom: 105px;
left: 20px;
bottom: 20px;
}
#loader {
position: absolute;
Expand Down
134 changes: 76 additions & 58 deletions data/ssehandler.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ var myJSON;
var redval = 0;
var irval = 0;
var eventListen = null;
var calibmag = false;

function getID(_str) {
return document.getElementById(_str);
Expand Down Expand Up @@ -45,20 +46,31 @@ function get_appropriate_ws_url(extra_url)
return pcol + p[0] + ":81" + "/" + extra_url;
}

function isJSONHRValid(_str) {
myJSON = null;
try {
myJSON = JSON.parse(_str.trim());
} catch (e) {
console.log("failed to parse json: " + e);
return false;
}
function chkMyJSON(_val) {
if(myJSON == null) return false;
if(myJSON == undefined) return false;
if(myJSON[_val] == null) return false;
if(myJSON[_val] == undefined) return false;
return true;
}

// if(myJSON.value == undefined) return false;
// if(myJSON.latitude == undefined) return false;
// if(myJSON.longitude == undefined) return false;
function loadMyJson(_str) {
myJSON = null;
try {
myJSON = JSON.parse(_str);
} catch (e) {
return false;
}

return true;
return true;
}

function setMyJson(_val) {
if(chkMyJSON(_val)) {
getID(_val).value = myJSON[_val];
return true;
}
return false;
}

function got_packet(msgdata) {
Expand All @@ -76,53 +88,37 @@ function got_packet(msgdata) {
s = s + ring[n];
n = (n + 1) % 50;
} while (n !== head);
getID("r").value = s;
getID("r").scrollTop =
getID("r").scrollHeight;
getID("lr").value = s;
getID("lr").scrollTop =
getID("lr").scrollHeight;

if (isJSONHRValid(msgjson[i] + "}")) {
if(myJSON.latitude != undefined) {
getID("latitude").value = myJSON.latitude
}
if(myJSON.longitude != undefined) {
getID("longitude").value = myJSON.longitude
}
if(myJSON.ip != undefined) {
getID("ip").value = myJSON.ip
}
if(myJSON.qw != undefined) {
getID("qw").value = myJSON.qw
}
if(myJSON.qx != undefined) {
getID("qx").value = myJSON.qx
}
if(myJSON.qy != undefined) {
getID("qy").value = myJSON.qy
}
if(myJSON.qz != undefined) {
getID("qz").value = myJSON.qz
}
if(myJSON.r != undefined) {
getID("roll").value = myJSON.r
}
if(myJSON.p != undefined) {
getID("pitch").value = myJSON.p
}
if(myJSON.y != undefined) {
getID("yaw").value = myJSON.y
}
if(myJSON.ax != undefined) {
getID("ax").value = myJSON.ax
}
if(myJSON.ay != undefined) {
getID("ay").value = myJSON.ay
}
if(myJSON.az != undefined) {
getID("az").value = myJSON.az
}
if(myJSON.h != undefined) {
if (loadMyJson(msgjson[i] + "}")) {
setMyJson("ip");

//object quaternion
setMyJson("qw"); setMyJson("qx"); setMyJson("qy"); setMyJson("qz");
setMyJson("r"); setMyJson("p"); setMyJson("y");
setMyJson("ax"); setMyJson("ay"); setMyJson("az");
setMyJson("latitude"); setMyJson("longitude");

if(chkMyJSON("h")) {
getID("heading").value = myJSON.h
document.getElementById("compass-img").style.transform = 'rotate(' + (360 - myJSON.h) + 'deg)';
document.getElementById("compass-img").style.transform = 'rotate(' + (myJSON.h - 360 ) + 'deg)';
}

//magnetometer values
setMyJson("mvx"); setMyJson("mvy"); setMyJson("mvz");

//magnetometer calibration
setMyJson("mbx"); setMyJson("mby"); setMyJson("mbz");
setMyJson("msx"); setMyJson("msy"); setMyJson("msz");

if(chkMyJSON("mcx")) {
if(chkMyJSON("mci")) {
addpoints(myJSON.mvx/3, myJSON.mvy/3, myJSON.mvz/3, myJSON.mcx);
document.getElementById("stat").value = "calibno:" + myJSON.mci + "/" + myJSON.mcx;
if(myJSON.mci >= myJSON.mcx - 2) calibmag = false;
}
}
}
}
Expand Down Expand Up @@ -166,12 +162,34 @@ function httpGetAsync(theUrl, callback)
}

function clearLog() {
getID("r").value = "";
getID("lr").value = "";
tail = head;
}

function MagCalibrateReqCallback(responseText) {
console.log(responseText);
}

function ReadMagParam() {
httpGetAsync(getID("windowUrl").value + "get/magcalib", MagCalibrateReqCallback);
}

function MagCalibrate() {
calibmag = true;
httpGetAsync(getID("windowUrl").value + "calib", MagCalibrateReqCallback);
}

function HideInfo() {
getID("tableInfo").hidden = true;
}

function ShowInfo() {
getID("tableInfo").hidden = false;
}

document.addEventListener("DOMContentLoaded", function() {
getID("windowUrl").value = document.URL;
httpGetAsync(getID("windowUrl").value + "rest/events/subscribe", SSESubscribeCallback);
HideInfo();
webgl_start();
}, true);
24 changes: 24 additions & 0 deletions data/webglhandler.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,30 @@ function initAxes() {
scene.add(zAxis);
}

var geometry = new THREE.BufferGeometry();
var positions = [];
var colors = [];
var color = new THREE.Color();
var points;

function addpoints(_x, _y, _z, _max) {
positions.push( _x, _y, _z );
// colors
var vx = ( _x / _max ) + 0.5;
var vy = ( _y / _max ) + 0.5;
var vz = ( _z / _max ) + 0.5;
color.setRGB( vx, vy, vz );
colors.push( color.r, color.g, color.b );

geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( positions, 3 ) );
geometry.setAttribute( 'color', new THREE.Float32BufferAttribute( colors, 3 ) );
geometry.computeBoundingSphere();

var material = new THREE.PointsMaterial( { size: 15, vertexColors: THREE.VertexColors } );
points = new THREE.Points( geometry, material );
scene.add( points );
}

function webgl_start() {
var canvas = document.getElementById("c");

Expand Down
14 changes: 14 additions & 0 deletions fileUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,20 @@ void appendFile(const char * path, const char * message) {
file.close();
}

void writeFile(const char * path, const char * message) {
File file = fileSystem->open(path, "w");
if (!file) {
Serial.println("Failed to open file for appending");
return;
}
if (!file.print(message)) {
// Serial.println("Message appended");
// } else {
Serial.println("Append failed");
}
file.close();
}

void deleteRecursive(const char *path) {
String pathStr = "";
File file = fileSystem->open(path, "r");
Expand Down
1 change: 1 addition & 0 deletions fileUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ bool isFileExist(const char * _path);
bool isfsOK();
void fs_setup();
void appendFile(const char * path, const char * message);
void writeFile(const char * path, const char * message);
void deleteRecursive(const char *path);

#endif // def(__file_Utils_h__)
Loading

0 comments on commit b2c3949

Please sign in to comment.