mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2024-12-03 11:24:10 +01:00
OP-193 OP-511: Add settings to scale the camera input output range
This commit is contained in:
parent
17fa227d1f
commit
493fcaef2a
@ -168,6 +168,7 @@ SRC += $(OPUAVSYNTHDIR)/manualcontrolsettings.c
|
|||||||
SRC += $(OPUAVSYNTHDIR)/mixersettings.c
|
SRC += $(OPUAVSYNTHDIR)/mixersettings.c
|
||||||
SRC += $(OPUAVSYNTHDIR)/firmwareiapobj.c
|
SRC += $(OPUAVSYNTHDIR)/firmwareiapobj.c
|
||||||
SRC += $(OPUAVSYNTHDIR)/attitudesettings.c
|
SRC += $(OPUAVSYNTHDIR)/attitudesettings.c
|
||||||
|
SRC += $(OPUAVSYNTHDIR)/camerastabsettings.c
|
||||||
|
|
||||||
ifeq ($(DIAGNOISTCS),YES)
|
ifeq ($(DIAGNOISTCS),YES)
|
||||||
SRC += $(OPUAVSYNTHDIR)/taskinfo.c
|
SRC += $(OPUAVSYNTHDIR)/taskinfo.c
|
||||||
|
@ -49,11 +49,12 @@
|
|||||||
|
|
||||||
#include "accessorydesired.h"
|
#include "accessorydesired.h"
|
||||||
#include "attitudeactual.h"
|
#include "attitudeactual.h"
|
||||||
|
#include "camerastabsettings.h"
|
||||||
|
|
||||||
//
|
//
|
||||||
// Configuration
|
// Configuration
|
||||||
//
|
//
|
||||||
#define SAMPLE_PERIOD_MS 50
|
#define SAMPLE_PERIOD_MS 10
|
||||||
|
|
||||||
// Private types
|
// Private types
|
||||||
|
|
||||||
@ -73,6 +74,8 @@ int32_t CameraStabInitialize(void)
|
|||||||
ev.instId = 0;
|
ev.instId = 0;
|
||||||
ev.event = 0;
|
ev.event = 0;
|
||||||
|
|
||||||
|
CameraStabSettingsInitialize();
|
||||||
|
|
||||||
EventPeriodicCallbackCreate(&ev, attitudeUpdated, SAMPLE_PERIOD_MS / portTICK_RATE_MS);
|
EventPeriodicCallbackCreate(&ev, attitudeUpdated, SAMPLE_PERIOD_MS / portTICK_RATE_MS);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -85,25 +88,46 @@ static void attitudeUpdated(UAVObjEvent* ev)
|
|||||||
|
|
||||||
float attitude;
|
float attitude;
|
||||||
AccessoryDesiredData accessory;
|
AccessoryDesiredData accessory;
|
||||||
float rollConst = 1.0/35.0;
|
|
||||||
float pitchConst = 1.0/35.0;
|
|
||||||
float yawConst = 1.0/35.0;
|
|
||||||
|
|
||||||
|
CameraStabSettingsData cameraStab;
|
||||||
|
CameraStabSettingsGet(&cameraStab);
|
||||||
|
|
||||||
|
// Read any input channels
|
||||||
|
float inputs[3] = {0,0,0};
|
||||||
|
if(cameraStab.Inputs[CAMERASTABSETTINGS_INPUTS_ROLL] != CAMERASTABSETTINGS_INPUTS_NONE) {
|
||||||
|
if(AccessoryDesiredInstGet(cameraStab.Inputs[CAMERASTABSETTINGS_INPUTS_ROLL] - CAMERASTABSETTINGS_INPUTS_ACCESSORY0, &accessory) != 0)
|
||||||
|
inputs[0] = accessory.AccessoryVal * cameraStab.InputRange[CAMERASTABSETTINGS_INPUTRANGE_ROLL];
|
||||||
|
}
|
||||||
|
if(cameraStab.Inputs[CAMERASTABSETTINGS_INPUTS_PITCH] != CAMERASTABSETTINGS_INPUTS_NONE) {
|
||||||
|
if(AccessoryDesiredInstGet(cameraStab.Inputs[CAMERASTABSETTINGS_INPUTS_PITCH] - CAMERASTABSETTINGS_INPUTS_ACCESSORY0, &accessory) != 0)
|
||||||
|
inputs[1] = accessory.AccessoryVal * cameraStab.InputRange[CAMERASTABSETTINGS_INPUTRANGE_PITCH];
|
||||||
|
}
|
||||||
|
if(cameraStab.Inputs[CAMERASTABSETTINGS_INPUTS_YAW] != CAMERASTABSETTINGS_INPUTS_NONE) {
|
||||||
|
if(AccessoryDesiredInstGet(cameraStab.Inputs[CAMERASTABSETTINGS_INPUTS_YAW] - CAMERASTABSETTINGS_INPUTS_ACCESSORY0, &accessory) != 0)
|
||||||
|
inputs[2] = accessory.AccessoryVal * cameraStab.InputRange[CAMERASTABSETTINGS_INPUTRANGE_YAW];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set output channels
|
||||||
|
if(cameraStab.Outputs[CAMERASTABSETTINGS_OUTPUTS_ROLL] != CAMERASTABSETTINGS_OUTPUTS_NONE) {
|
||||||
AttitudeActualRollGet(&attitude);
|
AttitudeActualRollGet(&attitude);
|
||||||
accessory.AccessoryVal = attitude * rollConst;
|
accessory.AccessoryVal = (attitude + inputs[0]) / cameraStab.OutputRange[CAMERASTABSETTINGS_OUTPUTRANGE_ROLL];
|
||||||
if(AccessoryDesiredInstSet(0, &accessory) != 0)
|
if(AccessoryDesiredInstSet(cameraStab.Outputs[CAMERASTABSETTINGS_OUTPUTS_ROLL] - CAMERASTABSETTINGS_OUTPUTS_ACCESSORY0, &accessory) != 0)
|
||||||
AccessoryDesiredCreateInstance();
|
AccessoryDesiredCreateInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(cameraStab.Outputs[CAMERASTABSETTINGS_OUTPUTS_PITCH] != CAMERASTABSETTINGS_OUTPUTS_NONE) {
|
||||||
AttitudeActualPitchGet(&attitude);
|
AttitudeActualPitchGet(&attitude);
|
||||||
accessory.AccessoryVal = attitude * pitchConst;
|
accessory.AccessoryVal = (attitude + inputs[1]) / cameraStab.OutputRange[CAMERASTABSETTINGS_OUTPUTRANGE_PITCH];
|
||||||
if(AccessoryDesiredInstSet(1, &accessory) != 0)
|
if(AccessoryDesiredInstSet(cameraStab.Outputs[CAMERASTABSETTINGS_OUTPUTS_PITCH] - CAMERASTABSETTINGS_OUTPUTS_ACCESSORY0, &accessory) != 0)
|
||||||
AccessoryDesiredCreateInstance();
|
AccessoryDesiredCreateInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(cameraStab.Outputs[CAMERASTABSETTINGS_OUTPUTS_YAW] != CAMERASTABSETTINGS_OUTPUTS_NONE) {
|
||||||
AttitudeActualYawGet(&attitude);
|
AttitudeActualYawGet(&attitude);
|
||||||
accessory.AccessoryVal = attitude * yawConst;
|
accessory.AccessoryVal = (attitude + inputs[2]) / cameraStab.OutputRange[CAMERASTABSETTINGS_OUTPUTRANGE_YAW];
|
||||||
if(AccessoryDesiredInstSet(2, &accessory) != 0)
|
if(AccessoryDesiredInstSet(cameraStab.Outputs[CAMERASTABSETTINGS_OUTPUTS_YAW] - CAMERASTABSETTINGS_OUTPUTS_ACCESSORY0, &accessory) != 0)
|
||||||
AccessoryDesiredCreateInstance();
|
AccessoryDesiredCreateInstance();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -85,6 +85,7 @@
|
|||||||
6549E0D21279B3C800C5476F /* fifo_buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fifo_buffer.c; sourceTree = "<group>"; };
|
6549E0D21279B3C800C5476F /* fifo_buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fifo_buffer.c; sourceTree = "<group>"; };
|
||||||
6549E0D31279B3CF00C5476F /* fifo_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fifo_buffer.h; sourceTree = "<group>"; };
|
6549E0D31279B3CF00C5476F /* fifo_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fifo_buffer.h; sourceTree = "<group>"; };
|
||||||
655268BC121FBD2900410C6E /* ahrscalibration.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = ahrscalibration.xml; sourceTree = "<group>"; };
|
655268BC121FBD2900410C6E /* ahrscalibration.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = ahrscalibration.xml; sourceTree = "<group>"; };
|
||||||
|
655B1A8E13B2FC0900B0E48D /* camerastabsettings.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = camerastabsettings.xml; sourceTree = "<group>"; };
|
||||||
656268C612DC1923007B0A0F /* nedaccel.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = nedaccel.xml; sourceTree = "<group>"; };
|
656268C612DC1923007B0A0F /* nedaccel.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = nedaccel.xml; sourceTree = "<group>"; };
|
||||||
65632DF51251650300469B77 /* pios_board.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pios_board.h; sourceTree = "<group>"; };
|
65632DF51251650300469B77 /* pios_board.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pios_board.h; sourceTree = "<group>"; };
|
||||||
65632DF61251650300469B77 /* STM32103CB_AHRS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = STM32103CB_AHRS.h; sourceTree = "<group>"; };
|
65632DF61251650300469B77 /* STM32103CB_AHRS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = STM32103CB_AHRS.h; sourceTree = "<group>"; };
|
||||||
@ -7434,6 +7435,7 @@
|
|||||||
65E410AE12F65AEA00725888 /* attitudesettings.xml */,
|
65E410AE12F65AEA00725888 /* attitudesettings.xml */,
|
||||||
65C35E5912EFB2F3004811C2 /* baroaltitude.xml */,
|
65C35E5912EFB2F3004811C2 /* baroaltitude.xml */,
|
||||||
65C35E5A12EFB2F3004811C2 /* batterysettings.xml */,
|
65C35E5A12EFB2F3004811C2 /* batterysettings.xml */,
|
||||||
|
655B1A8E13B2FC0900B0E48D /* camerastabsettings.xml */,
|
||||||
652C8568132B632A00BFCC70 /* firmwareiapobj.xml */,
|
652C8568132B632A00BFCC70 /* firmwareiapobj.xml */,
|
||||||
65C35E5C12EFB2F3004811C2 /* flightbatterystate.xml */,
|
65C35E5C12EFB2F3004811C2 /* flightbatterystate.xml */,
|
||||||
65C35E5D12EFB2F3004811C2 /* flightplancontrol.xml */,
|
65C35E5D12EFB2F3004811C2 /* flightplancontrol.xml */,
|
||||||
|
@ -31,6 +31,7 @@ HEADERS += $$UAVOBJECT_SYNTHETICS/accessorydesired.h \
|
|||||||
$$UAVOBJECT_SYNTHETICS/ahrssettings.h \
|
$$UAVOBJECT_SYNTHETICS/ahrssettings.h \
|
||||||
$$UAVOBJECT_SYNTHETICS/gcstelemetrystats.h \
|
$$UAVOBJECT_SYNTHETICS/gcstelemetrystats.h \
|
||||||
$$UAVOBJECT_SYNTHETICS/attituderaw.h \
|
$$UAVOBJECT_SYNTHETICS/attituderaw.h \
|
||||||
|
$$UAVOBJECT_SYNTHETICS/camerastabsettings.h \
|
||||||
$$UAVOBJECT_SYNTHETICS/flighttelemetrystats.h \
|
$$UAVOBJECT_SYNTHETICS/flighttelemetrystats.h \
|
||||||
$$UAVOBJECT_SYNTHETICS/systemstats.h \
|
$$UAVOBJECT_SYNTHETICS/systemstats.h \
|
||||||
$$UAVOBJECT_SYNTHETICS/systemalarms.h \
|
$$UAVOBJECT_SYNTHETICS/systemalarms.h \
|
||||||
@ -78,6 +79,7 @@ SOURCES += $$UAVOBJECT_SYNTHETICS/accessorydesired.cpp \
|
|||||||
$$UAVOBJECT_SYNTHETICS/ahrssettings.cpp \
|
$$UAVOBJECT_SYNTHETICS/ahrssettings.cpp \
|
||||||
$$UAVOBJECT_SYNTHETICS/gcstelemetrystats.cpp \
|
$$UAVOBJECT_SYNTHETICS/gcstelemetrystats.cpp \
|
||||||
$$UAVOBJECT_SYNTHETICS/attituderaw.cpp \
|
$$UAVOBJECT_SYNTHETICS/attituderaw.cpp \
|
||||||
|
$$UAVOBJECT_SYNTHETICS/camerastabsettings.cpp \
|
||||||
$$UAVOBJECT_SYNTHETICS/flighttelemetrystats.cpp \
|
$$UAVOBJECT_SYNTHETICS/flighttelemetrystats.cpp \
|
||||||
$$UAVOBJECT_SYNTHETICS/systemstats.cpp \
|
$$UAVOBJECT_SYNTHETICS/systemstats.cpp \
|
||||||
$$UAVOBJECT_SYNTHETICS/systemalarms.cpp \
|
$$UAVOBJECT_SYNTHETICS/systemalarms.cpp \
|
||||||
|
Loading…
Reference in New Issue
Block a user