Difference between revisions of "Visual navigation for Acrob or SBOT robot with Android with camera ( Marek Kádek, Jana Sucháneková)"
(→Postup riešenia) |
|||
Line 1: | Line 1: | ||
− | |||
== Úvod == | == Úvod == | ||
Line 17: | Line 16: | ||
# Vytvoríme a nacvičíme neurónovú sieť | # Vytvoríme a nacvičíme neurónovú sieť | ||
+ | === Komunikácia === | ||
Ukážka nadviazania spojenia pomocou knižnice: | Ukážka nadviazania spojenia pomocou knižnice: | ||
Line 84: | Line 84: | ||
} | } | ||
− | Na tvorbu neurónovej | + | |
+ | === Otvorenie kamery === | ||
+ | |||
+ | |||
+ | === Neurónová sieť === | ||
+ | Na tvorbu neurónovej siete sme použili knižnicu [http://neuroph.sourceforge.net/ Neuroph]. Tam sme natrénovali, aby rozoznávala požadované tvary. Stretli sme sa s nasledovnými problémami: | ||
+ | # Najnovšie Neuroph štúdio beží pod Java 1.7, a využíva novšie funkcie knižnice. Po natrénovaní sme sa snažili načítať natrénovanú sieť na Androide, avšak neúspešne. | ||
+ | # Staršia verzia Neuroph štúdia má problém s ukladaním siete. Tento problém sme dlho hľadali a zistili sme, že sa jedná o bug aplikácie, ukladanie funguje iba veľmi zriedka (spočiatku uloží nenatrénovanú sieť, no natrénovanú neukladá). | ||
+ | # Sieť sa v androide musí načítať vo zvláštnom vlákne, aby sme mohli využiť väčšiu stack size: | ||
+ | |||
+ | |||
== Zdroje == | == Zdroje == | ||
# [http://www.amarino-toolkit.net/ Amarino toolkit] | # [http://www.amarino-toolkit.net/ Amarino toolkit] | ||
+ | # [http://neuroph.sourceforge.net/ Neuroph] |
Revision as of 11:18, 12 June 2013
Úvod
Cieľom projektu Editing Visual navigation for Acrob with Android with camera bolo vytvoriť robota, reagujúceho na vizuálne podnety v labyrinte pomocou snímania okolia kamerou mobilu s operačným systémom Android. Robot má byť spojený s telefónom pomocou protokolu bluetooth.
Postup riešenia
V prvej etape tvorby projektu bolo základom zložiť robota. (OBBBBBBBR)
V druhej etape sme vytvorili bluetooth spojenie medzi robotom a mobilným telefónom, pomocou knižnice Amarino - Android meets Andruino. Z rôznych zdrojov a diskusií na internete sme sa dozvedeli, že vytvorenie spojenia z android bluetooth na bluetooth modul robota je mnohokrát problémové a chyby sú ťažko odhaliteľné. Veľa rád práve smerovalo na použitie knižnice Amarino na riešenie tohoto problému.
Postup tvorby spojenia:
- Android zariadenie spárujeme s bluetooth modulom.
- Na android zariadenie nainštalujeme Amarino.
- Vytvoríme projekt v eclipse a do build path pridáme knižnicu.
- Vytvoríme a nacvičíme neurónovú sieť
Komunikácia
Ukážka nadviazania spojenia pomocou knižnice:
private static final String DEVICE_ADDRESS = "00:06:66:03:73:7B"; private ArduinoReceiver arduinoReceiver = new ArduinoReceiver(); @Override protected void onStart() { super.onStart(); registerReceiver(arduinoReceiver, new IntentFilter(AmarinoIntent.ACTION_RECEIVED)); Amarino.connect(this, DEVICE_ADDRESS); }
@Override protected void onStop() { super.onStop(); Amarino.disconnect(this, DEVICE_ADDRESS); unregisterReceiver(arduinoReceiver); }
public class ArduinoReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String data = null; final String address = intent.getStringExtra(AmarinoIntent.EXTRA_DEVICE_ADDRESS); final int dataType = intent.getIntExtra(AmarinoIntent.EXTRA_DATA_TYPE, -1); if (dataType == AmarinoIntent.STRING_EXTRA) { data = intent.getStringExtra(AmarinoIntent.EXTRA_DATA); if (data != null){ try { // tu mozeme spracovat data, ktore robot posle na mobil } catch (Exception e) { } } } }
Na odosielanie dát smerom na Arduino využívame funkciu
Amarino.sendDataToArduino(context, address, flag, data)
v našom prípade
Amarino.sendDataToArduino(MainActivity.this, DEVICE_ADDRESS, 'd', 5);
Na strane arduina potom pripravíme funkciu nasledovne: 1. includujeme hlavičku - #include <MeetAndroid.h> 2. v setupe nabindujeme 'd' na funkciu zatoč
MeetAndroid meetAndroid; void setup() { ... meetAndroid.registerFunction(zatoc, 'd'); ... }
3. pripravíme si funkciu zatoc
void zatoc(byte flag, byte numOfValues) { ... // kod na zatocenie ... }
4. do loopu pridáme kód na príjmanie a spracovanie správ
void loop() { ... meetAndroid.receive(); ... }
Otvorenie kamery
Neurónová sieť
Na tvorbu neurónovej siete sme použili knižnicu Neuroph. Tam sme natrénovali, aby rozoznávala požadované tvary. Stretli sme sa s nasledovnými problémami:
- Najnovšie Neuroph štúdio beží pod Java 1.7, a využíva novšie funkcie knižnice. Po natrénovaní sme sa snažili načítať natrénovanú sieť na Androide, avšak neúspešne.
- Staršia verzia Neuroph štúdia má problém s ukladaním siete. Tento problém sme dlho hľadali a zistili sme, že sa jedná o bug aplikácie, ukladanie funguje iba veľmi zriedka (spočiatku uloží nenatrénovanú sieť, no natrénovanú neukladá).
- Sieť sa v androide musí načítať vo zvláštnom vlákne, aby sme mohli využiť väčšiu stack size: