Skip to main content
Keksit
Käytämme evästeitä analytiikkaan, markkinointiin ja sen kohdentamiseen. Voit lukea selosteen täältä.
3.5.2024 | Teknologia

Ajatus­maailmaerot web-kehityksen ja robotiikan välillä

Web-kehityksessä ja robotiikan ohjelmistokehityksessä on huomattavissa eroja ohjelmoijan ajatusmaailmassa sekä asioissa, johon ohjelmoija keskittyy. Tiettyjen, robotiikassa käytettävien käytänteiden avulla web-sovelluksista voidaan tehdä tehokkaampia.

Johdanto

Robotista puhuttaessa tarkoitan liikkuvaa robottia (mobile robot), joka toimii akusta saatavalla energialla. Keskityn tässä robottien ohjelmistoihin, en niinkään laitteistopuoleen, joka myöskin on tärkeä osa robotin toimivuutta ja energiatehokkuutta. Usein web-sovelluksia kehitettäessä keskitytään erityisesti ohjelman toiminnallisuuteen ja käyttökokemukseen, kuten käyttöliittymään sekä ohjelman nopeaan toimitukseen. Helppokäyttöistä ja toimivaa ohjelmistoa onkin mukavaa käyttää, mutta melko usein unohdamme sen, kuinka paljon web-sovellus todellisuudessa käyttää tietokoneen laskentatehoa tai muistia, niin palvelimella kuin käyttäjän omalla laitteellakin. Robotiikassa, etenkin sellaisten robottien ohjelmistoa kehittäessä, jotka toimivat akkuvirralla, lähestymistapa on melko päinvastainen. Vaikka nykyään pieneenkin robottiin voidaan laittaa melko paljon laskentatehoa ja muistia sisältäviä komponentteja, käytetään niiden antamia resursseja mahdollisimman säästäväisesti, jolloin muun muassa robotin akun kestoa voidaan lisätä.

Laskentaresurssien optimoinnin merkitys

Seuraavaksi tutustumme pintapuolisesti siihen, miksi ylipäänsä on tärkeää optimoida resurssien käyttö ja mitä ongelmia huonosta optimoinnista voi aiheutua. Ohjelmistokehityksessä on tärkeää huomioida erilaisten resurssien kuten laskentatehon käyttöä, koska se vaikuttaa ohjelman suorituskykyyn, luotettavuuteen ja kustannuksiin [1]. Eri alustoilla toimivissa sovelluksissa resurssien hallinta otetaan huomioon eri tavalla. Esimerkiksi web-kehityksessä, jossa sovellukset toimivat usein pilvipalveluissa, resurssien käyttöä voidaan skaalata dynaamisesti käyttäjän tarpeiden mukaan. Web-sovelluksissa resurssien optimointi on tärkeää erityisesti kustannusten alentamiseksi, mutta yleisesti vähemmän kriittistä kuin robotiikassa, jossa resurssit ovat rajallisempia ja niiden optimaalinen käyttö on hankalampaa. Toisaalta, robotiikan sovelluksissa, kuten autonomisissa ajoneuvoissa tai älykkäissä laitteissa, laskentaresurssien rajallisuus asettaa erityisiä haasteita. Rajoitetun muistin ja prosessointitehon lisäksi myös energiankulutuksen minimointi on tärkeää, etenkin roboteissa, joissa akunkestävyys vaikuttaa suoraan robotin toiminta-aikaan ja käyttömahdollisuuksiin. Optimoimalla algoritmeja, tietorakenteita ja resurssien käyttöä, ohjelmistokehittäjät voivat vähentää ohjelmiston laskentatehoa ja energiankulutusta [1]. Tämä pätee sekä robotiikan ohjelmistoissa että web-kehityksessä. Erityisesti jälkimmäisessä huomataan pienemmät kustannukset, jotka saadaan hyvin optimoidusta ohjelmasta.

Web-kehityksen ajatusmaailma

Kuten jo edellä mainitsin, web-kehityksessä keskitytään usein sovelluksen ulkoasuun, käyttöliittymään ja toimivuuteen. Usein nämä ovatkin käyttäjän kannalta hyödyllisiä ominaisuuksia. [2] Harvoin kuitenkin tulee ajatelleeksi sitä, kuinka energiatehokas tuotettu sovellus loppujen lopuksi on. Ulospäin näyttää siltä, ettei suurta osaa fullstack-ohjelmoijista kiinnosta sovelluksen energiatehokkuus juuri lainkaan — riittää, että sovellus toimii ja ajaa asiansa. Toisaalta hienoja ja toimivuudeltaan hyviä sovelluksia on kuitenkin mahdollista luoda energiatehokkaasti ottamalla huomioon erilaisia asioita. Osa asioista on melko itsestäänselvyyksiä, kuten se, että turhien pyyntöjen lähettäminen backendiin on palvelimia kuormittavaa ja tehotonta [2]. Web-sovellusten testausta harjoitetaan kohtalaisen paljon. Usein testaamisessa keskitytään etenkin käyttökokemukseen ja käyttöliittymän testaukseen. Ohjelman suorituskykyä mitataan testeissä harvemmin, vaikka se voisi auttaa löytämään optimoinnin kohteita, jolloin suorituskyvyn parantaminen on helpompaa keskittymällä suoritusta hidastaviin pullonkauloihin [2]. Myös sovelluksen toimivuuden ja logiikan testaus on hyvin tärkeää. Löydetyt virheet tulisi tarkastaa huolella, koska ne saattavat kertoa suuremmista ongelmista ohjelmistossa, jotka vaikuttavat ohjelman tehokkuuteen, toimivuuteen ja energiatehokkuuteen negatiivisesti [2]. Edellä kuvatut, toiminnaltaan huonosti optimoidut ohjelmat, tuntuvat olevan erityisen yleisiä web-kehityksessä. Vaikka kaikkia sovelluksia ei tarvitsekaan optimoida huippuunsa, voimme oppia energiatehokkaampien sovellusten tuottamista tarkastelemalla esimerkiksi robottien ohjelmistokehitystä ja siinä ilmeneviä ajatusmalleja sekä haasteita.

Ajatusmaailma ja haasteet robotiikassa

Usein kun robottia aletaan suunnittelemaan, mietitään tarkkaan siihen tarvittavat komponentit ja ohjelmiston vaatimukset. Komponentit määrittävät robotin käytössä olevat resurssit, joita ovat muun muassa laskentateho (esim. CPU ja GPU), muisti, tallennustila sekä akun kapasiteetti. Edellä mainitut resurssit ovat usein hyvin rajalliset, jolloin robottiin tehtävän ohjelmiston tulee toimia niiden rajoissa. [3] Kun robotissa käytettävää ohjelmistoa aletaan suunnittelemaan, huomioidaan saatavilla olevat resurssit hyvin tarkasti. Ohjelman tulee toimia mahdollisimman optimaalisesti, jolloin se toimii annettujen resurssien rajoissa. Lisäksi myös ohjelman energiatehokkuus on tärkeää, jotta robotin akun kulutus saataisiin minimoitua [3]. Ohjelman optimoinnissa tulee ottaa huomioon muutamia asioita. Ohjelmakoodin tulee esimerkiksi olla mahdollisimman optimoitu ja yksiselitteinen, jolloin se tekee vain ja ainoastaan asioita, jotka ovat robotin toiminnan kannalta tarpeellisia [3]. Tapauksessa, jossa robotti kerää dataa ympäristöstään, tulee ohjelmoijan miettiä mahdollisimman optimaalinen tapa tallentaa ja tarvittaessa lähettää kerättyä dataa. On tärkeää suunnitella, millaista dataa kerätään, kuinka usein, ja tarvitseeko data lähettää reaaliaikaisesti esimerkiksi verkon välityksellä vai riittääkö, että data tallennetaan muistikortille, joka luetaan robotin palatessaan tehtävältään. Tällaiset, melko pienet jo suunnitteluvaiheessa mietittävät asiat parantavat ohjelman energiatehokkuutta. Toinen tapaus on se, että robotin ohjelmisto tarvitsee ulkopuolisesta palvelusta tietoa, esimerkiksi säädataa. Tällaisessa tapauksessa tulee tarkkaan miettiä, kuinka usein dataa on järkevä hakea palvelusta ja onko sitä tarpeellista tallentaa. Edellisen esimerkin tapauksessa, jossa robotti hakee säädataa, on tärkeää miettiä, kuinka usein dataa haetaan. Jos robotin yhtäjaksoinen käyttöaika on lyhyt, voidaan data hakea ja käsitellä ilman tallennusta, koska voimme luottaa siihen, että säädata ei muutu kovin nopeasti. Robotin, jota käytetään pitkään yhtäjaksoisesti, on tarpeen hakea dataa useampaan kertaan sään mahdollisen muuttumisen vuoksi, tai tallentaa pidempiaikainen sääennuste. Ulkoisen palvelun käyttö voi joissain tilanteissa aiheuttaa myös ongelmatilanteita, mikäli palvelu vastaa hitaasti tai siihen ei saada yhteyttä. Erilaisten virheiden minimointi ja käsittely on huomattavan tärkeässä roolissa robottien ohjelmistoja kehittäessä. Pahimmassa tapauksessa virheet voivat aiheuttaa vaaratilanteita tai tilanteita, joissa robotissa käytettävät komponentit tuhoutuvat. Virheiden minimoinnissa auttaa kattava testaus, niin simulaatiossa kuin oikeassa ympäristössä. [4] Robottien suunnittelussa on erityisen tärkeää se, että ohjelmisto sisältää vain robotin toiminnan kannalta tarvittavia asioita, jotka ovat toteutettu mahdollisimman optimaalisesti käytettävissä olevien resurssien rajoissa.

Vertailua

Mielestäni tärkein ero robotiikan ohjelmistokehityksen ja web-kehityksen välillä on asennoituminen ohjelmiston optimointiin ja tehokkuuteen. Kuten jo aikaisemmin mainitsin, web-kehityksessä harvemmin keskitytään ohjelmiston äärimmilleen optimointiin, jolloin myös lopullinen ohjelmisto ei ole erityisen energiatehokas tai toimii hitaasti. Vaikka robottien ohjelmistojen kehityksessä voidaan nykyään käyttää fullstack-kehityksen kanssa samankaltaisia tallennus- ja datankäsittelyratkaisuja, kuten pilvipalveluita, tulee tarkkaan harkita, onko se järkevää. Huonoon robotin ohjelmistoon ratkaisuna ei ole se, että siirretään esimerkiksi datan käsittely lähes rajattoman pilvipalvelun hoidettavaksi, koska ohjelmiston energiatehokkuus ja täten myös akunkesto voivat kärsiä lukuisista pyynnöistä pilvipalveluihin. Lisäksi tiedon hakeminen ja lähettäminen saattaa kestää melko kauan, jolloin reaaliaikasesti toimivan robotin tehtävän suorittaminen voi hidastua. Sen sijaan robotin omat resurssit tulee suunnitella siten, että se suorituu datan käsittely- ja muista tehtävistään. On tosin huomioitava se, että joissain tapauksissa esimerkiksi pilvipalvelun käyttö robotin ohjelmistossa voi olla tarpeellista. Tällaisissa tapauksissa tulee miettiä tarkkaan, mihin kyseisiä palveluita käytetään ja miten se tehdään mahdollisimman tehokkaasti. Web-kehityksessä virheet eivät yleensä aiheuta kovin suuria haittoja, vaikkakin lukuisista pyynnöistä maksulliseen API:in aiheutuvat laskut ovat ikäviä. Robotiikassa kulut voivat tosin olla huomattavasti suurempia, mikäli jokin kallis komponentti kuten sensori tuhoutuu ohjelmistossa esiintyneen virheen takia. Kummassakin alustassa on mielestäni tärkeää testata lopullinen ohjelma tarkkaan, jotta havaitaan mahdolliset ongelmat, jotka aiheuttavat ohjelmiston tehotonta toimintaa tai muita haittoja. Vaikka laskentaresurssien optimointi ei ole vaatimus web-sovelluksille, voidaan sen ansiosta saada paljon hyötyä, joista tärkeimpiä ovat alhaisemmat kustannukset ja tehokkaampi ohelmisto.

Yhteenveto

Edellä on esitelty kaksi hyvin erilaista ohjelmoinnin osa-aluetta: robotiikka ja web-kehitys. Vaikka alueet ovatkin erilaisia, voidaan esimerkiksi web-kehityksessä ottaa mallia robottien ohjelmistojen kehityksestä — tai miksei myös toisin päin. On kuitenkin tärkeää muistaa, ettei kaikkia ohjelmistoja ole järkevää optimoida äärimmilleen, koska se vie aikaa ja kasvattaa kehityskustannuksia. Pidempi kehitysaika ja suuremmat kustannukset ohjelmistokehityksessä voivat kuitenkin maksaa itsensä takaisin, mikäli ohjelmisto toimii tehokkaasti ilman virheitä ja jatkuvaa tarvetta bugien korjauksille.

Lähteet

  1. [1] D'Agostino, D., Merelli, I., Aldinucci, M., & Cesini, D. (2021). "Hardware and Software Solutions for Energy-Efficient Computing in Scientific Programming." Scientific Programming, 2021, 5514284. https://doi.org/10.1155/2021/5514284
  2. [2] Marang, A. Z. (2018). "Analysis of web performance optimization and its impact on user experience." https://urn.kb.se/resolve?urn=urn:nbn:se:kth:diva-231445
  3. [3] Buttazzo, G., Marinoni, M., & Guidi, G. (2004). "Energy-Aware strategies in Real-Time systems for autonomous robots. In Lecture notes in computer science." https://doi.org/10.1007/978-3-540-30182-0_85
  4. [4] Afzal, Afsoon & Goues, Claire & Hilton, Michael & Timperley, Christopher. (2020). A Study on Challenges of Testing Robotic Systems. 96-107. 10.1109/ICST46399.2020.00020.
Nevil Sandaradura
Kirjoittanut Nevil Sandaradura

Piditkö tästä artikkelista? Anna sille taputus!