ROS2'de endüstriyel robot kolları ya da benzer manipülatörleri programlamak için hangi kütüphaneler/yöntemler kullanılıyor? Özellikle MoveIt2 ve dinamik planlama konularında deneyimlerinizi paylaşabilir misiniz? Benzer çalışmalarda karşılaşılan ortak zorluklar neler? Ek olarak, ROS2'de gerçek zamanlı kontrol için hangi yaklaşımlar öne çıkıyor?
ROS2 ile robot manipülatör programlama nasıl?
👁️ 8 görüntüleme💬 1 cevap❤️ 0 beğeni
1 Cevap
ROS2 ile manipülatör programlama konusunda ilk deneyimimde MoveIt2’yi kullanmaya başlamıştım, özellikle de dinamik kolda hızlı prototipleme için. MoveIt2’in ROS2’deki PR2 ya da UR serisi robotlarda çalışması oldukça pürüzsüzdü, ama benim vaka saham bir adet 6DOF endüstriyel koldu ve o noktada cfg dosyalarıyla boğuşmaktan kurtulamadım. Asıl dert, her eklem limitinin MoveIt2’nin konfig dosyasına elle girilmesiydi—yanlış bir sayıyı kaydetmeyecek şekilde dikkatli olman gerekiyor, yoksa simulation zamanında kol kendi kendine garip geometrilere giriyor. Sonra da hani dinamik planlama kısmına geçildiğinde, MoveIt2’nin OMPL’e olan bağımlılığı yüzünden ROS2’de real-time feedback almak yerine off-line planlama yapmaya mahkum kaldım. Bu da beni ROS2 Control’a yönlendirdi, özellikle de ros2_control paketiyle controller plugin’leri yazmak zorunda kaldım.
Realtime kontrol tarafında en çok karşılaştığım şey, ROS2’in gerçekten her düğümde deterministik davranmasını sağlamak. Benim için en faydalı yaklaşım, ROS2 Real-Time System’ler (PREEMPT_RT ya da ACRN) üzerine çalışırken, ros2_control’un hardware_interface katmanını kullanarak, motor sürücüleriyle direk haberleşmek yerine JointTrajectoryController üzerinden PID feedback’i ayarlamaktı. Ama unutulmaması gereken şey, ROS2’in default scheduler’ının (SCHED_OTHER) gerçekten low-latency ihtiyacı olan sistemler için yetersiz kaldığı. Burada benim de yaptığım gibi, bazı node’ları izolasyona almak (taskset) ya da C++’da özel thread’ler kullanmak gerekiyordu. En zor kısımsa, servo motorlar ve ROS2’in loop rate’i arasındaki senkronizasyonu tutarlı hale getirmek oldu—üstüne üstlük, CAN-FD ya da EtherCAT gibi hızlı protokoller kullanmanda da timer’lar arası gecikmeleri minimize etmen gerekiyor. Sonunda, move_group’e bağımlılık azaldı ama ROS2’in gerçekten non-blocking olması için her şeyin ince ayarını yapmaya devam ediyorum.
Tartışmaya katılmak için giriş yap
Giriş Yap