-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs: Add drawing lecture and overall outline
- Loading branch information
Showing
6 changed files
with
179 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
Táborové lekce: želvička 2024 | ||
|
||
Technický blok: | ||
Instalace Jaculus a IDE (simulátor?) | ||
Bezdrát, ovládání přes bt (?) | ||
Mechanická výroba (?): skládání robota a mechanické zvedání tužky, nárazníky? | ||
Bločky? | ||
Diferenciální řízení | ||
Senzorika | ||
|
||
Základy programování: | ||
Struktura programu | ||
Proměnné a podmínky | ||
Události (první tři asi lze převzít z minulého tábora) | ||
Řídicí struktury (tady by se to pěkně ukazovalo v simulátoru s kreslící želvičkou) | ||
Řetězce | ||
Rekurze (?) | ||
OOP (?) | ||
|
||
Základy algoritmiky: | ||
Graf | ||
Fronta, zásobník | ||
Hledání nejkratší cesty | ||
|
||
Jízda v bludišti a po čáře - úvodní lekce | ||
|
||
Projekty: skupinky, soutěž o nejlepší čas | ||
|
||
Simulátor specifikace: | ||
- 2D vykreslování | ||
- Schopnost kreslit čáry a překážky, export a import JSON | ||
- Řízení robota: z klávesnice nebo jako popis instrukcí | ||
+ Šipky pro zrychlení: pravá-levá zvedne rychlost jednoho z motorů, dopředu a dozadu sníží rychlost obou současně (?) | ||
+ Pseudokód (JavaScript?) specifikující chování robota (e.g. když narazím na čáru nebo detekuju zeď - změním směr, nebo pomocí cyklů (událostí) kreslím obrázek) | ||
- Senzorika: | ||
+ Senzory čáry tak jak jsou na robotovi, přepínání mezi krajními a čárovými jedním tlačítkem | ||
+ Lidar: dám si ho na robota jak chci, ručně nasměruji, potom mi při požadavku čtení vrátí vzdálenost zdi kterou našel. | ||
Ve směru překážky mi vrací normální rozdělení kolem skutečné hodnoty, ve větší vzdálenosti s nějakou pravděpodobností selže. | ||
Hodnoty bych dal nastavitelné (pro nás, abychom to upravili na základě skutečných hodnot), ale dětem už bych je zafixoval a schoval. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
# Lekce 4.5 - želvička | ||
|
||
Tato lekce přímo navazuje na předchozí, a ukazuje praktické použití cyklů. | ||
|
||
## Želvička | ||
|
||
Cykly si vyzkoušíme v programu `Želvička (TODO název?)`. Program obsahuje zjednodušenou verzi reality, ve které nám bude jezdit želvička a přijímat příkazy na základě vnějších podnětů. | ||
|
||
// TODO Obrázek a link na simulátor | ||
|
||
Programy nám budou fungovat i na skutečném robotovi. Je však je důležité nejdříve si v simulaci ověřit funkčnost, aby se nám skutečný robot nezačal chovat neočekávaným způsobem a nezpůsobil sobě nebo nám škody. | ||
|
||
Program má textové okno, kam můžeme psát příkazy. Zatím jsou pro nás zajímavé příkazy (TODO přesná specifikace): | ||
|
||
`motors.rotate(deg)` - želvička se otočí o `deg` stupňů po směru hodinových ručiček | ||
`motors.move(dist)` - želvička se pohne dopředu o `dist` centimetrů | ||
|
||
Zatím pro jednoduchost uvažujme, že se želvička umí buď otáčet, nebo jet dopředu, ale ne obojí zároveň. V kapitole (TODO diferenciální řízení) si ukážeme pokročilejší způsob jak ji řídit. | ||
Jízdu obloukem zatím budeme řešit tak, že opakovaně popojedeme o maličký kousek, a poté se trošku otočíme. | ||
|
||
## Zadání A | ||
|
||
Napište program, který z výchozí pozice želvičky vyjede o kousek dopředu, objede čtverec, a vrátí se zase zpět. | ||
|
||
// TODO gif? nebo prostě ukázat na lekci | ||
|
||
??? note "Řešení" | ||
```ts | ||
import * as motors from "motors"; // ovládání motorů | ||
|
||
for (let i: number = 0; i < 4; i++) { // chování opakujeme 4x, pro každou stěnu čtverce | ||
motors.move(10); // posun dopředu o 10 cm | ||
motors.rotate(90); // rotace doprava o 90 stupňů | ||
} | ||
``` | ||
|
||
Toto chování můžeme také provést v reakci na událost. Modifikujte program tak, aby želvička projela čtverec až po stisknutí tlačítka. | ||
|
||
??? note "Řešení" | ||
```ts | ||
import * as gpio from "gpio"; | ||
import * as motors from "motors"; // ovládání motorů | ||
|
||
|
||
const BTN_PIN = 18; | ||
gpio.pinMode(BTN_PIN, gpio.PinMode.INPUT); // nastaví pin 18 jako vstup | ||
gpio.on("falling", BTN_PIN, () => { // reakce na stisk tlačítka | ||
for (let i: number = 0; i < 4; i++) { // chování opakujeme 4x, pro každou stěnu čtverce | ||
motors.move(10); // posun dopředu o 10 cm | ||
motors.rotate(90); // rotace doprava o 90 stupňů | ||
} | ||
}); | ||
``` | ||
|
||
### Kreslení | ||
|
||
Želvička kromě jízdy umí i kreslit. Má v sobě tužku, kterou může buď zvednout, nebo položit. | ||
Slouží na to příkaz: | ||
|
||
`motors.draw(pravdivostní hodnota)` - Tato funkce určuje, jestli má želvička kreslit, nebo ne. Hodnota `true` nám říká, že máme tužku položenou na zemi (tj. kreslíme), hodnota `false` že nekreslíme. | ||
This comment has been minimized.
Sorry, something went wrong. |
||
|
||
Na skutečném robotovi nám kreslení bude fungovat po nainstalování fixy podle (TODO manuální konstrukce). | ||
|
||
## Zadání B | ||
|
||
Vraťme se k předchozímu příkladu. Abychom věděli, že želvička skutečně projela čtverec, necháme ji nakreslit ho. Dopíšeme tedy program tak, aby po stisku tlačítka položila tužku, nakreslila čtverec, a následně tužku zase zvedla. | ||
|
||
??? note "Řešení" | ||
```ts | ||
import * as gpio from "gpio"; | ||
import * as motors from "motors"; // ovládání motorů | ||
|
||
|
||
const BTN_PIN = 18; | ||
gpio.pinMode(BTN_PIN, gpio.PinMode.INPUT); // nastaví pin 18 jako vstup | ||
gpio.on("falling", BTN_PIN, () => { // reakce na stisk tlačítka | ||
motors.draw(true); | ||
for (let i: number = 0; i < 4; i++) { // chování opakujeme 4x, pro každou stěnu čtverce | ||
motors.move(10); // posun dopředu o 10 cm | ||
motors.rotate(90); // rotace doprava o 90 stupňů | ||
} | ||
motors.draw(false); | ||
}); | ||
``` | ||
|
||
## Výstupní úkol V1 - Trojúhelník | ||
|
||
Napište kód, který způsobí, že želvička nakreslí místo čtverce trojúhelník. Rozměry trojúhelníku jsou na vás, jen musí skutečně jít o trojúhelník. | ||
|
||
!!! tip "Trojúhelníková nerovnost (nechť `a`, `b`, `c` jsou délky stran)"" | ||
```math | ||
a + b > c | ||
a + c > b | ||
b + c > a | ||
``` | ||
|
||
Na zjištění úhlu, o který je potřeba se otočit, můžeme použít kosínovu větu (Dodat jako knihovní funkci, tak jako barvičky). | ||
|
||
|
||
## Výstupní úkol V2 - Domeček | ||
|
||
Propojte dosavadní znalosti do jednoho kódu. | ||
Napište program, který způsobí že si želvička nakreslí domeček z čtverce a trojúhelníkové střechy. | ||
|
||
Následně želvička přestane kreslit, a vjede doprostřed domečku, kde zastaví. |
@xondika asi by se mi víc líbilo něco jako
pen.draw(pravdivostní hodnota)
nebo přímo přesservo
(nevím už jak se volá). Ale to je drobnost.