Kanca
ABB'nin kontrolörü RAPID konuşur, KUKA'nınki KRL. İki kontrolör birbirine sinyal ve protokol düzeyinde pekâlâ bağlanır (Hat E'de gördüğün gibi), ama tek bir ortak PROGRAM paylaşamazlar — diller uyuşmaz. Ama ikisinin üzerinde çalışan bir görüntü işleme yazılımı ya da bir yol planlayıcı, aynı ROS 2 düğümü (node) olarak yazılabilir.
Ne oldu
ROS 2 (Robot Operating System 2), belirli bir robot markasına ait bir dil değil — robotik yazılımının farklı parçalarının birbiriyle konuşması için ortak bir çerçeve. Resmi ROS 2 dokümantasyonunun tanımıyla, bir düğüm (node), "ROS 2 grafiğinde bir katılımcıdır ve diğer düğümlerle haberleşmek için bir istemci kütüphanesi kullanır." Bir kamera sürücüsü bir düğüm olabilir, bir yol planlayıcı başka bir düğüm, bir robot kolu kontrolcüsü üçüncü bir düğüm — hepsi aynı makinede ya da farklı makinelerde çalışabilir.
Düğümler iki temel yoldan haberleşir:
Konu (topic) — yayın/abone. Dokümantasyonun tanımıyla, "konular
sürekli veri akışları için kullanılmalı — sensör verisi, robot durumu
gibi." Bir düğüm bir konuya YAYIN yapar (publish), sıfır veya daha
fazla düğüm o konuya ABONE olur (subscribe). Yayıncı, kim dinliyor
bilmez; abone, kim yayınlıyor bilmek zorunda değildir — ikisi sadece
ortak bir konu adıyla eşleşir. Bir kamera düğümünün her karede
/goruntu konusuna yayın yapması, buna abone olan bir nesne tanıma
düğümünün bu görüntüleri sürekli almasına örnek.
Servis (service) — istek/yanıt. Dokümantasyonun tanımıyla, "bir servis, uzak bir prosedür çağrısına (remote procedure call) karşılık gelir" — istemci bir istek gönderir, sunucu bir hesaplama yapıp sonucu döner. Servisler HIZLI yanıt vermesi beklenen, bir kerelik işler için tasarlanmıştır ("servisler asla uzun süren işlemler için kullanılmamalı" — dokümantasyon bunun için ayrı bir mekanizma olan "action"ları önerir). Bir konu için birden fazla yayıncı/abone olabilirken, bir servis adı için sadece TEK bir sunucu (server) olabilir.
Kısacası: sürekli akan veri için konu, tek seferlik "şunu hesapla ve bana söyle" istekleri için servis.
# Basit bir ROS 2 düğümü (rclpy ile) -- bu kod bloğu bu platformda
# CALISTIRILAMAZ, çünkü Pyodide'de rclpy paketi yok. Sadece yapıyı
# göstermek için metin olarak veriliyor.
import rclpy
from rclpy.node import Node
class BasitDugum(Node):
def __init__(self):
super().__init__('basit_dugum')
self.get_logger().info('Düğüm başladı')
def main():
rclpy.init()
node = BasitDugum()
rclpy.spin(node)
Gerçek dünyada
ROS 2'nin "ortak dil" olma iddiası tam olarak Hat D'nin bu son dersinde gördüğün sorunu çözüyor: bir hücrede ABB robotu, bir başka istasyonda bir mobil robot, üçüncü bir yerde bir kamera sistemi olsun — hepsinin üreticisi RAPID, KRL veya kendi kapalı protokolünü konuşsa bile, üzerlerine yazılan YÜKSEK SEVİYELİ mantık (yol planlama, görev sıralama, kamera-robot koordinasyonu) ROS 2 düğümleri olarak yazılabilir ve üretici sınırlarını aşan ortak bir sözlükle haberleşir. Bu yüzden ROS 2, üretici bağımsız bir yazılım katmanı gerektiğinde sık başvurulan ortak zeminlerden biridir.
Dene
Sonraki
Sıradaki (ve Hat D'nin üniversite seviyesindeki son) ders, movej/movel'i
ileri ve ters kinematiğe bağlayıp bu platformdaki Python API'sini kapatıyor.
Hat G (simülasyon ve ) ele alındığında, ROS 2 düğümlerinin bir
simülatörle (ör. Gazebo, PyBullet) nasıl konuştuğunu göreceksin.