Academia Tehnică Militară Ferdinand I [304495]
ROMÂNIA
Ministerul Apărării Naționale
Academia Tehnică Militară „Ferdinand I”
Facultatea de Comunicații și Sisteme Electronice pentru Apărare și Securitate
DISERTAȚIE
„Detecția video a modificărilor unui sit
cu ajutorul unui robot terestru”
Lt. ing. [anonimizat]:
Lt. col. conf. univ. dr. ing. MOLDER CRISTIAN
BUCUREȘTI 2020
INTRODUCERE
În ultimii ani roboții sunt din ce în ce mai folosiți pe șantierele de construcții. [anonimizat], [anonimizat]. [anonimizat], [anonimizat], acestea nu sunt respectate. Se arată că 98 % [anonimizat], cu 80 de procente bugetul și cu 20 [anonimizat] o productivitate scăzută. [10]
Activitățile care ocupă mult timp sunt inspecția obligatorie a [anonimizat] a unui proiect. [anonimizat], [anonimizat], analizând și măsurând dacă totul este în regulă. [anonimizat]. [10]
Prima dată robotul parcurge un traseu pentru cartografiere și apoi pentru analiza stadiului construcției. [anonimizat] (senzori, camere etc.). [10]
Potențialul unui asemenea robot poate fi concretizat și în domeniul militar. [anonimizat]. Astfel robotul poate emite în timp real semnle de avertizare pentru evitarea producerii unei catastrofe.
COMPONENTE HARDWARE
Modulul Raspberry Pi 4 Model B
Raspberry Pi 4 Model B este cel mai recent produs din gama populară de computere Raspberry Pi. Oferă o [anonimizat], memorie și conectivitate în comparație cu generația anterioară Raspberry Pi 3 Model B +, păstrând în același timp compatibilitatea și un consum similar de energie. [anonimizat] 4 Model B [anonimizat] x86.[1]
[anonimizat] 64 [anonimizat]-display la rezoluții de până la 4K printr-o [anonimizat], până la 4 [anonimizat]-band 2.4 / 5.0 GHz, Bluetooth 5.0, [anonimizat] 3.0 și PoE (Power over Ethernet).[1]
Figura 2.1 Raspberry Pi 4 Model B [1]
Figura 2.2 Dimensiuni Raspberry Pi 4 Model B [mm] [1]
Specificațiile tehnice sunt prezentate în tabelul 2.1.
Tabelul 2.1 Specificații tehnice Raspberry Pi 4 Model B [1]
Procesorul BCM2711 este utilizat în Raspberry Pi 4 Model B. Arhitectura BCM2711 este o îmbunătățire considerabilă a celei utilizate la modelele Pi anterioare. [anonimizat] BCM2837, dar utilizează nucleul ARM A72 mai puternic. [2]
Nucleele ARM sunt capabile să funcționeze până la 1,5 GHz, ceea ce face ca Pi 4 să fie cu aproximativ 50% mai rapid decât Raspberry Pi 3B +. Nucleele ARM sunt pe 64 de biți și există o nouă unitate de gestionare a memoriei, ceea ce înseamnă că poate accesa mai multă memorie decât versiunile anterioare. [2]
Din punct de vedere fizic, există mai multe versiuni de Raspberry Pi, dar principalele diferențe se evidențiază în tabelul 2.2.
Tabelul 2.2 Comparație Raspberry Pi 4 Model B – Raspberry Pi 3 model B+ [3]
Camera video Omni Vision OV5647
OmniVision OV5647 a fost primul modul oficial de camere lansat pentru Raspberry Pi în anul 2013. Dispune de un senzor CMOS de 5 megapixeli cu focus fix, care oferă o rezoluție maximă de 2592×1944 și se conectează la Raspberry Pi prin magistrala CSI2 folosind un cablu panglică. [4]
Figura 2.3 Camera Omni Vision OV5647 [4]
Mai jos se poate vedea o defalcare completă a rezoluțiilor și atributelor pe care le suportă această cameră în diferite moduri de senzor:
Tabelul 2.3 Rezoluții Camera Omni Vision OV5647 [4]
Kit Robot
Kit-ul robot conține următoarele componente [5]:
două șasiuri;
patru roti cu diametrul de 65 mm;
patru motoare DC cu reductor;
suporturi motor;
șuruburi și piulițe necesare pentru asamblare.
Figura 2.4 Kit robot [5]
Motorul DC cu reductor are următoarele caracteristici [6]:
Reducție motor: 1:48;
Tensiune de alimentare motor: 3V – 6V DC;
Cuplu: 0.8 kg * cm;
RPM: 3V: 125rpm, 5V: 200rpm, 6V: 230rpm;
Curent: 3V: 60mA, 5V: 100mA, 6V: 120mA.
Figura 2.5 Motorul DC cu roata montată [6]
Punte H – L298
Punțile H reprezintă circuite electronice care modifică impulsurile PWM, astfel:
• Modifică amplitudinea din nivelul logic VDD în nivelul tensiunii motorului VMOT; [7]
• Amplifică valoarea curentul la ordinul sutelor de mA sau A. [7]
Exemple uzuale de punți H sunt circuitele integrate următoare:
• L293 – patru semi-punți H cu VMOT = 4,5 … 36 V și IMAX = 600 mA pe o semi-punte; [7]
• L298 – dublă punte H cu VMOT = 7,5 … 46 V și IMAX = 2 A pe o punte. [7]
Figura 2.6 Circuitul integrat L298 [7]
În figura 2.6 se prezintă un exemplu de circuit pentru comanda motoarelor de curent continuu cu perii utilizând circuitul integrat L298. Circuitul conține următoarele terminale:
• 12V – tensiunea de alimentare a motorului de curent continuu, poate fi cuprinsă între valorile de 7,5 și 12 V; [7]
• 5V – tensiunea de alimentare a circuitului logic; [7]
• GND – linia comună de masă a circuitului logic și al circuitului motorului; [7]
• OUT1, OUT2 – liniile de conectare a unui motor de curent continuu (motorul A); [7]
• OUT3, OUT4 – liniile de conectare a unui motor de curent continuu (motorul B); [7]
• ENA – linie de activare a comenzii motorului A; [7]
• ENB – linie de activare a comenzii motorului B; [7]
• IN1, IN2 – liniile semnalelor de comandă ale motorului de curent continuu A; [7]
• IN3, IN4 – liniile semnalelor de comandă ale motorului de curent continuu B; [7]
• J5 – jumper pentru selectarea tensiunii unice de alimentare. Atunci când este cuplat, tensiunea de 5 V necesară circuitului logic va fi convertită din tensiunea de la intrarea 12 V prin intermediul unui regulator de tensiune liniar 78M05. [7]
Atunci când J5 este cuplat se interzice conectarea unei tensiuni externe la terminalul 5V.
Pentru comanda unui motor de curent continuu cu perii conectat la conectorul J3 (ieșirile OUT1 și OUT2) sunt posibile configurațiile prezentate în tabelul 2.4. [7]
[7] (2.1)
De remarcat faptul că rotația într-un sens este dată de tensiunea de ieșire care este direct proporțională cu factorul de umplere η al semnalului logic de comandă (relația 2.1).
Tabelul 2.4 Moduri de comandă a unui motor BDC cu circuitul L298 [7]
Bateria externă Hama Power Pack X20
Pentru alimentarea întregului proiect s-a ales bateria externă Hama Power Pack X20, cu următoarele specificații [15]:
Număr ieșiri: două;
Input micro USB: 5V-2A;
Input USB-C: 5V-2.6A;
Output USB: 5V-3A;
Output USB-C: 5V-3A;
Output total: 3A/15W;
Tip baterie: 3.6V / Li-Ion;
Capacitate: 20000 mAh;
Dimensiuni: 171×81.5×23 mm;
Greutate: 419 grame.
Figura 2.7 Bateria externă Hama Power Pack X20 [15]
Router-ul Wireless TP-LINK
Pentru realizarea comunicației wireless între modulul Raspberry Pi 4 și soft-ul MATLAB vom utiliza un router wireless. Router-ul va genera o adresă IP individuală pentru fiecare dispozitiv conectat la acesta.
Figura 2.8 TP-LINK Model TL-WR841N [14]
Caracteristicile tehnice ale router-ului TP-LINK sunt prezentate în tabelul 2.5.
Tabelul 2.5 Caracteristici tehnice TP-LINK Model TL-WR841N [14]
COMPONENTE SOFTWARE
Matlab
MATLAB (MATrix LABoratory) este un program interactiv, dezvoltat de firma Math Works Inc., fiind destinat, în special, prelucrării numerice a datelor furnizate sub formă vectorială sau matriceală. [8]
Matlab integrează calculul numeric cu vizualizarea rezultatelor și programarea, într-un mediu flexibil și deschis dezvoltărilor ulterioare. [8]
Matlab este destinat în mod particular prelucrării numerice (sau digitale) a semnalelor, modelării, simulării și proiectării sistemelor numerice complexe, precum și dezvoltării de algoritmi de prelucrare a seriilor de date, imaginilor sau câmpurilor multidimensionale de date. [8]
Subsistemele de prelucrare (Toolbox-urile) extind funcțiile Matlab-ului și realizează operațiuni dedicate unor domenii specifice de prelucrare numerică, cum ar fi: prelucrarea imaginilor, optimizarea, statistica, identificarea sau controlul sistemelor, studiul rețelelor neurale, a sistemelor fuzzy etc. [8]
Matlab este un sistem interactiv, al cărui element de bază este o matrice care nu necesită o dimensionare explicită. Aceasta ajută în rezolvarea a numeroase probleme de calcul tehnic, în special pentru cele bazate pe formalismul matricial (și vectorial), permițând scrierea programelor într-un limbaj scalar. [8]
Matlab-ul a evoluat în ultimul timp, mai ales prin utilizarea sa în mediul universitar, ca instrument educațional pentru cursuri de matematică, inginerie și știință. În egală măsură, Matlab-ul se dovedește deosebit de eficient în cercetarea științifică și dezvoltarea tehnologică în mediul industrial. [8]
Lansarea în execuție a programului Matlab se face din Windows. După lansarea în execuție, programul Matlab intră în „modul de comanda”, afișând prompterul „ >>” și așteptând introducerea unei comenzi de către utilizator. [8]
În afara modului de lucru „în linie de comanda”, în Matlab se pot crea fișiere ce conțin instrucțiuni Matlab, numite fișiere-M (deoarece au extensia „.m”). Un program Matlab poate fi scris sub forma fișierelor „script” sau a fișierelor „function”. Ambele tipuri de fișiere sunt scrise în format ASCII, iar algoritmul care a fost implementat poate fi urmărit cu foarte mare ușurință, dacă se cunosc convențiile și sintaxa Matlab. Aceste tipuri de fișiere, obligatoriu cu extensia „.m”, permit crearea unor funcții noi care le pot completa pe cele deja existente. Prin această facilitate, Matlab-ul poate fi extins la aplicații specifice utilizatorului, care are posibilitatea să scrie noi proceduri. [8]
Fișiere script
Un fișier „script” este un fișier care conține o secvență de comenzi Matlab. Prin apelarea numelului fișierului, se execută secvența Matlab conținută în acesta. După execuția completă a unui fișier script, variabilele cu care acesta a operat rămân în zona de memorie a aplicației. Aceste fișiere nu permit integrarea în programe mari, realizate pe principiul modularizării. Fișierele script sunt folosite pentru rezolvarea unor probleme care cer comenzi succesive atât de lungi, încât ar putea deveni greoaie pentru lucrul în mod iterativ, adică în modul de lucru linie de comandă. [8]
Figura 3.1 MATLAB – exemplu de fișier script
Fișiere funcție
Dacă prima linie a fișierului-M conține cuvântul „function”, fișierul respectiv este declarat ca fișier funcție. O funcție diferă de un fișier „script” prin faptul că poate lucra cu argumente. Variabilele definite și manipulate în interiorul fișierului funcție sunt localizate la nivelul acestuia. Prin urmare, la terminarea execuției unei funcții, în memoria calculatorului nu rămân decât variabilele de ieșire ale acesteia. [8]
Raspbian
Raspbian este sistemul de operare recomandat pentru utilizare normală pe un Raspberry Pi. Raspbian este un sistem de operare gratuit și optimizat pentru hardware-ul Raspberry Pi. Raspbian vine cu peste 35.000 de pachete: software precompilate și încorporate într-un format frumos pentru instalarea ușoară pe Raspberry Pi. [9]
Figura 3.2 Desktop Raspbian [9]
Dacă se utilizează desktop-ul Raspbian, atunci se poate utiliza comanda „sudo raspi-config” scrisă în linia de comandă pentru a configura Raspberry Pi. Astfel se va deschide un ecran albastru cu opțiuni într-o casetă gri în centru (figura 3.3). [9]
Figura 3.3 raspi-config [9]
Meniul de configurare al Raspberry Pi descries în figura…….. presupune:
Change User Password
Această opțiune oferă posibilitatea de a schimba parola de acces a sistemului de operare. Utilizatorul implicit de pe Raspbian este „pi” cu parola „raspberry”. [9]
Network Options
Din acest submeniu se poate seta numele gazdei, parola Wi-Fi sau se poate activa / dezactiva numele interfețelor de rețea. [9]
Boot Options
De aici se poate schimba ce se întâmplă atunci când pornește Raspberry Pi. Se utilizează această opțiune pentru a schimba preferința de pornire la linia de comandă sau pe desktop. [9]
Localisation Options
Submeniul de localizare oferă aceste opțiuni din care se poate alege: amplasarea tastaturii, fusul orar, localizarea și codul de țară Wi-Fi. Toate opțiunile din acest submeniu sunt implicite în varianta britanică. [9]
Interfacing Options
În acest submeniu există următoarele opțiuni de activare / dezactivare: Cameră, SSH, VNC, SPI, I2C, Serial, 1-wire și pinii GPIO. [9]
Overclock
Există posibilitatea de a face overclock. Frecvența implicită este de 700 MHz, dar poate fi configurată la 1000 MHz. [9]
Advanced Options
Există posibilitatea de a seta niște opțiuni avansate: Expand Filesystem, Overscan, Memory split, Audio, Resolution, Pixel Doubling, GL Driver, GL (Full KMS), GL (Fake KMS), Legacy. [9]
Update
Prin intermediul acestui submeniu se poate actualiza Raspbian la cea mai recentă versiune. [9]
About raspi-config
Dacă se va selecta acest submeniu, se va afișa următorul mesaj: „ Acest instrument oferă un mod simplu de a face configurația inițială a Raspberry Pi. Deși poate fi rulat în orice moment, unele dintre opțiuni pot avea dificultăți dacă personalizați puternic instalarea ”. [9]
IMPLEMENTAREA PRACTICĂ A ROBOTULUI DE DETECȚIE A DIFERENȚELOR ÎNTR-UN PERIMETRU
Descrierea procedurii de detecție a diferențelor într-un perimetru
Scopul proiectului este detecția prin diferență de imagine a diferențelor care ar putea să apară într-un cadru de imagine. Robotul este propulsat de patru motoare DC și folosesște o cameră video pentru achiziția imaginilor. Prin intermediul unui router wireless se realizează comunicația dintre modulul Raspberry Pi 4 Model B și soft-ul MATLAB pentru controlul robotului și pentru transmiterea wireless a imaginilor ce vor fi prelucrate ulterior.
Pentru simplificarea demonstrației, robotul se deplasează în linie dreaptă pe o distanță de câțiva metri. Pentru a detecta diferențele din perimetru, prima dată robotul execută o trecere pentru a avea o referință a spațiului în care se execută detecția.
Pentru a se face detecția în timp real se compară fiecare cadru de imagine cu cadrul de imagine de referință printr-un procedeu numit „image registration” – este o tehnică de procesare a imaginii utilizată pentru alinierea mai multor scene într-o singură imagine integrată. Ne ajută să depășim probleme cum ar fi rotația imaginilor, scala și unghiurile care sunt comune atunci când se suprapun imagini. [11]
Configurarea Raspberry Pi 4 Model B
Raspberry Pi 4 Model B are nevoie de un card micro-SD pentru a stoca toate fișierele sale și sistemul de operare Raspbian. Cardul micro-SD tebuie să aibe o capacitate de cel puțin 8 GB. [12]
Figura 4.1 Inserare card [12]
După instalarea sistemului de operare Raspbian, pentru a începe să folosim Raspberry Pi, avem nevoie de o tastatură și un mouse USB. Pentru a vizualiza mediul desktop Raspbian, avem nevoie de un ecran și de un cablu pentru a conecta ecranul și Raspberry Pi. Ecranul poate fi un televizor sau un monitor de computer. Raspberry Pi are două porturi de ieșire micro-HDMI care sunt compatibile cu portul HDMI al majorității televizoarelor și monitoarelor de calculator. [12]
Figura 4.2 Conectare periferice Raspberry Pi 4 [12]
După conectarea alimentării ar trebui să vedem un LED roșu aprins pe Raspberry Pi, care indică faptul că Raspberry Pi este conectat la alimentare. Pe măsură ce sistemul pornește (aceasta se numește și bootare), vom vedea apariția „zmeurii” în colțul din stânga sus al ecranului. După câteva secunde, va apărea desktop-ul Raspbian (figura 3.3). [12]
Figura 4.3 Pornire Raspbian [12]
Când pornim Raspberry Pi pentru prima dată, aplicația „Welcome to Raspberry Pi” va apărea și ne va ghida pentru configurarea inițială. Aici vom seta țara, limba, fusul orar, noua parolă a Raspberry Pi și ne vom conecta la router-ul wireless (Raspberry Pi va memora numele și parola router-ului). După finalizarea configurației se va face o repornire a Raspberry Pi. [12]
Conectarea Raspberry Pi 4 cu soft-ul MATLAB
Mai întâi se realizează conexiunea fizică cu ajutorul unui cablu ethernet între Raspberry Pi și laptop. Apoi deschidem MATLAB, facem clic pe butonul Add-Ons în secțiunea HOME a meniului din partea de sus. Facem clic pe meniul derulant și apoi facem clic pe butonul Manage Add-Ons. [13]
Figura 4.4 Butonul Add-Ons în secțiunea HOME MATLAB
Se va deschide fereastra Add-Ons Manager și vom selecta opțiunea “MATLAB Support Packages for Raspberry Pi Hardware “, așa cum se arată în figura 4.5. [13]
Figura 4.5 fereastra Add-Ons Manager
Se va deschide o fereastră în care trebuie să alegem modelul de Raspberry Pi. Pentru Raspberry Pi 4 Model B Mathworks încă nu a lansat un sistem de operare și astfel vom alege cea mai apropiată versiune, Raspberry Pi 3 Model B+. [13]
Figura 4.6 Selectare model Raspberry Pi
Acum vom selecta opțiunea, adică „Customize the existing operating system running on my hardware”, deoarece nu pornim un sistem de operare nou, ci personalizăm sistemul de operare existent. [13]
Figura 4.7 Personalizare sistem existent Raspberry
Apoi se va deschide o fereastră în care trebuie să introducem adresa IP a dispozitivului, numele de utilizator și parola dispozitivului, apoi facem clic pe butonul „Test connection”. [13]
Figura 4.8 Testare conexiune MATLAB-Raspberry Pi
După testarea conexiunii se vor instala mai multe pachete software și librării. Trebuie să ne asigurăm că Raspberry Pi este conectat la internet. [13]
Figura 4.9 Instalare pachete software și librării
Următoarea fereastră are patru opțiuni, adică modul I2C, modul SPI, modul Serial (UART) și modul Cameră. Putem alege dacă să activăm sau să dezactivăm aceste module. [13]
Figura 4.10 Moduri de interfațare Raspberry Pi
După terminarea configurațiilor vom realiza o repornire a Raspberry Pi. [13]
Figura 4.11 Repornire Raspberry Pi
După terminarea tuturor configurațiilor vom îndepărta conexiunea fizică, adică cablul ethernet între Raspberry Pi și laptop și vom încerca prima conexiune wireless folosind comanda matlab:
________________________________________________________________________________
>> mypi = raspi('192.168.1.102','pi','daniel0912')
________________________________________________________________________________
'192.168.1.102' – este IP-ul generat de router pentru Raspberry Pi;
'pi' – este numele de utilizator al sistemului de operare Raspbian;
'daniel0912' – este parola sistemului de operare Raspbian.
Figura 4.12 Conexiune wireless MATLAB-Raspberry Pi
Achiziția imaginilor de pe camera Omni Vision OV5647
Pentru a ne conecta la camera Omni Vision OV5647 vom folosi comanda matlab:
________________________________________________________________________________
>> cam=cameraboard(mypi)
________________________________________________________________________________
Figura 4.13 Conectare la camera Omni Vision OV5647
Cu ajutorul funcției „ snapshot ” din MATLAB putem achiziționa imaginile camerei Omni Vision OV5647. De exemplu, pentru un video de 60 de cadre vom folosi următorul cod MATLAB:
________________________________________________________________________________
for i = 1:60
img=snapshot(cam);
imshow(img)
end
________________________________________________________________________________
Un video nu este altceva decât o afișare continuă a imaginilor achiziționate.
Conectarea motoarelor DC la Raspberry Pi
Motorul cu perii (BDC – Brushed DC) dispune de două terminale care sunt utilizate pentru controlul sensului și vitezei rotației prin intermediul unei tensiuni continue. Rotația axului rotorului motorului se comandă astfel:
• Sensul rotației – determinat de polaritatea tensiunii aplicate motorului; [7]
• Viteza rotației – determinată de valoarea amplitudinii tensiunii aplicate motorului. [7]
Deoarece un dispozitiv logic precum un microcontroler nu poate furniza o tensiune continua variabilă, nu poate schimba polaritatea acesteia și nu poate debita un curent de funcționare suficient, comanda motorului se efectuează prin utilizarea unei punți H. [7]
Variația amplitudinii tensiunii de comandă a motorului se face prin variația factorului de umplere al unui impuls periodic de tip PWM. [7]
Figura 4.14 Fritzing – Conectarea motoarelor DC la Raspberry Pi
Configurarea pinilor circuitului L298 pentru controlul motoarelor DC se realizează conform tabelului 2.4. Codul MATLAB este:
________________________________________________________________________________
% setare pini de control motor A
ena = 21;
in1 = 20;
in2 = 16;
% setare pini de control motor B
enb = 17;
in3 = 22;
in4 = 27;
% 16, 17, 20, 21, 22, 27 sunt pinii GPIO ai Raspberry Pi 4 Model B
% configurare pini de control motor A
configurePin(mypi,ena,'PWM');
configurePin(mypi,in1,'DigitalOutput');
configurePin(mypi,in2,'DigitalOutput');
% configurare pini de control motor B
configurePin(mypi,enb,'PWM');
configurePin(mypi,in3,'DigitalOutput');
configurePin(mypi,in4,'DigitalOutput');
________________________________________________________________________________
Pentru realizarea sensului motoarelor DC folosim următoarele instrucțiuni:
________________________________________________________________________________
% sens motor A
writeDigitalPin(mypi,in1,0);
writeDigitalPin(mypi,in2,1);
% sens motor B
writeDigitalPin(mypi,in3,0);
writeDigitalPin(mypi,in4,1);
________________________________________________________________________________
Semnalul PWM se generează astfel:
________________________________________________________________________________
% semnal PWM motor A
writePWMFrequency(mypi, ena, 100);
writePWMDutyCycle(mypi, ena, 0.20);
% semnal PWM motor B
writePWMFrequency(mypi, enb, 100);
writePWMDutyCycle(mypi, enb, 0.20);
________________________________________________________________________________
Image Registration
Scopul Image Registration este alinierea a două imagini folosind corelația de intensitate, potrivirea caracteristicilor sau maparea punctelor de control.
BIBLIOGRAFIE
https://static.raspberrypi.org/files/product-briefs/200206+Raspberry+Pi+4+1GB+2GB+4GB+Product+Brief+PRINT.pdf
https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711/README.md
https://www.tomshardware.com/reviews/raspberry-pi-4-b,6193.html
https://github.com/techyian/MMALSharp/wiki/OmniVision-OV5647-Camera-Module
https://www.optimusdigital.ro/ro/robotica-kit-uri-de-roboti/2043-kit-robot-cu-4-motoare-negru.html?search_query=kit+robot&results=60
https://www.optimusdigital.ro/ro/motoare-altele/139-motor-cu-reductor-si-roata.html?search_query=motor&results=581
Microcontrolere pe 8 biți – Cristian Molder
http://shannon.etc.upt.ro/laboratoare/cd/cd_laborator.pdf
https://www.raspberrypi.org/documentation/configuration/raspi-config.md
https://uk.mathworks.com/discovery/image-registration.html
https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up/1
https://lms.matlabhelper.com/raspberry-pi-with-matlab-simulink/
https://altex.ro/router-wireless-n300-tp-link-tl-wr841n-ro-300mbps-wan-lan-alb/cpd/ROUTLWR841NRO/?utm_source=tradeads&utm_medium=cpl&utm_campaign=aff
https://altex.ro/baterie-externa-hama-178985-20000mah-1xtype-c-1xusb-black/cpd/AIS178985/
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Academia Tehnică Militară Ferdinand I [304495] (ID: 304495)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
