Sunteți pe pagina 1din 8

Textul si imaginile din acest document sunt licentiate

Attribution-NonCommercial-NoDerivs
CC BY-NC-ND

Codul sursa din acest document este licentiat


Public-Domain

Esti liber sa distribui acest document prin orice mijloace consideri (email, publicare pe website /
blog, printare, sau orice alt mijloc), atat timp cat nu aduci nici un fel de modificari acestuia. Codul
sursa din acest document poate fi utilizat in orice fel de scop, de natura comerciala sau nu, fara nici
un fel de limitari.
WiFi Car Revolutions
(partea a II-a)

Recunoaterea limbajului natural a devenit


ncet, ncet o funcie obinuit prin care putem
comanda diverse dispozitive inteligente
precum telefonul mobil sau calculatorul de
bord al automobilul personal. Este posibil s
implementm o funcionalitate asemnntoare
pentru WiFi Car? Este posibil s revoluionm
telecomanzile RC uzuale i s adugm
comand prin limbaj natural?

Pentru a face acest lucru vom exploata conexiunea de reea, prezentat n prima parte,
pentru a conecta WiFi Car la un serviciu cloud de recunoatere vocal. Puterea de calcul
a plcii de dezvoltare nu permite implementarea algoritmului de recunoatere vocal
local, pe placa de dezvoltare a WiFi Car, din aceast cauz vom apela la resursele de
calcul a unui sistem de cloud. Sistemul de cloud utilizat este IBM BlueMixTM, serviciu
cloud comercial dar cu posibilitatea de evaluare gratuit de 30 de zile fr a fi nevoie
s introducem informaii legate de un card bancar. Mai mult dect att, n anumite
centre universitare din ar accesul studenilor i profesorilor este gratuit nelimitat.
Pentru familiarizarea cu serviciul de cloud IBM BlueMixTM se poate revedea i lecia
How sunny is the Blue? (I, II). nregistrarea pe platform se face la adresa:

Sign up for IBM Bluemix


https://console.ng.bluemix.net/registration/

Dup nregistrare i conectare la platform se va naviga n zona de aplicaii i se va


crea o aplicaie nou (Create Application) de tipul Boilerplates / Internet of Things
Platform Starter:

https://www.robofun.ro/forum/
Se va alege un nume pentru aplicaie (n cadrul leciei se va utiliza numele WCR dar
putei alege orice alt nume) i se va da comanda (Create) de alocare de resurse cloud
pentru aceast aplicaie nou. Alocarea de resurse poate dura cteva minute sau zeci de
minute. Finalizarea operaiei este marcat de schimbarea strii aplicaiei n Running.

n plus, trebuie s adugm aplicaiei noastre un serviciu de tip Speech to Text (serviciul
de recunoatere vocal): Services / Watson / Speech to Text. Noul serviciu trebuie
asociat cu aplicaia creat anterior (Conections / Create connection):

Dup definirea conexiunii aplicaia WCR se va restarta. Pentru a putea conecta WiFi
Car la aplicaia nou creat trebuie s mergem n Dashboard-ul de administrare a
serviciului WCR-iotf-service (Connect your devices / Launch dashboard). Comanda
ne va direciona ctre portalul IBM Watson IoT Platform unde vom crea un nou
dispozitiv (Devices / Add Device). Nu trebuie s completm dect tipul dipozitivului
(n exemplul nostru Adafruit_HUZZAH) i numele dispozitivului (n exemplul nostru
WCR). La finalizarea adugrii noului dispozitiv trebuie s notm informaiile de
autentificare furnizate de platform pentru a putea s le folosim n programul
https://www.robofun.ro/forum/
dispozitivului (Organization ID, Device Type, Device ID, Authentication Method i
Authentication Token).

Urmtorul pas este scrierea aplicaie Node-RED care va face conversia ntre comenzile
vocale date de utilizator i comenzile WiFi Car. Vom naviga la adresa
https://wcr.mybluemix.net/ (adresa difer n funcie de numele ales al aplicaiei) i vom
accesa Node-RED flow editor (editorul vizual ce ne va permite scrierea aplicaiei).
Aplicaia are diagrama urmtoarea:

Pentru a putea utiliza elementul de intrare de tip microfon trebuie s instalm


urmtoarele dou extensii Node-RED: node-red-contrib-browser-utils i node-red-
contrib-media-utils (extensiile se instaleaz accesnd din meniul principal opiunea
Manage palette). Elementul de intrare de tip microphone va permite nregistrea
comenzilor vocale direct din browser i le va transmite automat ctre serviciul de
recunoatere vocal Speach to Text. Ieirea serviciului de recunoatere vocal se va
conecta la un bloc decizional cu urmtoarea configuraie:

https://www.robofun.ro/forum/
Rolul blocului decizional este de a identifica comenzile vocale transcrise de serviciul
de recunoatere vocal (forward, backward, stop, left, right). Din pcate serviciul de
recunoatere vocal nu este disponibil n limba romn. Ieirele blocului decizional
conduc la blocuri distincte de construire a comenzii n format JSON ctre serviciul IoT:

Serviciul IoT care va trimite, prin intermediul serviciului IBM Watson, comenzile ctre
WiFi Car va avea urmtoarea configuraie:

https://www.robofun.ro/forum/
Pentru siguran am adugat un bloc de intrare pentru comanda de STOP care permite
comanda manual pentru cazuri de urgen. Restul componentelor din aplicaie sunt
utile doar pentru depanare: blocul msg.transcription va afia textul de ieire al
serviciului de recunoatere vocal iar blocurile WCR + msg.payload ne arat mesajele
ce ajung efectiv la serviciul IoT.

Ultimul pas al implementrii este reprogramarea modulului Adafruit HUZZAH pentru


a prelua comenzile de la serviciul IBM Watson (pentru reprogramare modulul trebuie
deconectat de la placa Arduino Uno). Programul a fost dezvoltat i testat utiliznd
Arduino IDE 1.8.1 i extensia esp8266 2.3.0 precum i bibliotecile MQTT 1.11.0 i
ArduinoJson 5.8.3.

#include <ESP8266WiFi.h>
#include <MQTTClient.h>
#include <ArduinoJson.h>

Programul trebuie particularizat cu datele de conectare la reeaua WiFi local (ssid i


password) precum i cu datele de autentificare la serviciul de cloud (OrgID, DeviceT,
DeviceID, AuthenticationToken i OrgID):

const char* ssid = "";


const char* password = "";

WiFiClient net;
MQTTClient client;

void connect_mqtt() {
while (!client.connect("d:OrgID:DeviceT:DeviceID", \
"use-token-auth","AuthenticationToken")) {
delay(1000);
}
client.subscribe("iot-2/cmd/+/fmt/json");
}

void setup() {
Serial.begin(9600);
https://www.robofun.ro/forum/
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500); }
client.begin("OrgID.messaging.internetofthings. \
ibmcloud.com", 1883, net);
connect_mqtt();
}

void loop() {
client.loop();
delay(10);
if (!client.connected()) {
connect_mqtt();
}
}

void messageReceived(String topic, String payload, char *


bytes, unsigned int length) {
StaticJsonBuffer<200> jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(payload);
if (!root.success()) {
return;
}
String command = root["command"];
Serial.println(command);
}

Programul de pe placa Arduino Uno rmne neschimbat. Dup reconectarea modulului


Adafruit HUZZAH la WiFi Car putem s testm comanda vocal. Din aplicaia Node-
RED se apas butonul blocului microphone i se d comanda (se nregistreaz o
comand vocal care s conin unul dintre cuvintele cheie forward, backward, stop,
left sau right). Atenie, trebuie s permitem la nivel de browser ca aplicaia Node-RED
s acceseze dispozitivul hardware microfon al sistemului de calcul. Dup rostirea

https://www.robofun.ro/forum/
comenzii se apas din nou butonul blocului microphone pentru a opri nregistrarea i a
trimite comanda vocal ctre serviciul de recunoatere vocal.

n captura de ecran anterior se pot vedea mesajele din consola debug pentru o
comand vocal (right) i o comand manual (stop). Pentru comanda vocal se poate
vedea att recunoaterea vocal a comenzii ct i mesajul obinut ca feedback de la
serviciul IoT. Pentru comanda manual avem doar feedback-ul afiat.

Bineneles, ca alternativ la comanda vocal din browser exist posibilitatea contruirii


unui sistem portabil de nregistrare vocal (telecomand vocal). Proiectul de mai jos
exploreaz aceast posibilitate utiliznd o plac de dezvoltare Raspberry Pi:

Control your Robosapien Humanoid Robot using IBM Watson IoT Platform,
Raspberry Pi and Node-RED (Part 1)
https://developer.ibm.com/recipes/tutorials/control-your-robosapien-humanoid-robot-using-ibm-watson-iot-platform-raspberry-pi-and-nodered/

Control the Humanoid Robot with voice commands using IBM Watson Speech to Text
service (Part 2)
https://developer.ibm.com/recipes/tutorials/control-the-humanoid-robot-with-voice-commands-using-ibm-watson-speech-to-text-service-part-2/

https://www.robofun.ro/forum/

S-ar putea să vă placă și