kopia lustrzana https://github.com/cyoung/stratux
commit
7933b70821
|
@ -294,7 +294,7 @@ func sensorAttitudeSender() {
|
|||
}
|
||||
}
|
||||
|
||||
func makeSensorRotationMatrix(g [3]float64) *[3][3]float64 {
|
||||
func makeSensorRotationMatrix(g [3]float64) (rotmat *[3][3]float64) {
|
||||
f := globalSettings.IMUMapping
|
||||
if globalSettings.IMUMapping[0] == 0 { // if unset, default to some standard orientation
|
||||
globalSettings.IMUMapping[0] = -1 // +2 for RY836AI
|
||||
|
@ -302,44 +302,19 @@ func makeSensorRotationMatrix(g [3]float64) *[3][3]float64 {
|
|||
saveSettings()
|
||||
}
|
||||
|
||||
var x, y, z [3]float64
|
||||
|
||||
// This is the "forward direction" chosen during the orientation process.
|
||||
var x *[3]float64 = new([3]float64)
|
||||
if f[0] < 0 {
|
||||
x[-f[0]-1] = -1
|
||||
} else {
|
||||
x[+f[0]-1] = +1
|
||||
}
|
||||
|
||||
// This is the "up direction" chosen during the orientation process.
|
||||
if f[1] < 0 {
|
||||
z[-f[1]-1] = -1
|
||||
} else {
|
||||
z[+f[1]-1] = +1
|
||||
}
|
||||
if math.Abs(z[0]*g[0]+z[1]*g[1]+z[2]*g[2]-1) > 0.1 {
|
||||
log.Println("AHRS Warning: sensor is not nearly level with chosen up direction")
|
||||
}
|
||||
z = g
|
||||
|
||||
// Normalize the gravity vector to be 1 G.
|
||||
gg := math.Sqrt(z[0]*z[0] + z[1]*z[1] + z[2]*z[2])
|
||||
z[0] /= gg
|
||||
z[1] /= gg
|
||||
z[2] /= gg
|
||||
z, _ := ahrs.MakeUnitVector(g)
|
||||
|
||||
// Remove the projection on the measured gravity vector from x so it's orthogonal to z.
|
||||
dp := x[0]*z[0] + x[1]*z[1] + x[2]*z[2]
|
||||
x[0] = x[0] - dp*z[0]
|
||||
x[1] = x[1] - dp*z[1]
|
||||
x[2] = x[2] - dp*z[2]
|
||||
|
||||
// Specify the "left wing" direction for a right-handed coordinate system using the cross product.
|
||||
y[0] = z[1]*x[2] - z[2]*x[1]
|
||||
y[1] = z[2]*x[0] - z[0]*x[2]
|
||||
y[2] = z[0]*x[1] - z[1]*x[0]
|
||||
|
||||
return &[3][3]float64{x, y, z}
|
||||
rotmat, _ = ahrs.MakeHardSoftRotationMatrix(*z, *x, [3]float64{0, 0, 1}, [3]float64{1, 0, 0})
|
||||
return rotmat
|
||||
}
|
||||
|
||||
// This is used in the orientation process where the user specifies the forward and up directions.
|
||||
|
|
|
@ -20,7 +20,8 @@
|
|||
<strong class="col-xs-6 text-center">Track:</strong>
|
||||
</div>
|
||||
<div class="row">
|
||||
<span class="col-xs-6 text-center">{{gps_lat}}, {{gps_lon}} ± {{gps_accuracy}} m <br> {{gps_alt}} ± {{gps_vert_accuracy}} ft @ {{gps_vert_speed}} ft/min</span>
|
||||
<span class="col-xs-6 text-center">{{gps_lat}}, {{gps_lon}} ± {{gps_horizontal_accuracy}} m <br>
|
||||
{{gps_alt}} ± {{gps_vertical_accuracy}} ft @ {{gps_vert_speed}} ft/min</span>
|
||||
<span class="col-xs-6 text-center">{{gps_track}}° @ {{gps_speed}} KTS</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -138,26 +138,26 @@ function GPSCtrl($rootScope, $scope, $state, $http, $interval) {
|
|||
$scope.press_time = Date.parse(situation.BaroLastMeasurementTime);
|
||||
$scope.gps_time = Date.parse(situation.GPSLastGPSTimeStratuxTime);
|
||||
if ($scope.gps_time - $scope.press_time < 1000) {
|
||||
$scope.ahrs_alt = Math.round(situation.BaroPressureAltitude);
|
||||
$scope.ahrs_alt = Math.round(situation.BaroPressureAltitude.toFixed(0));
|
||||
} else {
|
||||
$scope.ahrs_alt = "---";
|
||||
}
|
||||
|
||||
$scope.ahrs_heading = Math.round(situation.AHRSGyroHeading);
|
||||
$scope.ahrs_heading = Math.round(situation.AHRSGyroHeading.toFixed(0));
|
||||
// pitch and roll are in degrees
|
||||
$scope.ahrs_pitch = Math.round(situation.AHRSPitch*10)/10;
|
||||
$scope.ahrs_roll = Math.round(situation.AHRSRoll*10)/10;
|
||||
$scope.ahrs_slip_skid = Math.round(situation.AHRSSlipSkid*10)/10;
|
||||
ahrs.update($scope.ahrs_pitch, $scope.ahrs_roll, $scope.ahrs_heading, $scope.ahrs_slip_skid);
|
||||
$scope.ahrs_pitch = situation.AHRSPitch.toFixed(1);
|
||||
$scope.ahrs_roll = situation.AHRSRoll.toFixed(1);
|
||||
$scope.ahrs_slip_skid = situation.AHRSSlipSkid.toFixed(1);
|
||||
ahrs.update(situation.AHRSPitch, situation.AHRSRoll, situation.AHRSGyroHeading, situation.AHRSSlipSkid);
|
||||
|
||||
$scope.ahrs_heading_mag = Math.round(situation.AHRSMagHeading);
|
||||
$scope.ahrs_gload = Math.round(situation.AHRSGLoad*100)/100;
|
||||
gMeter.update($scope.ahrs_gload);
|
||||
$scope.ahrs_heading_mag = situation.AHRSMagHeading.toFixed(0);
|
||||
$scope.ahrs_gload = situation.AHRSGLoad.toFixed(2);
|
||||
gMeter.update(situation.AHRSGLoad);
|
||||
|
||||
if (situation.AHRSTurnRate> 0.25) {
|
||||
$scope.ahrs_turn_rate = Math.round(360/situation.AHRSTurnRate/60*10)/10; // minutes/turn
|
||||
if (situation.AHRSTurnRate> 0.6031) {
|
||||
$scope.ahrs_turn_rate = (6/situation.AHRSTurnRate).toFixed(1); // minutes/turn
|
||||
} else {
|
||||
$scope.ahrs_turn_rate = '---'
|
||||
$scope.ahrs_turn_rate = '\u221e';
|
||||
}
|
||||
if (situation.AHRSStatus & 0x01) {
|
||||
statusGPS.classList.remove("off");
|
||||
|
|
Ładowanie…
Reference in New Issue