ROS 2 Teleop Rehberi
E
emin

Posted on Feb 3

Available in:

ROS 2 Teleop Rehberi

Robotunuzu Gerçek Zamanlı Kontrol Edin


Teleoperation Nedir?

Teleoperation (uzaktan kumanda), robotunuzu gerçek zamanlı olarak uzaktan kontrol etmenizi sağlayan güçlü bir sistemdir. Fiziksel joystick, klavye veya sanal kontrol panelleri kullanarak robotunuzu hassas bir şekilde yönlendirebilirsiniz.

Önemli Not: Tüm kontrol yöntemleri twist_mux paketi tarafından koordine edilir ve sadece tek bir topic olan /mobile_base_controller/cmd_vel controller'a gönderilir.


Ana Özellikler

1. Öncelik Yönetimi

Birden fazla hız topic'i aynı anda aktifse, en yüksek önceliğe sahip olan otomatik seçilir. Bu sayede farklı kontrol kaynaklarının çakışması önlenir.

Nasıl Çalışır:

  • Her giriş topic'ine bir öncelik değeri atanır
  • Aynı anda birden fazla topic aktifse, en yüksek öncelikli olanı seçilir
  • Diğer topic'lerden gelen komutlar göz ardı edilir

2. Turbo Modu

Joystick üzerinden robotun hızını anında artırın veya azaltın.

Uyarı: Turbo arayüzü TÜM hız kaynakları için mevcut değildir. Yalnızca joystick'in robota gönderdiği hız komutunu ayarlamaya izin verir.

3. Giriş Kilitleme

Belirli girişleri kilitleyerek daha düşük öncelikli komutları devre dışı bırakın.

Kullanım:

  • std_msgs/msg/Bool mesajları ile kilitleme yapılır
  • Kilit topic'i True olduğunda, ilgili giriş kilitlenir
  • Kilitli girişten daha düşük öncelikli tüm girişler devre dışı kalır

Robotu Hareket Ettirme

Kritik Güvenlik Bilgisi

Dikkat! /mobile_base_controller/cmd_vel topic'i TwistStamped mesajları gerektirir ve zaman damgası doğrulaması yapar. Bu topic'e doğrudan mesaj yayınlamak mümkün değildir ve önerilmez.

Önerilen Yöntem: /cmd_vel Topic'i

Özel bir kontrol node'u oluşturuyorsanız, hız komutlarını /cmd_vel topic'ine yayınlayın.

Örnek Kullanım:

ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "linear:
  x: 0.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.5" -r 10

Bu komut robotu 0.5 rad/s hızla döndürür.

Önemli Uyarılar

Engel Algılama:

/cmd_vel üzerinden yayın yaparken engel algılama devre dışıdır. Robot belirlediğiniz yönde hareket eder, çevresindeki engelleri dikkate almaz.

Sürekli Hareket:

  • Robotun sürekli hareket etmesi için hız komutlarını 10Hz frekansta sürekli yayınlamanız gerekir
  • Her komut 0.5 saniye geçerlidir
  • Bu süreden sonra robot durursa komut tekrarlanmalıdır

Topic Öncelikleri:

📌 /cmd_vel topic'i en düşük önceliğe sahiptir. Kullanırken:

  • Başka hiçbir hız topic'inin aktif olmadığından emin olun
  • Kilit girişlerinin False olduğunu kontrol edin

Yapılandırma

Twist_mux için özel yapılandırmalar oluşturarak robotunuzun davranışını özelleştirebilirsiniz.

Adım 1: Yapılandırma Dizini Oluşturun

mkdir -p ~/.pal/config

Adım 2: Yapılandırma Dosyası Oluşturun

touch ~/.pal/config/99_my_twist_mux_config.yaml

💡 İpucu: Dosya adı bir sayı ile başlamalıdır (örn: 99_). Bu, dosyanın en son yüklenmesini ve varsayılan yapılandırmaları geçersiz kılmasını sağlar.

Adım 3: Parametreleri Tanımlayın

/twist_mux:
   ros__parameters:
      # Özel parametreleriniz buraya
      topics:
        cmd_vel:
          topic: cmd_vel
          timeout: 0.5
          priority: 10
        
        joy_vel:
          topic: joy_vel
          timeout: 0.5
          priority: 100
        
        nav_vel:
          topic: nav_vel
          timeout: 0.5
          priority: 50
      
      locks:
        - name: joystick_lock
          topic: joy_priority
          timeout: 0.5
          priority: 255

Adım 4: Modülü Yeniden Başlatın

pal module restart joystick

Varsayılan Ayarlara Dönme

Varsayılan PAL yapılandırmasına geri dönmek için:

rm ~/.pal/config/99_my_twist_mux_config.yaml
pal module restart joystick

📝 Not: Bu değişiklik kalıcıdır ve joystick modülünü her başlattığınızda yüklenecektir.


ROS 2 API Referansı

Teleoperation sisteminin sunduğu tüm ROS 2 arayüzleri:

Topic'ler

Topic AdıAçıklamaMesaj Tipi
/assisted_velYardımlı teleop hız komutlarıgeometry_msgs/msg/Twist
/cmd_velGenel hız komutları (düşük öncelik)geometry_msgs/msg/Twist
/docking_velDocking işlemi için hız komutlarıgeometry_msgs/msg/Twist
/input_joy/cmd_velJoystick ham girişigeometry_msgs/msg/Twist
/joyJoystick durumusensor_msgs/msg/Joy
/joy_priorityJoystick öncelik kilidistd_msgs/msg/Bool
/joy_velJoystick hız komutlarıgeometry_msgs/msg/Twist
/key_velKlavye hız komutlarıgeometry_msgs/msg/Twist
/mobile_base_controller/cmd_velController'a giden nihai komutgeometry_msgs/msg/TwistStamped
/rviz_joy_velRViz sanal joystickgeometry_msgs/msg/Twist
/assisted_teleop_priorityYardımlı teleop önceliğistd_msgs/msg/Bool

Action'lar

Action AdıAçıklama
/assisted_teleop_priority_actionYardımlı teleop öncelik kontrolü
/joy_priority_actionJoystick öncelik kontrolü
/joy_turbo_angular_decreaseAçısal hızı azalt
/joy_turbo_angular_increaseAçısal hızı artır
/joy_turbo_decreaseLineer hızı azalt
/joy_turbo_increaseLineer hızı artır
/joy_turbo_resetTurbo ayarlarını sıfırla

İleri Okuma ve Kaynaklar

Önerilen Dokümantasyon

Yardımlı Teleop

Engel algılama ve güvenlik özellikleriyle gelişmiş teleop kullanımı. Robotunuzu güvenli bir şekilde kontrol etmek için built-in engel kaçınma mekanizması.

Twist_mux Dokümantasyonu

Resmi twist_mux paketi dokümantasyonu ve gelişmiş özellikler. Öncelik yönetimi, kilitleme mekanizmaları ve konfigürasyon detayları.

ROS 2 Navigation

Otonom navigasyon için Nav2 entegrasyonu. Teleop ile otonom navigasyon arasında sorunsuz geçiş.

Harici Kaynaklar


Örnek Kullanım Senaryoları

Senaryo 1: Joystick ile Kontrol

# Joystick modülünü başlat
pal module start joystick

# Joystick ile robotu kontrol edin
# Turbo için özel butonları kullanın

Senaryo 2: Klavye ile Kontrol

# Klavye teleop başlat
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args --remap cmd_vel:=key_vel

Senaryo 3: Özel Node ile Kontrol

import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist

class CustomTeleopNode(Node):
    def __init__(self):
        super().__init__('custom_teleop')
        self.publisher = self.create_publisher(Twist, '/cmd_vel', 10)
        self.timer = self.create_timer(0.1, self.publish_velocity)  # 10Hz
    
    def publish_velocity(self):
        msg = Twist()
        msg.linear.x = 0.5  # İleri git
        msg.angular.z = 0.0
        self.publisher.publish(msg)

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

Sık Sorulan Sorular

Robot komutlara cevap vermiyor, ne yapmalıyım?

  1. Twist_mux'un çalıştığını kontrol edin: ros2 node list | grep twist_mux
  2. Topic'lerin aktif olduğunu kontrol edin: ros2 topic list
  3. Kilit durumunu kontrol edin: ros2 topic echo /joy_priority
  4. Öncelik ayarlarını gözden geçirin

Birden fazla kontrol yöntemi aynı anda kullanılabilir mi?

Evet, ancak sadece en yüksek önceliğe sahip olan aktif olacaktır. Diğerleri twist_mux tarafından göz ardı edilir.

Turbo modu tüm cihazlarda çalışıyor mu?

Hayır, turbo modu sadece joystick için mevcuttur. Diğer kontrol yöntemleri için bu özellik bulunmamaktadır.


Sonuç

ROS 2 Teleoperation sistemi, robotunuzu güvenli ve esnek bir şekilde kontrol etmenizi sağlar. Twist_mux'un sunduğu öncelik yönetimi, kilitleme mekanizmaları ve turbo özellikleri sayesinde profesyonel seviyede robot kontrolü yapabilirsiniz.

Unutmayın:

  • ✅ Her zaman güvenlik önceliğiniz olsun
  • ✅ Engel algılama gerekiyorsa yardımlı teleop kullanın
  • ✅ Özel ihtiyaçlarınız için yapılandırmaları özelleştirin
  • ✅ Düzenli olarak dokümantasyonu takip edin

Mehmet Emin Ateş

Comments

(0)
Top commentsNewest first

0/3000 • Press Ctrl + Enter to submit

Loading comments...

ROS 2 Teleop Rehberi | SourceDev