Improvement and Development of Collision and Obstacle Avoidance in nRF52850 Mobile SLAM Robots
Master thesis
![Thumbnail](/ntnu-xmlui/bitstream/handle/11250/3147233/no.ntnu%3ainspera%3a181457231%3a36776043.pdf.jpg?sequence=5&isAllowed=y)
Permanent lenke
https://hdl.handle.net/11250/3147233Utgivelsesdato
2024Metadata
Vis full innførselSamlinger
Sammendrag
Denne masteroppgaven er skrevet som en del av et "SLAM-robot-prosjekt" som har som mål å utvikle samarbeidende roboter for bruk til lokalisering og kartlegging av ukjente områder. I denne oppgaven er allerede eksisterende bakkeroboter brukt. Disse robotene har allerede mye funksjonalitet implementert, så målet for denne oppgaven er å forbedre eksisterende funksjonalitet i tillegg til å implementere ny. Hovedfokuset i denne oppgaven er kollisjons- og hindringsunngåelse for robotene. I tillegg er flere små forbedringer gjennomført. Filene i robotkoden som er mest brukt i kollisjons- og hindringsunngåelse ble ryddet opp i og noe omstrukturert. Denne opprydningen resulterte i sletting av et betydelig antall ubrukte kodelinjer, noe som gjorde disse filene mer lesbare. Imidlertid vil robotkoden fortsatt kunne dra nytte av en grundigere opprydning. Videre ble et testprogram laget for å bekrefte at robotene fungerer etter å ha vært på reparasjon på grunn av hardware-feil. Det resulterende test programmet var til stor hjelp ved robotreparasjoner. Til slutt ble resultatene fra denne oppgaven integrert med arbeid utført av andre studenter som også jobber med "SLAM-robot-prosjektet". Dette ble gjort for å sikre en helhetlig fremdrift og samarbeid på tvers av prosjektet.
En kollisjonsunngåelsesversjon ble implementert i prosjektoppgaven [\cite{SpecPro}] som ble skrevet som en oppbygning til denne masteroppgaven. Denne versjonen er den første versjonen i denne oppgaven. To nye versjoner ble så utviklet, og alle tre ble testet i et testsett laget for å avdekke styrker og svakheter i hver av versjonene. Hver versjon ble tildelt poeng basert på robotens evne til å unngå å krasje inn i hindringer, i tillegg til evnen til å la være å stoppe når det ikke er hindringer i veien. Versjon 2 gjennomførte testene på best måte totalt sett og ble dermed tildelt flest poeng. Videre ble hindringsunngåelse utviklet. For at roboten skal kunne komme seg rundt hindringer er det vesentlig at den stopper før den krasjer inn i hindringen. Versjon 2 ble derfor startpunktet for hindringsunngåelsesalgoritmene.
I prosjektoppgaven [Eidsnes (2023)] ble to hindringsunngåelsesalgoritmer designet, men ikke implementert. Disse to algoritmene, i tillegg til en nyutviklet algoritme, ble revidert/utviklet, implementert og testet i et annet testsett designet for å avdekke styrker og svakheter i hindringsunngåelse.
Som nevnt, presterte Versjon 2 av kollisjonsunngåelse best totalt sett i testene og ble derfor brukt som grunnlag for implementering av hindringsunngåelsesalgoritmene. Imidlertid er ikke Versjon 2 perfekt. Roboten krasjer noen ganger når den møter små hindringer eller når den møter hindringer på skrå. I tillegg stopper den noen ganger når det ikke er noen hindringer foran den. Disse problemene skyldes hovedsakelig utfordringer med at roboten har et roterende sensortårn, noe som resulterer i blindsoner mellom hver sensor. Videre ser det ut til at nRF-kortet som inneholder robotprogramvaren har et kapasitetsproblem, noe som tvingte frem en løsning hvor sensortårnet hopper over en grad hver gang det roterer, for å unngå programvarekrasj. Dette svekker robotens evne til å oppdage hindringer.
Siden hindringsunngåelsesalgoritmene brukte Versjon 2 av kollisjonsunngåelse, vedvarte de samme problemene etter implementeringen av hindringsunngåelsesalgoritmene. Fra testingen av hindringsunngåelsesalgoritmene var det klart at Algoritme 2 oftest ledet roboten til målet. Imidlertid var det noen tilfeller hvor roboten ikke klarte å navigere rundt hindringer og nå målet. I tillegg er algoritmen ineffektiv ettersom roboten stopper hver 20. grad for å sjekke om den har rotert nok til å begynne å bevege seg fremover, i stedet for å rotere de nødvendige gradene i én bevegelse før den kan begynne å bevege seg langs hindringen. Et annet problem er at roboten noen ganger uventet svinger frem og tilbake på samme sted.
En tredje algoritme, Algoritme 3, ble også utviklet. Algoritme 3 er en videreutvikling av Algoritme 2, men testing avslørte at den har mye uventet oppførsel som får roboten til å krasje i situasjoner der den normalt ikke ville gjort det og generelt oppfører seg uforutsigbart. Algoritme 3 forventes å være mer effektiv enn Algoritme 2 hvis disse problemene blir løst.
For fremtidig arbeid bør Versjon 2 forbedres ytterligere for bedre kollisjonsunngåelse. Alternativt kan et helt nytt kollisjonsunngåelsessystem implementeres ved hjelp av andre typer sensorer. For hindringsunngåelsesalgoritmene bør enten Algoritme 2 videreutvikles eller Algoritme 3 fikses før videre utvikling. Uansett hvilken løsning som velges, bør algoritmen forbedres for å øke effektiviteten. This master’s thesis is part of a SLAM robot project aimed at developing cooperating robots for mapping and localization of unknown areas. In this thesis, existing mobile ground robots are used. These robots already have significant functionality implemented, so the goal of this thesis is to improve existing functionalities as well as implementing new ones. The thesis primarily focuses on collision and obstacle avoidance for these mobile ground robots. Additionally, several smaller improvements were made. The main files used for collision and obstacle avoidance in the robot code were cleaned up and slightly restructured. This cleanup resulted in the deletion of a significant number of unused code lines, making these files more readable. However, the robot code would still benefit from a more thorough cleanup. Furthermore, a test program was successfully created to verify the functionality of the robots, assisting those who repair the robots when they have malfunctioning hardware. The resulting test program was of great help in robot repairs. Lastly, the work done in this thesis was merged with contributions from other students working on the SLAM robot project, to ensure cohesive progress.
A collision avoidance version was implemented in the specialization project [\cite{SpecPro}] that was written as a build up to this master thesis. This version serves as the initial collision avoidance version in this thesis. Two additional versions were developed, and all three versions were tested in four tests designed to reveal each version’s strengths and weaknesses. Each version was scored based on the robot’s ability to avoid crashing into obstacles and to reach the target position when no obstacles were present. Version 2 performed the best and received the highest score. Subsequently, the obstacle avoidance functionality was investigated. For the robot to navigate around obstacles, it is crucial that it stops upon approaching one. Since Version 2 of collision avoidance performed the best, it was used as the baseline for implementing the obstacle avoidance algorithms.
In the specialization project [Eidsnes (2023)], two obstacle avoidance algorithms were designed but not implemented. These two algorithms, along with one additional algorithm, were adjusted/developed, implemented, and tested in a different test set designed to reveal strengths and weaknesses in obstacle avoidance.
As mentioned, Version 2 of collision avoidance performed the best overall in the tests and was therefor the baseline for implementing the obstacle avoidance algorithms. However, Version 2 does not perform perfectly. The robot sometimes crashes when approaching small obstacles or when not approaching obstacles head-on. Additionally, it sometimes stops when no obstacles are in front of it. These problems are mainly due challenges with the robot having a turning sensor tower, resulting in blind spots between each sensor. Furthermore, the nRF board that contains the robot software appears to have a capacity problem, which forces a solution where the sensor tower skips a degree each time it turns, to avoid software crashes. This weakens the robot's ability to detect obstacles.
Since the obstacle avoidance algorithms use Version 2 of collision avoidance, the same issues persisted after implementing the obstacle avoidance algorithms. From the testing of the obstacle avoidance algorithms, it was clear that Algorithm 2 most often led the robot to the target. However, there were a few instances where the robot failed to navigate around obstacles and reach the target. Additionally, the algorithm is inefficient as the robot stops every 20 degrees to check if it has turned enough to start moving forward, rather than turning the necessary degrees to start moving along the obstacle. Another issue is that the robot sometimes unexpectedly oscillates back and forth at the same position.
A third algorithm, Algorithm 3, was also created. Algorithm 3 is a further development of Algorithm 2, but testing revealed that it has many unexpected behaviors that cause the robot to crash in situations where it normally would not and generally behaves unpredictably. Algorithm 3 is expected to be more efficient than Algorithm 2 if these issues are resolved.
For future work, Version 2 should be further improved for better collision avoidance. Alternatively, a completely new collision avoidance system could be implemented using different sensors. For the obstacle avoidance algorithms, either Algorithm 2 should be further developed or Algorithm 3 should be fixed before further development. Whatever solution is chosen, the algorithm should be improved to increase efficiency.