door Vicente Egea, Jorge Garrido, Roberto Guzmán, Ranko Zotovic Over de auteur: Roberto Guzman is afgestudeerd in Computerwetenschappen en is professor en onderzoeker geweest op het gebied van Robotica aan de TU van Valencia, afdeling "Systems and Automation Engineering". Ook is hij onderzoeker geweest aan de FernUniversitaet te Hagen (Duitsland) voor de afdeling Meet- en Regeltechniek ("Process Control and Regulation"). Op dit moment is hij werkzaam bij de onderzoeksafdeling van TMC-Electronics. Ranko Zotovic is ingenieur. Hij heeft een aantal jaren ervaring met het ontwerpen en vervaardigen van industriële machines, zoals robots, hulpmiddelen voor snijmachines, kwaliteitsbewaking etc. Hij is nu werkzaam als professor in Robotica en CAD/CAM (computergestuurd ontwerpen en -fabriceren) op de afdeling "Systems and Automation Engineering" van de TU Valencia. Jorge Garrido Serrano is afgestudeerd in Computerwetenscappen. Zijn afstudeeropdracht was het ontwerpen en implementeren van de software voor PCBot. Hij werd hiervoor onderscheiden met de "Bancaja prize for Partnerships with Industry". Hij maakt nu deel uit van het Europese project "MobiNet" (Mobile Robotics Technology for Health Care Research) onder auspiciën van de FernUniversitaet - Hagen (Duitsland). Vicente Egea Manas is afgestudeerd in Computerwetenscahppen. Ook hij is onderscheiden met de "Bancaja prize for Partnerships with Industry" voor zijn ontwerp en toepassing van de hardware voor PCBot. Hij werkt nu bij TGI. Inhoud: |
Kort:
Onderzoek naar mobiele robots is de laatste jaren enorm in ontwikkeling. Een groot aantal research afdelingen die zich bezig houden met Robotica, Mechanische Elektronica en Kunstmatige Intelligentie hebben zich daarbij toegelegd op het bestuderen van autonome voertuigen. Tot nu toe is dit onderzoek, vanwege de hoge kosten, beperkt gebleven tot de vliegtuigindustrie, militaire toepassingen en atoomonderzoek. De huidige snelle ontwikkelingen hierin hebben echter geleid tot toepassingen in de landbouw, industrie, dienstverlening, mijnbouw, medicijnen etc. Het heeft zich hierdoor ontwikkeld tot een strategisch onderzoeksgebied met groeipotentie.
Huidige, commercieel verkrijgbare robots hebben een aantal beperkingen waardoor hun toepasbaarheid beperkt blijft tot het laboratorium. Beperkingen zijn onder andere de hoge kosten, gesloten architecturen, gebrek aan documentatie en de beperkte schaalbaarheid. Deze beperkingen gelden zowel voor de software alsook voor de hardware.
Op onze afdeling "Systemen en Automatisering" hebben we daarom besloten een robot te bouwen zonder al deze beperkingen. We gingen daarbij uit van een architectuur, gebaseerd op de PC, vanwege het grote aantal voordelen dat dit heeft: prijs, rekenkracht, standaardisatie, schaalbaarheid en de verkrijgbaarheid van zowel hardware als software. De keuze daarbij voor Linux en zijn real-time variant RT-Linux heeft ons enorm geholpen in het succesvol afronden van dit project.
Het ontwerp bestaat uit twee gedeelten. Het onderste deel, waar alle
mechanica en batterijen zich bevinden, en het bovenste deel, waar alles te
vinden is wat te maken heeft met besturing en communicatie van het voertuig.
Het onderste deel is aangebracht op een aluminium plaat. Hierop zijn de wielen
gemonteerd, overbrenging, motoren, encoders, voeding, batterijen en behuizing.
Op het bovendeel bevindt zich de PC-kaart met aanverwante besturingskaarten en
floppy drive.
Voor- en zijaanzicht van het bestuurbare voertuig "PCBot". |
Hardware Architectuur |
Door deze vereisten is het gebruik van een real-time operating systeem noodzakelijk. Bij dit soort systemen hangen de resultaten niet alleen af van de juiste berekeningen, maar ook of deze tijdig beschikbaar komen.
We besloten de PCBot software architectuur te maken onder Linux 2.0.33 met daarbij de real-time extensies (versie 0.6).
Motivatie voor de keuze van Linux en RT-Linux is dezelfde als bij automatiseringsbedrijven die hiervoor kiezen:
Real-time operating systeem RT-Linux |
Het gebruik van TCP/IP zorgt ervoor dat de robot onafhankelijk is van het gebruikte operating systeem op de host. De client wacht op opdrachten van de gebruiker en stuurt deze door naar de robot. Er zijn drie typen opdrachten: bewegen, toestand instellen en toestand opvragen. De client controleert de syntaxis van het commando, zet dit om in een bericht en verstuurt dit naar de server met behulp van sockets.
De server staat te wachten op verbindingen vanaf de client. Na het maken
van de verbinding zal de server eventuele opdrachten vertalen en doorgeven
naar de real-time module die de besturing regelt. Deze module voert de
betreffende opdrachten uit en controleert tegelijkertijd de toestand en
integriteit van het systeem middels een "watchdog"-achtig proces.
Software Architectuur |
De real-time module bestaat uit regelmatig uit te voeren real-time taken (bewegings-opdrachten en watchdog) en minder regelmatige taken (driver en stop).
Een binaire semafoor schermt de toegang af tot de hardware voor real-time processen. Dit is nodig om verschillende redenen. Allereerst maakt de communicatie met de sturings-kaarten gebruik van een offset register. Als het gebruikende proces wordt onderbroken door een ander proces dan bestaat het gevaar dat er onzin in het register wordt geschreven. Ten tweede draaien er protocollen op registerniveau die niet onderbroken mogen worden. Tenslotte moeten de stuursignalen naar beide assen zo synchroon mogelijk worden uitgevoerd.
Drie real-time FIFO (First In First Out)-wachtrijen (queues) verzorgen de communicatie tussen de real-time module en de server. De server schrijft bewegings-opdrachten van de client naar een wachtrij. De twee andere wachtrijen worden vervolgens door de real-time module gebruikt om de ontvangst van het commando te bevestigen en eventueel de client -via de server- op de hoogte te stellen van afwijkingen.
Een mogelijk scenario is het volgende: de gebruiker start een client programma dat een interface vormt tussen de gebruiker en de PCBot. Ieder commando van de gebruiker wordt door de client doorgegeven aan de server. De server ontvangt het bericht (commando) en geeft dit door aan de real-time module via de daarvoor bestemde wachtrij.
Een driver-proces, verbonden aan die wachtrij, handelt het commando verder af en, indien het een bewegings-opdracht betreft, zal hij de betreffende real-time taak starten en een bevestiging hiervan naar de server sturen. De gestarte taak zal vervolgens voor de juiste acties zorgen om de motoren (en daarmee de wielen) op de juiste manier in beweging te zetten.
Naast de beweeg-opdrachten kan de gebruiker daarbij nog een toestandsverandering forceren of de toestand opvragen. In beide gevallen zal dezelfde driver op dit commando reageren door het manipuleren of uitlezen van de toestandsvariabelen.
De globale variabelen staan in gedeeld geheugen dat door alle real-time
taken (inclusief de driver) is uit te lezen. Het gebruik van deze variabelen
is een simpele en snelle manier om taken onderling te laten communiceren. De
watchdog bijvoorbeeld, verzorgt berichten naar de server indien er sprake is
van een belangrijke wijziging in de toestand of als er een onverwachte
situatie optreedt.
Software architectuur - systeem taken |
De keuze voor Linux en de real-time uitbreiding RT-Linux bleek een goede. We hadden hiermee de beschikking over zeer krachtige hulpmiddelen als "wpe" (Windows Programming Environment) en de GNU C compiler, zonder extra kosten.
Linux heeft zijn betrouwbaarheid bewezen tijdens onze experimenten en bleek daarbij ook nog eens effectief met het systeem om te gaan. Hierdoor waren we in staat om met meerdere mensen tegelijk comfortabel te werken op een simpele 486 PC. Sterker nog, na analyse van het systeemgebruik bleek dat zelfs in de drukste periodes, de processor nooit meer dan 30% belast is geweest.
De systeem software is verkrijgbaar in de public domain waardoor deze ons ten alle tijde ter beschikking stond. Dit heeft ons veel inzicht verschaft in de interne werking van het systeem waardoor weer ideeën voor een oplossing konden ontstaan (Zoals het gebruik van andere time managers, nieuw te ontwikkelen drivers etc.). Dit hadden we niet kunnen doen met een commerciële robot.
Fouten zoeken in RT-Linux is simpel. Dit kan onder andere via het aanpassen van de kernel en het zichtbaar maken van variabelen via de systeemfunctie "printk()".
Gedurende het gehele ontwikkeltraject hadden we de volledige steun van
onder andere de RT-Linux mailing-list en de hulp van een uitgebreide set
documentatie.
Oorspronkelijk in het Engels.
Vertaald door Tom Uijldert
Site onderhouden door het LinuxFocus editors team
© Vicente Egea, Jorge Garrido, Roberto Guzmán, Ranko Zotovic LinuxFocus 1999 |
1999-10-11, generated by lfparser version 0.6