
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_muxpaketi tarafından koordine edilir ve sadece tek bir topic olan/mobile_base_controller/cmd_velcontroller'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/Boolmesajları ile kilitleme yapılır- Kilit topic'i
Trueolduğ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_veltopic'iTwistStampedmesajları 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_veltopic'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çıklama | Mesaj Tipi |
|---|---|---|
/assisted_vel | Yardımlı teleop hız komutları | geometry_msgs/msg/Twist |
/cmd_vel | Genel hız komutları (düşük öncelik) | geometry_msgs/msg/Twist |
/docking_vel | Docking işlemi için hız komutları | geometry_msgs/msg/Twist |
/input_joy/cmd_vel | Joystick ham girişi | geometry_msgs/msg/Twist |
/joy | Joystick durumu | sensor_msgs/msg/Joy |
/joy_priority | Joystick öncelik kilidi | std_msgs/msg/Bool |
/joy_vel | Joystick hız komutları | geometry_msgs/msg/Twist |
/key_vel | Klavye hız komutları | geometry_msgs/msg/Twist |
/mobile_base_controller/cmd_vel | Controller'a giden nihai komut | geometry_msgs/msg/TwistStamped |
/rviz_joy_vel | RViz sanal joystick | geometry_msgs/msg/Twist |
/assisted_teleop_priority | Yardımlı teleop önceliği | std_msgs/msg/Bool |
Action'lar
| Action Adı | Açıklama |
|---|---|
/assisted_teleop_priority_action | Yardımlı teleop öncelik kontrolü |
/joy_priority_action | Joystick öncelik kontrolü |
/joy_turbo_angular_decrease | Açısal hızı azalt |
/joy_turbo_angular_increase | Açısal hızı artır |
/joy_turbo_decrease | Lineer hızı azalt |
/joy_turbo_increase | Lineer hızı artır |
/joy_turbo_reset | Turbo 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?
- Twist_mux'un çalıştığını kontrol edin:
ros2 node list | grep twist_mux - Topic'lerin aktif olduğunu kontrol edin:
ros2 topic list - Kilit durumunu kontrol edin:
ros2 topic echo /joy_priority - Ö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)Loading comments...