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.
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 .
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!
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.
Comments
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
@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!
W O W that's look really great! congrats team!
@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.
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.
Excellent development work :) Congratulations Team !!!
Great work!!