Skriv ut

Operativsystemet Contiki underlättar utveckling av trådlösa sensornät, skriver Adam Dunkels på SICS, Swedish Institute of Computer Science

Adam Dunkels är teknologie licentiat inom området trådlösa sensornätverk och arbetar som forskare vid Swedish Institute of Computer Science i Kista sedan år 2000. Hans forskning har bland annat resulterat i programvara för nätverkskommunikation för inbyggda system som idag används i produkter från hundratals företag världen över.
Han har skrivit datorprogram sedan 5-årsåldern och har inga planer på att sluta.


Ett tiotal år efter Internetrevolutionen står vi nu inför nästa revolution: små, trådlösa sensorsystem som kan mäta och upptäcka allt från temperaturförändringar och vibrationer i maskiner till luftkvalitet och avvikande vägljud. Ett sådant trådlöst sensornätverk består av enkla, batteridrivna sensorenheter som själva organiserar sig i radiobaserade nätverk där varje sensorenhet fungerar som ett relä åt de andra sensorenheterna. Enheterna hjälper således varandra att skicka data till en basstation.

Till skillnad från traditionella sensorsystem, med ett fåtal sensorer, kan sensornätverk till exempel göra mätningar i stora områden eller göra mer detaljerade mätningar samtidigt som man kan bli mindre känslig för att någon av sensorerna går sönder eller gör felaktiga mätningar. Vi har ju en inbyggd redundans i systemet.

 

ImageSimulering av en sensornods radiotäckning runt SICS kontor i Kista. I blå fält är sannolikheten för bitfel minst.


Beståndsdelarna i sensornätet, de trådlösa sensorenheterna, är i princip små inbygga system - små datorer som är specialanpassade för sin uppgift. På varje sensorenhet sitter en eller flera sensorer, en mikroprocessor och en radiomodul.

Tanken är att en sensorenhet inte ska vara större än en enkrona och inte kosta mer än cirka 10 kronor styck. Idag kostar tillgängliga sensorenheter betydligt mer än så och är i de flesta fall betydligt större än en enkrona, men många tillverkare håller på att ta fram nya modeller som är både mindre och billigare än dagens produkter.
På SICS forskar vi bland annat om programvaran till sensorenhetens mikroprocessor. För att hålla nere kostnad och energiförbrukning är processorn i allmänhet mycket enkel med något fåtal kilobyte internminne och något tiotal kilobyte kodminne.

 

 

Image
Framtidens sensornoder ska vara små som mynt, eller som riskorn i de vildaste visionerna. Sensornoden som Saab använde har GoldCapkondensator, PIR-sensor, radiomodul, summer, mikrofon, vibrationssensor och MSP430-processor.


Dessa begränsningar gör programmeringen till en utmaning.

SICS har utvecklat operativsystemet Contiki som ska underlätta programmeringen. Det är anpassat för stränga minnesbegränsningar.

Eftersom vi arbetar med olika typer av sensorenheter med olika mikroprocessorer har vi dessutom gjort Contiki enkelt att anpassa till nya mikroprocessorer. För närvarande kör vi själva Contiki på TI MSP430 och x86 och samarbetar med företag som använder Contiki på bland annat Atmel AVR och Hitatchi HC12.

Contiki hjälper till att hålla nere minnesåtgången på två olika sätt. Dels kräver själva Contikisystemet mycket lite minne - ner till ett tiotal byte RAM - och dels innehåller Contiki mekanismer som gör det lättare att skriva minnessnåla program. Vi har utvecklat en speciell programmeringsteknik, kallad protothreads, som både sparar minne och gör programmen mindre komplexa.

Man kan uppnå en 30-procentig förbättring genom att använda protothreads istället för händelsestyrd programmering, som är den vanligaste modellen idag.

De flesta operativsystem för små inbyggda system bygger på principen att hela systemet i förväg kompileras från källkod, för att sedan brännas in i ROM-minnet på den inbyggda systemet. För att skriva in ett system i minnet krävs att man kopplar mikroprocessorn till en PC, exempelvis med en JTAG-kabel.

När man utvecklar programvara för trådlösa sensorer märker man dock snabbt att detta sätt har sina begränsningar. Om systemet består av, låt oss säga, 40 trådlösa sensorenheter tar det ett antal timmar att samla in alla enheter, koppla in dem en och en i PCn, samt skriva in en uppdaterad version av programvaran i enhetens minne.

Vanligtvis behövs många sådana här cykler när man utvecklar programvara.

Till skillnad från andra inbygga operativsystem bygger Contiki på principen att delar av systemet kan ersättas under drift. På detta sätt behöver man inte koppla in varje enhet till sin PC för att uppdatera dess programvara.

Genom att dessutom utnyttja att man med radio kan nå alla enheter med en och samma sändning, kan man uppdatera ett stort antal enheter på samma gång, utan att behöva samla in dem.

När vi tillsammans med SAAB Systems tog fram ett intrångsdetektionssystem sparade vi flera timmar om dagen genom att utnyttja denna funktionalitet.

Contikisystemet består av två delar: dels det eller de program som utgör tillämpningen och dels en kärna med systemkomponenter, bland annat nätverkskod, processhantering och drivrutiner för hårdvaran. Under drift kan alla komponenter utom kärnan bytas ut.

Trots möjligheten att byta ut moduler under drift är det ändå ofta svårt och tidsödande att arbeta direkt mot riktiga sensorenheter som sitter utplacerade i ett nätverk. Avlusning är i princip omöjligt på grund av svårigheten att observera systemet.

Även här kommer dock Contiki till undsättning; vi har nyligen utvecklat en simulatorprogramvara, skriven i en kombination av Java och C.

Istället för att testa sitt program på riktigt efter en uppdatering kör man programmet i simulatorn och kan inspektera enskilda sensorenheter för att se hur ens program beter sig. Simulatorn tar dessutom hänsyn till radioomgivningen i nätverket så att man kan se hur bra det går att skicka data genom det trådlösa nätverket.

För att anpassa Contiki till en ny typ av mikroprocessor krävs egentligen bara en C-kompilator för processorn. Man behöver inte skriva om Contikikoden - allt som krävs är drivrutiner för I/O-enheter och annan systemhårdvara.

Allt fler inbyggda system behöver idag kunna kopplas upp mot Internet. För detta använder Contiki SICS egen TCP/IP-stack uIP. Den kräver endast 5-6 kilobyte kodminne och ner till ett par hundra byte RAM.

Är Contiki lösningen på alla problem man stöter på när man skriver programvara för trådlösa sensornätverk? Nej, det är fortfarande en svår konst. Contiki är ett steg i rätt riktning, men ännu återstår mycket att göra. Framförallt är det fortfarande väldigt svårt att avlusa ett program som körs på upp till ett hundratal sensorenheter, även om nätverkssimulatorn i Contiki gör det avsevärt lättare. n

Läs mer om Contiki på http://www.sics.se/~adam/contiki/ (länk) .