Programování
B3B35RO1| Ing. David Pařil - Python a BriVis pro Briana

Něco málo o mně
- 1. robosoutěž 2016
- Absolvent ČVUT FEL – Kybernetika a Robotika
- Lektor @ Katedra kybernetiky & Katedra řídicí techniky
- Lékařské přístroje – kardiochirurgie – Maastricht
- Organizátor a vedoucí Robotábora


NXT
2006

EV3
2013

NXT
2006

EV3
2013
SPIKE
2020


NXT
2006

EV3
2013
SPIKE
2020

BRIAN
2025


NXT
2006

EV3
2013
SPIKE
2020

BRIAN
2025


NXT
2006
EV3
2013
SPIKE
2020
BRIAN
2025
„Inteligentní“ kostka
2 dotykové senzory
Zvukový sensor
Světelný sensor
Ultrazvukový sensor
3 velké servo motory
„Inteligentní“ kostka
2 dotykové senzory
Gyroskop
Světelný sensor
Ultrazvukový sensor
2 velké servo motory
1 malý servo motor
„Inteligentní“ kostka
2 tlakové senzory
Gyroskop (integr.)
Světelný sensor
2 Ultrazvukové sens.
1 větší servo motor
2 malé servo motory
„Inteligentní“ kostka
2 dotykové senzory
Gyroskop
Světelný sensor
Ultrazvukový sensor
2 velké servo motory
1 malý servo motor





NXT
2006
EV3
2013
SPIKE
2020
BRIAN
2025




256 KB Flash
64 KB RAM
48 MHz
BT
16 MB Flash
64 MB RAM
300 MHz
BT + Ext. Wi-Fi
SD Karta
1 MB Flash
320 KB RAM
100 MHz
BT
16 MB Flash
8 MB RAM
Dualcore 240 MHz
Wifi + BT
RT coprocessor
USB-C, SD Karta
NXT
2006
EV3
2013
SPIKE
2020
BRIAN
2025

Barevný dotykový display
Rotační enkodér
Reproduktor
Headphone jack
SD Karta
USB-C Fastcharge
Motorporty
Senzorporty

Zapojte se
Nahlašte problémy s Brianem
- Vedoucímu na cvičení
- Sepsat a nahlásit příště
Připojte se k vývoji
- Dokumentace
- Tutoriály a výukové materiály
- Vývoj motorů / senzorů
- BriVis, BriCode, Bremote, ...
→ parildav@fel.cvut.cz | hlinovsm@fel.cvut.cz
Programování
Přehled podporovaných programovacích jazyků:
Platforma | Grafické | uPython | Java | C | ostatní |
---|---|---|---|---|---|
NXT | ✅ | ❌ | ⚠️ | ⚠️ | ⚠️ |
EV3 | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ |
SPIKE | ✅ | ✅ | ❌ | ❌ | ❌ |
BRIAN | ✅ | ✅ | ❌ | ❔ | ❌ |
✅ oficiální podpora
⚠️ neoficiální podpora
❌ nepodporováno
❔ možná v budoucnu
Nahrávání programu do Briana
Do Briana lze nahrát soubory:
- Přes kabel USB-C - chová se jako externí médium
- Přes Wi-Fi portál Bremote
Brian umí pustit libovolný uPython soubor
→ např. hello_world.py
s validní uPython syntaxí + BrianAPI.
print("Ahoj, tady Brian")
Brivis
Grafické programování pro Briana
- Jednoduché ovládání
- Přehledný seznam API bloků
- Real-time překlad do uPython
- Možnost ukládat/nahrávat kódy
brivis.fel.cvut.cz
brivis.voltavian.com

Bremote (Wi-Fi)
Umožňuje:
- Upravovat Python a Brivis programy
- Spouštět programy a vyčítat konzoli
- Ovládání motorů / senzorů
- ...
Typicky: 192.168._._ (viz Brian nastavení)

Realtime :o
Bremoting BriVis
Přes Bremote můžete otevřít Brivis v
Synchronizovaném režimu
BriVis se propisuje do Briana v reálném čase.
Obě karty musí zůstat otevřené!
(Doporučuji side-by-side s konzolí)




Bri... Python?
Libovolné IDE:
- VSCode - podpora BriCode ⭐️
- Pycharm
- Gedit
- vim
Lze si stáhnout balíček python typing:
https://voltavian.com/docs/brian/assets/brian.typing.zip
BriCode
Rozšíření do VS Code
- Umožňuje nahrát program
do Briana jedním klikem
(zatím pouze USB) - Umožňuje stáhnout Brian
typings (intellisense)

Brian Dokumentace
Dokumentace Briana, primárně Python API
🇨🇿 brian.fel.cvut.cz/cs/introduction.html
🇬🇧 brian.fel.cvut.cz/introduction.html

Aktualizace FW
Dokumentace Briana + nástroje pro aktualizaci a USB debug:
🇬🇧 voltavian.com/docs/brian/fwupdate/
*Firefox nepodporuje komunikaci s USB zařízeními
Metodické pokyny (příručka)
Vzorové projekty a příklady pro práci s Brianem.
Od prvních programů až po regulace.
Dočasný odkaz
Hardware
Kostka: LCD + tlačítka + reproduktory
4 Senzorové porty
4 Motorové porty

Využití tlačítek na kostce

START / STOP
Okamžité zastavení robota
Využití tlačítek na kostce

Využití tlačítek na kostce

Debugování

ZVUK
DISPLAY
BAREVNÁ TLAČÍTKA
Návod na stavbu základního robota
Základní buggy-drive robot se světelným senzorem na sledování čáry:
https://www.tinyurl.com/brian-line-follower

Motory
Servo motory
tj. DC (stejnosměrný) motor, převodovka a
Enkodér
děrované kolečko
2 svítící LED a 2 fotodiody

enkodér

Source: lastminuteengineers.com
NXT
2006
EV3
2013
SPIKE
2020



2ot/s
~20Ncm
2ot/s
20Ncm

3ot/s
8Ncm
2ot/s
8Ncm
2ot/s
3.5Ncm
1ot/s
1.8Ncm
BRIAN
2025
?
Endstop

Motor jako sensor
Dotykový senzor
Tlačítko – nedetekuje sílu, pouze zmáčknuto/nezmáčknuto (spike detekuje sílu)
Stisk musí být kolmý – jinak nefunguje spolehlivě
Využití:
- Detekce kolize
- Detekce hrany stolu
- Kalibrace




Dotykový senzor
Dotykový senzor


Světelný senzor
Měří intenzitu okolního osvětlení.
Umí si rozsvítit přídavnou červenou [nebo RGB] LED diodu.
Využití:
- Sledování čáry
- Detekce hrany
- Třízení dle barvy
- Detekce překážky


RGB neoficiální verze
Světelný senzor
Množství odraženého světla závisí na barvě objektu/světla, úhlu, …
Sensor si umí sám nasvítit předměty červenou barvou.

Světelný senzor
Trik: můžeme se senzorem blikat a porovnávat hodnoty s a bez přisvícení
→ získáme čistě hodnotu přisvícení*
(* zanedbaje nelinearity měření)

Sledování čáry

Odhad vzdálenosti


Detekce barvy

Ultrazvukový senzor
Vysílá ultrazvukový signál a čeká na jeho opětovné přijetí.
Z prodlevy mezi vysíláním a příjmem signálu vypočítá vzdálenost.
Citlivý na odrazivost překážky a úhel dopadu!!
Využití:
- Detekce překážek (10-255cm)
- Sledování stěny


Source: www.ubuy.vn
Ultrazvukový senzor
Source: www.hackster.io/ioarvanit/measuring-distance-with-sound-353c17

Ultrazvukový senzor
Source: www.hackster.io/ioarvanit/measuring-distance-with-sound-353c17

Ultrazvukový senzor
Source: www.hackster.io/ioarvanit/measuring-distance-with-sound-353c17

Gyroskop
Pouze jednoosý rotační akcelerometr.
Dvojitá integrace -> integrační chyby.
Potřebuje pravidelně kalibrovat!
Využití:
- Náklon robota
- Otočení robota (přesnější zatáčení)
Source: https://www.researchgate.net/publication/261417429_Modeling_and_simulation_of_the_MEMS_vibratory_gyroscope


Co budeme řešit:
Úlohy pro akademický rok 2025/26:
- Sledování čáry
- Sledování s objížděním
- Bludiště
- Sumo
- Tetris
~ 48 bodů
~ 14 bodů
~ 10 bodů
= 20 bodů
≤ 240 bodů

Sledování čáry
Délka dráhy ~9m
Body:
- Varianta A: 60 [60cm/s] až 20 [~14cm/s]
- Varianta B: 21 [45cm/s] až 8 [~13cm/s]
Pro běžná kola: 60cm/s ≈ 3,4 otáčky za sekundu
Pro velká kola: 60cm/s ≈ 2,3 otáčky za sekundu
(za předpokladu, že robot nezatáčí)



Bludiště
Až 40 políček (bodů)
Časový limit 90s

Sumo
Časový limit 60s

Tetris
Časový limit 90s
Až 240 bodů
Možnost účasti na Robosoutěži

Regulace
Řízení (regulace) je všude kolem nás…
Řízený systém využívá 1 nebo více regulátorů.
Základním principem regulace je, že se hodnota regulované veličiny měří a porovnává s požadovanou referenční hodnotou, a jejich rozdíl (tak zvaná regulační odchylka) se používá pro ovlivňování soustavy takovým způsobem, aby se regulační odchylka zmenšovala.
Source: cs.wikipedia.org/wiki/Regulace_(technika)
Regulátory

Základní princip regulace
Snažíme se minimalizovat chybu…

Základní princip regulace
Snažíme se minimalizovat chybu…

Bang Bang regulátor
Nejjednodušší typ regulace - dvoustavová regulace
Nastavujeme pouze
threshold

Bang Bang regulátor
Bang bang lze využít pouze v situacích, kdy přesnost a bezpečnost nehraje roli.
- Jednoduchý
- Levná implementace

Systémy využívající Bang Bang regulaci
- Odvětrávací/chladící systémy
- Teplotní řízení (domu, vody, 3D tiskárny)
- Čerpadla

Source: https://cerpadla.heureka.cz/gude-gs-7502-pl-94641
PID regulátor
Regulátor vhodný pro většinu využití. Nejpoužívanější druh regulace.
Proporcionálně
Integračně
Derivační
Regulátor
Nastavuje se pomocí koeficientů \(\textcolor{white}{K_P, K_I, K_D}\), které udávají, jak moc se daná složka regulátoru projevuje.
import brian.sensors as sensors
import brian.motors as motors
color = sensors.EV3.ColorSensorEV3(sensors.SensorPort.S3)
motor_l = motors.EV3LargeMotor(motors.MotorPort.A)
motor_l.wait_until_ready()
motor_r = motors.EV3LargeMotor(motors.MotorPort.B)
motor_r.wait_until_ready()
Kp = 4 # Otestovaná hodnota
WHITE = 80 # Změřené hodnoty
BLACK = 0
target = ( WHITE + BLACK ) / 2
while True:
lightValue = color.reflected_value()
error = lightValue - target
turn = Kp * error
motor_l.run_at_speed(200 + turn)
motor_r.run_at_speed(200 - turn)
Cvičení: Co můžeme zlepšit?
PID normalizace
Na vstupu a výstupu regulátoru chceme vždy hodnoty ve stejném rozmezí.
Špatná implementace:
- Vstup: odchylka v jednotkách světelného senzoru
- Výstup: zpomalení/zrychlení motoru
Dobrá implementace:
- Vstup: míra vyjetí z čáry
- Výstup: míra zatáčení
PID normalizace
Regulátor PID potřebuje vždy stejné rozmezí vstupů, aby dával stejné výstupy.
(na vstupu musí být vždy stejná data, aby se jeho chování neměnilo)

PID implementace
\(Err = chceme - máme\)
\(\textcolor{magenta}{P} = \textcolor{magenta}{K_P} \times Err\)
\(integrace = integrace + Err \times \delta t\)
\(\textcolor{magenta}{I} = \textcolor{magenta}{K_I} \times integrace\)
\(derivace = (Err - prevErr) / \delta t\)
\(\textcolor{magenta}{D} = \textcolor{magenta}{K_D} \times derivace\)
\(\textcolor{magenta}{out} = \textcolor{magenta}{P + I + D}\)
\(prevErr = Err\)
V uPythonu time.time()
je int!
Lze využít:
- time.ticks_ms()
- time.ticks_us()
- time.ticks_diff(t1, t2)
Na jaké frekvenci má běžet naše PID smyčka a proč?
PID integrace
Integrační složka může při dlouho trvající chybě (zatáčka) nabývat obřích hodnot.
Anti-windup mechanismy zamezují integrační složce nabýt nebezpečných rozměrů.
Což přidává další parametr do regulátoru.
PID Vlastnosti
Výhody:
- Dostačující pro většinu aplikací
- Konstanty lze většinou nalézt metodou Hokus Pokus™
- Jednoduchá implementace
Nevýhody:
- Neumí kompenzovat zpoždění vstup-výstup
- Velice pokročilé systémy potřebují pokročilejší regulaci
Odezva regulátoru

Odezva regulátoru

Odezva regulátoru

Děkuji za pozornost
Ing. David Pařil
ROB_01
By David Pařil
ROB_01
- 5