Haberler

SLAMWARE ROS SDK’sını Robot Navigasyonu Pozisyon Geliştirme için Nasıl Kullanılır

Son makalede, SLAMWARE ROS SDK’nın yayınlanması, kullanıcıların robot geliştirme sürecinde SLAMWARE tarafından sağlanan haritalama, konumlandırma ve navigasyon işlevlerini uygulamalarına olanak tanır ve bu süreçte başlangıçta ROS’a dayalı olarak geliştirilen uygulama mantığını korur.

Bugün, herkesi SLAMWARE ROS SDK’sını geliştirme için nasıl kullanacağımızı deneyimlemeye davet ediyoruz.

Robotun hareketiyle başlayalım.

1. Klavye kontrolü (geri, sola ve sağa hareket)

En klasik turtlesim in ROS‘ı hatırlıyor musunuz?
Bu durumda, kaplumbağa hareketi, turtle_teleop_key düğümünü başlatarak klavye yön tuşlarıyla kontrol edilebilir.

Ancak, kullanıcılar SLAMWARE tabanlı robotlarımızı veya haritalama radar ürünlerimizi aldıklarında, RViz’de ilk olarak harita bilgileri görünür. Eğer robotun hareket yönünü kontrol etmek için klavyeyi kullanmak isterseniz, ancak bu çalışmıyorsa.

Bu durumda, SLAMWARE ROS SDK geliştirme belgesine başvurmalısınız. Burada slamware_ros_sdk_server_node’un [yön hareketi] standart tür konusuna abone olduğunu göreceksiniz; yani, klavyeyi “robot”u kontrol etmek için kullanmak istiyorsanız, yalnızca klavye bilgilerini almak için bir düğüm derlememiz gerekiyor. Klavye bilgilerini aldıktan sonra, ilgili komut mesajı konuya gönderilebilir.

İlgili mesaj parametreleri aşağıdaki gibi olacaktır:

Mesaj Parametresi Açıklama
liner.x > 0.005f İleri
liner.x < -0.005f Geri
angular.z > 0.001f Sola döndür
angular.z < -0.001f Sağa döndür

SDK kullanarak klavye kontrolü yaparken, birkaç ana geliştirme noktası vardır:

1. Klavye tuşlarını tanımlayın

moveBindings = {
    'w':(1.0, 0.0),
    's':(-1.0, 0.0),
    'a':(0.0, 1.0),
    'd':(0.0, -1.0)
}

2. Yayıncıyı tanımlayın, mesaj konusunu ve mesaj türünü geliştirin

 pub = rospy.Publisher('/cmd_vel', Twist, queue_size = 1)

3. Düğümü başlatın

rospy.init_node('teleop_twist_keyboard')

Bu işlemler tamamlandıktan sonra, basılan tuş daha önce tanımlanan durum tuşları arasında ise, ilgili değer linearX ve angularZ’ye atanır.

 key = getKey()
 if key in moveBindings.keys():
     linearX = moveBindings[key][0]
     angularZ = moveBindings[key][1]
 else:
     linearX = 0.0
     angularZ = 0.0
     if (key == '\x03'):
         break

4. Konuya gerekli türdeki mesajı serbest bırakacak şekilde birleştirin

twist = Twist()
twist.linear.x = linearX
twist.angular.z = angularZ
pub.publish(twist)

Bu noktada, klavye kullanarak robotun dağıtımı tamamlanmıştır. Bu adımı tamamlayan kullanıcılar, sırasıyla slamware_ros_sdk_server_node ve teleop_twist_keyboard düğümlerini başlatarak [sola ve sağa] hareket etmeyi deneyebilirler.

Navigasyon hedefleme konusunu daha yakından inceleyelim. Herkes SLAMTEC’in robot hareketi ve kontrol geliştirme işlevlerini entegre eden genişletilebilir bir robot yönetim ve geliştirme yazılımı olan RoboStudio’ya sahip olduğunu biliyor; bu yazılım, mobil robotlara komut göndermek için robotların görsel izlenmesini sağlar.

Peki, ROS’un Robostudio’nun aynı işlevini nasıl gerçekleştireceğini sağlarız?

2. Navigasyon ve konumlandırma

1. Navigasyon ve Konumlandırma

SLAMWARE ROS SDK’nın yayınlanması, tüm SLAMWARE tabanlı robotların konumlandırma ve harita bilgilerinin RViz’de görüntülenmesini sağlar. Haritaya sahip olduğumuzda, istediğimiz herhangi bir yere tıklayabiliriz ve robot otomatik olarak hedefe gitmek için en uygun rotayı planlayacaktır. Spesifik gösterim aşağıdaki gibi olacaktır:

2. Sanal duvar/sanal yol

SLAMTEC için, otonom konumlandırma navigasyon teknolojisinin yanı sıra, herhangi bir fiziksel döşeme olmaksızın sanal duvar/sanal yol belirleme özelliği de bulunmaktadır; bu, robotun hareket alanını esnek bir şekilde kontrol etme imkanı sunar. Bu, pratik uygulama senaryolarında büyük bir öneme sahiptir.

Aşağıda, deney yapmaya başlayalım.

Öncelikle, belgede [virtual_walls] konusunu bulun. Yayınlanan mesaj türü özel bir türdür. Tür yapısı bilgilerini görüntülemek için tıklayın.

slamware_ros_sdk/Line2DFlt32Array

Dosya

slamware_ros_sdk/msg/Line2DFlt32Array.msg

Tanım

Öğe Tür Açıklama
lines slamware_ros_sdk/Line2DFlt32[] birden fazla çizgi

(1) Düğümü başlatın, yayıncı ve abone nesnelerini tanımlayın

 ros::init(argc, argv, "display_virtual_lines");
 ros::NodeHandle n;
 ros::Publisher pub = n.advertise<visualization_msgs::Marker>("visualization_marker", 10);
 ros::Subscriber sub = n.subscribe<slamware_ros_sdk::Line2DFlt32Array>("/slamware_ros_sdk_server_node/virtual_walls", 30, virtualWallCallback);

(2) Global olarak bir Marker türü tanımlayın, çizgiler sanal duvarları depolamak ve yayınlamak için kullanılır.

visualization_msgs::Marker lines;

(3) slamware_ros_sdk_server_node düğümü tarafından gönderilen sanal duvar mesajını aldıktan sonra, bunu çizgilere kaydedin.

void virtualWallCallback(const slamware_ros_sdk::Line2DFlt32Array::ConstPtr & msg)
{
    lines.points.clear();
    size_t cnt = msg->lines.size();
    for (size_t i = 0; i < msg->lines.size(); ++i)
    {
        geometry_msgs::Point p1;
        p1.x = msg->lines[i].start.x;
        p1.y = msg->lines[i].start.y;
        p1.z = 0.2;

        geometry_msgs::Point p2;
        p2.x = msg->lines[i].end.x;
        p2.y = msg->lines[i].end.y;
        p2.z = 0.2;

        lines.points.push_back(p1);
        lines.points.push_back(p2);
    }
}

(4) Çizgileri, tür, boyut ve renk gibi özelliklerle yapılandırın.

 lines.id = 1;
 lines.header.frame_id = "slamware_map";
 lines.type = visualization_msgs::Marker::LINE_LIST;
 lines.ns = "lines";
 lines.action = visualization_msgs::Marker::ADD;
 lines.pose.orientation.w = 1.0;

 lines.scale.x = 0.1;
 lines.color.r = 1.0;
 lines.color.a = 1.0;

(5) Çizgileri yayınlayın

  ros::Rate r(30);
  while(running)
  {
      size_t cnt = lines.points.size();

      lines.header.stamp = ros::Time::now();
      pub.publish(lines);

      r.sleep();
  }

Dağıtım tamamlandıktan sonra, sırasıyla slamware_ros_sdk_server_node, view_slamware_ros_sdk_server_node ve display_virtual_lines düğümlerini başlatıyoruz.

Bu noktada, RViz’de Marker bilgilerini eklemek için yapılandırma yapmanız gerekiyor. Öncelikle, RViz’in sol alt köşesindeki [Ekle] düğmesini bulun.

Objeyi görüntülemek için Ekle [Marker] seçeneğini seçin.

Ekleme tamamlandıktan sonra, referans belgelerinde [add_lines] konusunu bulmaya devam ediyoruz ve ardından bunu özelleştirebiliriz. Özelleştirilmiş türün bileşimini ve tanımını görmek için tıklayın: çizgi türü, ekleme yeri ve ilgili tanımlar.

slamware_ros_sdk_server_node düğümünü başlatın, robotu bağlayın ve komut satırına şunu yazın:

rostopic pub /slamware_ros_sdk_server_node/add_line slamware_ros_sdk/AddLineRequest -1 -- '[0]' '[1, [0.0, 0.0], [1.0, 1.0]]'

Bu noktada, Rviz’de sanal duvarı görebiliriz.

Bunu nasıl silersiniz? Benzer şekilde, clear_lines düğüm bilgilerini buluyoruz, komut satırına ilgili kodu giriyoruz:

rostopic pub /slamware_ros_sdk_server_node/clear_lines slamware_ros_sdk/ClearLinesRequest -1 '[0]'

Sanalsal rayların geliştirilmesi yukarıdaki gibi olacaktır.

Bu eğitim, SLAMWARE ROS SDK’nın iki basit özelliğinin sadece bir gösterimidir. Robot hareket durumu, yönlendirme, dönüş açısı, harita senkronizasyonu ve haritayı temizleme gibi konuların esnek kullanımı, robotun daha iyi izlenmesi ve kontrol edilmesini sağlayacaktır.

Peki, keşfetmeye hazır mısınız?

Leave a Reply

Your email address will not be published. Required fields are marked *