Skip to content
Snippets Groups Projects
Commit e978fe2c authored by Oleksandr Husak's avatar Oleksandr Husak
Browse files

theta instead of quaternion

parent 85321deb
No related branches found
No related tags found
No related merge requests found
......@@ -56,7 +56,8 @@ Connection settings
"extractedAttributes": {
"batteryChargeLevel": 70,
"loadedItems": [23, 1, 25, 17],
"errors": [2, 1, 6]
"errors": [2, 1, 6],
"theta": -0.9
},
"lastPosUpdate": "2021-09-14T09:41:20+00:00",
"zoneDescriptors": [
......
......@@ -6,7 +6,7 @@ import 'leaflet-arrowheads';
import { IMqttMessage, MqttService } from 'ngx-mqtt';
import { environment, MarkerColorMap } from 'src/environments/environment';
import {Position, PositionUpdate, RelativePos, Quaternion, WGS84} from 'src/app/model/base-model';
import {Position, PositionUpdate, RelativePos, WGS84} from 'src/app/model/base-model';
@Component({
......@@ -82,39 +82,12 @@ export class MapComponent implements OnInit {
// Rotaion
let quter = desc.orientation
// if (quter) {
// // console.log("Init:", orient)
// let orient = this.calcOrient(quter.w, quter.x, quter.y, quter.z)
// // console.log("Orient:", orient)
// let orientPoint: RelativePos = {
// "x": orient[0] + pos.point.x,
// "y": orient[1] + pos.point.y,
// "z": orient[2] + pos.point.z
// }
// let globPointOrient = this.ref2root(orientPoint)
// if ('x' in pos.point) {
// var globPos = this.ref2root(pos.point)
// } else {
// var globPos = L.latLng([pos.point.latitude, pos.point.longitude]);
// }
// // add arrow
// var arrow = L.polyline([globPos, globPointOrient], {color: 'grey'}).arrowheads(
// {
// fill: true,
// // size: '30%',
// color: 'grey'
// }
// ).addTo(this.map);
// }
this.addMarker(key, pos, props, quter)
this.addMarker(key, pos, props, desc.extractedAttributes?.theta)
}
addMarker(key: string, pos: Position, popup: string, quter: Quaternion) {
addMarker(key: string, pos: Position, popup: string, theta: number) {
let point = pos.point
if ('x' in point) {
......@@ -149,20 +122,18 @@ export class MapComponent implements OnInit {
}
// --- Orientation
if (quter && 'x' in point) {
let orient = this.calcOrient(quter.w, quter.x, quter.y, quter.z)
let orientPoint: RelativePos = {
"x": orient[0] + point.x,
"y": orient[1] + point.y,
"z": orient[2]
if (theta && 'x' in point) {
let orient: RelativePos = {
"x": point.x + Math.sin(theta) * 3,
"y": point.y + Math.cos(theta) * 3,
"z": point.z
}
let globPointOrient = this.ref2root(orientPoint)
let globPointOrient = this.ref2root(orient)
// add arrow
var arrow = L.polyline([globPos, globPointOrient], {color: 'grey'}).arrowheads(
{
fill: true,
// size: '30%',
color: 'grey'
}
);
......@@ -171,23 +142,6 @@ export class MapComponent implements OnInit {
}
}
quaternionMult(q: number[], r: number[]) {
return [r[0]*q[0]-r[1]*q[1]-r[2]*q[2]-r[3]*q[3],
r[0]*q[1]+r[1]*q[0]-r[2]*q[3]+r[3]*q[2],
r[0]*q[2]+r[1]*q[3]+r[2]*q[0]-r[3]*q[1],
r[0]*q[3]-r[1]*q[2]+r[2]*q[1]+r[3]*q[0]]
}
calcOrient(w: number, x: number, y: number, z: number) {
// Rotation transforms from one orientation to another
let point = [0,0,3,0] // point vector
let qConj = [w,-1*x,-1*y,-1*z]
let q = [w,x,y,z]
let point_new = this.quaternionMult(this.quaternionMult(q,point),qConj)
return point_new.slice(1)
}
// @https://asymmetrik.com/ngx-leaflet-tutorial-angular-cli/
// --- Layers: Define base layers so we can reference them multiple times
streetMaps = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
......
......@@ -67,6 +67,7 @@ interface ExtAttribute {
batteryChargeLevel: number
loadedItems: number[]
errors: number[]
theta: number
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment