Une fois, pendant les vacances du Nouvel An, naviguant paresseusement sur Internet, les gaffeurs de notre * bureau R&D ont remarqué une vidéo des tests d'un prototype de robotaxi. Le commentateur a répondu avec un ton enthousiaste - une révolution, après tout. C'est génial, oui, mais le moment est venu - la révolution est là et c'est l'informatique qui les dirige.
Mais l'oreille entraînée a entendu autre chose dans le bruit du site d'essai. Le contrôleur de vitesse (la chose pour contrôler la poussée des hélices) a joué une mélodie au début, comme les pilotes de drone aiment le faire, qui utilisent souvent le contrôleur de vol Betaflight. Y a-t-il un vol bêta? Il semble que oui. Eh bien, ou certaines de ses variétés - il n'y a qu'environ une demi-douzaine de contrôleurs de vol ouverts.
Des flashbacks ont couru devant mes yeux, quelque part des profondeurs de l'inconscient, des informations oubliées sur le firmware de Toyota pour des millions de milliers de lignes de C et 2000 variables globales ont fait surface ( Toyota: 81564 erreurs dans le code ).
Après avoir examiné le code source de Betaflight sur github, cela a empiré, et le plus loin, le pire . Nous pensons que le code auto-écrit sera à peu près du même niveau. Cela signifie qu'il n'y a aucune garantie et la capacité non seulement d'assurer le fonctionnement sans problème du code, mais de comprendre complètement son travail. Et c'est le programme de contrôle pour un appareil lourd avec des vis tranchantes qui vole haut, rapidement. Ça devient effrayant: les jouets sont une chose, mais je ne voudrais pas voler dans un tel taxi.
Mais est-ce possible autrement? Vous pouvez, nous avons décidé!
Et ils ont décidé de le prouver. Un quadric FPV acrobatique basé sur STM32F405 a été acheté sur Avito, une carte Discovery pour le même contrôleur a été achetée pour le débogage, puis tout est comme un brouillard.
Alors, comment pourrait-il en être autrement?
Après une brève réunion, les réflexions suivantes ont surgi:
nous avons besoin d'une approche différente
, .
, - , . , [FC] .
:
- embedded
runtime RTOS, RTOS
, .
, , . , Ada. , , SPARK. [SRM] SPARK Ada, .
SPARK, , , , , , , , . Rust.
. , . , .
, , , , . , .
SPARK, :
null-
.
, .
, . !
, ?
SPARK , , , . , , , .
SPARK , Ada. Runtime; SPARK , .
:
:
, , .
SPARK , “” , . , - () .
SPARK : "" (Stone level) "" "" "" (Gold) "". :
Stone |
, SPARK |
Bronze |
Stone + / |
Silver |
Bronze + runtime- |
Gold |
Silver + - - |
Platinum |
Gold + |
Gold, - Boing 777 MAX.
SPARK: , , (SMT - Z3), . , .
[SUG]
, "" - ECMA-, , . , , , . Rust, - - Perl, .
, , , , , , , , . Ada ( SPARK Ada) . , Ada embedded-.
"". , . , " ". " ". " ". " ". , .
Ravenscar, embedded-. , : -, , stdlib- .
Ravescar,
Runtime
embedded - , RTOS, . Ada - Ada ( Ada tasks, ), (, , entries) . , .
embedded- :
zero-footprint - ; , TO MSP430
small footprint - Ada, , RAM
full ravenscar - Ravenscar/Extended Ravenscar
, - green threads, . , , .
, Ada stdlib STM32, . , .
“rustRustRUST”!
, , Rust . ? , Spark .
Ada - access types, , , - Spark , Rust. , ( /), ( ) .
, , - Rust, , , Ada/SPARK. [UPS]
, Ada/SPARK ? , ( - , - , - - ?), Ada . , (, ), placement constructor, .. limited- - , .
, – , . . - , , Ada.
layout : , . - , , .
IDE
IDE, VSCode , .
. , [EFF], , , “» Ada :
, SPARK/Ada . 21 [LIC] Ada, BasiLEO Ada 12, .
-
, - . , , .
, :
Veriflight - , .
Veriflight_board - , - . , .
, USB STM32 Interop Ada.
:
STM32F405 168 (192 RAM, 1M flash)
S.BUS USART1
6- -
PWM
USB-, PHY- .
«» 2 :
(CMD task ) . , « , ». , - , . 20 .
- - . 3 PID-, . , - . - 200 . , .
, , .
PID :
-
PID- ,
PID-
, ,
, - ( Arduino ) - C Wiring . . , - , [MHN], .
, , . 90 - (disarm).
, , PID . , , , , -- , .
, .
, . , : , , Ada, .
Ada/SPARK , , , , .
R&D , , , , , , .
, runtime- , - , , .
, embedded Ada.
, robotics automotive , « », , , : , .
[SUG] SPARK user guide https://docs.adacore.com/spark2014-docs/html/ug/index.html
[SRM] SPARK reference manual (https://docs.adacore.com/live/wave/spark2014/html/spark2014_rm/index.html)
[FC] Frama-C - plateforme d'analyse modulaire du code C https://frama-c.com/
[UPS] https://blog.adacore.com/using-pointers-in-spark
[MHN] https://nitinjsanket.github.io/tutorials/attitudeest/mahony
[EFF] https://greenlab.di.uminho.pt/wp-content/uploads/2017/10/sleFinal.pdf
[LIC] https://en.wikipedia.org/wiki/Lunar_IceCube