1. Exemplu redactare proiect

Introducere

Exemplu pentru redactare Proiect 2023

Aceasta pagina documentează realizarea unui robot mini-sumo

Autor : Darmaz Andrei-Sebastian 341B1

Descriere generală

Ca și în artele marțiale tradiționale japoneze, roboții încearcă să își împingă oponentul în afara ringului. Reguli:

  • Dimensiuni maxime: robotul trebuie să încapă într-un pătrat 10 cm x 10 cm (100 x 100 mm).
  • Masa maximă a robotului nu trebuie să depășească 0,50 kg ( 500,00 gr.).
  • Robotul după start se poate extinde. Nu este permis ca robotul să se separe în 2 sau mai multe bucăți. El trebuie sa rămână un singur robot centralizat. Roboţii care nu vor respecta aceste reguli vor pierde meciul.
  • Șuruburi, piulițe, șaibe sau alte parți cu masa sub 5 gr, care se desprind, nu vor determina pierderea meciului.
  • Toți roboţii trebuie să fie autonomi. Poate fi implementat orice sistem de control, atâta timp cât acesta este în interiorul robotului şi nu interacționează cu un sistem de control exterior (om, mașină sau oricare altul).

Schema bloc:

Hardware Design

Lista de componente: Microcontroller:

  • Raspberry Pi® RP2040

Senzori:

  • TFMini Plus Micro LiDAR Module
  • Sharp GP2Y0D810Z0F
  • IMU LSM6DSOXTR (6-axis)
  • MICROPHONE MP34DT05

Conectivitate:

  • Wi-Fi Nina W102 uBlox module
  • BLUETOOTH® Nina W102 uBlox module
  • SECURE ELEMENT ATECC608A-MAHDA-T Crypto IC

Alimentare:

  • LiPo Gens Ace 7V6 300mA 75C
  • Step down 3V3 DFR0570
  • LM7805

Mecanice:

  • Pololu 10:1 Micro Metal Gearmotor HPCB 6V
  • Solarbotics RW2i Wheel
  • Pololu TB6612FNG

Șasiul robotului a fost realizat manual din tabla de oțel de 1mm. Pe vârful acestuia, plug, voi lipi o lama din titan.

Software Design

Mediu de dezvoltare folosit a fost Arduino IDE.

Biblioteci folosite : MBED_RP2040_PWM, TFMPlus, WiFiNINA.

Deoarece am utilizat microcontrollerul ARM RP2040 care dispune de doua coruri codul este împărțit astfel :

Primul core :

  • initializeaza pinii ca INPUT/OUTPUT
  • initializeaza comunicația UART cu senzorul LiDAR
  • acționează motoarele generând semnale PWM pure hardware. Prin urmare semnalele nu sunt întrerupte de eventuale blocaje din cod
  • interpreteaza strategia inițiala a robotului prin citirea dipswitch-ului
  • selectează modul de cautare / atac al robotuli pentru runda curenta
  • se ocupa de întreruperile generate de TSOP

Al doilea core:

  • Comunica cu senzorul LiDAR și transmite către core 1 distanta fata de oponent
  • se ocupa de întreruperile generate de QTR

Am implementat mai multe metode de cautare :

  • robotul se învârte pana când găsește adversarul
  • robotul se mișcă random pana la marginea ringului după care se rotește înapoi spre centru
  • robotul avansează încet spre centrul ringului

Fiecare căutarea are avantajul ei :

  • rotirea conferă o viziune completa a ringului, dar face ca lama robotului sa trepideze deci robotul este mai vulnerabil. În plus dacă acesta nu reacționează rapid la detecția adversarului va pierde timp pana când va ajunge din nou cu fata la acesta.
  • miscarea către margine este o strategie clasica, robotul nu este staționar astfel nu este o ținta ușoară și acoperă o distanta destul de mare deci poate detecta adversarul relativ ușor. Insa, pentru ca robotul se mișcă lama nu este fixată în ring deci se poate intra mai usor sub ea.
  • robotii mini sumo folosesc ultima strategie când sunt siguri de acuratețea senzorilor principali. Pentru ca avansarea către centru, dar și către adversar este lenta lama robotului nu tremura foarte mult deci sunt șanse cât mai mari sa între sub cea a adversarului și sa îl ridice sciazandui aderența. Robotul este vulnerabil în laterale fiind destul de staționar. Acest defect poate fi evitat folosind senzorii laterali (sharp/laser omron) însă din experiență daca adversarul a ajuns deja în lateral o întoarcere brusca cu ±90 va destabiliza robotul și acesta va pierde în continuare.

Aceste căutări sunt implementate în funcții diferite din Arduino și sunt selectate prin determinarea strategiei de pe dipswitch. Tot înaintea meciului pe dipswitch se slecteaza și atacul principal pe care robotul o sa îl facă.

Atacul inițial oferă un avantaj robotului prin cunoașterea poziției fata de adversar. Pin selectarea strategiei 0-16 ii comunicam robotului în ce poziție sa se miște. Astfel am implementat câteva strategii clasice folosite în meciuri de sumo :

  • Rotire cu ± 90 fata de poziția inițială - dacă robotul adversar se afla în stânga/dreapta odată cu pornirea meciului vom ajunge cu fata către el fără sa îl mai căutăm în ring.
  • Arc stânga/dreapta - se folosește dacă credem ca robotul adversar o sa ajungă cu fata către noi. Prin descrierea unui arc vom puteam ajunge în spatele/lateralul acestuia.
  • 180 de grade - pentru meciurile spate - spate
  • etc alte strategii asemănătoare cu cele menționate anterior.

Interacțiune cu senzorii:

  • Citirea senzorului LiDAR TOF se face prin UART BR 115200 Fq 1MHZ (senzorul este capabil de BR mai mare, dar devine instabil). Acesta returnează distanta fata de obiectul detectat (max 12m - putin cam overkill), temperatura senzorului și acuratețea de care crede ca da dovada. În cod folosesc doar distanta fata de target. În alta versiune a codului am setat senzorul pe modul de detection response, mod în care genereaza o întrerupere de fiecare data când un obiect intra in zona critica setată în registrii. Încă testez pentru a alfa care versiune este mai buna.
  • Senzorii QTR (de linie) generează o întrerupere high edge de fiecare data când detectează culoarea albă și astfel robotul se va îndepărta de margine.
  • TSOP-ul generează o întrerupere când primește semnal de la telecomanda, în handler se citește intructiunea primită pentru a afla dacă robotul trebuie sa pornească sau sa se oprească.
  • DipSwitch-ul este citit doar inițial și se face o adunare binară pe cei 4 pini pentru a stabili strategia. Puteam sa folosesc un shift register sau un NE555 pentru a folosit mai putini pini digitali, dar nu am dispus de spațiu pe PCB.

Interacțiunea cu motoarele:

  • Fiecare motor are câte un drive asignat care rezista la 2.4A peek.
  • Motoarele sunt comandate pe 3 pini - 2 pini de direcție și unul de PWM
  • Generarea de PWM se face pure hardware putand sa se stabilească duty cicle si frecventa.

Posibile upgrades :

În viitorul nu foarte îndepărtat o sa mai adaug citirea datelor de la accelerometrul de pe placa. Din putinele teste făcute pana acum datele nu vin destul de rapid de la senzor pentru a-l implementa în codul core al robotului. Conexiune Bluetooth cu un device pentru a selecta strategia/desena atacul inițial - nu am implementat în core fiindcă conexiunea bluetooth nu este tot timpul stabilă, iar unele concursuri nu permit conexiuni externe in timpul meciurilor, dar poate sa fie o funcție fun. Pornire/oprire folosind microfonul de pe board - am implementat antrenând un model ML cu TenserFlow, dar ocupa un core și nu este practic în timpul meciurilor. Alimentare cu 12V în loc de 8V pentru motoare - am testat deja totul era funcțional, însă nu voiam sa ard motoarele fix înainte de prezentare :)

Rezultate Obţinute

Am obținut inca un robot mini-sumo de adăugat la colecție. Pot spune ca este cel mai avansat de pana acum din punct de vedere mecanic, iar la partea software este tot timpul loc de îmbunătățire. Saber a reușit sa îmi bată robotul anterior care avea în palmares un loc 8 la Robochallenge și loc 2 la Infomatrix. Deci o sa așteptam sa vedem cum se descurca la concursurile din viitor.

Tot ca rezultat aș putea spune ca mi-am mai dezvoltat skillurile hardware și am învățat mai multe despre arhitectura ARM, eu fiind obișnuit numai cu AVR.

Concluzii

Mă bucur ca am ales sa fac PM și ca mi-a dat impulsul de a începe un nou proiect. Robotul consider ca este unul reușit, desi exista tot timpul loc de îmbunătățiri.

Download

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

pm/prj2023/adarmaz/exemplu-proiect.txt · Last modified: 2023/04/30 14:06 by andrei.darmaz
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0