Yrobot

Pochlubte se svým robotem ostatním!
Odpovědět
Baworek

Yrobot

Příspěvek od Baworek »

Zdravím.

Získal som túto hračku ktorá ma celkom trápi pretože autori projektu Yrobot nemajú čas sa mi venovať.

Potreboval by som od vás rady a hlavne ako kde sa mám pohnúť stým ak by sa niekto ujal a poradil mi na otázky ktoré by som potreboval..

Jedná sa o projekt Yrobot...
Veľa vecí nájdete priamo na ich webe: http://www.fribot.sk

Ja by som potreboval začiatočnícke rady ako sa sním rozhýbať a použiť senzory zo sonarom aby to išlo po akejsi dráhe...

Mojou úlohou je aby to dokázalo isť po tej čiare...
Ako vidno na videu: https://www.youtube.com/watch?v=Xa5u23TxDgk

Za všetky rady alebo pomoc ako začať ďakujem...
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Yrobot

Příspěvek od AlesH »

Ahoj.

Podíval jsem se na základní dokumenty k Yrobotu a připadá mi to pro začátečníky poměrně složité a nepřehledné. Určitě je to ale zvládnutelné, takže záleží jen na tom, kolik máš na to času (předpokládám že dost) a jaké jsou Tvoje předchozí zkušenosti (předpokládám že žádné).

Protože Yrobota nemám, mohu se pokusit Tě trochu směrovat alespoň obecně. Uvidíme, jestli to někam povede.

Doporučuji tedy zatím toto:
- zkontrolovat, jestli máš pro svoji úlohu všechno potřebné (Yrobota, extra modul ultrazvuku a snímání čáry, software a příručky z webu autorů, správný USB kabel)
- nainstalovat vývojové prostředí (postupovat přesně podle instalační příručky) [ověřit, že jde úspěšně spustit a dokončit konfiguraci]
- pochopit alespoň minimální základy programování (proměnné, větvení, cykly) [jde to i podle vzorových programů a hlavně vlastním experimentováním]
- pochopit postup programování Yrobota (spuštění Atmel Studia -> zápis/editace kódu -> překlad do HEX (build) -> spuštění AVRdude a nahrání HEX do robota přes USB kabel)
- napsat co nejjednodušší funkční program (např. blikání LEDkou) [možná na to bude v dodaném SW existovat nějaký hotový příklad]
- program přeložit a výsledek nahrát do robota
- pokud bude výsledek fungovat podle očekávání (např. LEDka bude blikat), můžeme jít na složitější věci

Jak je vidět, není to úplná legrace. U každého bodu se mohou vyskytnot nejrůznější problémy, takže ty je pak třeba popsat a řešit. Ideální je mít k tomu přímo vedle sebe zkušeného kamaráda. Pokud ho nemáš, tak můžeš pokračovat v dotazech třeba tady.

Přeji hodně štěstí a zábavy s Yrobotem.
Baworek

Re: Yrobot

Příspěvek od Baworek »

Ahoj.

Najprv sa ti chcem poďakovať za pomoc :) DIKI :D

Situácia je taká že čas na to mám zhruba dosť :) no najhoršie je na tom tá dokumentácia z ktorej som jeleň.
Predchádzajúce skúsenosti z robotikou nemám teda je to 1x čo také robím.
Aspoň málo ti objasním čo zvládnem:

V celom princípe programovania v Atmeli mám prehľad. Teda tak ako popisuje návod viem čo treba robiť ako to tam nahrať a tak...
Ku autíčku mám kompletne všetko čo potrebujem ako si spomínal... USB,Ten program vývojový, Senzory, Autíčka mam dve :)

Zo vzorových príkladov čo tam sú som sa naučil zostrojiť blikanie LED diod + pipnutie buzzera po stlačení tlačítka...
Dokonca by som ti ho vedel ukázať no potrebujem na to 1deň kým dobehnem do školy a vytiahnem to z notebooku... takže zajtra...
Ku ostatným veciam nemám ani tušenie alebo neviem ako stým pokračovať...

Nikdy som moc neštudoval programovanie v C teda pretože najlepšie sa to učí z praxe nie z teorie :D tak sa hrám z hotovými vecami a upravujem ich...
No nemyslím si že by to bol problém to je otázka pár dní že si to naštudujem z vecí čo mam k tomu (rýchlokurz C) čo je priložený na USB od toho Yrobota...
Vlastne všetko čo si mi troška popísal zvládnem :)
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Yrobot

Příspěvek od AlesH »

OK, výborně, jsi tedy vlastně rovnou na konci mého původního seznamu a můžeme jít dál. Vypadá to, že s HW žádné problémy nemáš, takže jde spíš o detaily programování.

Předpokládám, že cílem je naprogramovat sledovač čáry. Jde tedy o to, naučit se číst stav snímačů čáry, vyhodnotit je a podle výsledku ovládat jednotlivé motory. Osobně bych na to šel nějak takto:
- navrhnout základní jednoduchý algoritmus (např. jako ten na dalších řádcích) [cílem je držet čáru pod středním snímačem]
-- čára je pod levým snímačem => točit jen pravým kolem vpřed (levé zastavit) [točíme vlevo]
-- čára je pod středním snímačem => obě kola jedou vpřed [jedeme rovně]
-- čára je pod pravým snímačem => točit jen levým kolem vpřed (pravé zastavit) [točíme vpravo]
-- žádné čidlo nevidí čáru => točit se na místě? (jedno kolo vpřed, druhé vzad) [lepší je pamatovat si poslední pozici čáry, ale to může být až další vylepšení]
- připojit senzorový modul k robotu (HW)
- napsat program pro "zobrazení" stavu snímačů (např. pomocí dvou LED na robotu [levá/obě/pravá/žádná])
- napsat program na ověření ovládání motorů (střídavě po sekundě točit postupně jednotlivými koly oběma směry)
- spojit oba programy dohromady a podle stavu snímačů ovládat i motory (LED mohou indikovat stav také)

Upravování cizích programů je OK. Řídicí algoritmus lze postupně vylepšovat. Program je možné postupně doplňovat (např. o měření tím sonarem).

Pokud narazíš na problém, tak ho tu zkus co nejpřesněji popsat (ideálně s ukázkou části programu [je tu na to BB příkaz "Code"]). Pak to prodiskutujeme.
Baworek

Re: Yrobot

Příspěvek od Baworek »

Presne jediné čo je problém je programovanie...

Cieľom je aby to išlo po čiare za pomoci senzorov...
Sonar by mal detekovať prekážky pred sebou aby sa im vedel vyhnúť a našiel riešenie na ich obídenie. (To neviem na 100% či to potrebujem dám vedieť zajtra)

Problémik mám v tom že neviem ako začať teda neviem si predstaviť ako by som to napísal z toho čo opisuješ...
Pretože neviem ako fungujú motory a neviem ako fungujú tie senzory :D
Len Diody a buzzer viac nie :D
To je už na mňa iná káva a potreboval by som to vidieť už rozpísané sám neviem čo stým ešte...

Tu jeden napísal aj niečo no mne to nefunguje pretože mi chýba <int_def.h>

http://fribot.sk/yrobot/forums/topic/ri ... zivatelov/
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Yrobot

Příspěvek od AlesH »

Doporučuju postupovat pomalu, po menších krocích. Když Ti fungovalo blikání LED a sledování stavu tlačítka, tak jsi ve skutečnosti už minimálně viděl prakticky všechny principy, které potřebuješ pro sledovače čáry. Čtení stavů snímačů čáry bude podobné, jako čtení stavu tlačítka a ovládání motorů bude podobné, jako svícení LEDkou (i když motory jsou připojeny přes nějaký řadič, takže úplně stejné to nebude).

Hodně velká část programování mikrokontrolérů (jako tady AVR) je o nastavování a čtení stavů různých pinů procesoru. V C se to dělá pomocí názvů portů (např. PORTA) a nastavování/čtení bitů příslušných registrů pomocí bitových operátorů, jako např. |= (OR), &= (AND) nebo ^= (XOR, nebo také "toggle"). Na začátku programu, při inicializaci je nutno explicitně nastavit, které piny budou vstupní a které výstupní (nastavením obsahů řídicích registrů). To je třeba pochopit a vyzkoušet. Musíme tedy znát názvy potřebných portů a zapojení jednotlivých vývodů (pinů, bitů portu) v robotu. Lze to vyčíst z dokumentace "Getting Started", z dostupných schémat zapojení a z ukázkových příkladů. V "Getting Started" jsou i ukázky "podprogramů" pro "set bit" (sbi), "clear bit" (cbi)a "toggle bit" (tbi). Ty se budou určitě vždycky hodit.

Snímače čáry jsou podle dokumentace připojeny na vstupy PA0 až PA2 (ADC0 až ADC2) a dvě základní LED jsou připojeny na výstupy PA5 a PA6. Faktem je, že snímače čáry by asi měly být čteny analogově (tedy měřením hodnoty napětí pomocí interních AD převodníků v procesoru). Možná by ale pro začátek mohlo stačit pokusit se vyhodnotit jen absolutní digitální stavy příslušných vstupů (jako při čtení stavu tlačítka).

Zkus si tedy pro začátek upravit ukázkový program pro čtení tlačítka tak, aby místo tlačítka četl jeden ze snímačů čáry a podle výsledku "bzučel". Pokud to dokážeš, bude to super. Pokud nebudeš vědět, jak na to, tak sem zítra zkusím napsat svůj návrh testovacího programu (který ale nebudu schopen ověřit, protože nemám Yrobota).

Obecně je AVR program skoro vždycky v této základní struktuře:
- definice názvů a podprogramů [#define]
- inicializace [init] (nastavení pinů jako vstupy nebo výstupy, počáteční nastavení výstupů)
- hlavní program [main] (obvykle nekonečná smyčka, ve které se dokola čtou vstupy a podle nich nastavují výstupy)
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Yrobot

Příspěvek od AlesH »

Podíval jsem se dnes podrobněji na ty vzorové příklady (z webu autorů Yrobota) a řekl bych, že nejvhodnější bude vycházet z příkladu "Demo", protože tam je využita předdefinovaná "HAL vrstva robota" (HAL = Hardware Abstraction Layer), což je definice základních názvů a funkcí pro ovládání robota. Tu "těžkou práci" tak zde udělali autoři a programování Yrobota je pak už mnohem jednodušší a přehlednější. Je pro Tebe to "Demo" srozumitelné?
Baworek

Re: Yrobot

Příspěvek od Baworek »

Ahoj.

Na úvod sorry za čakanie, no mal som školu, prácu tak som nestíhal...

Skúsim si spraviť jednoduchý program na LED či ho ešte viem potom ti hodím zdrojový kod :)
Potom sa vrátim k tomu čo si písal aby som nepredbehol nič a tak zistím čo stým dokážem a ako som na tom.

Preto musíš isť na mňa pomaličky :D

To demo som mal XY krát zobrazené a študoval som čo tam je ...
No nikdy som nevenoval pozornosť čo všetko sa dá využiť bo som troška Jeleň s toho... :D
Baworek

Re: Yrobot

Příspěvek od Baworek »

Táákže prikladám zdrojové kódy:

Je to vlastne upravený vzorový príklad :)
Môžeš si to aj celé pozrieť pretože mam jeden problém...
http://uloz.to/x2ucyBkr/led-button-rar
Neviem načo je (int_def.h a Led_button.h ) moc nechápem čo to tam je a ako sa stým robí....

Takisto ak by si skontroloval či je to správne napísané ako a či nerobím chybu : LED_Buzzer_port... a if(is_low...)

Kód: Vybrat vše

/*
 * LED_Button.c
 *
 * Created: 20.2.2015 8:18:56
 *  Author: Baworek
 */ 


#include "Led_Button.h"

void init(void){
	//Tlačítka
	BUTTON_DDR=(0<<PB2)|(0<<PB3);
	BUTTON_PORT=(1<<PB2)|(1<<PB3);
	//LED a Buzzer
	LED_BUZZER_DDR=(1<<PA6)|(1<<PA5)|(1<<PA7);
	LED_BUZZER_PORT=(1<<PA6)|(1<<PA5)|(1<<PA7);
}

int main(void)
{
	init();
	while(1)
	{   
		// Tlačitko lave + Led7+ Buzzer
		if(is_low(PINB,PB2))
		{
			tbi(LED_BUZZER_PORT,PA5);
			while(is_low(PINB,PB2))
			{
				cbi(LED_BUZZER_PORT,PA7);
			}
			sbi(LED_BUZZER_PORT,PA7);
			_delay_ms(100);
		}
		// Tlačitko pravé + Led8 + Buzzer
		if(is_low(PINB,PB3))
		{
			tbi(LED_BUZZER_PORT,PA6);
			while(is_low(PINB,PB3))
			{
				cbi(LED_BUZZER_PORT,PA7);
			}
			sbi(LED_BUZZER_PORT,PA7);
			_delay_ms(100);
		}
		
		
	}
}
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Yrobot

Příspěvek od AlesH »

Ahoj, "podle mého oka" by ten Tvůj program měl solidně fungovat. Jedinou drobnost vidím v tom, že po uvolnění tlačítka není jasně definováno, jestli LED bude svítit nebo ne, takže to může skončit v obou stavech (bude záležet na okamžitém stavu LED při uvolnění tlačítka. Možná by ještě mohlo být problémem to, že po stisku jednoho tlačítka už nebude záležet na stisku toho druhého, takže při stisku obou tlačítek současně nebudou blikat obě LED, ale jenom jedna. Takhle mi to alespoň připadá podle mého chápání. Důležité ale je, jak se to chová ve skutečnosti (v Yrobotu).

Pro správný návrh programu pro Yrobota je třeba vědět, že tlačítka, LEDky i "bzučák" jsou zapojeny tak, že používají tzv. "negativní logiku", takže logické "jedničky" znamenají, že tlačítka nejsou stisknuta, LED nesvítí a bzučák je vypnutý, zatímco "nuly" znamenají stisknutí, svícení a bzučení.

Ty "header" soubory se běžně používají jako součást directivy #include, což v podstatě znamená, že obsah toho souboru se vloží do Tvého programu (na místo toho #include) a Ty už v další části svého programu můžeš používat to, co je definováno v tom "header" souboru. Obvykle se v těch "h" souborech definují názvy, funkce a makra, usnadňující čitelnost programu a zjednodušující jeho zápis. Takže například ten Tvůj "LED_Button.h" definuje pro další použití takové názvy jako "BUTTON_PORT" nebo "LED_BUZZER_PORT", ale také "makra" jako "sbi(x,y)" nebo "is_low(x,y)". Bez volání #include "Led_Button.h" bys tyto názvy ani makra nemohl ve svém dalším programu používat. Můžeš si všimnout, že i uvnitř toho "Led_Button.h" jsou další #include, jako např. "<avr/io.h>", kde jsou další definice názvů, jako třeba "PA5". Jinak bys ani tento název nemohl ve svém programu použít a musel bys místo něj používat příslušná "čísla", což by bylo velmi nepřehledné.

Soubor "int_def.h" umožňuje jen místo dlouhých názvů celočíselných typů (jako např. "unsigned long int") používat jejich zkratky (jako např. "u32"). Protože tyto zkratky ve svém programu nepoužíváš, tak je volání toho "int_def.h" zbytečné a klidně bys to mohl z programu vyhodit (a přesto by měl dál plně fungovat).

Jestli je Ti všechno výše uvedené jasné, tak můžeme pokračovat.
Odpovědět