Daftar Isi:

ROS MoveIt Lengan Robot Bagian 2: Pengontrol Robot: 6 Langkah
ROS MoveIt Lengan Robot Bagian 2: Pengontrol Robot: 6 Langkah

Video: ROS MoveIt Lengan Robot Bagian 2: Pengontrol Robot: 6 Langkah

Video: ROS MoveIt Lengan Robot Bagian 2: Pengontrol Robot: 6 Langkah
Video: How to operate a robot arm using MoveIt 2024, November
Anonim
Image
Image

github.com/AIWintermuteAI/ros-moveit-arm.git

Di bagian artikel sebelumnya, kami telah membuat file URDF dan XACRO untuk lengan robot kami dan meluncurkan RVIZ untuk mengontrol lengan robot kami di lingkungan simulasi.

Kali ini kita akan melakukannya dengan lengan robot sungguhan! Kami akan menambahkan gripper, menulis pengontrol robot dan (opsional) menghasilkan pemecah kinematika terbalik IKfast.

Geronimo!

Langkah 1: Menambahkan Gripper

Menambahkan Gripper
Menambahkan Gripper
Menambahkan Gripper
Menambahkan Gripper
Menambahkan Gripper
Menambahkan Gripper

Menambahkan gripper agak membingungkan pada awalnya, jadi saya melewatkan bagian ini di artikel sebelumnya. Ternyata tidak begitu sulit.

Anda harus memodifikasi file URDF Anda untuk menambahkan tautan dan sambungan gripper.

File URDF yang dimodifikasi untuk robot saya dilampirkan pada langkah ini. Pada dasarnya mengikuti logika yang sama dengan bagian lengan, saya baru saja menambahkan tiga tautan baru (claw_base, claw_r dan claw_l) dan tiga sambungan baru (joint5 diperbaiki, dan joint6, joint7 adalah sambungan revolute).

Setelah Anda memodifikasi file URDF Anda, Anda juga harus memperbarui paket yang dihasilkan MoveIt dan file xacro dengan menggunakan asisten pengaturan MoveIt.

Luncurkan asisten pengaturan dengan perintah berikut

roslaunch moveit_setup_assistant setup_assistant.launch

Klik Edit Konfigurasi MoveIt yang Ada dan pilih folder dengan paket MoveIt Anda.

Tambahkan gripper grup perencanaan baru (dengan tautan dan sambungan untuk gripper) dan juga efektor akhir. Pengaturan saya ada di tangkapan layar di bawah ini. Perhatikan bahwa Anda tidak memilih pemecah kinematika untuk gripper, itu tidak perlu. Hasilkan paket dan timpa file.

Lari

buatan catkin

perintah di ruang kerja catkin Anda.

Baiklah, sekarang kita memiliki lengan dengan gripper!

Langkah 2: Membangun Lengan

Membangun Lengan
Membangun Lengan
Membangun Lengan
Membangun Lengan
Membangun Lengan
Membangun Lengan
Membangun Lengan
Membangun Lengan

Seperti yang saya sebutkan sebelumnya model lengan 3D dibuat oleh Juergenlessner, terima kasih untuk pekerjaan yang luar biasa. Instruksi perakitan terperinci dapat ditemukan jika Anda mengikuti tautan.

Saya harus memodifikasi sistem kontrol. Saya menggunakan Arduino Uno dengan Sensor shield untuk mengontrol servos. Perisai sensor sangat membantu menyederhanakan pengkabelan dan juga memudahkan untuk menyediakan daya eksternal ke servos. Saya menggunakan adaptor daya 12V 6A yang disambungkan melalui modul step-down (6V) ke Sensor Shield.

Catatan tentang servos. Saya menggunakan servos MG 996 HR yang dibeli dari Taobao, tetapi kualitasnya sangat buruk. Ini jelas merupakan tiruan Cina yang murah. Yang untuk sambungan siku tidak memberikan torsi yang cukup dan bahkan mulai mengamuk sekali di bawah beban berat. Saya harus mengganti servo joint siku dengan MG 946 HR dari produsen dengan kualitas yang lebih baik.

Singkat cerita - beli servo berkualitas. Jika asap ajaib keluar dari servo Anda, gunakan servo yang lebih baik. 6V adalah tegangan yang sangat aman, jangan dinaikkan. Ini tidak akan meningkatkan torsi, tetapi dapat merusak servos.

Pengkabelan untuk servos sebagai berikut:

dasar 2

bahu2 4bahu1 3

siku 6

penggenggam 8

pergelangan tangan 11

Jangan ragu untuk mengubahnya selama Anda juga ingat untuk mengubah sketsa Arduino.

Setelah Anda selesai dengan perangkat keras, mari kita lihat gambaran besarnya!

Langkah 3: Antarmuka MoveIt RobotCommander

Antarmuka MoveIt RobotCommander
Antarmuka MoveIt RobotCommander

Jadi, sekarang apa? Mengapa Anda membutuhkan MoveIt dan ROS? Tidak bisakah Anda mengontrol lengan melalui kode Arduino secara langsung?

Ya kamu bisa.

Oke, sekarang bagaimana dengan menggunakan kode GUI atau Python/C++ untuk memberikan pose robot untuk dituju? Bisakah Arduino melakukan itu?

semacam. Untuk itu Anda perlu menulis pemecah kinematika terbalik yang akan mengambil pose robot (koordinat terjemahan dan rotasi dalam ruang 3D) dan mengubahnya menjadi pesan sudut bersama untuk servos.

Meskipun Anda dapat melakukannya sendiri, itu adalah banyak pekerjaan yang harus dilakukan. Jadi, MoveIt dan ROS menyediakan antarmuka yang bagus untuk pemecah IK (inverse kinematics) untuk melakukan semua pengangkatan trigonometri berat untuk Anda.

Jawaban singkat: Ya, Anda dapat melakukan lengan robot sederhana yang akan mengeksekusi sketsa Arduino dengan kode keras untuk berpindah dari satu pose ke pose lainnya. Tetapi jika Anda ingin membuat robot Anda lebih cerdas dan menambahkan kemampuan visi komputer, MoveIt dan ROS adalah cara yang tepat.

Saya membuat diagram yang sangat disederhanakan yang menjelaskan cara kerja kerangka kerja MoveIt. Dalam kasus kami, ini akan menjadi lebih sederhana, karena kami tidak memiliki umpan balik dari servos kami dan akan menggunakan topik /joint_states untuk menyediakan pengontrol robot dengan sudut untuk servos. Kami hanya kekurangan satu komponen yaitu pengontrol robot.

Apa yang kita tunggu? Mari kita menulis beberapa pengontrol robot, sehingga robot kita akan … Anda tahu, lebih dapat dikendalikan.

Langkah 4: Kode Arduino untuk Pengontrol Robot

Kode Arduino untuk Pengontrol Robot
Kode Arduino untuk Pengontrol Robot
Kode Arduino untuk Pengontrol Robot
Kode Arduino untuk Pengontrol Robot
Kode Arduino untuk Pengontrol Robot
Kode Arduino untuk Pengontrol Robot

Dalam kasus kami Arduino Uno menjalankan node ROS dengan rosserial akan menjadi pengontrol robot. Kode sketsa Arduino dilampirkan pada langkah ini dan juga tersedia di GitHub.

Node ROS yang berjalan di Arduino Uno pada dasarnya berlangganan topik /JointState yang diterbitkan di komputer yang menjalankan MoveIt dan kemudian mengubah sudut sambungan dari array dari radian ke derajat dan meneruskannya ke servos menggunakan perpustakaan Servo.h standar.

Solusi ini sedikit meretas dan tidak seperti yang dilakukan dengan robot industri. Idealnya Anda seharusnya mempublikasikan lintasan pergerakan pada topik /FollowJointState dan kemudian menerima umpan balik pada topik /JointState. Tetapi di tangan kami, servos hobi tidak dapat memberikan umpan balik, jadi kami akan langsung berlangganan topik /JointState, yang diterbitkan oleh node FakeRobotController. Pada dasarnya kita akan mengasumsikan bahwa sudut apa pun yang kita berikan ke servos dieksekusi secara ideal.

Untuk informasi lebih lanjut tentang cara kerja rosserial, Anda dapat berkonsultasi dengan tutorial berikut:

wiki.ros.org/rosserial_arduino/Tutorials

Setelah Anda mengunggah sketsa ke Arduino Uno, Anda harus menghubungkannya dengan kabel serial ke komputer yang menjalankan instalasi ROS Anda.

Untuk membuka seluruh sistem, jalankan perintah berikut:

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

Sekarang Anda dapat menggunakan penanda interaktif di RVIZ untuk menggerakkan lengan robot ke pose, lalu tekan Plan dan Execute agar benar-benar pindah ke posisinya.

Sihir!

Sekarang kita siap untuk menulis kode Python untuk uji jalan kita. Hampir saja…

Langkah 5: (Opsional) Membuat Plug-in IKfast

Secara default, MoveIt menyarankan untuk menggunakan pemecah kinematika KDL, yang tidak benar-benar berfungsi dengan kurang dari 6 lengan DOF. Jika Anda mengikuti tutorial ini dengan cermat maka Anda akan melihat bahwa model lengan di RVIZ tidak dapat melakukan beberapa pose yang harus didukung oleh konfigurasi lengan.

Solusi yang disarankan adalah membuat pemecah kinematika khusus menggunakan OpenRave. Ini tidak terlalu sulit, tetapi Anda harus membuatnya dan ketergantungannya dari sumber atau menggunakan wadah buruh pelabuhan, mana pun yang Anda inginkan.

Prosedurnya didokumentasikan dengan sangat baik dalam tutorial ini. Dikonfirmasi untuk bekerja pada VM yang menjalankan Ubuntu 16.04 dan ROS Kinetic.

Saya menggunakan perintah berikut untuk menghasilkan pemecah

openrave.py --database inversekinematics --robot=arm.xml --iktype=translation3d --iktests=1000

lalu berlari

rosrun moveit_kinematics create_ikfast_moveit_plugin.py test_robot arm my_arm_xacro ikfast0x1000004a. Translation3D.0_1_2_f3.cpp

untuk menghasilkan plug-in MoveIt IKfast.

Seluruh prosedur memakan waktu sedikit, tetapi tidak terlalu sulit jika Anda mengikuti tutorial dengan cermat. Jika Anda memiliki pertanyaan tentang bagian ini, silakan hubungi saya di komentar atau PM.

Langkah 6: Tes Ramp

Tes Ramp!
Tes Ramp!
Tes Ramp!
Tes Ramp!

Sekarang kita siap untuk mencoba uji ramp, yang akan kita jalankan menggunakan ROS MoveIt Python API.

Kode Python dilampirkan pada langkah ini dan juga tersedia di repositori github. Jika Anda tidak memiliki ramp atau ingin mencoba tes lain, Anda perlu mengubah pose robot dalam kode. Untuk eksekusi pertama itu

rostopic echo /rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback

di terminal saat sudah menjalankan RVIZ dan MoveIt. Kemudian pindahkan robot dengan penanda interaktif ke posisi yang diinginkan. Nilai posisi dan orientasi akan ditampilkan di terminal. Cukup salin ke kode Python.

Untuk menjalankan uji coba jalan

rosrun my_arm_xacro pick/pick_2.py

dengan RVIZ dan node rosserial sudah berjalan.

Nantikan artikel bagian ketiga, di mana saya akan menggunakan kamera stereo untuk mendeteksi objek dan mengeksekusi pick and place pipeline untuk objek sederhana!

Direkomendasikan: