ROS 2 (Robot Operating System)

Yeni nesil robotik yazılım geliştirme platformu

ros2 run demo_nodes_cpp talker

ROS 2 Nedir?

ROS 2 (Robot Operating System 2), robotik uygulamalar geliştirmek için tasarlanmış modern, esnek ve güvenilir bir yazılım çerçevesidir. ROS 1'in eksikliklerini gidermek ve gerçek dünya robotik uygulamalarının ihtiyaçlarını karşılamak için sıfırdan yeniden tasarlanmıştır.

Temel Özellikler

ROS 2'nin Güçlü Yanları:
  • • Gerçek Zamanlı: Deterministik davranış desteği
  • • Güvenlik: DDS tabanlı güvenli iletişim
  • • Çoklu Platform: Linux, Windows, macOS desteği
  • • Dağıtık Sistem: Master'sız mimari
  • • Üretim Hazır: Endüstriyel kullanım için optimize
  • • QoS Politikaları: İletişim kalitesi kontrolü

ROS 2 Dağıtımları

Aktif Dağıtımlar
Humble Hawksbill (LTS): Ubuntu 22.04, 2027'ye kadar destek
Iron Irwini: Ubuntu 22.04, 2024 Kasım'a kadar destek
Jazzy Jalisco (LTS): Ubuntu 24.04, 2029'a kadar destek
Rolling: En yeni özellikler, sürekli güncellenen
Öneri: Yeni başlayanlar için ROS 2 Humble veya Jazzy önerilir. LTS (Long Term Support) sürümleri uzun vadeli projeler için idealdir.

ROS 2 Mimarisi

Katmanlı Yapı:
  • • DDS Layer: Data Distribution Service (middleware)
  • • RMW Layer: ROS Middleware interface
  • • RCL Layer: ROS Client Library (C)
  • • Client Libraries: rclcpp (C++), rclpy (Python)
  • • Tools: ros2cli, rviz2, rqt

ROS 1 (Noetic) vs ROS 2

ROS 1 (Noetic Ninjemys) ve ROS 2 arasında önemli mimari ve işlevsel farklar vardır. Hangisinin seçileceği projenizin gereksinimlerine bağlıdır.

Temel Farklar

Özellik ROS 1 (Noetic) ROS 2
Mimari Master-based (roscore gerekli) Masterless (DDS tabanlı)
İletişim TCPROS/UDPROS DDS (çoklu implementasyon)
Gerçek Zamanlı Sınırlı destek Tam destek
Platform Desteği Sadece Linux Linux, Windows, macOS
Güvenlik Minimal DDS-Security ile tam
QoS Yok Esnek QoS politikaları
Python Desteği Python 2 & 3 Sadece Python 3
Build Sistemi catkin colcon (ament)
Destek Durumu 2025 Mayıs'a kadar (EOL) Aktif geliştirme

Hangisini Seçmeliyim?

ROS 1 (Noetic) Seçin Eğer:
  • • Mevcut ROS 1 projeniz var
  • • Sadece akademik/araştırma amaçlı kullanacaksanız
  • • Kullanmak istediğiniz paketler ROS 2'de yok
  • • Kısa vadeli bir proje (2025'ten önce bitecek)
  • • Takım üyeleri ROS 1'e aşina
ROS 2 Seçin Eğer:
  • • Yeni bir proje başlıyorsanız
  • • Üretim/endüstriyel uygulama geliştiriyorsanız
  • • Gerçek zamanlı performans gerekiyorsa
  • • Üretim/endüstriyel uygulama geliştiriyorsanız
  • • Gerçek zamanlı performans gerekiyorsa
  • • Çoklu platform desteği önemliyse
  • • Güvenlik kritikse
  • • Uzun vadeli destek gerekiyorsa
  • • Windows veya macOS üzerinde çalışacaksanız
Önemli! ROS 1 Noetic, Mayıs 2025'te End of Life (EOL) olacak. Yeni projeler için ROS 2 kullanılması şiddetle önerilir. ROS 1'den ROS 2'ye geçiş için ros1_bridge paketi mevcuttur.

Migrasyon Stratejisi

ROS 1'den ROS 2'ye Geçiş:
• Aşamalı Geçiş: ros1_bridge kullanarak her iki sistemi birlikte çalıştırın
• Paket Portlama: Önce temel paketleri, sonra karmaşık olanları taşıyın
• Test: Her aşamada kapsamlı test yapın
• Dokümantasyon: Değişiklikleri belgelendirin
• Eğitim: Takımınızı ROS 2'ye hazırlayın

Ekosistem Karşılaştırması

Paket Durumu
ROS 1: 3000+ paket, olgun ekosistem
ROS 2: 1500+ paket, hızla büyüyen

Önemli ROS 2 paketleri: Nav2, MoveIt 2, Gazebo, micro-ROS, ros2_control

ROS 2 Kurulumu

ROS 2, Debian paketleri veya kaynak koddan kurulabilir. Ubuntu kullanıcıları için Debian paketi önerilir.

Ubuntu 22.04 - ROS 2 Humble

$ # Locale ayarları
$ locale
$ sudo apt update && sudo apt install locales
$ sudo locale-gen en_US en_US.UTF-8
$ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
$ export LANG=en_US.UTF-8
$ # ROS 2 repository ekleme
$ sudo apt install software-properties-common
$ sudo add-apt-repository universe
$ sudo apt update && sudo apt install curl -y
$ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
$ # ROS 2 paketlerini kurma
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install ros-humble-desktop
Kurulum Seçenekleri:
  • • ros-humble-desktop: ROS 2, RViz, demos, tutorials
  • • ros-humble-ros-base: Sadece temel ROS 2 (GUI yok)
  • • ros-dev-tools: Build araçları (colcon, vb.)

Geliştirme Araçları

$ sudo apt install ros-dev-tools
$ sudo apt install python3-colcon-common-extensions
$ sudo apt install python3-rosdep python3-vcstool

Ortam Değişkenlerini Ayarlama

$ # Her terminal oturumunda çalıştırın
$ source /opt/ros/humble/setup.bash
$
$ # Veya .bashrc'ye ekleyin
$ echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
$ source ~/.bashrc

Kurulumu Test Etme

$ # Terminal 1: Talker (yayıncı)
$ ros2 run demo_nodes_cpp talker
$
$ # Terminal 2: Listener (abone)
$ ros2 run demo_nodes_cpp listener
Başarılı Kurulum: Eğer listener "I heard: [Hello World: X]" mesajlarını görüyorsa, ROS 2 kurulumu başarılıdır! 🎉

ROS 2 Workspace Yapısı

ROS 2 workspace, paketlerinizi organize ettiğiniz ve build ettiğiniz dizin yapısıdır.

Workspace Oluşturma

$ mkdir -p ~/ros2_ws/src
$ cd ~/ros2_ws
$ colcon build
$ source install/setup.bash

Workspace Yapısı

Dizin Yapısı:
ros2_ws/
├── build/          # Build dosyaları (CMake çıktıları)
├── install/        # Kurulum dosyaları (çalıştırılabilir)
├── log/            # Build logları
└── src/            # Kaynak kod paketleri
    ├── package1/
    ├── package2/
    └── package3/
Önemli: Her yeni terminal oturumunda source ~/ros2_ws/install/setup.bash komutunu çalıştırmalısınız. Bunu .bashrc'ye ekleyebilirsiniz.

Colcon Build Seçenekleri

$ # Tüm paketleri build et
$ colcon build
$
$ # Sadece belirli paketi build et
$ colcon build --packages-select my_package
$
$ # Symlink ile build (Python için hızlı)
$ colcon build --symlink-install
$
$ # Paralel build (4 thread)
$ colcon build --parallel-workers 4

ROS 2 Node'lar

Node, ROS 2'de çalışan temel işlem birimidir. Her node tek bir görevden sorumludur ve diğer node'larla iletişim kurar.

Python Node Örneği

#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
class MinimalNode(Node):
def __init__(self):
super().__init__('minimal_node')
self.get_logger().info('Node başlatıldı!')
def main(args=None):
rclpy.init(args=args)
node = MinimalNode()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()

C++ Node Örneği

#include "rclcpp/rclcpp.hpp"
class MinimalNode : public rclcpp::Node {
public:
MinimalNode() : Node("minimal_node") {
RCLCPP_INFO(this->get_logger(), "Node başlatıldı!");
}
};
int main(int argc, char **argv) {
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared());
rclcpp::shutdown();
return 0;
}

Node Komutları

$ # Çalışan node'ları listele
$ ros2 node list
$
$ # Node bilgisini göster
$ ros2 node info /node_name

Topic'ler (Konular)

Topic'ler, node'lar arasında asenkron mesaj iletişimi sağlar. Publisher-Subscriber modeli kullanır.

Publisher (Yayıncı) Örneği

import rclpy
from rclpy.node import Node
from std_msgs.msg import String
class PublisherNode(Node):
def __init__(self):
super().__init__('publisher_node')
self.publisher = self.create_publisher(String, 'topic', 10)
self.timer = self.create_timer(0.5, self.timer_callback)
self.counter = 0
def timer_callback(self):
msg = String()
msg.data = f'Merhaba {self.counter}'
self.publisher.publish(msg)
self.counter += 1

Subscriber (Abone) Örneği

class SubscriberNode(Node):
def __init__(self):
super().__init__('subscriber_node')
self.subscription = self.create_subscription(
String, 'topic', self.listener_callback, 10)
def listener_callback(self, msg):
self.get_logger().info(f'Aldım: {msg.data}')

Topic Komutları

$ # Aktif topic'leri listele
$ ros2 topic list
$
$ # Topic'i dinle
$ ros2 topic echo /topic_name
$
$ # Topic bilgisi
$ ros2 topic info /topic_name
$
$ # Topic'e manuel mesaj yayınla
$ ros2 topic pub /topic std_msgs/msg/String "data: 'Test'"
$
$ # Topic frekansını ölç
$ ros2 topic hz /topic_name

QoS (Quality of Service) Politikaları

ROS 2'nin Güçlü Özelliği: QoS politikaları ile iletişim kalitesini kontrol edebilirsiniz.
  • • Reliability: RELIABLE (garantili) / BEST_EFFORT (hızlı)
  • • Durability: VOLATILE (geçici) / TRANSIENT_LOCAL (kalıcı)
  • • History: KEEP_LAST / KEEP_ALL
  • • Liveliness: Node canlılık kontrolü
# QoS profili ile publisher
from rclpy.qos import QoSProfile, ReliabilityPolicy
qos_profile = QoSProfile(depth=10)
qos_profile.reliability = ReliabilityPolicy.BEST_EFFORT
self.publisher = self.create_publisher(
String, 'topic', qos_profile)

Service'ler (Hizmetler)

Service'ler, senkron istek-yanıt iletişimi sağlar. Client bir istek gönderir, server işler ve yanıt döner.

Service Server Örneği

from example_interfaces.srv import AddTwoInts
class ServiceServer(Node):
def __init__(self):
super().__init__('service_server')
self.srv = self.create_service(
AddTwoInts, 'add_two_ints', self.add_callback)
def add_callback(self, request, response):
response.sum = request.a + request.b
self.get_logger().info(
f'{request.a} + {request.b} = {response.sum}')
return response

Service Client Örneği

class ServiceClient(Node):
def __init__(self):
super().__init__('service_client')
self.client = self.create_client(
AddTwoInts, 'add_two_ints')
while not self.client.wait_for_service(timeout_sec=1.0):
self.get_logger().info('Servis bekleniyor...')
def send_request(self, a, b):
request = AddTwoInts.Request()
request.a = a
request.b = b
future = self.client.call_async(request)
return future

Service Komutları

$ # Servisleri listele
$ ros2 service list
$
$ # Servis tipini göster
$ ros2 service type /service_name
$
$ # Servisi çağır
$ ros2 service call /add_two_ints example_interfaces/srv/AddTwoInts "{a: 2, b: 3}"

Action'lar

Action'lar, uzun süren görevler için tasarlanmıştır. Servislerden farklı olarak iptal edilebilir ve ilerleme geri bildirimi sağlar.

Action Yapısı

Action Bileşenleri:
  • • Goal: Yapılacak iş (istek)
  • • Result: Sonuç (başarı/başarısızlık)
  • • Feedback: İlerleme güncellemeleri

Action Server Örneği

from rclpy.action import ActionServer
from example_interfaces.action import Fibonacci
class FibonacciActionServer(Node):
def __init__(self):
super().__init__('fibonacci_action_server')
class FibonacciActionServer(Node):
def __init__(self):
super().__init__('fibonacci_action_server')
self._action_server = ActionServer(
self, Fibonacci, 'fibonacci',
self.execute_callback)
def execute_callback(self, goal_handle):
feedback_msg = Fibonacci.Feedback()
sequence = [0, 1]
for i in range(1, goal_handle.request.order):
sequence.append(sequence[i] + sequence[i-1])
feedback_msg.sequence = sequence
goal_handle.publish_feedback(feedback_msg)
goal_handle.succeed()
result = Fibonacci.Result()
result.sequence = sequence
return result

Action Komutları

$ # Action'ları listele
$ ros2 action list
$
$ # Action bilgisi
$ ros2 action info /fibonacci
$
$ # Action'ı manuel çalıştır
$ ros2 action send_goal /fibonacci example_interfaces/action/Fibonacci "{order: 10}"
Ne Zaman Kullanılır?
• Uzun süren işlemler (navigasyon, manipülasyon)
• İptal edilebilmesi gereken görevler
• İlerleme geri bildirimi gereken durumlar

Parametreler

Parametreler, node'ların çalışma zamanında yapılandırılmasını sağlar. Dinamik olarak değiştirilebilir.

Parametre Tanımlama

class ParameterNode(Node):
def __init__(self):
super().__init__('parameter_node')
# Parametre tanımla
self.declare_parameter('my_parameter', 'default_value')
self.declare_parameter('max_speed', 1.0)
# Parametre değerini al
param_value = self.get_parameter('my_parameter').value
self.get_logger().info(f'Parametre: {param_value}')
# Parametre değişikliğini dinle
self.add_on_set_parameters_callback(self.parameter_callback)
def parameter_callback(self, params):
for param in params:
self.get_logger().info(
f'Parametre değişti: {param.name} = {param.value}')
return SetParametersResult(successful=True)

Parametre Komutları

$ # Node parametrelerini listele
$ ros2 param list /node_name
$
$ # Parametre değerini al
$ ros2 param get /node_name parameter_name
$
$ # Parametre değerini set et
$ ros2 param set /node_name parameter_name value
$
$ # Parametreleri YAML dosyasına kaydet
$ ros2 param dump /node_name > params.yaml
$
$ # YAML dosyasından parametreleri yükle
$ ros2 param load /node_name params.yaml

YAML Parametre Dosyası

# config/params.yaml
parameter_node:
ros__parameters:
my_parameter: "hello"
max_speed: 2.5
use_sim_time: false

ROS 2 Paket Oluşturma

ROS 2 paketleri, ilgili node'ları, kütüphaneleri ve yapılandırma dosyalarını organize eder.

Python Paketi Oluşturma

$ cd ~/ros2_ws/src
$ ros2 pkg create --build-type ament_python my_python_package \
--dependencies rclpy std_msgs

C++ Paketi Oluşturma

$ ros2 pkg create --build-type ament_cmake my_cpp_package \
--dependencies rclcpp std_msgs

Paket Yapısı (Python)

my_python_package/
├── package.xml          # Paket metadata
├── setup.py             # Python setup dosyası
├── setup.cfg            # Yapılandırma
├── resource/            # Paket kaynakları
├── test/                # Test dosyaları
└── my_python_package/   # Python modülü
    ├── __init__.py
    └── my_node.py       # Node kodları

package.xml Örneği

my_python_package
0.0.1
My first ROS 2 package
Your Name
Apache-2.0
rclpy
std_msgs
ament_copyright
ament_flake8
ament_pep257
python3-pytest
ament_python

setup.py Yapılandırması

entry_points={
'console_scripts': [
'my_node = my_python_package.my_node:main',
],
},

Launch Dosyaları

Launch dosyaları, birden fazla node'u ve parametreyi tek komutla başlatmanızı sağlar.

Python Launch Dosyası

from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='my_package',
executable='talker',
name='talker_node',
output='screen',
parameters=[{'use_sim_time': True}]
),
Node(
package='my_package',
executable='listener',
name='listener_node',
output='screen'
),
])

Launch Dosyası Çalıştırma

$ ros2 launch my_package my_launch.py
$
$ # Argüman ile çalıştırma
$ ros2 launch my_package my_launch.py use_sim:=true

İleri Seviye Launch Özellikleri

from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node
def generate_launch_description():
use_sim_time = LaunchConfiguration('use_sim_time')
return LaunchDescription([
DeclareLaunchArgument(
'use_sim_time',
default_value='false',
description='Use simulation time'
),
Node(
package='my_package',
executable='my_node',
parameters=[{
'use_sim_time': use_sim_time,
'param_file': 'config/params.yaml'
}]
),
])

DDS Middleware

DDS (Data Distribution Service), ROS 2'nin temelindeki iletişim katmanıdır. Farklı DDS implementasyonları kullanabilirsiniz.

DDS Seçenekleri

Popüler DDS İmplementasyonları:
  • • Fast DDS (eProsima): Varsayılan, hızlı ve optimize
  • • Cyclone DDS: Eclipse Foundation, açık kaynak
  • • RTI Connext DDS: Ticari, endüstriyel kullanım
  • • GurumDDS: Güney Kore merkezli

DDS Değiştirme

$ # Fast DDS kullan (varsayılan)
$ export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
$
$ # Cyclone DDS kullan
$ sudo apt install ros-humble-rmw-cyclonedds-cpp
$ export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

DDS Discovery

Ağ Yapılandırması: ROS 2, DDS sayesinde farklı makinelerdeki node'ları otomatik olarak keşfeder. Aynı ağdaki tüm ROS 2 sistemleri birbirini bulur.
$ # Domain ID ile izolasyon
$ export ROS_DOMAIN_ID=42
$
$ # Aynı domain ID'ye sahip sistemler birbirini bulur
Güvenlik: Üretim ortamlarında DDS-Security kullanın. Bu, şifreleme ve kimlik doğrulama sağlar. Açık ağlarda kritiktir!

Simülasyon

ROS 2, Gazebo ve diğer simülatörlerle mükemmel entegrasyona sahiptir.

Gazebo Kurulumu

$ # Gazebo ve ROS 2 entegrasyonu
$ sudo apt install ros-humble-gazebo-ros-pkgs
$ sudo apt install ros-humble-gazebo-ros2-control

TurtleBot3 Simülasyonu

$ # TurtleBot3 kurulumu
$ sudo apt install ros-humble-turtlebot3*
$
$ # Model seçimi
$ export TURTLEBOT3_MODEL=waffle_pi
$
$ # Gazebo simülasyonu başlat
$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

RViz2 Görselleştirme

$ # RViz2 başlat
$ ros2 run rviz2 rviz2
$
$ # Konfigürasyon ile başlat
$ ros2 run rviz2 rviz2 -d config.rviz
Simülasyon Avantajları
• Fiziksel robota ihtiyaç duymadan geliştirme
• Güvenli test ortamı
• Hızlı iterasyon
• Zor senaryoları kolayca test etme
• Çoklu robot simülasyonu

En İyi Uygulamalar

ROS 2 projeleri geliştirirken izlenmesi gereken en iyi uygulamalar:

Kod Organizasyonu

Proje Yapısı:
• Her node tek bir sorumluluğa sahip olmalı
• Paketleri modüler tutun
• Ortak kodu library olarak ayırın
• Launch dosyalarını organize edin
• Config dosyalarını ayrı tutun

İsimlendirme Kuralları

ROS 2 İsimlendirme Standardı:
  • • Paketler: snake_case (my_robot_pkg)
  • • Node'lar: snake_case (sensor_node)
  • • Topic'ler: snake_case (/robot/sensor_data)
  • • Service'ler: snake_case (/robot/get_status)
  • • Namespace kullanın: /robot_name/sensor_data

Performans İpuçları

Optimizasyon:
• Doğru QoS politikalarını seçin
• Gereksiz kopyalamadan kaçının (shared_ptr kullanın)
• Uygun mesaj boyutu seçin
• Timer'ları dikkatli kullanın
• Multithreading executor kullanın

Hata Ayıklama

$ # Node grafiğini görselleştir
$ ros2 run rqt_graph rqt_graph
$
$ # Topic verilerini plot et
$ ros2 run rqt_plot rqt_plot
$
$ # Console çıktılarını filtrele
$ ros2 run rqt_console rqt_console
$
$ # Bag kayıt et (veri kaydı)
$ ros2 bag record -a # Tüm topic'leri kaydet
$ ros2 bag play my_bag # Kaydı oynat

Test

Test Stratejisi:
• Unit testler yazın (pytest, gtest)
• Integration testleri ekleyin
• CI/CD pipeline kurun
• Simülasyonda test edin
• Gerçek robotta doğrulayın

Dokümantasyon

İyi Dokümantasyon:
• README.md dosyası ekleyin
• API dokümantasyonu yazın (Doxygen, Sphinx)
• Launch dosyalarını açıklayın
• Parametreleri belgeleyin
• Örnekler ekleyin

Güvenlik

Güvenlik Kontrol Listesi:
• DDS-Security etkinleştirin
• Parametre doğrulaması yapın
• Input sanitization uygulayın
• Güvenli kodlama pratikleri kullanın
• Düzenli güvenlik güncellemeleri yapın

Öğrenmeye Devam Edin

ROS 2 öğrenme yolculuğunuz için kaynaklar ve öneriler:

Resmi Kaynaklar

Dokümantasyon
ROS 2 Resmi Dokümantasyon: docs.ros.org
ROS 2 Tutorials: Adım adım rehberler
ROS Discourse: Topluluk forumu
ROS Answers: Soru-cevap platformu
GitHub: ros2/ros2 repository'si

Önerilen Kitaplar

Kitaplar
• "A Concise Introduction to Robot Programming with ROS2" - Francisco Rico
• "ROS 2 Robotics Developer" - Ibrahim Ozdemir
• "Programming Robots with ROS" - Morgan Quigley
• "Hands-On ROS for Robotics Programming" - Bernardo Japon

Online Kurslar

Eğitim Platformları:
  • • The Construct: ROS 2 online robot simülasyonu
  • • Udemy: ROS 2 kursları
  • • Coursera: Modern Robotics specialization
  • • edX: ROS for Beginners
  • • YouTube: Articulated Robotics kanalı

Örnek Projeler

Pratik Yapın:
• TurtleBot3 navigasyon
• Line follower robot
• Object detection ve tracking
• SLAM (Simultaneous Localization and Mapping)
• Manipülatör kontrolü
• Otonom araç simülasyonu

Topluluk

Bağlantıda Kalın
ROS Discourse: discourse.ros.org
ROS Answers: answers.ros.org
Reddit: r/ROS
Discord: ROS Discord sunucuları
Meetups: Yerel ROS buluşmaları

ROS 2 ile Robotik Dünyasına Hoş Geldiniz!

ROS 2, modern robotik geliştirmenin standart platformudur. Güçlü, esnek ve sürekli gelişen bir ekosistem sunar.

İlk Projenizi Başlatın
1. Kurulum: ROS 2 Humble veya Jazzy kurun
2. Temel Öğrenin: Node, Topic, Service kavramlarını anlayın
3. Simülasyon: Gazebo'da basit bir robot simüle edin
4. Proje Yapın: Kendi robotik uygulamanızı geliştirin
5. Paylaşın: GitHub'da açık kaynak yapın
ROS 2 Seçin Çünkü:
✅ Gerçek zamanlı performans
✅ Üretim kalitesinde güvenilirlik
✅ Çoklu platform desteği
✅ Güvenli iletişim
✅ Aktif topluluk ve sürekli geliştirme
✅ Endüstri standardı
Hatırlatma: ROS 1 Noetic, 2025 Mayıs'ta EOL olacak. Yeni projeleriniz için mutlaka ROS 2 kullanın. Mevcut ROS 1 projelerinizi taşımayı planlayın!
Başarı İçin İpuçları:
• Her gün pratik yapın
• Küçük başlayın, adım adım büyütün
• Dokümantasyonu okuyun
• Topluluktan yardım isteyin
• Kodunuzu paylaşın ve geri bildirim alın
• Simülasyonda test edin, gerçekte doğrulayın
$ # ROS 2 yolculuğunuz başlıyor!
$ source /opt/ros/humble/setup.bash
$ ros2 run demo_nodes_cpp talker
$ # Mutlu robotik maceraları! 🤖

ros2 launch your_future robotics_career.py

Robotların geleceğini şekillendirin

Hızlı Referans Komutlar:
ros2 run package_name executable_name - Node çalıştır
ros2 topic list - Topic'leri listele
ros2 topic echo /topic_name - Topic'i dinle
ros2 node list - Node'ları listele
ros2 service list - Servisleri listele
ros2 param list - Parametreleri listele
ros2 bag record -a - Tüm topic'leri kaydet
ros2 launch package_name launch_file.py - Launch dosyası çalıştır

user@robot:~/ros2_ws$ colcon build --symlink-install

✨ ROS 2 öğrenme yolculuğu tamamlandı! İyi robotikler! 🤖

Robotik tutkusu ile geliştirildi