Vis enkel innførsel

dc.contributor.advisorAnstensrud, Torleif
dc.contributor.authorEriksen, Finn Christian
dc.contributor.authorErvik, Markus Næss
dc.contributor.authorFosmo, Pål Ivar Delphin Kværnø
dc.contributor.authorFurnes, Aleksander Misje
dc.date.accessioned2022-07-05T17:22:16Z
dc.date.available2022-07-05T17:22:16Z
dc.date.issued2022
dc.identifierno.ntnu:inspera:110598397:110609063
dc.identifier.urihttps://hdl.handle.net/11250/3002917
dc.description.abstractMålet med denne oppgaven er å produsere en standarisert løsning for et undervannsnettverk ved bruk av akustiske undervannsmodem. Alle typer data skal også kunne utveksles mellom flere ROS 2 baserte systemer. Oppgaven er en del av et større prosjekt, og sluttproduktet monteres på en BlueROV2, som er en "high-performance" undervannsdrone. I tillegg til de akustiske modemene er det diverse sensorutstyr montert på undervannsdronen. ROS 2-systemet publiserer sensordataen til det tilkoblede modemet. Modemet bruker JANUS, en undervanns kommunikasjonsstandard for aukustiske modem, til å sende nevnte data. Gjennom arbeidet i forprosjektet har gruppen planlagt hele prosjektet ved å bruke arbeidspakker og milepæler. En plan for frister, arbeidstimer og prioritering av milepæler er visualisert gjennom bruken av et GANTT-diagram, og alt dette står beskrevet i rapporten til forprosjektet. Alle gruppemedlemmene gjennomfører et krasjkurs i ROS 2 som er avholdt av oppdragsgiver, i tillegg til nybegynner kurs i C++ gjennom Codecademy. Introduksjonsdemonstasjoner av JANUS og modemene i vanntanken er også gjennomført av oppdragsgiveren, for at gruppen skal kunne starte arbeidet. ROS 2 er et sett med åpen-kilde programvare bibliotek og andre hjelpsomme verktøy for utvikling av robotapplikasjoner som skal benyttes i prosjektet. Raspberry Pi 3 Model B+ brukes til å styre modemene og håndterer all informasjonsflyt. Piens muligheter for å kjøre ROS 2 gjør det til den optimale plattformen med tanke på en fremtidig implementasjon av ROS 2. All kode er skrevet i C++ siden språket har raskere kjøretid enn Python, noe som er foretrukket i systemer der liten ventetid er viktig. SDMSH, som er en shell for SDM-modus for undervannsmodemene brukes for å få tilgang til modemets konfigurasjonsinnstillinger, og for å forenkle sending og mottak av data. Siden dette er et stort prosjekt som kan utvikle seg over flere år, er ideen å bruke JANUS, som er utviklet for å være kommunikasjonsstandarden for modemer fra forskjellige produsenter. På denne måten vil ikke prosjektet bli forlenget dersom modemene byttes ut med andre modemer. Det første steget er å sette opp hele systemet og sende data gjennom modemene manuelt ved å bruke EvoLogics AMA og netcat. Modemene er koblet til en 24V spenningskilde og gjennom Ethernet kabler til en av nettverksswitchene. Gruppen bruker OpenSSH med password autentisering aktivert for å koble til Raspberry PI eksternt. Alle enheter på Ethernettet er konfigurert med en statisk IPv4-adresse. JANUS er patchet og innstallert ved å bruke filer som er tilgjengelig etter å ha logget inn på januswiki.com og med et sett patchfiler som er utviklet av EvoLogics. Ved å ta i bruk de kjørbare filene janus-rx og janus-tx i parallell med SDMSH er modemene i stand til å sende og motta JANUS-pakker. En automatisk implementasjon er realisert ved bruk av et C++-bibliotek kalt janusxsdm som tar for seg alle prosesser relatert til sending og mottak av data. Lengden på en pakke i form av antall tastinger er kalkulert ved å bruke en lineær funksjon som er utledet fra syv forskjellige pakker med forskjellige lengder. Biblioteket danner grunnlaget for kommunikasjon i forbindelse med en protokoll som gruppen har utviklet. Protokollen håndterer kommunikasjonen i et nettverk av tre eller flere noder gjennom en master-slave-struktur. Protokollen er implementert gjennom flere C++-skript og alle nodene kommuniserer ved bruk av standardiserte kommandoer. En ROS 2-implementasjon er realisert ved å inkludere ROS 2 publiserere og abonnenter i skriptene til masteren og slavene. Slavene har abonnent-noder som en del av koden sin for å kontinuerlig lytte etter ny data fra sensorene på et emne. Dataen blir så videresendt til masteren ved overføring, som igjen publiserer dataen til et nytt emne gjennom en publiserende node som er integrert i master skriptet. Gruppen har utviklet et bibliotek som håndterer den automatiske dataoverføringen ved bruk av JANUS og SDMSH. Dette biblioteket inneholder en klasse som tar fem argumenter ved deklarasjon. Klassen kalles i master- og slave-skriptene ved sending eller mottagelse av data. Klassen har åtte forskjellige metoder som automatiserer forskjellige prosesser forbundet JANUS og SDMSH, derav noen ikke helt ferdigutviklet enda. Protokollen bruker en master-slave-struktur der masteren bestemmer hvilken node som kan sende, og når denne noden kan sende. Masteren har også oversikt over hvilke noder som er aktive i nettverket. ROS 2-implementasjonen er inkludert i koden men ikke testet skikkelig. Det ferdige produktet inneholder en standardisert løsning for undervannskommunikasjon basert på janusxsdm-biblioteket med de lovede funksjonene avtalt med oppdragsgiver. Løsningen består også av en kommunikasjonsprotokoll med master-slave-struktur med mulighet for en ROS 2-implementasjon med noen få endringer i koden. Til slutt er gruppen fornøyd med arbeidet som er nedlagt og samarbeidet innad i gruppen, sammen med erfaringen og kunnskapen hver og en har tilegnet seg. Samtidig er ikke gruppen helt fornøyd med det ferdige produktet sammenlignet med hvor mye arbeid som er lagt ned og resultatet man hadde sett for seg tidligere i prosjektet. Gruppen anbefaler at videre utvikling av produktet i all hovedsak dreier seg om å implementere SDM- og JANUS-bibliotekene direkte inn i master- og slave-skriptene på en bedre måte, samt å bruke executors for å håndtere ROS 2-aspektene ved produktet. Gruppen anbefaler derfor at videre utvikling gjøres av personer med bredere kunnskap om C++ og ROS 2 enn gruppen selv.
dc.description.abstractThis thesis aims to provide a standardized solution for an underwater network using underwater acoustic modems. All types of data should also be able to be exchanged between multiple ROS 2 based systems. The task is part of a larger project where the final product will be integrated on a BlueROV2, a high-performance underwater ROV. In addition to the acoustic modems, some sensory equipment is mounted on the ROVs. The ROS 2 system publishes the sensor data to the connected modem. The modem uses the JANUS protocol, an underwater communication standard for acoustic modems, to transmit the data in question. Through the preliminary project work the group has planned the entire project using work packages and milestones. A plan for deadlines, working hours and prioritization of the milestones is visualized through a GANTT chart, all of which are also described in the preliminary project report. All group members attended a crash course in ROS 2 held by the client, as well as individual beginner courses in C++ through Codecademy. Introductory demonstrations of JANUS and the modems are also provided by the client in the water tank to get the group started with the modems. ROS 2 is a set of open-source software libraries and helpful tools for developing robot applications used throughout the project. Raspberry PI 3 Model B+ is used for controlling the modems and handling information and data. With its ROS 2 capabilities it also offers an optimal platform for a future ROS 2 implementation. All code is written in C++ as it features faster runtimes than Python, which is preferred when developing systems where low latency is essential. SDMSH, a shell for SDM-mode for the underwater modems, is used to access the modem's configuration settings and simplify the sending and receiving of data. As this is a big project that can develop over several years, the idea is to use JANUS, which is developed to be the communication standard for modems with different manufacturers. This way, the project will not be prolonged if the modems are changed to different ones. EvoLogics AMA and netcat are used as learning tools in order to get a better understanding of how the modems operate. The first step is setting the whole system up and manually transmitting data through the modems by using EvoLogics AMA and netcat. The modems are connected to a 24V power supply and through Ethernet cables to one of the switches. The group uses OpenSSH with password authentication enabled to access the Pis remotely. All devices on the Ethernet are configured with a static IPv4 address. JANUS is patched and installed by using files available when logged in on januswiki.com and a set of patch files developed by EvoLogics. By utilizing the executables janus-rx and janus-tx in parallel with SDMSH the modems are able to send and receive JANUS-packets. An automatic implementation is realized by a C++ library called janusxsdm that handles all processes related to the transmission and reception of data. The packet length in samples is calculated using a linear function derived from seven different packets of differing lengths. The library forms the basis for communication pertaining to a protocol developed by the group. The protocol handles communication in a network of three or more nodes through a master-slave structure. The protocol is implemented through C++ scripts and all the nodes communicate through standardized commands. A ROS 2-implementation is achieved by including ROS 2 subscribers and publishers in the scripts for the master and the slaves. The slaves have subscriber nodes embedded into their code to continually listen for new data from the sensors on a topic. The data is then forwarded to the master during transmission, who in turn publishes the data to another topic through a publisher-node integrated into the master script. The group has developed a library to handle the automatic data transmission using JANUS and SDMSH, containing a class that takes five arguments when declared. This class is called in the master and slave scripts upon transmission or reception. The class has eight different methods which help automate the processes linked with JANUS and SDMSH, some of which havehave not been adequately implemented. The protocol uses a master-slave structure where the master determines which slave node can transmit and when it can transmit. The master also keeps records of which nodes are active in the network. The ROS 2 implementation is included in the code but not properly tested. The final product involves a standardized solution for underwater communication based on the janusxsdm-library with the promised attributes. The solution is further comprised of a communication protocol with a master-slave structure, with the possibility of ROS 2 implementation with some minor tweaks to the code. In the end, the group is satisfied with the effort put into the work and the collaboration, together with the experience and knowledge gained. At the same time, the group can't help but feel disappointed with the final product compared to the work put in and the anticipated result. The group recommends that further work on this project is centered around properly implementing the SDM and JANUS libraries directly into the master and slave scripts and using executors to handle the ROS 2 implementation. Therefore the group also recommends that further development is done by developers who have more knowledge of C++ and ROS 2 than the group itself.
dc.languageeng
dc.publisherNTNU
dc.titleDevelopment of Underwater Communication Rig
dc.typeBachelor thesis


Tilhørende fil(er)

Thumbnail

Denne innførselen finnes i følgende samling(er)

Vis enkel innførsel