Autoquad Controller ist nun offiziell

sandmen

Erfahrener Benutzer
@captain
Bin eigentlich im Urlaub :).
Geh mit dem Altitude P anteil auf ca. 120
und dem I Anteil ca. 1,8 bei altitude hold pids.
Unbedingt dein hover-throttle kontrollieren. Schaut so aus, das du nicht bei 700 schwebst. Einstellbar über faktor und richtige motor, prop, batterie :D
 

CaptainPlanetHD

Erfahrener Benutzer
sandmen danke für den hinweis! und schönen urlaub noch! fahre morgen selber für 10 tage wenn ich es schaffe kommt der copter mit :)
 

meister

Erfahrener Benutzer
@kinderkram

Und das, ohne den Nutzer gängeln zu wollen oder aus kommerziellen Lizenzen und Software-Upgrades Kohle pressen zu wollen. Bei uns gips solche Restriktionen nich... Wir machen in Open Source.
Das einzige das mich im Moment störrt, ist das es auf einer Kommerziellen IDE entwickelt wird, da nutzt auch keine 30Tage-Test-Version !

Hab mal angefangen ein Makefile dafür zu basteln, sobald ich eine Platine in den Fingern habe, werde ich es mal mit einer anderen Compiler-Umgebung testen, aber ansonsten RESPEKT, habt ihr echt gut gemacht, entlich mal ein Projekt das die Sache enst zu nehmen scheint (egal welcher Aufwand) :)

Gruß,
Olli

Noch ein bischen Wild, aber scheint zu klappen, zumindest unter Linux
Code:
BIN_PATH = /opt/crossworks_for_arm_2.2/gcc/arm-unknown-eabi/bin
LIBPATH = /opt/crossworks_for_arm_2.2/lib
STM32_DIR = ../targets/STM32
## cp -a  /home/USAERNAME/.rowley_associates_limited/CrossWorks\ for\ ARM/packages/targets/ ../targets/ ##

CC = $(BIN_PATH)/cc1
AS = $(BIN_PATH)/as
LD = $(BIN_PATH)/ld
OBJCP = $(BIN_PATH)/objcopy

INCLUDES = -I$(STM32_DIR)/include -I../mavlink/include/common -I.
LIBS = -isystem/opt/crossworks_for_arm_2.2/include
COMPILE_OPTS = -mcpu=cortex-m4 -mthumb -mlittle-endian -mfpu=fpv4-sp-d16 -mfloat-abi=hard -nostdinc -fsingle-precision-constant -fno-gcse -Wall -gdwarf-2 -g2 -std=c99 -O2 -fno-dwarf2-cfi-asm -fno-builtin -ffunction-sections -fdata-sections -fno-common
AS_OPTS = --traditional-format -mcpu=cortex-m4 -mthumb -EL -mfpu=fpv4-sp-d16 -mfloat-abi=hard -gdwarf-2
LINKER_OPTS = -ereset_handler --omagic -defsym=__do_debug_operation=__do_debug_operation_mempoll -u__do_debug_operation_mempoll -defsym=__vfprintf=__vfprintf_double_long_long -u__vfprintf_double_long_long -defsym=__vfscanf=__vfscanf_double_long_long -u__vfscanf_double_long_long --fatal-warnings -EL --gc-sections -Taqv6.6.ld -Map aqv6.6.map -u_vectors
VARS = -D__ARM_ARCH_7EM__ -D__CROSSWORKS_ARM -D__ARM_ARCH_FPV4_SP_D16__ -D__CROSSWORKS_MAJOR_VERSION=2 -D__CROSSWORKS_MINOR_VERSION=2 -D__CROSSWORKS_REVISION=0 -D__TARGET_PROCESSOR=STM32F407VG -D__TARGET_F4XX= -DSTM32F4XX= -DSTARTUP_FROM_RESET -D__FPU_PRESENT -DARM_MATH_CM4 -D__THUMB -DNDEBUG -DNESTED_INTERRUPTS -DCTL_TASKING -DUSE_STDPERIPH_DRIVER

LIBSTM32_OBJS = stm32f4xx_adc.o stm32f4xx_dma.o stm32f4xx_exti.o stm32f4xx_flash.o stm32f4xx_gpio.o stm32f4xx_pwr.o stm32f4xx_rcc.o stm32f4xx_rtc.o stm32f4xx_sdio.o stm32f4xx_spi.o stm32f4xx_syscfg.o stm32f4xx_tim.o stm32f4xx_usart.o STM32_Startup.o
AQV6_OBJS = 1wire.o adc.o algebra.o aq_init.o aq_mavlink.o aq_timer.o arch.o arm_fill_f32.o arm_mat_init_f32.o arm_mat_inverse_f32.o arm_mat_mult_f32.o arm_mat_trans_f32.o arm_mean_f32.o arm_std_f32.o command.o compass.o config.o control.o core.o digital.o downlink.o event.o ff.o filer.o flag.o flash.o fpu.o futaba.o gimbal.o gps.o imu.o kernelHeap.o logger.o main_ctl.o mbox.o misc.o mm.o motors.o mutex.o nav.o nav_ukf.o notice.o pid.o port.o pwm.o queue.o radio.o rcc.o rtc.o run.o sdio.o sem.o serial.o serviceReq.o spektrum.o srcdkf.o supervisor.o system_stm32f4xx.o task.o telemetry.o thumb_crt0.o time.o timer.o ublox.o utility.o util.o vn100.o
EXTRA_LIBS = $(LIBPATH)/libm_v7em_fpv4_sp_d16_hard_t_le_eabi.a $(LIBPATH)/libc_v7em_fpv4_sp_d16_hard_t_le_eabi.a $(LIBPATH)/libcpp_v7em_fpv4_sp_d16_hard_t_le_eabi.a $(LIBPATH)/libdebugio_v7em_fpv4_sp_d16_hard_t_le_eabi.a $(LIBPATH)/libc_targetio_impl_v7em_fpv4_sp_d16_hard_t_le_eabi.a $(LIBPATH)/libc_user_libc_v7em_fpv4_sp_d16_hard_t_le_eabi.a


all: aqv6.6.elf aqv6.6.bin aqv6.6.hex

clean:
	rm -rf *.o
	rm -rf *.d
	rm -rf *.elf
	rm -rf *.bin
	rm -rf *.hex
	rm -rf Test/*

%.o: %.c
	@echo " $< -> $@"
	$(eval TEMP := $(shell mkdir -p Test ; mktemp tmp_XXXXX))
	$(CC) -fmessage-length=0 $(COMPILE_OPTS) $(LIBS) $(INCLUDES) $(VARS) -MD $(basename $@).d -MQ $@ -quiet $< -o $(TEMP)
	$(AS) $(AS_OPTS) $(TEMP) -o $@
	@rm -rf $(TEMP)

STM32_Startup.o: $(STM32_DIR)/STM32_Startup.s
	$(eval TEMP := $(shell mkdir -p Test ; mktemp tmp_XXXXX))
	$(CC) -E $(COMPILE_OPTS) $(LIBS) $(INCLUDES) $(VARS) -MD $(basename $@).d -MQ $@ -quiet -lang-asm $< -o $(TEMP)
	$(AS) $(AS_OPTS) $(TEMP) -o $@
	@rm -rf $(TEMP)

thumb_crt0.o: thumb_crt0.s
	$(eval TEMP := $(shell mkdir -p Test ; mktemp tmp_XXXXX))
	$(CC) -E $(COMPILE_OPTS) $(LIBS) $(INCLUDES) $(VARS) -MD $(basename $@).d -MQ $@ -quiet -lang-asm $< -o $(TEMP)
	$(AS) $(AS_OPTS) $(TEMP) -o $@
	@rm -rf $(TEMP)

aqv6.6.elf: $(AQV6_OBJS) $(LIBSTM32_OBJS)
	$(LD) -X $(LINKER_OPTS) -o $@ --start-group $(AQV6_OBJS) $(LIBSTM32_OBJS) $(EXTRA_LIBS) --end-group

aqv6.6.bin: aqv6.6.elf
	$(OBJCP) -O binary $< $@

aqv6.6.hex: aqv6.6.elf
	$(OBJCP) -O ihex $< $@
 

meister

Erfahrener Benutzer
Hi CaptainPlanetHD,
unter Windows wohl erstmal gar nicht ;-(
Unter Linux speichert man es unter: ....autoquad/6.6/onboard/Makefile
geht in den ordner : cd ....autoquad/6.6/onboard/
und macht ein: make clean all

Dazu muss leider noch die Crossworks-Umgebung installiert sein, denke aber das es auch nach ablauf der 30Tage noch funktionieren wird :)

Um nichts mehr aus meinem Home nutzen zu müssen, habe ich noch ein Verzeichniss in Projekt-Verzeichniss kopiert: cp -a /home/odippel/.rowley_associates_limited/CrossWorks\ for\ ARM/packages/targets/ ../targets/

Die Pfade für den Kompiler lassen sich im Makefile auch anpassen, aber im Prinzip ist diese Methode eher was für Leute die sich ein wenig mit Makefiles auskennen, vielleicht kann man es auch einmal an Windows anpassen und eine kleine Doku dazu schreiben.

Code:
root@odippel1:/usr/src/MultiCopter/autoquad/6.6/onboard# make clean all
rm -rf *.o
rm -rf *.d
rm -rf *.elf
rm -rf *.bin
rm -rf *.hex
rm -rf Test/*
 1wire.c -> 1wire.o
/opt/crossworks_for_arm_2.2/gcc/arm-unknown-eabi/bin/cc1 -fmessage-length=0 -mcpu=cortex-m4 -mthumb -mlittle-endian -mfpu=fpv4-sp-d16 -mfloat-abi=hard -nostdinc -fsingle-precision-constant -fno-gcse -Wall -gdwarf-2 -g2 -std=c99 -O2 -fno-dwarf2-cfi-asm -fno-builtin -ffunction-sections -fdata-sections -fno-common -isystem/opt/crossworks_for_arm_2.2/include -I../targets/STM32/include -I../mavlink/include/common -I. -D__ARM_ARCH_7EM__ -D__CROSSWORKS_ARM -D__ARM_ARCH_FPV4_SP_D16__ -D__CROSSWORKS_MAJOR_VERSION=2 -D__CROSSWORKS_MINOR_VERSION=2 -D__CROSSWORKS_REVISION=0 -D__TARGET_PROCESSOR=STM32F407VG -D__TARGET_F4XX= -DSTM32F4XX= -DSTARTUP_FROM_RESET -D__FPU_PRESENT -DARM_MATH_CM4 -D__THUMB -DNDEBUG -DNESTED_INTERRUPTS -DCTL_TASKING -DUSE_STDPERIPH_DRIVER -MD 1wire.d -MQ 1wire.o -quiet 1wire.c -o tmp_GDLbA
/opt/crossworks_for_arm_2.2/gcc/arm-unknown-eabi/bin/as --traditional-format -mcpu=cortex-m4 -mthumb -EL -mfpu=fpv4-sp-d16 -mfloat-abi=hard -gdwarf-2 tmp_GDLbA -o 1wire.o
 adc.c -> adc.o
/opt/crossworks_for_arm_2.2/gcc/arm-unknown-eabi/bin/cc1 -fmessage-length=0 -mcpu=cortex-m4 -mthumb -mlittle-endian -mfpu=fpv4-sp-d16 -mfloat-abi=hard -nostdinc -fsingle-precision-constant -fno-gcse -Wall -gdwarf-2 -g2 -std=c99 -O2 -fno-dwarf2-cfi-asm -fno-builtin -ffunction-sections -fdata-sections -fno-common -isystem/opt/crossworks_for_arm_2.2/include -I../targets/STM32/include -I../mavlink/include/common -I. -D__ARM_ARCH_7EM__ -D__CROSSWORKS_ARM -D__ARM_ARCH_FPV4_SP_D16__ -D__CROSSWORKS_MAJOR_VERSION=2 -D__CROSSWORKS_MINOR_VERSION=2 -D__CROSSWORKS_REVISION=0 -D__TARGET_PROCESSOR=STM32F407VG -D__TARGET_F4XX= -DSTM32F4XX= -DSTARTUP_FROM_RESET -D__FPU_PRESENT -DARM_MATH_CM4 -D__THUMB -DNDEBUG -DNESTED_INTERRUPTS -DCTL_TASKING -DUSE_STDPERIPH_DRIVER -MD adc.d -MQ adc.o -quiet adc.c -o tmp_86Cab
/opt/crossworks_for_arm_2.2/gcc/arm-unknown-eabi/bin/as --traditional-format -mcpu=cortex-m4 -mthumb -EL -mfpu=fpv4-sp-d16 -mfloat-abi=hard -gdwarf-2 tmp_86Cab -o adc.o
 algebra.c -> algebra.o
.....
.....
.....
.....
/opt/crossworks_for_arm_2.2/gcc/arm-unknown-eabi/bin/as --traditional-format -mcpu=cortex-m4 -mthumb -EL -mfpu=fpv4-sp-d16 -mfloat-abi=hard -gdwarf-2 tmp_mppz6 -o STM32_Startup.o
/opt/crossworks_for_arm_2.2/gcc/arm-unknown-eabi/bin/ld -X -ereset_handler --omagic -defsym=__do_debug_operation=__do_debug_operation_mempoll -u__do_debug_operation_mempoll -defsym=__vfprintf=__vfprintf_double_long_long -u__vfprintf_double_long_long -defsym=__vfscanf=__vfscanf_double_long_long -u__vfscanf_double_long_long --fatal-warnings -EL --gc-sections -Taqv6.6.ld -Map aqv6.6.map -u_vectors -o aqv6.6.elf --start-group 1wire.o adc.o algebra.o aq_init.o aq_mavlink.o aq_timer.o arch.o arm_fill_f32.o arm_mat_init_f32.o arm_mat_inverse_f32.o arm_mat_mult_f32.o arm_mat_trans_f32.o arm_mean_f32.o arm_std_f32.o command.o compass.o config.o control.o core.o digital.o downlink.o event.o ff.o filer.o flag.o flash.o fpu.o futaba.o gimbal.o gps.o imu.o kernelHeap.o logger.o main_ctl.o mbox.o misc.o mm.o motors.o mutex.o nav.o nav_ukf.o notice.o pid.o port.o pwm.o queue.o radio.o rcc.o rtc.o run.o sdio.o sem.o serial.o serviceReq.o spektrum.o srcdkf.o supervisor.o system_stm32f4xx.o task.o telemetry.o thumb_crt0.o time.o timer.o ublox.o utility.o util.o vn100.o stm32f4xx_adc.o stm32f4xx_dma.o stm32f4xx_exti.o stm32f4xx_flash.o stm32f4xx_gpio.o stm32f4xx_pwr.o stm32f4xx_rcc.o stm32f4xx_rtc.o stm32f4xx_sdio.o stm32f4xx_spi.o stm32f4xx_syscfg.o stm32f4xx_tim.o stm32f4xx_usart.o STM32_Startup.o /opt/crossworks_for_arm_2.2/lib/libm_v7em_fpv4_sp_d16_hard_t_le_eabi.a /opt/crossworks_for_arm_2.2/lib/libc_v7em_fpv4_sp_d16_hard_t_le_eabi.a /opt/crossworks_for_arm_2.2/lib/libcpp_v7em_fpv4_sp_d16_hard_t_le_eabi.a /opt/crossworks_for_arm_2.2/lib/libdebugio_v7em_fpv4_sp_d16_hard_t_le_eabi.a /opt/crossworks_for_arm_2.2/lib/libc_targetio_impl_v7em_fpv4_sp_d16_hard_t_le_eabi.a /opt/crossworks_for_arm_2.2/lib/libc_user_libc_v7em_fpv4_sp_d16_hard_t_le_eabi.a --end-group
/opt/crossworks_for_arm_2.2/gcc/arm-unknown-eabi/bin/objcopy -O binary aqv6.6.elf aqv6.6.bin
/opt/crossworks_for_arm_2.2/gcc/arm-unknown-eabi/bin/objcopy -O ihex aqv6.6.elf aqv6.6.hex
Falls jemand lust hat es an Windows an zu passen:

Code:
BIN_PATH = /opt/crossworks_for_arm_2.2/gcc/arm-unknown-eabi/bin
LIBPATH = /opt/crossworks_for_arm_2.2/lib
STM32_DIR = ../targets/STM32
Diese 3 Zeilen sind die Wichtigsten.

Gruß,
Olli

PS: ein Makefile macht im Prinzip das, was die IDE für euch im Hintergrund tut, die Compiler und Linker Befehle ausführen.

Make für Windows gibt es hier: http://gnuwin32.sourceforge.net/packages/make.htm
 

meister

Erfahrener Benutzer
Hi kinderkram,
kein Problem, mach ich ja auch für mich .-)

Hab gerade das SVN neu gezogen, daher musste ich nochmal was anpassen:

zu den Objekten bei AQV6_OBJS, kommen noch 2 dazu: ppm.o esc32.o

Desweiteren benötigt man die Datei aqv6.6.ld, diese wird auch von der Crossworks-IDE erzeugt.

Gruß,
Olli

PS: bin schon ganz hibbelich, will ändlich auch en Board haben :)
 

meister

Erfahrener Benutzer
Achso, und wer den ...../autoquad/ground Teil unter Debian/Linux kompilieren möchte sollte im dort liegenden Makefile einfach nur den Eintrag:

-I/usr/local/include/eigen3

ändern in

-I/usr/include/eigen3

und natürlich die passenden libs installieren:

apt-get install libeigen3-dev libplplot-dev ....

Gruß,
Olli

PS: wann kommen den entlich die neuen Boards :)
 

ninjamic

Luftfahrzeugführer
PPM is schon da, muss aber noch mit verschiedenen Setups getestet werden.
Wäre klasse wenn Ihr das dann mal groß anpreisen würdet wenn es so weit ist. Wenn das mit dem PPM richtig funzt bin ich an der Steuerung auch sehr interessiert, bis dahin, abwarten ;D

Grüße

Michael
 

Andi

Erfahrener Benutzer
Hi Leute ,

beim kalibrieren hab ich beim Gyro immer ein änliches Muster und bekomme es nicht weg.
Hatte das ja schon am Anfang , dachte aber es ist evt. die Sd Card , aber seit den letzen Versuchen habe ich jetzt eine neue Karte.
Hier mal wieder 2 Beispiele , immer der fette Ausschlag ?? Hat mein Gyro ein Schaden ? oder bewegt sich da was immer zur etwa gleichen Zeit /Temperatur ?

Im Ersten Bild habe ich eine höher Endtemperatur erreicht 50° (90 Min) beim 2 nur ca. 45° ( 60min)

Hab jetzt die logs mal überflogen Auschlag 1. immer bei ca. um die 27° und Ausschlag 2. immer bei ca. um die 42°

edit : für Sunny zum Bild2 Gyro noch ACC hinzugefügt
 

Anhänge

Andi

Erfahrener Benutzer
hab jetzt die Logs noch mal durchgesehn , bei dem Ausschlag des Gyros ist auch zeitgleich ein Knuppel bei Voltage0

Hilft das irgendwie weiter?
 

Andi

Erfahrener Benutzer
Hmm Schweigen im Walde , bin ich der einzige mit solch einem Problem ?

hier ein kurzer Test , Board in der Box ohne eingefrieren start bei Raumtemperatur ,wieder die gleiche S******
Board diesmal liegend.
Das Dinge kotzt mich langsam an ,

Hallo Entwickler keine Idee ? sonst könnt Ihr das Teil wieder haben!
 

Anhänge

kinderkram

Erfahrener Benutzer
Hi Andi,
das sieht leider nicht gut aus. Ich nehme an, Du hast Kondensat vermieden? Würde ich in dem Fall aber ausschließen...

Wie sehen denn die anderen Sensoren aus?

Was den fetten Ausschlag anbelangt: unser Chefentwickler hat irgendwann mal von einem Fall berichtet, wo es ein ähnliches Resultat gab. Der Gyro hat sich beim Auftauen quasi "hochgeschaukelt" und dann wieder beruhigt.
Du hast zusätzlich auch diese Treppenstufen in den Kurven. Auch der Fall wurde schon beobachtet: Der Gyro lädt sich auf, bis er ruckartig zurück schnappt. Im Betrieb hat der Sensor aber seltsamerweise keine Ausfälle gezeigt.

Wir benutzen die in diesem Preissegment hochwertigeren Sensoren, trotzdem gibts immer mal wieder Fertigungstoleranzen, die überschritten werden und merkwürdiges Verhalten hervorrufen.

In diesem Fall schwer zu beschreiben, ich vermute mal ein mechanisches Problem des Sensors. Durch die statische Kalibrierung werden die Dinger ja an Ihre Grenzen getrieben, was Temperaturresistenz anbelangt. Dadurch fallen Gurken früh auf.
Ohne die Logfiles wär das evt. sogar nie aufgeflogen, weil sein Herrchen nur bei Schönwetter fliegt? :D

Wenn Du Vibrationen ausschließen kannst (kein Aggregat, das anspringt, kein Türenschlagen etc.) und bei weiteren Tests keine vernünftigen Ergebnisse erzielst, dann hast Du evt. ne Gurke. Dann ist Austausch angesagt... :(

2 Dinge kannst Du mal versuchen:

- häng die FC mal an die GUI und schau Dir da die Werte für die Sensoren an. Schüttel das Board ordentlich durch, dreh sie um alle Achsen, auf den Kopf stellen und schnell wieder zurück. Falls der HUD normal reagiert und die Werte nicht austicken, gibts Hoffnung.
- nimm die besten statischen Ergebnisse und mach den Calibso, um mit den gewonnenen Daten Deine Parameter zu errechnen. Wenn das klappt und er damit gut fliegt, hast Du evt. einen Sensor erwischt, der zwar nicht optimal aber gut genug für unsere Anforderungen ist...


edit: hab grad Deinen letzten Post gesehen. Rückgabe ist wie bereits erwähnt eine Option...
 

Andi

Erfahrener Benutzer
Hi Kinderkram ,

Danke für die Antwort

Mag Sensor sieht Top aus und ACC hat 2-3 minimale Knuppel
Für das ganze Hause wurde für die Aufzeichnung Ruhe verordnet ;)
Werd das morgen noch versuchen was DU vorschlägst , mal sehen.

Andi
 

sunny

Well-known member
Da hier immer mehr mit zweierlei Mass gemessen wird, die Interessen des Forenbetreiber im Vordergrund stehen, habe ich dieses Posting gelöscht.
 

sunny

Well-known member
Da hier immer mehr mit zweierlei Mass gemessen wird, die Interessen des Forenbetreiber im Vordergrund stehen, habe ich dieses Posting gelöscht.
 
Andi bohren die bei euch noch noch Erdöl? da sind sicher die dran schuld. Du hast einfach kein Glück ... stell ich mal wieder fest. Ich bin aber auch noch net weiter. Ich drück mich immer noch um das dynamische kalibrieren herum.
 
FPV1

Banggood

Oben Unten