
İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-23 15:13


github.com/AIWintermuteAI/ros-moveit-arm.git
Yazının bir önceki bölümünde robotik kolumuz için URDF ve XACRO dosyaları oluşturmuş ve simüle ortamda robotik kolumuzu kontrol etmek için RVIZ'i başlatmıştık.
Bu sefer gerçek robotik kolla yapacağız! Yakalayıcıyı ekleyeceğiz, bir robot denetleyicisi yazacağız ve (isteğe bağlı) IKfast ters kinematik çözücü oluşturacağız.
Geronimo!
Adım 1: Kıskaç Ekleme



Gripper eklemek ilk başta biraz kafa karıştırıcıydı, bu yüzden bir önceki makalede bu kısmı atladım. Sonuçta o kadar da zor olmadığı ortaya çıktı.
Kavrayıcı bağlantılar ve eklemler eklemek için URDF dosyanızı değiştirmeniz gerekecektir.
Robotum için değiştirilmiş URDF dosyası bu adıma eklenmiştir. Temelde kol kısmı ile aynı mantığı takip ediyor, sadece üç yeni bağlantı (claw_base, claw_r ve claw_l) ve üç yeni bağlantı (eklem5 sabit ve eklem6, eklem7 döner eklemlerdir) ekledim.
URDF dosyanızı değiştirdikten sonra, MoveIt kurulum yardımcısını kullanarak MoveIt tarafından oluşturulan paketi ve xacro dosyasını da güncellemeniz gerekir.
Aşağıdaki komutla kurulum yardımcısını başlatın
roslaunch moveit_setup_assistant setup_assistant.launch
Mevcut MoveIt Yapılandırmasını Düzenle'ye tıklayın ve MoveIt paketinizin bulunduğu klasörü seçin.
Yeni planlama grubu tutucusu (kavrayıcı için bağlantılar ve bağlantılarla birlikte) ve ayrıca bir uç efektör ekleyin. Ayarlarım aşağıdaki ekran görüntülerinde. Kavrayıcı için kinematik çözücü seçmediğinize dikkat edin, bu gerekli değildir. Paketi oluşturun ve dosyaların üzerine yazın.
Çalıştırmak
kedicik yapmak
catkin çalışma alanınızda komut.
Pekala, şimdi kıskaçlı bir kolumuz var!
Adım 2: Kolu İnşa Etme




Daha önce de bahsettiğim gibi kol 3D modeli Juergenlessner tarafından yapılmış, harika bir çalışma için teşekkürler. Bağlantıyı takip ederseniz ayrıntılı montaj talimatlarını bulabilirsiniz.
Yine de kontrol sistemini değiştirmek zorunda kaldım. Servoları kontrol etmek için Sensör kalkanlı Arduino Uno kullanıyorum. Sensör kalkanı, kablolamayı basitleştirmeye çok yardımcı olur ve ayrıca servolara harici güç sağlamayı kolaylaştırır. Alçak modül (6V) üzerinden Sensör Kalkanına bağlanan 12V 6A güç adaptörü kullanıyorum.
Servolar hakkında bir not. Taobao'dan aldığım MG 996 HR servoları kullanıyorum ama kalitesi gerçekten çok kötü. Kesinlikle ucuz bir Çin nakavtı. Dirsek eklemi için olan yeterli tork sağlamadı ve hatta ağır yük altında bir kez duman çıkarmaya başladı. Dirsek eklem servosunu daha kaliteli bir üreticiden MG 946 HR ile değiştirmek zorunda kaldım.
Uzun lafın kısası - kaliteli servolar satın alın. Servolarınızdan sihirli duman çıkarsa, daha iyi servolar kullanın. 6V çok güvenli bir voltajdır, arttırmayın. Torku artırmaz ancak servolara zarar verebilir.
Servolar için kablolama aşağıdaki gibidir:
taban 2
omuz2 4omuz1 3
dirsek 6
tutucu 8
bilek 11
Arduino taslağını değiştirmeyi de hatırladığınız sürece değiştirmekten çekinmeyin.
Donanımla işiniz bittiğinde, büyük resme bir bakalım!
Adım 3: MoveIt RobotCommander Arayüzü

Peki, şimdi ne? Neden MoveIt ve ROS'a ihtiyacınız var? Kolu doğrudan Arduino koduyla kontrol edemez misin?
Evet yapabilirsin.
Tamam, şimdi gidecek robot pozu sağlamak için GUI veya Python/C++ kodunu kullanmaya ne dersiniz? Arduino bunu yapabilir mi?
Bir çeşit. Bunun için bir robot pozu (3 boyutlu uzayda çevirme ve döndürme koordinatları) alacak ve servolar için eklem açı mesajlarına dönüştürecek bir ters kinematik çözücü yazmanız gerekecek.
Bunu kendin yapabilmene rağmen, yapacak çok iş var. Bu nedenle, MoveIt ve ROS, IK (ters kinematik) çözücünün tüm ağır trigonometrik kaldırma işlemlerini sizin için yapması için güzel bir arayüz sağlar.
Kısa cevap: Evet, bir pozdan diğerine gitmek için sabit kodlanmış bir Arduino taslağını yürütecek basit bir robotik kol yapabilirsiniz. Ancak robotunuzu daha akıllı hale getirmek ve bilgisayarla görme yetenekleri eklemek istiyorsanız, MoveIt ve ROS tam size göre.
MoveIt çerçevesinin nasıl çalıştığını açıklayan çok basitleştirilmiş bir diyagram yaptım. Bizim durumumuzda daha da basit olacak, çünkü servolarımızdan geri bildirim almayacağız ve /joint_states konusunu robot kontrolörüne servolar için açılar sağlamak için kullanacağız. Robot denetleyicisi olan yalnızca bir bileşenimiz yok.
Biz ne bekliyoruz? Bazı robot kontrolörleri yazalım, böylece robotumuz … bilirsiniz, daha kontrol edilebilir olur.
Adım 4: Robot Denetleyicisi için Arduino Kodu



Bizim durumumuzda, rosserial ile bir ROS düğümü çalıştıran Arduino Uno, robot kontrolörü olacaktır. Arduino çizim kodu bu adıma eklenmiştir ve GitHub'da da mevcuttur.
Arduino Uno üzerinde çalışan ROS düğümü, temelde MoveIt çalıştıran bilgisayarda yayınlanan /JointState konusuna abone olur ve ardından standart Servo.h kütüphanesini kullanarak dizideki eklem açılarını radyandan dereceye çevirir ve servolara iletir.
Bu çözüm biraz zor ve endüstriyel robotlarla nasıl yapıldığını değil. İdeal olarak, hareket yörüngesini /FollowJointState konusunda yayınlamanız ve ardından /JointState konusu hakkında geri bildirim almanız gerekir. Ancak kolumuzdaki hobi servoları geri bildirim sağlayamıyor, bu yüzden FakeRobotController düğümü tarafından yayınlanan /JointState konusuna doğrudan abone olacağız. Temel olarak, servolara geçtiğimiz açıların ideal olarak yürütüldüğünü varsayacağız.
Rosserial'ın nasıl çalıştığı hakkında daha fazla bilgi için aşağıdaki eğitimlere başvurabilirsiniz.
wiki.ros.org/rosserial_arduino/Tutorials
Krokiyi Arduino Uno'ya yükledikten sonra, ROS kurulumunuzu çalıştıran bilgisayara seri kablo ile bağlamanız gerekir.
Tüm sistemi getirmek için aşağıdaki komutları yürütün
roslaunch my_arm_xacro demo.launch rviz_tutorial:=true
sudo chmod -R 777 /dev/ttyUSB0
rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0 _baud:=115200
Artık robot kolunu bir poza getirmek için RVIZ'deki etkileşimli işaretçileri kullanabilir ve ardından gerçekten pozisyona geçmesi için Planla ve Yürüt'e basabilirsiniz.
Büyü!
Artık rampa testimiz için Python kodunu yazmaya hazırız. Eh, neredeyse…
Adım 5: (İsteğe bağlı)IKfast Eklentisi Oluşturma
Varsayılan olarak MoveIt, 6 DOF kolundan daha azıyla gerçekten çalışmayan KDL kinematik çözücünün kullanılmasını önerir. Bu öğreticiyi yakından takip ederseniz, RVIZ'deki kol modelinin kol konfigürasyonu tarafından desteklenmesi gereken bazı pozlara gidemediğini fark edeceksiniz.
Önerilen çözüm, OpenRave kullanarak özel kinematik çözücü oluşturmaktır. O kadar zor değil, ancak onu inşa etmeniz ve kaynaktan gelen bağımlılıkları veya hangisini tercih ederseniz, docker konteynerini kullanmanız gerekecek.
Prosedür bu eğitimde çok iyi belgelenmiştir. Ubuntu 16.04 ve ROS Kinetic çalıştıran VM üzerinde çalıştığı onaylanmıştır.
Çözücüyü oluşturmak için aşağıdaki komutu kullandım
openrave.py --database ters kinematik --robot=arm.xml --iktype=translation3d --iktests=1000
ve sonra koştu
rosrun moveit_kinematics create_ikfast_moveit_plugin.py test_robot arm my_arm_xacro ikfast0x1000004a. Translation3D.0_1_2_f3.cpp
MoveIt IKfast eklentisini oluşturmak için.
Tüm prosedür biraz zaman alıcıdır, ancak öğreticiyi yakından takip ederseniz çok zor değildir. Bu bölümle ilgili sorularınız varsa, lütfen yorumlarda veya PM'de benimle iletişime geçin.
Adım 6: Rampa Testi


Artık ROS MoveIt Python API kullanarak gerçekleştireceğimiz rampa testini denemeye hazırız.
Python kodu bu adıma eklenmiştir ve ayrıca github deposunda mevcuttur. Rampanız yoksa veya başka bir test denemek istiyorsanız, koddaki robot pozlarını değiştirmeniz gerekecektir. Bunun için ilk çalıştırma
rostopic yankı /rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback
zaten RVIZ ve MoveIt çalıştırırken terminalde. Ardından robotu etkileşimli işaretleyicilerle istenen konuma hareket ettirin. Konum ve yön değerleri terminalde görüntülenecektir. Bunları Python koduna kopyalamanız yeterlidir.
Rampa testi çalıştırmasını yürütmek için
rosrun my_arm_xacro pick/pick_2.py
RVIZ ve rosserial düğüm zaten çalışıyor.
Nesne algılama için stereo kamera kullanacağım ve basit nesneler için seç ve yerleştir boru hattını çalıştıracağım makalenin üçüncü bölümü için bizi izlemeye devam edin!
Önerilen:
160A Fırçalı Elektronik Hız Kontrol Cihazı ve Servo Test Cihazı Kullanılarak DC Dişli Motor Nasıl Kontrol Edilir: 3 Adım

160A Fırçalı Elektronik Hız Kontrol Cihazı ve Servo Test Cihazı Kullanılarak DC Dişli Motor Nasıl Kontrol Edilir: Özellikler: Voltaj: 2-3S Lipo veya 6-9 NiMH Sürekli akım: 35A Patlama akımı: 160A BEC: 5V / 1A, lineer mod Modlar: 1. ileri &ters; 2. ileri &fren; 3. ileri & fren & ters Ağırlık: 34g Boyut: 42*28*17mm
Arduino ve PC Tarafından Kontrol Edilen Robotik Kol: 10 Adım

Arduino ve PC Tarafından Kontrol Edilen Robotik Kol: Robotik kollar endüstride yaygın olarak kullanılmaktadır. İster montaj işlemleri için, ister kaynak için, hatta biri ISS'ye (Uluslararası Uzay İstasyonu) yerleştirmek için kullanılıyor olsun, insanlara işlerinde yardımcı oluyorlar veya tamamen insanın yerini alıyorlar. Yaptığım kol daha küçük
Zio Modüllü Robotik Kol Bölüm 3: 4 Adım

Zio Modülleri ile Robotik Kol Bölüm 3: Bu blog yazısı Zio Robotics Series'in bir parçasıdır.Giriş Önceki blogumuzda, Zio modüllerini kullanarak bir Robotik Kolun nasıl kontrol edileceğine dair Bölüm 1 ve 2 öğreticisini yayınlamıştık. Bölüm 1 çoğunlukla Robotik Kolunuzun Pençesini otomatik olarak kontrol etmeye odaklandı
Zio Modüllü Robotik Kol Bölüm 2: 11 Adım

Zio Modüllü Robotik Kol Bölüm 2: Bugünkü eğitimde, robotik kolu kontrol etmek için 4 servoyu ve bir PS2 kablosuz kontrol cihazını kullanacağız.Bu blog yazısı Zio Robotics Series'in bir parçasıdır.Giriş Önceki blogumuzda, Bölüm 1'i yayınlamıştık. Robotik Ar'ın nasıl kontrol edileceğine dair eğitim
ROS MoveIt Robotik Kol: 4 Adım

ROS MoveIt Robotik Kol: Bu, ROS(Robotic Operating System) ve MoveIt ile kontrol edilen robotik kol yapımı hakkında bir yazı dizisi olacak. Robotik ile ilgileniyorsanız ROS, daha iyi robotları daha hızlı oluşturmanıza yardımcı olacak harika bir çerçevedir. Yeniden kullanmanıza olanak tanır