ROBOTİK YAZILIM MIMARISI

Robotikte Yazılım ve Programlama: ROS, Gömülü C++ ve Python Algoritmaları

Robotik sistemlerde mekanik yapı kasları, sensörler duyu organlarını oluştururken; yazılım tüm bu bileşenleri yöneten beyindir. Modern otonom sistemler, alt seviye donanım kontrolünden üst seviye karar mekanizmalarına uzanan katmanlı bir yazılım mimarisine dayanır.

Gelişmiş bir robot tasarlamak; elektrik, mekanik ve bilgisayar bilimlerinin tam anlamıyla bütünleşmesini gerektirir. Robotik programlama, yalnızca bir mikrodenetleyiciye kod yüklemekten ibaret değildir. Sensör verilerinin milisaniyeler içinde işlendiği gömülü C++ sürücülerinden, otonom rota planlaması yapan Python algoritmalarına ve tüm bu sistemleri bir arada tutan ROS (Robot Operating System) altyapısına kadar uzanan çok katmanlı bir mühendislik disiplinidir.

Gömülü C++ Mikrosaniyeler seviyesinde deterministik motor kontrolü, sensör okuma ve interrupt yönetimi.
ROS / ROS 2 Dağıtık sistemler arası mesajlaşma, publish/subscribe mimarisi ve donanım soyutlama.
Python Algoritmaları Yapay zeka, nesne tespiti (YOLO), SLAM, kinematik ve hızlı prototipleme yazılımları.

1 Robotik Yazılımının Katmanlı Mimarisi

Endüstriyel otonom bir robotun veya servis robotunun yazılım mimarisi genel olarak 3 temel katmandan oluşur. Bu katmanlar arasındaki veri akışı, sistemin kararlılığını ve tepki süresini doğrudan belirler:

  • Sürücü Katmanı (Low-Level Hardware Layer): Mikrosaniyeler mertebesinde çalışan, doğrudan donanıma dokunan katmandır. PWM sinyalleri ile motor sürücülerin tetiklenmesi, encoder verilerinin okunması ve IMU sensörlerinden açısal ivme verilerinin çekilmesi bu katmanda gerçekleşir. Kararlılık için ağırlıklı olarak C/C++ tercih edilir.
  • Ara Yazılım Katmanı (Middleware Layer): Farklı donanım bileşenleri ile yazılım modüllerinin birbiriyle konuşmasını sağlayan iletim otobüsüdür (Message Bus). ROS (Robot Operating System) bu katmanın dünya genelindeki standart mimarisidir.
  • Uygulama ve Karar Katmanı (High-Level Decision Layer): Robotun "ne yapacağına" karar veren katmandır. Haritalama (SLAM), engel tanıma, otonom rota planlaması ve yapay zeka çıkarımları bu seviyede çalışır. Matematiksel kütüphanelerin zenginliği nedeniyle ağırlıklı olarak Python ve C++ ile geliştirilir.

2 Gömülü C++ ile Donanım Kontrolü ve Determinizm

Robotikte fiziksel dünya ile temas kuran kod parçaları gerçek zamanlı (real-time) çalışmak zorundadır. Bir motor kontrolcüsünün gecikmesi veya interrupt kaybı, robotun devrilmesine ya da fiziksel çarpmalara yol açabilir. Bu nedenle gömülü sistemlerde C++ dili vazgeçilmezdir.

C++ dilinin sağladığı bellek yönetimi (RAII), nesne yönelimli mimarı ve doğrudan bellek adresi erişimi; ARM Cortex, STM32, ESP32 ve AVR mimarilerinde maksimum performans elde edilmesini sağlar.

encoder_motor_control.cpp
// STM32 / Arduino Ortamında C++ ile PID Motor Hız Kontrol Örneği
#include <Arduino.h>

class MotorController {
private:
    uint8_t pwmPin, dirPin;
    float kp, ki, kd;
    float lastError = 0.0, integral = 0.0;

public:
    MotorController(uint8_t pPin, uint8_t dPin, float p, float i, float d) 
        : pwmPin(pPin), dirPin(dPin), kp(p), ki(i), kd(d) {}

    void init() {
        pinMode(pwmPin, OUTPUT);
        pinMode(dirPin, OUTPUT);
    }

    void computePID(float targetSpeed, float currentSpeed, float dt) {
        float error = targetSpeed - currentSpeed;
        integral += error * dt;
        float derivative = (error - lastError) / dt;
        float output = (kp * error) + (ki * integral) + (kd * derivative);
        
        lastError = error;
        applySignal(output);
    }

private:
    void applySignal(float power) {
        digitalWrite(dirPin, power >= 0 ? HIGH : LOW);
        analogWrite(pwmPin, constrain(abs(power), 0, 255));
    }
};

3 ROS (Robot Operating System) ile Dağıtık Sistem Tasarımı

Sadece tek bir mikrodenetleyici karmaşık bir robotik sistemi yönetmeye yetmez. Örneğin modern bir otonom mobil robotta (AMR); LiDAR sensörü, RGB-D kamera, tekerlek encoder'ları ve batarya yönetim sistemi aynı anda çalışır. ROS, tüm bu donanımları bağımsız düğümler (nodes) olarak çalıştırmanızı ve aralarında standart protokolle mesajlaşmanızı sağlar.

ROS Temel İletişim Mimarisi

Nodes (Düğümler): Belirli bir işi yapan bağımsız yürütülebilir süreçlerdir (Örn: Lidar_Driver, Motor_Control, Path_Planner).

Topics (Konular): Düğümlerin birbirine veri aktardığı adlandırılmış hatlardır. Asenkron Publish/Subscribe mantığıyla çalışır.

Services (Hizmetler): İstek-Cevap (Request-Response) mantığında çalışan senkron iletişim mekanizmasıdır.

Actions (Eylemler): Robotun bir hedefe gitmesi gibi uzun süren işlerde geri bildirim (feedback) sağlayan yapılardır.

ROS 1 vs ROS 2: Neden ROS 2'ye Geçmeliyiz?

ROS 1, akademik araştırmalar için mükemmel bir platform sunmuş olsa da endüstriyel üretim koşullarında ve gerçek zamanlı gereksinimlerde yetersiz kalıyordu. ROS 2, iletişim altyapısında DDS (Data Distribution Service) standardını benimseyerek şu üstünlükleri sağlamıştır:

  1. Merkeziyetsiz Yapı (No Single Point of Failure): ROS 1'deki roscore bağımlılığı ortadan kalkmış, düğümler birbirini otomatik keşfetmeye başlamıştır.
  2. Gerçek Zamanlı Destek (Real-Time Control): RTOS (Real-Time Operating System) entegrasyonu sayesinde hassas motor yönlendirmeleri güvenli hale getirilmiştir.
  3. Gelişmiş Güvenlik (SROS2): Veri iletimi TLS ve DDS-Security protokolleri ile uçtan uca şifrelenmiştir.

4 Python ile Üst Seviye Robotik Algoritmaları

Python; sunduğu NumPy, SciPy, OpenCV, PyTorch ve ROS2 Python istemci kütüphanesi (rclpy) ile robotik sistemlerin üst düzey zekasını oluşturmada standart dildir. Robotik bir platformda Python genellikle şu görevleri üstlenir:

  • Algı ve Bilgisayarlı Görü (Perception & Computer Vision): Kameralardan gelen karelerin işlenmesi, OpenCV ile çizgi takibi veya derin öğrenme modelleri ile nesne tespiti.
  • Navigasyon ve SLAM: Robotun bilmediği bir ortamda harita çıkarırken aynı zamanda kendi konumunu kestirmesi (Simultaneous Localization and Mapping).
  • Ters Kinematik (Inverse Kinematics): Robot kollarının uç işlevcisinin (end-effector) uzayda istenen noktaya ulaşması için her bir eklem açısının hesaplanması.
ros2_laser_subscriber.py
# ROS 2 Python (rclpy) ile LiDAR Sensör Verisi Okuma Örneği
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import LaserScan
from geometry_msgs.msg import Twist

class ObstacleAvoidanceNode(Node):
    def __init__(self):
        super().__init__('obstacle_avoidance_node')
        self.subscription = self.create_subscription(
            LaserScan, '/scan', self.scan_callback, 10)
        self.publisher = self.create_publisher(Twist, '/cmd_vel', 10)

    def scan_callback(self, msg):
        # Ön sektördeki minimum mesafeyi tara
        front_distance = min(msg.ranges[0:30] + msg.ranges[330:360])
        move_cmd = Twist()

        if front_distance < 0.5: # Engele 50 cm'den yakınsa dön
            move_cmd.linear.x = 0.0
            move_cmd.angular.z = 0.5 
            self.get_logger().warn('Engel Algılandı! Dönüş yapılıyor...')
        else:
            move_cmd.linear.x = 0.2 # İleri git
            move_cmd.angular.z = 0.0

        self.publisher.publish(move_cmd)

def main(args=None):
    rclpy.init(args=args)
    node = ObstacleAvoidanceNode()
    rclpy.spin(node)
    node.destroy_node()
    rclpy.shutdown()

5 Robotik Programlamada Gelecek Trendleri

Yazılım dünyasındaki hızlı gelişmeler, robotik disiplinini de kökten değiştirmektedir. Önümüzdeki dönemde robotik programcıların odağında yer alacak yenilikler şunlardır:

  • Yapay Zeka Destekli Otonomi (Physical AI): Robotların önceden kodlanmış kurallar yerine, pekiştirmeli öğrenme (Reinforcement Learning) modelleri ile kendi kendine hareket becerilerini geliştirmesi.
  • Dijital İkiz ve Simülasyon (Gazebo & Isaac Sim): Robot tasarlanıp üretilmeden önce NVIDIA Isaac Sim veya Gazebo ortamında tüm yazılımların %99 doğrulukla test edilmesi.
  • Gömülü Rust (Embedded Rust): C++ dilinin bellek güvenliği (memory safety) risklerine alternatif olarak gömülü sistemlerde Rust kullanımının yaygınlaşması.

Robotik Yazılım Dünyasına İlk Adımı Atın!

Gömülü C++ projelerinden ROS 2 simülasyonlarına kadar hazırladığımız ücretsiz eğitim içeriklerini ve kaynak kodları keşfetmeye hazır mısınız?

ROBOTİK PROJELERİ İNCELE

Sıkça Sorulan Sorular

ROS (Robot Operating System) bir işletim sistemi midir?

Hayır, ROS geleneksel bir işletim sistemi değil; bir ara yazılım (middleware) mimarisidir. Linux (Ubuntu) üzerinde çalışır ve robotik düğümler (nodes) arasındaki iletişimi, donanım soyutlamasını ve paket yönetimini sağlar.

Robotik yazılımda C++ mı yoksa Python mu tercih edilmelidir?

Her ikisi de farklı seviyelerde gereklidir. Düşük gecikme süresi, sürücü seviyesi ve gerçek zamanlı (real-time) motor kontrolü için C++ tercih edilir. Veri analizi, yapay zeka, bilgisayarlı görü ve hızlı prototipleme için ise Python kullanılır.

ROS 1 ile ROS 2 arasındaki temel fark nedir?

ROS 1 tekli bir ana sunucuya (roscore) bağımlı çalışırken, ROS 2 endüstriyel standart olan DDS (Data Distribution Service) altyapısını kullanır. ROS 2; gerçek zamanlı iletişim, çoklu robot sistemleri ve güvenli veri iletimi alanlarında gelişmiş yetenekler sunar.