Satura rādītājs:

WEEDINATOR☠ 2. daļa: Satelītu navigācija: 7 soļi (ar attēliem)
WEEDINATOR☠ 2. daļa: Satelītu navigācija: 7 soļi (ar attēliem)

Video: WEEDINATOR☠ 2. daļa: Satelītu navigācija: 7 soļi (ar attēliem)

Video: WEEDINATOR☠ 2. daļa: Satelītu navigācija: 7 soļi (ar attēliem)
Video: Чингиз Валинуров - Mama I'm a criminal (Официальная премьера трека) 2024, Jūlijs
Anonim
EWEEDINATOR☠ 2. daļa: Satelītu navigācija
EWEEDINATOR☠ 2. daļa: Satelītu navigācija
EWEEDINATOR☠ 2. daļa: Satelītu navigācija
EWEEDINATOR☠ 2. daļa: Satelītu navigācija
EWEEDINATOR☠ 2. daļa: Satelītu navigācija
EWEEDINATOR☠ 2. daļa: Satelītu navigācija
EWEEDINATOR☠ 2. daļa: Satelītu navigācija
EWEEDINATOR☠ 2. daļa: Satelītu navigācija

Ir dzimusi Weedinator navigācijas sistēma!

Klīstošs lauksaimniecības robots, kuru var vadīt ar viedtālruni.

… Un tā vietā, lai vienkārši izietu cauri regulārajam tā sastādīšanas procesam, es domāju, ka mēģināšu izskaidrot, kā tas patiesībā darbojas - acīmredzot nevis VISU, bet vissvarīgākos un interesantākos. Lūdzu, atvainojiet vārdu spēli, bet tas, kā dati plūst starp atsevišķiem moduļiem, man šķiet interesanti un sadalīti zemākajā saucējā, ko mēs iegūstam ar faktiskajiem "bitiem" - nullēm un vieniem. Ja jūs kādreiz esat apmulsuši par bitiem, baitiem, rakstzīmēm un virknēm, tad tagad varētu būt īstais laiks kļūt neskaidram? Es arī mēģināšu sajaukt nedaudz abstraktu jēdzienu “Kļūdas atcelšana”.

Sistēmai ir šādas īpašības:

  • GPS/GNSS: Ublox C94 M8M (Rover un Base)
  • 9DOF Razor IMU MO digitālais kompass
  • Fona 800H 2G GPRS mobilais
  • 2,2 collu TFT ekrāns
  • Arduino Due 'Master'
  • Dažādi Arduino 'vergi'.

Dīvaini, ka daudzām satelītu navigācijām nav digitālā kompasa, kas nozīmē, ka, ja esat nekustīgs un apmaldījies, jums ir jāiet vai jābrauc jebkurā nejaušā virzienā, pirms ierīce var parādīt pareizo virzienu no satelītiem. Ja jūs apmaldāties biezos džungļos vai pazemes autostāvvietā, jūs esat piebāzts!

1. darbība. Kā tas darbojas

Kā tas strādā
Kā tas strādā

Pašlaik no viedtālruņa vai datora tiek augšupielādēts vienkāršs koordinātu pāris, ko pēc tam lejupielādē Weedinator. Pēc tam tos interpretē virsrakstā grādos un nobraukto attālumu milimetros.

GPRS fona tiek izmantots, lai piekļūtu tiešsaistes datu bāzei, izmantojot 2G mobilo tīklu, un saņemtu un pārsūtītu koordinātas uz Arduino Due, izmantojot Arduino Nano. Due ir meistars un kontrolē virkni citu Arduino kā vergu, izmantojot I2C un sērijas kopnes. Due var mijiedarboties ar tiešajiem datiem no Ublox un Razor un parādīt virsrakstu, ko aprēķinājis viens no tā Arduino vergiem.

Ublox satelītu izsekotājs ir īpaši gudrs, jo tas izmanto kļūdu atcelšanu, lai iegūtu ļoti precīzus labojumus - galīgā nominālā kopējā novirze ir aptuveni 40 mm. Modulis sastāv no identiska pāra, no kuriem viens, “rover”, pārvietojas kopā ar Weedinator, bet otrs - “bāze” ir piestiprināta pie staba kaut kur atklātā vietā. Kļūdu atcelšana tiek panākta, ja bāze spēj panākt patiešām precīzu labojumu, izmantojot lielu paraugu daudzumu laika gaitā. Pēc tam šie paraugi tiek aprēķināti, lai kompensētu mainīgos atmosfēras apstākļus. Ja ierīce kustētos, tā acīmredzot nevarētu iegūt jebkādu vidējo vērtību un būtu pilnībā mainīgas vides žēlastībā. Tomēr, ja statiska un kustīga ierīce darbojas kopā, ja vien tās var sazināties savā starpā, tās var gūt labumu no abām. Jebkurā brīdī bāzes vienībai joprojām ir kļūda, taču tai ir arī iepriekš aprēķināts īpaši precīzs labojums, lai tā varētu aprēķināt faktisko kļūdu, atņemot vienu koordinātu kopu no citas. Pēc tam tā, izmantojot radio saiti, nosūta aprēķināto kļūdu roverim, kas pēc tam pievieno kļūdu savām koordinātām un hey presto, mums ir kļūdu atcelšana! Praktiski kļūdu atcelšana rada atšķirību starp 3 metriem un 40 mm kopējo novirzi.

Pilnīga sistēma izskatās sarežģīta, taču patiesībā to ir diezgan viegli uzbūvēt, vai nu vaļīgi uz nevadošas virsmas, vai izmantojot manis izstrādāto PCB, kas ļauj droši pieskrūvēt visus moduļus. Turpmākā attīstība ir balstīta uz PCB, ļaujot iekļaut plašu Arduinos klāstu, lai vadītu motorus stūrēšanai, kustībai uz priekšu un borta CNC mašīnai. Navigācijai palīdzēs arī vismaz viena objektu atpazīšanas sistēma, kas izmanto kameras, lai uztvertu krāsainus objektus, piemēram, fluorescējošas golfa bumbiņas, kuras ir rūpīgi novietotas kādā režģī - skaties šo vietu!

2. darbība: sastāvdaļas

Sastāvdaļas
Sastāvdaļas
Sastāvdaļas
Sastāvdaļas
Sastāvdaļas
Sastāvdaļas
  • Ublox C94 M8M (Rover un Base) x 2 no
  • 9DOF Razor IMU MO digitālais kompass
  • Fona 800H 2G GPRS mobilais 1946
  • Arduino Due
  • Arduino Nano x 2 no
  • SparkFun Pro Micro
  • Adafruit 2,2 collu TFT IL1940C 1480
  • PCB (skat. Pievienotos Gerber failus) x 2 no
  • 1206 SMD nulles omu rezistori x 12 no
  • 1206 gaismas diodes x 24 no

PCB fails tiek atvērts ar programmatūru “Design Spark”.

3. solis: moduļu savienošana

Moduļu savienošana
Moduļu savienošana

Šī ir vieglā daļa - īpaši vienkārša ar manu izgatavoto PCB - vienkārši sekojiet iepriekš redzamajai diagrammai. Nepieciešama piesardzība, lai izvairītos no 3 V moduļu pieslēgšanas pie 5 V pat sērijas un I2C līnijās.

4. solis: kods

Kods
Kods

Lielākā daļa koda ir saistīta ar datu sakārtotu pārvietošanos sistēmā, un diezgan bieži ir jāpārveido datu formāti no veseliem skaitļiem uz pludiņiem uz virknēm un rakstzīmēm, kas var būt ļoti mulsinoši! Sērijas protokols apstrādā tikai rakstzīmes, bet I2C protokols apstrādās ļoti mazus veselus skaitļus, man šķita labāk tos pārvērst rakstzīmēs un pēc tam pārvērst atpakaļ par veseliem skaitļiem pārraides līnijas otrā galā.

Weedinator kontrolieris būtībā ir 8 bitu sistēma, kurā ir daudz atsevišķu Arduinos jeb MCU. Ja 8 biti tiek aprakstīti kā faktiskās binārās nulles, tie var izskatīties šādi: B01100101, kas būtu vienāds ar:

(1x2)+(0x2)2+(1x2)3+(0x2)4+(0x2)5+(1x2)6+(1x2)7+(0x2)8 =

Decimālskaitļa vērtība 128 64 32 16 8 4 2 1
Bināro ciparu vērtība 0 1 1 0 0 1 0 1

= 101

Un maksimālā iespējamā vērtība ir 255 … Tātad maksimālais vesels skaitlis “baits”, ko mēs varam pārsūtīt pa I2C ir 255, kas ir ļoti ierobežojošs!

Arduino, izmantojot I, vienlaikus varam pārsūtīt līdz 32 ASCII rakstzīmēm vai baitiem2C, kas ir daudz noderīgāk, un rakstzīmju kopa ietver ciparus, burtus un vadības rakstzīmes 7 bitu formātā, kā norādīts zemāk:

Attēls
Attēls

Par laimi, Arduino kompilators fonā veic visu pārveidošanas darbu no rakstzīmēm uz bināro, taču tas joprojām sagaida pareizu rakstzīmju veidu datu pārraidei un nepieņems “Stīgas”.

Tagad ir tas, kad lietas var kļūt neskaidras. Rakstzīmes var izteikt kā atsevišķas rakstzīmes, izmantojot simbolu definīciju, vai kā viendimensionālu 20 rakstzīmju masīvu, izmantojot simbolu [20]. Arduino virkne ir ļoti līdzīga rakstzīmju masīvam un burtiski ir rakstzīmju virkne, ko cilvēka smadzenes bieži interpretē kā “vārdus”.

// Veido rakstzīmi 'distanceCharacter':

Stīgu iniciators = ""; distanceString = iniciators + distanceString; int n = distanceString.length (); par (int aa = 0; aa <= n; aa ++) {distanceRakstzīme [aa] = distanceString [aa]; }

Iepriekš minētais kods var pārvērst garu rakstzīmju virkni par rakstzīmju masīvu, ko pēc tam var pārsūtīt pa I2C vai seriāls.

Pārraides līnijas otrā galā datus var pārvērst par virkni, izmantojot šādu kodu:

distanceString = distanceString + c; // virkne = virkne + rakstzīme

Rakstzīmju masīvu nevar tieši pārveidot par veselu skaitli, un tam vispirms ir jāievada virknes formāts, bet šāds kods tiks pārveidots no virknes par veselu skaitli:

int rezultāts = (distanceString).toInt ();

int distanceMetres = rezultāts;

Tagad mums ir vesels skaitlis, ko mēs varam izmantot, lai veiktu aprēķinus. Pludiņi (skaitļi ar komatu) pārraides stadijā jāpārvērš par veseliem skaitļiem un pēc tam jāsadala ar 100 divām zīmēm aiz komata, piemēram:

pludiņa attālumsMetres = attālumsMm / 1000;

Visbeidzot, virkni var izveidot no rakstzīmju un veselu skaitļu sajaukuma, piemēram:

// Šeit dati tiek apkopoti rakstzīmē:

dataString = iniciators + "BEAR" + zbearing + "DIST" + zdistance; // Ierobežots līdz 32 rakstzīmēm // Virkne = virkne + rakstzīmes + vesels skaitlis + rakstzīmes + vesels skaitlis.

Pārējais kods ir standarta Arduino materiāls, ko var atrast dažādos Arduino bibliotēku piemēros. Apskatiet piemēru “piemēri >>>> Stīgas” un “vadu” bibliotēkas piemērus.

Šeit ir viss pludiņa nosūtīšanas un saņemšanas process:

Pārvērst pludiņu ➜ veselu skaitli ring virkni ➜ rakstzīmju masīvu….. pēc tam TRANSMIT rakstzīmju masīvu no meistara ➜➜

➜➜ UZŅEMT atsevišķas rakstzīmes Slave…. pēc tam pārvērst rakstzīmi ring virkni ➜ veselu skaitli ➜ pludiņu

5. darbība: datu bāze un tīmekļa vietne

Datu bāze un tīmekļa vietne
Datu bāze un tīmekļa vietne
Datu bāze un tīmekļa vietne
Datu bāze un tīmekļa vietne

Iepriekš ir parādīta datu bāzes struktūra, kā arī pievienoti php un html koda faili. Drošības nolūkos lietotājvārdi, datu bāzu nosaukumi, tabulu nosaukumi un paroles tiek izslēgtas.

6. darbība: navigācijas testi

Navigācijas testi
Navigācijas testi
Navigācijas testi
Navigācijas testi
Navigācijas testi
Navigācijas testi

Man izdevās savienot datu reģistratoru ar Weedinator vadības paneli, izmantojot I2C, un iegūt priekšstatu par Ublox M8M satelīta pozicionēšanas veiktspēju:

Ieslēdzot “auksto palaišanu”, ko parāda zaļā diagramma, modulis sākās ar daudzām kļūdām, diezgan līdzīgs “normālam” GPS, un pakāpeniski kļūda samazinājās, līdz pēc aptuveni 2 stundām starp roveru tika panākts RTK labojums un pamatne (parādīta kā sarkanais krusts). Šajā 2 stundu periodā bāzes modulis nepārtraukti veido un atjaunina platuma un garuma vidējo vērtību un pēc iepriekš ieprogrammētā laika intervāla nolemj, ka tas ir labots. Nākamajos 2 grafikos ir parādīta uzvedība pēc karstā palaišanas 'kur bāzes modulis jau ir aprēķinājis labu vidējo. Augšējā diagramma ilgst vairāk nekā 200 minūtes, un dažkārt labojums tiek pazaudēts, un roveris nosūta NMEA ziņojumu Weedinator, ka labojums īslaicīgi kļuvis neuzticams.

Apakšējā zilā diagramma ir “pietuvināta” augšējā grafika sarkanajā lodziņā un parāda labu reprezentatīvu Ublox veiktspējas momentuzņēmumu ar kopējo novirzi 40 mm, kas ir vairāk nekā pietiekami labi, lai novirzītu Weedinator uz tā atrašanās vietu, bet, iespējams, nav pietiekami labs, lai apstrādātu augsni ap atsevišķiem augiem?

Trešajā grafikā parādīti dati, kas savākti ar Rover un Base 100 metru attālumā viens no otra - Netika konstatēta papildu kļūda - attālums no attāluma neietekmēja precizitāti.

7. solis: fināls

Ieteicams: