FOXTEAM UAV CLAN

a Virtual Robotix Network Team

FoxTeam present last update on VBRAIN project : Benchmark of Arducopter firmware on APM , MP32F1 and VBRAIN and a lot of new video :)

This is Vbrain RTF with new enclosure the .stl file is available on thinkverse:

 http://www.thingiverse.com/thing:32321
This last revision of VBrain will be official presented to Makers Italy in Milan 9 November 2012 join us at the event : http://www.virtualrobotix.com/events/virtual-robotix-workshop-d-aut...

Emile and Roberto are progressing on the port and test of the VRBrain with the Arducopter

code now we are working on rev 2.7.3-4.

In this video is possible to see the test of Emile Hexa . It's the first flight and we testing the stability , loiter and alt hold and return to land with approach activated.

We have succesfully flown and tested latest features and came up with some benchmarks to compare the different architectures using Arducopter firmwarre.

Results are pretty impressive and although all the glory goes to the Dev team for the latest firmware a special note goes to Roberto with his new VRBrain design.
Our goal was to have an already "ready platform" where actual developers could start coding on a 32bit platform without loosing the actual code simplicity.
We started with the STM32F1 CPU, running at 72MHz with no FPU and then jumped onto the STM32F4 168MHz CPU which supports hardware FPU on the chip.
Our latest improvements were on the CPU side and we were able to activate soft FPU calculation without the need to modify actual code.
Basically the STM32F4 supports three types of FPU:
no-fpu: uses standard libraries and emulates floating point calculation
soft-fpu: uses hardware floating point instructions but floating point function parameters/return values will be passed in core registers and not FPU registers
hard-fp: all function parameters/return values are passed to the FPU core registers bypassing the core register
These are basic results for the main loops in the Arducopter code:
Arduino 2560 on APM1-2:
Main loop time taken (microseconds):
Min:  4380 us
Max:  6592 us
STM32F1 on Multipilot32F1 V1 and V3 (72MHz no FPU):
Main loop time taken (microseconds):
min:  656 us
max:  1104 us
STM32F4 No FPU on VBRAIN and MP32F4V3 and VBRAIN (168MHz FPU available but not used):
min:  315 us
max:  492 us
STM32F4 soft FPU on VBRAIN and MP32F4V3 and VBRAIN (168MHz with soft FPU enabled):
min:  210 us
max:  315 us
Basically we are at least 20 times faster than current Arduino Hardware although we share 90% of original application code.
Also with the same CPU (F4) we can go 2 times faster without changing one single line of code (almost). 
Better performances (at cost of re-writing the code) could be with hard FPU .
So this performances is impressive :) We have a lot of power for start to try more complex algorith as EKF or UFK inside standard Arducopter32 library architecture. If there are some hardcoder that want try to work on this task are welcome . Will be all support from FOXTEAM :)
We yet try the OpenPilot EKF on VBRain and it is very smooth ... but not so differernt of last DCM implementation. Thanks Tridge :)
In this video is possible to see a vbrain installed on a custom frame that use great component : SmartDrone motors and propeller the time of flight is around 27 min.
This is the video of first flight of special revision of firmware for VBRAIN that use the FPU acceleration the benchmark is about this revision of code.

Roberto and Emile a FoxTeam Member .

Views: 1157

Comment

You need to be a member of FOXTEAM UAV CLAN to add comments!

Join FOXTEAM UAV CLAN

Comment by Roberto Navoni on October 30, 2012 at 2:18am

Last test with PerMon on revision with FPU enabled and disabled . The FPU revision of code is last one that Emile Send to me , i think that there is also a different update frequency on AHRS because is call less respect of my last revision of code without FPU .

LOG WITH FPU DISABLED

PerfMon start:16072 (mils) end:21181 (mils) elapsed:5108 (mils)
PerfMon: cpu% mils #called Hz
loop -45.00% -2298 -259034 -51806hz-
SuperFast_Loop -31.85% -1627 -17956 -3591hz-
read_AHR -8.53% -435 -2023 -404hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.20% -10 -255 -51hz-
Update_GPS -0.09% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 13.68% -699
þ Qùþ QÇþ Q-{þ QÉäþ Q#þ QPerfMon start:21271 (mils) end:26386 (mils) elapsed:5115 (mils)
PerfMon: cpu% mils #called Hz
loop -44.89% -2296 -259639 -51927hz-
SuperFast_Loop -31.84% -1629 -17971 -3594hz-
read_AHR -8.52% -435 -2023 -404hz-
Super_SLOW_LOOP -0.76% -39 -6 -1hz-
FiftyHZ_Loop -0.20% -10 -255 -51hz-
Update_GPS -0.09% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 13.69% -700
þ ÷gþ Qpþ Qiþ Q¤êþ QNPerfMon start:26476 (mils) end:31584 (mils) elapsed:5107 (mils)
PerfMon: cpu% mils #called Hz
loop -44.94% -2295 -259562 -51912hz-
SuperFast_Loop -31.90% -1629 -17969 -3593hz-
read_AHR -8.54% -435 -2023 -404hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.20% -10 -255 -51hz-
Update_GPS -0.09% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 13.70% -699
þ QÂxþ !Q(þ "Q
þ #Qüûþ $Q{PerfMon start:31674 (mils) end:36873 (mils) elapsed:5199 (mils)
PerfMon: cpu% mils #called Hz
loop -43.96% -2285 -258293 -51658hz-
SuperFast_Loop -31.17% -1620 -17890 -3578hz-
read_AHR -8.36% -434 -2018 -403hz-
Super_SLOW_LOOP -2.81% -146 -5 -1hz-
FiftyHZ_Loop -0.20% -10 -255 -51hz-
Update_GPS -0.09% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 13.40% -696
þ %Qõþ &Q¯vþ 'Qþ (Q¡þ )QKéPerfMon start:36963 (mils) end:42072 (mils) elapsed:5108 (mils)
PerfMon: cpu% mils #called Hz
loop -44.94% -2295 -259622 -51924hz-
SuperFast_Loop -31.88% -1628 -17964 -3592hz-
read_AHR -8.54% -436 -2023 -404hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.20% -10 -255 -51hz-
Update_GPS -0.09% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 13.72% -700
þ *Qujþ +Qþ ,Qdþ -Qòþ .QÌPerfMon start:42161 (mils) end:47262 (mils) elapsed:5100 (mils)
PerfMon: cpu% mils #called Hz
loop -44.93% -2291 -259190 -51838hz-
SuperFast_Loop -31.88% -1626 -17930 -3586hz-
read_AHR -8.55% -436 -2023 -404hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.20% -10 -255 -51hz-
Update_GPS -0.09% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 13.71% -699
þ /Q&çþ 0Q®þ 1QÿÐþ 2QÁSþ 3Q+-PerfMon start:47352 (mils) end:52458 (mils) elapsed:5106 (mils)
PerfMon: cpu% mils #called Hz
loop -44.92% -2294 -259440 -51888hz-
SuperFast_Loop -31.90% -1628 -17965 -3593hz-
read_AHR -8.54% -436 -2023 -404hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.20% -10 -255 -51hz-
Update_GPS -0.09% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 13.71% -700
þ 4Q¬]þ 5QF#þ 6Qx þ 7QÞþ 8QvAPerfMon start:52548 (mils) end:57647 (mils) elapsed:5098 (mils)
PerfMon: cpu% mils #called Hz
loop -44.95% -2291 -258968 -51793hz-
SuperFast_Loop -31.87% -1624 -17928 -3585hz-
read_AHR -8.56% -436 -2023 -404hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.20% -10 -255 -51hz-
Update_GPS -0.09% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 13.70% -698
þ 9Q?þ :Q¢¼þ ;QHÂþ <Qϲþ =Q%ÌPerfMon start:57737 (mils) end:62846 (mils) elapsed:5108 (mils)
PerfMon: cpu% mils #called Hz
loop -44.93% -2295 -259483 -51896hz-
SuperFast_Loop -31.90% -1629 -17976 -3595hz-
read_AHR -8.55% -436 -2023 -404hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.20% -10 -255 -51hz-
Update_GPS -0.09% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 13.70% -700
þ >Qþ ?Qñ1þ @Qþ AQøàþ BQÆcPerfMon start:62936 (mils) end:68036 (mils) elapsed:5100 (mils)
PerfMon: cpu% mils #called Hz
loop -44.95% -2292 -259124 -51824hz-
SuperFast_Loop -31.85% -1624 -17928 -3585hz-
read_AHR -8.56% -436 -2023 -404hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.20% -10 -255 -51hz-
Update_GPS -0.09% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 13.71% -699
þ CQ,þ DQ«mþ EQA

LOG WITH FPU ENABLED 5095 time between PerfMon Statistic

PerfMon start:135965 (mils) end:141061 (mils) elapsed:5095 (mils)
PerfMon: cpu% mils #called Hz
loop -61.09% -3112 -446440 -89288hz-
SuperFast_Loop -9.57% -487 -19282 -3856hz-
read_AHR -5.90% -300 -2014 -402hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.19% -9 -255 -51hz-
Update_GPS -0.08% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 22.53% Q9þ47 Q­ºPerfMon start:141151 (mils) end:146247 (mils) elapsed:5096 (mils)
PerfMon: cpu% mils #called Hz
loop -61.08% -3112 -446473 -89294hz-
SuperFast_Loop -9.56% -487 -19290 -3858hz-
read_AHR -5.92% -301 -2016 -403hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.19% -9 -255 -51hz-
Update_GPS -0.08% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained þ Qóþ53% Q pþ8 QJPerfMon start:146337 (mils) end:151429 (mils) elapsed:5091 (mils)
PerfMon: cpu% mils #called Hz
loop -61.07% -3109 -446061 -89212hz-
SuperFast_Loop -9.57% -487 -19266 -3853hz-
read_AHR -5.91% -301 -2014 -402hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.19% -9 -255 -51hz-
Update_GPS -0.08% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 22.53% -1147
þ QÍ~þ Q'þ Qþ Qóýþ QbPerfMon start:151519 (mils) end:156613 (mils) elapsed:5094 (mils)
PerfMon: cpu% mils #called Hz
loop -61.07% -3111 -446380 -89276hz-
SuperFast_Loop -9.57% -487 -19285 -3857hz-
read_AHR -5.90% -300 -2015 -403hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.19% -9 -255 -51hz-
Update_GPS -0.08% -3 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 22.55% -1148
þ Qýþ QÃþ )áþ Q®þ
PerfMon: cpu% mils #called Hz
loop -61.09% -3111 -446258 -89251hz-
SuperFast_Loop -9.57% -487 -19267 -3853hz-
read_AHR -5.91% -300 -2015 -403hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.19% -9 -255 -51hz-
Update_GPS -0.08% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 22.53% -1147
þ Qzlþ Qþ  Qþþ ¡Qöþ ¢QÈPerfMon start:161887 (mils) end:166978 (mils) elapsed:5090 (mils)
PerfMon: cpu% mils #called Hz
loop -61.08% -3109 -446056 -89211hz-
SuperFast_Loop -9.56% -486 -19254 -3850hz-
read_AHR -5.91% -300 -2014 -402hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.19% -9 -255 -51hz-
Update_GPS -0.08% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 22.54% -1147
þ ¥QOsþ ¦Qqðþ §QPerfMon start:167068 (mils) end:172161 (mils) elapsed:5092 (mils)
PerfMon: cpu% mils #called Hz
loop -61.08% -3110 -446113 -89222hz-
SuperFast_Loop -9.56% -487 -19269 -3853hz-
read_AHR -5.91% -301 -2015 -403hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.20% -10 -255 -51hz-
Update_GPS -0.08% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 22.53% -1147
þ ¨þ ©Qoþ ªQ«ìþ «QAþ ¬QÆâPerfMon start:172251 (mils) end:177343 (mils) elapsed:5091 (mils)
PerfMon: cpu% mils #called Hz
loop -61.08% -3110 -446163 -89232hz-
SuperFast_Loop -9.56% -486 -19260 -3852hz-
read_AHR -5.90% -300 -2013 -402hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.19% -9 -255 -51hz-
Update_GPS -0.08% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 22.54% -1147
þ ­Q,þ ®Qþ ¯Qøaþ °QË(þ ±Q!Vþ ²QÕPerfMon start:177433 (mils) end:182532 (mils) elapsed:5098 (mils)
PerfMon: cpu% mils #called Hz
loop -61.01% -3110 -446158 -89231hz-
SuperFast_Loop -9.55% -487 -19254 -3850hz-
read_AHR -5.90% -300 -2015 -403hz-
Super_SLOW_LOOP -0.77% -39 -6 -1hz-
FiftyHZ_Loop -0.19% -9 -255 -51hz-
Update_GPS -0.08% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 22.50% -1147
þ ³Qõ«þ ´QrÛþ µQ¥þ ¶Q¦&þ ·QLXPerfMon start:182621 (mils) end:187715 (mils) elapsed:5093 (mils)
PerfMon: cpu% mils #called Hz
loop -61.07% -3110 -446184 -89236hz-
SuperFast_Loop -9.56% -486 -19271 -3854hz-
read_AHR -5.90% -300 -2013 -402hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.20% -10 -255 -51hz-
Update_GPS -0.08% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 22.55% -1148
þ ¸Q¨Çþ ¹QB¹þ ºQ|:þ »QDþ ¼Q4PerfMon start:187805 (mils) end:192903 (mils) elapsed:5098 (mils)
PerfMon: cpu% mils #called Hz
loop -61.09% -3114 -446659 -89331hz-
SuperFast_Loop -9.56% -487 -19289 -3857hz-
read_AHR -5.91% -301 -2016 -403hz-
Super_SLOW_LOOP -0.64% -32 -5 -1hz-
FiftyHZ_Loop -0.19% -9 -255 -51hz-
Update_GPS -0.08% -4 -255 -51hz-
setupA -0.00% -0 -0 -0hz-
unexplained 22.53% -1148

Comment by Ron Curry on October 22, 2012 at 5:15pm
Comment by emile on Thursday
@Ron Next task for sure :)
We just need to get to a good point with current software before we get into any other project...
The only thing about Autoquad is that it takes a bit to get started, while Arducopter is a bit more plug and play."

Emile,
Now that I've built multiplemcoptersmwith both Arducopter and Autoquad the only differences I find is the the Arducopter stuff is they tell you its plug and play so 3DR can attract everyone and sell lots of hardware but its not. It takes just as much work to setup as anything else, including Autoquad, but it takes a large effort to get it tuned to fly just "ok" but it's still untrustworthy and few people ever get it to that point.

Whereas with Autoquad they are over exaggerate the amount of effort it takes mostly just to keep away the less experienced but the effort is no more that an Arducopter install. The interesting thing I found is that AutoQuad even without going through the calibration process ( which is actuall quite easy) it flys better that the best flying Arducopters. The reason why is the sensor fusion loop in AutoQuad is extremely well written and runs at 400hz which is high end commercial quality. All you have to do is build one once and you'll say to yourself "why did I ever waste so much time on this Arducopter stuff". Honestly, it's that much better and it's amazing. Think about if you could get better that WKM stability and accuracy out of Arducopter ( you can't, at least not with the current Arducopter flight control code) and that's AutoQuad.

If we move the code to a hardware platform that uses modern gyros and accelerometers much of the calibration needs would go away because they are using old analog IDG500 gyros that drift terribly compared to the mpu6000. The Autoquad code is well written and very structured to make it fairly easy to put it on a different board. Without changing the gyros/accelerometers its a trivial effort because all the pin assignments are defined in a "board,h" file. Changing out the gyros/accelerometer is a bit more work but its all confined to one file as well - "adc,c"

I've built two of them now and with both from the very first test flight they flew AMAZING. No jerking around endlessly with PiDs just to get it to fly right. They were both rock solid from the start. So which is more "plug and play"? Without a doubt its Autoquad in my experience.

Lets put it this way, after my very first Autoquad flight I put every single one of my APM2's up for sale (I had 5 of them and 3 copters with them).

The biggest problem with Autoquad is it could really benefit from a team doing a fork and applying traditional open source practices to the project. - i.e. more people contributing. Right now it's very tightly controlled by a very small team. Anyhow, if just a quarter of the effort you guys have applied to trying to improve the old antiquated spaghetti code Ardupilot system to something based on The already running on F4 Autoquad it would be incredi my exciting - something better than DJI WKM performance with Ardupilot features for around $200!
Comment by Antonio Cirella on October 22, 2012 at 11:16am

W O W that's look really great! congrats team!

Comment by emile on October 18, 2012 at 11:12am

@Ron Next task for sure :)

We just need to get to a good point with current software before we get into any other project...

The only thing about Autoquad is that it takes a bit to get started, while Arducopter is a bit more plug and play.

Comment by Ron Curry on October 18, 2012 at 1:30am

Really nice work guys. You really should consider porting AutoQuad to your hardware. The software is very cleanly written and really puts Arducopter stuff to shame both in code quality and performance. Performance on F4 is every bit as good or better than DJI WKM. All it needs is to redefine the pins and driver for MPU6000 that's on your board (currently using old analog gyros.

Comment by Rui Marques on October 18, 2012 at 1:10am

Excellent development work :) Congratulations Team !!!

Comment by Oyvind Amundsen on October 17, 2012 at 10:45pm

Great work!!

Events

© 2014   Created by Roberto Navoni.

Badges  |  Report an Issue  |  Terms of Service