Certa vez, no feriado de Ano Novo, navegando preguiçosamente na Internet, os bagunceiros em nosso * escritório de P&D notaram um vídeo dos testes de um protótipo de robotaxi. O comentarista respondeu com um tom entusiasmado - uma revolução, afinal. É ótimo, sim, mas a hora é agora - a revolução está aí e a TI está liderando.
Mas o ouvido treinado ouviu algo mais no barulho do local do teste. O controlador de velocidade (a única coisa que controla o impulso das hélices) tocou uma melodia no início, como os pilotos de drones gostam de fazer, que costumam usar o controlador de vôo Betaflight. Existe um voo beta? Parece que sim. Bem, ou algumas de suas variedades - há apenas cerca de meia dúzia de controladores de vôo abertos.
Flashbacks correram diante dos meus olhos, em algum lugar das profundezas do subconsciente, informações esquecidas sobre o firmware da Toyota para milhões de milhares de linhas de C e 2.000 variáveis globais surgiram ( Toyota: 81564 erros no código ).
Depois de revisar o código-fonte do Betaflight no github, ficou ainda pior e, quanto mais longe, pior . Suspeitamos que o código escrito por ele mesmo terá aproximadamente o mesmo nível. Isso significa que não há garantia e a capacidade não apenas de assegurar o funcionamento do código sem problemas, mas de compreender completamente seu trabalho. E este é o programa de controle para um dispositivo pesado com parafusos afiados que voa alto, rápido. Está ficando assustador: brinquedos são uma coisa, mas eu não gostaria de voar em um táxi assim.
Mas é possível de outra forma? Você pode, decidimos!
E eles decidiram provar isso. Uma quadrícula FPV acrobática baseada no STM32F405 foi comprada na Avito, uma placa Discovery para o mesmo controlador foi comprada para depuração e então tudo é como uma névoa.
Então, como poderia ser diferente?
Após uma rápida reunião, surgiram os seguintes pensamentos:
precisamos de uma abordagem diferente
, .
, - , . , [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 - plataforma para análise modular de código 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