Robottien ja tekoälyn maailma kiehtoo monia, mutta mistä oikein lähteä liikkeelle, kun haluat rakentaa oman “älykkään” koneen? Robotalk Podcastin emäntä Elli Enigma ottaa sinut mukaan työpajaan, jossa käydään läpi sensorit, aivot (eli ohjelmisto) ja kaikki se, mikä saa robotin ajattelemaan itsenäisesti.
Tekoäly robottiprojekteissa: Raspberry Pi Pico, Pi 5 ja Jetson Nano
Robottien älyttäminen on siirtynyt harrastajan ulottuville. Pienemmät mikrokontrollerit ja edulliset kehityskortit pystyvät jo pyörittämään koneoppimista reunalaskentana, eli ilman pilveä. Tässä katsauksessa käydään läpi, miten teet omasta robotistasi älykkään hyödyntämällä Raspberry Pi Picoa, Raspberry Pi 5:ttä ja NVIDIA Jetson Nanoa Pythonilla ja C++:lla.
Raspberry Pi Pico ja TinyML
Raspberry Pi Pico on edullinen, ARM Cortex-M0+ -pohjainen mikrokontrolleri, joka loistaa kevyissä AI-tehtävissä TinyML-frameworkien avulla. TensorFlow Lite Micro sallii pienien neuroverkkojen ajon suoraan microcontrollerin RAM-muistissa, esimerkiksi tunnistamaan ääniä tai yksinkertaisia kuvioita sensoreiden syötteistä.
- Käytä MicroPythonia nopeaan prototypointiin
- Optimoi mallit int8- tai uint8-kvantisoinnilla muistin säästämiseksi
- Hyödynnä Picon PIO-oheispiirejä reaaliaikaiseen signaalinkäsittelyyn
- Testaa simuloituna ennen lataamista laitteelle, jotta virheet tulee kiinni ajoissa
Pico sopii parhaiten sulautettuihin älytoimintoihin, joissa kaistanleveys ja virrankulutus on minimissään mutta älykkyyttä silti tarvitaan.
Raspberry Pi 5: monipuolinen AI-alusta
Raspberry Pi 5 on täysiverinen Linux-tietokone, jossa on neliytiminen Cortex-A76 2,4 GHz -suoritin, 4–8 GB LPDDR4 RAM ja PCIe-tuki ulkoisille NPU-kiihdyttimille. Se pystyy ajamaan TensorFlow Lite- ja PyTorch-malleja sulavasti sekä käsittelemään OpenCV-pohjaisa videoanalytiikkaa.
- Asenna 64-bittinen Raspberry Pi OS ja päivitä pakettivarastot
- Pipillä Python-kirjastot: numpy, pandas, opencv-python, tflite-runtime
- Käytä SSD:tä PCIe-väylässä nopeaan mallien lataukseen
- Ota GPU käyttöön OpenCL- tai Vulkan-rajapinnan kautta kevyisiin CV-sovelluksiin
Pi 5 soveltuu vaativiin reunalaskentatehtäviin, kuten reaaliaikaiseen kuvantunnistukseen, ääniavustajiin tai monimutkaisiin robottiprosesseihin.
NVIDIA Jetson Nano: reunalaskennan tehopaketti
Jetson Nano on NVIDIAn reunalaskentayksikkö, jossa on 128 CUDA-ydintä ja 4 GB LPDDR4 RAM:ia. Se tukee täyttä NVIDIA JetPack-stackia, TensorRT-kiihdytystä ja ROS-integraatiota, minkä ansiosta voit ajaa useita neuroverkkoja rinnakkain ja orkestroida autonomista toimintaa suoraan piirillä.
- Flashaa JetPack SDK microSD-kortille ja aja nvpmodel-modi performance-tilassa
- Käytä TensorRT-muunninta nopeaan inferenssiin ja int8-kvantointia
- Integroi JetBot-robottikehykseen anturien datan keräämiseen ja ajo-opetukseen
- Ota CUDA-streamit ja multi-threading käyttöön monisäikeiseen kuvankäsittelyyn
Jetson Nano on täydellinen valinta, kun robottisi tarvitsee kasvoja tunnistavia kameroita, kollisioon välttyviä lidar-antureita tai itsenäistä navigointia ROS 2 -ympäristössä.
Python ja C++ ohjelmointityökaluna
Python on yleisin valinta AI-mallien käsittelyyn ja prototypointiin: kirjastoista TensorFlow Lite, OpenCV ja PyTorch tarjoavat suoraan tuen pienille laudoille. C++ puolestaan mahdollistaa tiukan optimoinnin ajovaiheessa, kun inferenssin viiveet ja muistijalanjälki pitää pitää minimissä.
- Rakenna datankäsittelyputket Pythonilla ja siirrä haastavat osat C++-laajennuksina
- Käytä MicroPythonia Picon päällä logiikan testaamiseen ennen C++-porttausta
- Hyödynnä SWIG:iä tai pybind11:ä yhdistääksesi C++-kirjastoja helposti Python-käyttöliittymään
- Profioi koodi valmiilla työkalusarjoilla (gprof, cProfile) ja optoi pullonkaulat
Yhdistämällä Pythonin joustavuus ja C++:n suorituskyky saat robottiprojektisi sekä älykkääksi että responsiiviseksi.
Tekoäly ja robotiikka kulkevat nyt käsi kädessä harrastajasta ammattilaiseen. Pienistä mikrokontrollereista täysiverisiin reunalaskenta-PC:ihin löytyy ratkaisu jokaiseen tarpeeseen ja budjettiin – kunhan valitset oikean laudan ja ohjelmointiympäristön projektisi vaatimalle älykkyydelle.
Käytännön AI-robottiesimerkit: Pico, Pi 5 ja Jetson Nano
Harrastajan robotti saa uuden elämän, kun lisäät siihen tekoälyä. Seuraavaksi esitellään konkreettisia projektiesimerkkejä kolmella suositulla alustalla: Raspberry Pi Pico, Raspberry Pi 5 ja NVIDIA Jetson Nano. Mukana tarvittavat laitteistot, ohjelmistokehykset sekä näytekoodinpätkät Pythonilla ja C++:lla.
Raspberry Pi Pico: TinyML-robotin sielu
Raspberry Pi Pico ja TensorFlow Lite Micro mahdollistavat kevyet neuroverkot suoraan mikrokontrollerilla. Esimerkeissä hyödynnämme MicroPythonia ja C++:aa.
1. Esteentunnistusrobotti (Ultrasonic + TinyML)
- Laitteisto: Raspberry Pi Pico, HC-SR04-ultrasonic, 2× servomoottoria
- Ohjelmisto: TensorFlow Lite Micro C++ -malli, joka on kvantisoitu int8-muotoon
- Toiminta: Pico laskee etäisyyden esteeseen ja ohjaa servoja kiertämään sitä ennakoinnin avulla
#include "pico/stdlib.h"
#include "ultrasonic.h"
#include "model.h" // TFLM-int8-malli
int main() {
stdio_init_all();
ultrasonic_init(2, 3); // trig=GPIO2, echo=GPIO3
while (true) {
int dist = ultrasonic_read_cm();
if (dist < 20) {
// ennakoiva liike vasemmalle
move_servos(-30);
} else {
move_servos(30);
}
sleep_ms(100);
}
}
Mallin koulutus ja kvantisointi:
- Kokoa oma etäisyysdata Python+NumPy:lla
- Train/convert TensorFlow Lite Micro -malliksi
- Sisällytä mallin .h-tiedosto C++-projektiin
2. Keyword Spotting – äänikomennot
- Laitteisto: Pico W, MEMS-mikrofoni, LED
- Ohjelmisto: MicroPython + TensorFlow Lite Micro keyword spotting
- Toiminta: Picon sisäisessä mikrofoni-API:ssa tunnistetaan „start“ ja „stop“ -komennot, LED syttyy käskystä
from tflite_runtime.interpreter import Interpreter
from machine import Pin
import microphone
led = Pin(15, Pin.OUT)
inter = Interpreter(model_path="kws.tflite")
inter.allocate_tensors()
while True:
audio = microphone.record(duration=1000)
inter.set_tensor(inter.get_input_details()[0]['index'], audio)
inter.invoke()
pred = inter.get_tensor(inter.get_output_details()[0]['index'])
if pred.argmax() == 1:
led.on()
else:
led.off()
Keyword-mallin koulutus TensorFlow:lla ja vienti .tflite
-muotoon onnistuu Raspberry Pi Pico -esimerkkirepojen avulla.
Raspberry Pi 5: AI Kitin voima reunalaskennassa
Raspberry Pi 5 yhdessä AI Kitin (Hailo-8L) kanssa kaivaa koneoppimisen pilvestä suoraan reunalle. Tässä kahdessa esimerkissä hyödynnämme Pythonia ja valmista Hailo TAPPAS –post-processing-työkalua.
1. Peeper Pam – pomoilmaisin
- Laitteisto: Raspberry Pi 5 + AI Kit + Camera Module 3 Wide + Pico W + voltmetri
- Toiminta: Pi 5 tunnistaa kasvoja reaaliajassa, websovellus lähettää „boss detected“ –signaalin Picon voltmetrille
- Kielivalinta: Python (OpenCV + Hailo TAPPAS JSON-skenaariot)
sudo apt install hailo-all
git clone https://github.com/veebprojects/peeper-pam.git
cd peeper-pam
python3 boss_detector.py --post-process boss_detect.json
Projektissa Pi päättää, onko kehossa pomotaulu ja lähettää vain varoituksen Pico W:lle, jolloin voltmetrille muodostuu ADC-ohjausnäyttö. Kokonaisuus on inspiroiva esimerkki ja se tehtiin vain 3 päivässä.
2. Autojen laskenta ja seuranta
- Laitteisto: Raspberry Pi 5 + AI Kit + Camera Module Wide
- Toiminta: Edge Impulse + YOLOv5-malli tunnistaa ja laskee ajoneuvot tokaltaan tolpassa – useita kaistoja samanaikaisesti
- Kielivalinta: Python (Edge Impulse SDK + OpenCV)
- Kouluta YOLOv5 custom-malli (dataa useista kaistoista)
- Vie malli TFLite-muotoon ja lataa Pi 5:lle
- Aja seuraava skripti:
python3 car_counter.py --model car_yolov5.tflite --input wide_cam
Tulos: reaaliaikainen laskutoiminto tolppien virtaustilanteeseen ja datan tallennus CSV:ään oppimista varten.
NVIDIA Jetson Nano: kova kilpakumppani reunaytimessä
Jetson Nano tuo CUDA-ydinten ja TensorRT-tuen pieneen korttiin. Seuraavassa kaksi iskevää esimerkkiä Pythonilla.
1. Hello AI World – inferenssin alkeet
- Laitteisto: Jetson Nano + USB-webcamera tai MIPI CSI
- Ohjelmisto: jetson-inference (Python & C++)
- Toiminta: valitsee esikoulutetun CNN-mallin (esim. GoogLeNet), näyttää luokkien todennäköisyydet reaaliajassa
sudo docker run --runtime nvidia --network host nvcr.io/nvidia/jetson-inference:r32.7 \
python3 /jetson-inference/python/training/classification.py \
--modeldir=models/imagenet --input-blob=input_0 --output-blob=output_0
tai paikallisesti:
git clone https://github.com/dusty-nv/jetson-inference.git
cd jetson-inference
python3 tools/imagenet-console.py \
--network googlenet --img sample.jpg
Tämä esimerkki esittelee inferenssin GPU-kiihdytyksellä ja Python/C++-rajapinnat .
2. JetBot – autonominen tutkija
- Laitteisto: Jetson Nano + AI KIT + PiCamera + DC-moottoriohjain
- Ohjelmisto: Python (PyTorch + TensorRT + ROS2)
- Toiminta: syväoppiminen radoilla, kiertää esteet reaaliajassa ja kokoaa tallentamaton dataa cloudiin
- Flashaa JetPack SDK ja asenna ROS 2
- Asenna jetbot-pkg ja konfiguroi motopinot
- Aja
ros2 launch jetbot_bringup bringup.launch.py
ros2 run jetbot_navigation navigator
JetBot-projekti yhdistää kuvantunnistuksen, SLAMin ja ohjauksen robotiikkakehikossa.
Kokonaisvertailu ja kielivalinnat
Alusta | Projekti | Keskeinen toiminto | Kielivalinta |
---|---|---|---|
Pi Pico | Esteentunnistus | Ultrasonic + TinyML | C++ (TensorFlow Lite Micro) |
Pi Pico | äänikomentotunnistus | Keyword spotting | MicroPython |
Raspberry Pi 5 | Peeper Pam boss detector | Kasvontunnistus + websockets | Python (TAPPAS) |
Raspberry Pi 5 | Autolaskenta tolpassa | YOLOv5 + Edge Impulse | Python |
Jetson Nano | Hello AI World | Kuvantunnistus CUDA:lla | Python, C++ |
Jetson Nano | JetBot-autonomiarobotti | Esteiden kierto + SLAM | Python (ROS 2) |
Käytännön esimerkit osoittavat, miten eri laitteilla ja työkaluilla voit kasvattaa robottisi älykkyyttä: kevyistä mikrokontrollereista aina moniytimisiin reunalaskentayksiköihin. Seuraavaksi voit valita tarkemman AI-kehitysympäristön, valita oikeat mallit ja syventyä optimointiin—projektisi rajana on vain mielikuvitus.
Mikä on ROS 2?
Robot Operating System 2 eli ROS 2 on avoimen lähdekoodin kehys robottiohjelmistojen rakentamiseen. Se on jatkokehitys alkuperäisestä ROS 1:stä, ja sen tavoitteena on korjata ROS 1:n rajoituksia parantaen kommunikaatiota, monialustatukea ja suorituskykyä.
Arkkitehtuuri ja middleware
ROS 2 käyttää ROS Middleware Interfaceä (RMW) erottamaan ydinarkkitehtuurin eri toteutuksista.
- Yleisin RMW-implementaatio on Data Distribution Service (DDS), joka mahdollistaa hajautetun viestinvälityksen.
- DDS:n Quality of Service -asetuksilla säädellään viiveitä, luotettavuutta, priorisointia ja skaalautuvuutta.
- Arkkitehtuuri on suunniteltu tukemaan reaaliaikaista laskentaa ja sulautettuja järjestelmiä.
Perusrakenteet: solmut ja viestit
ROS 2:n ydinrakenteet ovat:
- Node (solmu): itsenäinen prosessi, joka suorittaa laskentaa.
- Topic (aihe): julkaisu/tilaus-malli viestien vaihtoon.
- Service (palvelu): synkroninen pyyntö-vastaus -rajapinta.
- Action: asynkroninen tehtävien hallinta aikakatkaisuineen ja palautteineen.
Solmut löytävät toisensa automaattisen discovery-protokollan kautta ja vaihtavat dataa joko julkaisten tai tilaamalla aiheita.
Keskeiset ominaisuudet
- Node Lifecycle: hienojakoinen hallinta solmujen tilasiirtymistä ja virrankäyttöä
- Turvallisuus: sisäänrakennetut todennus-, salaus- ja käyttöoikeusmekanismit
- Reaaliaikaisuus: matalat latenssit ja deterministinen viestinvälitys DDS:n QoS-profiileilla
- Monialustatuki: Linux, Windows, macOS ja sulautetut RTOS-järjestelmät
- Monikielisyys: C++, Python, sekä joukko muita kieliä tuettuna ekosysteemipaketeilla.
Kehittäjätyökalut ja ekosysteemi
ROS 2 tarjoaa sarjan työkaluja, jotka nopeuttavat kehitystä ja virheiden selvitystä:
- launch: monisolmuisten järjestelmien käynnistys ja konfigurointi
- introspection: ajonaikainen topologian ja parametrien tarkastelu
- debugging: viestien ja palvelujen seurantatyökalut
- visualization: rviz2-kokonaisuus 2D/3D-näkymiin
- plotting & logging: data-analyysi ja lokitiedostojen hallinta
- playback: nauhoitettujen rosbag-datan toisto testausta varten.
Domain ID ja verkot
Jokaisella ROS 2 -verkolla on oma Domain ID -tunnus, joka eristää viestinvälityksen samassa fyysisessä verkossa.
- Solmut, joilla on sama Domain ID, löytävät toisensa automaattisesti.
- Eri Domain ID:t estävät yhteydenpidon, mikä on hyödyllistä testiympäristöissä ja moniverkkoratkaisuissa.
Vertailu ROS 1:n kanssa
Ominaisuus | ROS 1 | ROS 2 |
---|---|---|
Viestinvälitys | TCPROS, UDPROS | DDS (monipuoliset QoS-profiilit) |
Reaaliaikaisuus | Rajoitettu | Sisäänrakennettu real-time-tuki |
Turvallisuus | Ei vakautta | Todennus, salaus, käyttöoikeudet |
Monialustatuki | Pääosin Linux | Linux, Windows, macOS, RTOS |
Solmuhallinta | Yksinkertainen init | Lifecycle Nodes (tilaohjattu käyttö) |
Kielet | C++, Python | C++, Python, Rust, Java, JavaScript |
ROS 2 on suunniteltu unelmien täyttämiseksi robotiikan kehittäjille, jotka vaativat skaalautuvuutta, luotettavuutta ja monipuolisuutta. Se tarjoaa tilan, jossa solmut kommunikoivat joustavasti, turvallisesti ja reaaliaikaisesti niin sulautetuissa ratkaisuissa kuin pilvestä reunaytimeen ulottuvissa sovelluksissa.
Mistä ROS 2 saa ladattua?
ROS 2:n virallinen lataussivu löytyy ROS:n ylläpitämästä dokumentaatiosta osoitteesta:
https://docs.ros.org/en/rolling/Installation.html
Täältä löydät asennusohjeet eri jakeluille (distroille) kuten Humble Hawksbill (Ubuntu 22.04) ja Kilted Kaiju (Ubuntu 24.04). Jakeluita tuetaan vielä tietyn ajan LTS-julkaisuina, joten valitse projektiisi sopiva versio ja käyttöjärjestelmä ennen asennusta.
Tuetut laitteet ja käyttöjärjestelmät
ROS 2 on suunniteltu toimimaan useilla alustoilla, ja REP-2000 määrittelee viralliset “tier 1” -käyttöjärjestelmät ja arkkitehtuurit.
Käyttöjärjestelmä | Versiot ja arkkitehtuurit |
---|---|
Ubuntu Linux | 22.04 (arm64, amd64), 24.04 |
Windows | Windows 10 (amd64) |
macOS | x86_64 (nykyiset versiot) |
Sulautetut RTOS | micro-ROS (Cortex-M -sarja) |
ARM-kehityskortit | Raspberry Pi (armv7, arm64), Jetson Nano (aarch64) |
Muilla alustoilla ROS 2 toimii usein Docker-konttien kautta tai kääntämällä lähdekoodista, mutta virallinen tuki on rajattu yllämainittuihin.
Kuinka ROS 2:ta ohjelmoidaan
Ubuntu:
sudo apt update
sudo apt install ros-humble-desktop
Ympäristömuuttujat:
source /opt/ros/humble/setup.bash
Valitse kieli:
- rclcpp (C++): tehokas, reaaliaikainen rajapinta
- rclpy (Python): nopea prototypointi ja skriptit
Luo työtila:
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build
source install/setup.bash
Tee yksinkertainen node:
C++
#include "rclcpp/rclcpp.hpp"
int main(int argc, char * argv[]) {
rclcpp::init(argc, argv);
auto node = rclcpp::Node::make_shared("hello_node");
RCLCPP_INFO(node->get_logger(), "Hello, ROS 2!");
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
Python:
import rclpy
from rclpy.node import Node
def main():
rclpy.init()
node = Node("hello_node")
node.get_logger().info("Hello, ROS 2!")
rclpy.spin(node)
rclpy.shutdown()
if __name__ == "__main__":
main()
Julkaise ja tilaa viestejä:
.create_publisher()
ja.create_subscription()
- Synkroniset palvelut (
Service
) ja asynkroniset tehtävät (Action
)
Lisätietoa ja yhteisöt
- Virallinen dokumentaatio: https://docs.ros.org/en/rolling/index.html
- ROS Wiki (ROS 1 & ROS 2): http://wiki.ros.org/
- ROS Answers – Q&A-foorumi: https://answers.ros.org/
- ROS Discourse – keskustelut ja uutiset: https://discourse.ros.org/
- GitHub: https://github.com/ros2 (ydinrepositoriot, rclcpp, rclpy, demos)
- Awesome ROS 2 -lista: https://github.com/fkromer/awesome-ros2
Näillä resursseilla pääset liikkeelle ROS 2:n latauksessa, asennuksessa ja ohjelmoinnissa – oli sitten kyseessä täysiverinen Linux-kone, kehityskortti tai sulautettu mikrokontrolleri.