Lengan Robot ROS MoveIt Bahagian 2: Pengawal Robot: 6 Langkah
Lengan Robot ROS MoveIt Bahagian 2: Pengawal Robot: 6 Langkah
Anonim
Image
Image

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

Pada bahagian artikel sebelumnya, kami telah membuat fail URDF dan XACRO untuk lengan robot kami dan melancarkan RVIZ untuk mengawal lengan robot kami dalam persekitaran simulasi.

Kali ini kita akan melakukannya dengan lengan robot sebenar! Kami akan menambah gripper, menulis pengawal robot dan (pilihan) menghasilkan pemecah kinematik terbalik IKfast.

Geronimo!

Langkah 1: Menambah Gripper

Menambah Gripper
Menambah Gripper
Menambah Gripper
Menambah Gripper
Menambah Gripper
Menambah Gripper

Menambah gripper pada awalnya agak membingungkan, jadi saya melangkau bahagian ini dalam artikel sebelumnya. Ternyata tidak begitu sukar.

Anda perlu mengubah suai fail URDF anda untuk menambahkan pautan dan sendi gripper.

Fail URDF yang diubah suai untuk robot saya dilampirkan pada langkah ini. Pada dasarnya ia mengikuti logik yang sama dengan bahagian lengan, saya baru sahaja menambah tiga pautan baru (claw_base, claw_r dan claw_l) dan tiga sendi baru (sendi5 adalah tetap, dan sendi6, sendi7 adalah sendi putaran).

Setelah anda mengubahsuai fail URDF, anda juga perlu mengemas kini pakej dan fail xacro yang dihasilkan oleh MoveIt dengan menggunakan pembantu persediaan MoveIt.

Lancarkan pembantu persediaan dengan arahan berikut

roslaunch moveit_setup_assistant setup_assistant.launch

Klik pada Edit Konfigurasi MoveIt yang Ada dan pilih folder dengan pakej MoveIt anda.

Tambahkan gripper kumpulan perancangan baru (dengan pautan dan sendi untuk gripper) dan juga efektor akhir. Tetapan saya terdapat dalam tangkapan skrin di bawah. Perhatikan bahawa anda tidak memilih pemecah kinematik untuk pencengkam, itu tidak perlu. Hasilkan pakej dan ganti fail.

Lari

catkin buat

arahan di ruang kerja catkin anda.

Baiklah, sekarang kita mempunyai lengan dengan gripper!

Langkah 2: Membina Lengan

Membina Lengan
Membina Lengan
Membina Lengan
Membina Lengan
Membina Lengan
Membina Lengan
Membina Lengan
Membina Lengan

Seperti yang saya nyatakan sebelum model 3D arm dibuat oleh Juergenlessner, terima kasih atas karya yang luar biasa. Arahan pemasangan terperinci boleh didapati jika anda mengikuti pautan.

Saya terpaksa mengubah suai sistem kawalan. Saya menggunakan Arduino Uno dengan perisai Sensor untuk mengawal servos. Sensor perisai banyak membantu dengan mempermudah pendawaian dan juga memudahkan untuk memberikan kuasa luaran kepada servo. Saya menggunakan penyesuai kuasa 12V 6A yang disambungkan melalui modul step-down (6V) ke Sensor Shield.

Catatan mengenai servo. Saya menggunakan servo MG 996 HR yang dibeli dari Taobao, tetapi kualitinya benar-benar buruk. Ia jelas merupakan pilihan Cina yang murah. Yang untuk sendi siku tidak memberikan tork yang cukup dan bahkan mula menggerutu sekali di bawah beban berat. Saya terpaksa mengganti servo sendi siku dengan MG 946 HR dari pengeluar berkualiti lebih baik.

Pendek cerita - beli servo berkualiti. Sekiranya asap sihir keluar dari servo anda, gunakan servo yang lebih baik. 6V adalah voltan yang sangat selamat, jangan menaikkannya. Ia tidak akan meningkatkan tork, tetapi boleh merosakkan servos.

Pendawaian untuk servo seperti berikut:

asas 2

bahu2 4shoulder1 3

siku 6

pencengkam 8

pergelangan tangan 11

Jangan ragu untuk mengubahnya selagi anda juga ingat untuk menukar lakaran Arduino.

Setelah selesai menggunakan perkakasan, mari kita lihat gambar yang lebih besar!

Langkah 3: MukaIt RobotCommander Interface

MoveIt RobotCommander Interface
MoveIt RobotCommander Interface

Jadi, sekarang apa? Mengapa anda memerlukan MoveIt dan ROS? Tidak bolehkah anda mengawal lengan melalui kod Arduino secara langsung?

Ya awak boleh.

Baiklah, sekarang bagaimana dengan menggunakan kod GUI atau Python / C ++ untuk menyediakan pose robot untuk pergi? Bolehkah Arduino berbuat demikian?

Lebih kurang. Untuk itu, anda perlu menulis penyelesai kinematik terbalik yang akan mengambil pose robot (koordinat terjemahan dan putaran dalam ruang 3D) dan menukarnya menjadi mesej sudut bersama untuk servo.

Walaupun anda boleh melakukannya sendiri, banyak kerja yang perlu dilakukan. Oleh itu, MoveIt dan ROS menyediakan antara muka yang baik untuk pemecah IK (kinematik terbalik) untuk melakukan semua pengangkat trigonometri yang berat untuk anda.

Jawapan ringkas: Ya, anda boleh menggunakan lengan robot sederhana yang akan melaksanakan lakaran Arduino yang dikodkan keras untuk beralih dari satu pose ke yang lain. Tetapi jika anda ingin menjadikan robot anda lebih cerdas dan menambah keupayaan penglihatan komputer, MoveIt dan ROS adalah jalan yang sesuai.

Saya membuat rajah yang sangat ringkas yang menerangkan bagaimana kerangka kerja MoveIt. Dalam kes kami, ini akan menjadi lebih sederhana, kerana kami tidak mempunyai maklum balas dari servos kami dan akan menggunakan topik / joint_states untuk menyediakan robot pengendali dengan sudut untuk servo. Kami hanya kekurangan satu komponen iaitu pengawal robot.

Apa yang kita tunggu lagi? Mari tulis beberapa pengawal robot, jadi robot kita akan… anda tahu, lebih terkawal.

Langkah 4: Arduino Code untuk Robot Controller

Kod Arduino untuk Pengawal Robot
Kod Arduino untuk Pengawal Robot
Kod Arduino untuk Pengawal Robot
Kod Arduino untuk Pengawal Robot
Kod Arduino untuk Pengawal Robot
Kod Arduino untuk Pengawal Robot

Dalam kes kita Arduino Uno menjalankan simpul ROS dengan rosserial akan menjadi pengawal robot. Kod lakaran Arduino dilampirkan pada langkah ini dan juga terdapat di GitHub.

Node ROS yang berjalan di Arduino Uno pada dasarnya melanggan topik / JointState yang diterbitkan di komputer yang menjalankan MoveIt dan kemudian menukar sudut sambungan dari array dari radian ke darjah dan meneruskannya ke servo menggunakan perpustakaan Servo.h standard.

Penyelesaian ini agak sukar dan bukan bagaimana ia dilakukan dengan robot industri. Sebaik-baiknya anda sepatutnya menerbitkan lintasan pergerakan pada topik / FollowJointState dan kemudian menerima maklum balas mengenai topik / JointState. Tetapi di tangan kami, pelayan hobi tidak dapat memberikan maklum balas, jadi kami akan langsung melanggan topik / JointState, yang diterbitkan oleh nod FakeRobotController. Pada dasarnya kita akan menganggap bahawa apa sahaja sudut yang kita lalui untuk servo dilaksanakan dengan ideal.

Untuk maklumat lebih lanjut mengenai bagaimana rosserial berfungsi, anda boleh membaca tutorial berikut

wiki.ros.org/rosserial_arduino/Tutorials

Selepas anda memuat naik lakaran ke Arduino Uno, anda perlu menyambungkannya dengan kabel bersiri ke komputer yang menjalankan pemasangan ROS anda.

Untuk memunculkan keseluruhan sistem, jalankan arahan 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 boleh menggunakan penanda interaktif dalam RVIZ untuk menggerakkan lengan robot ke pose dan kemudian tekan Rencana dan Jalankan agar ia benar-benar bergerak ke posisi.

Sihir!

Sekarang kami bersedia untuk menulis kod Python untuk ujian tanjakan kami. Baiklah, hampir …

Langkah 5: (Pilihan) Menjana Pemalam IKfast

Secara lalai MoveIt mencadangkan penggunaan penyelesai kinematik KDL, yang tidak berfungsi dengan kurang dari 6 lengan DOF. Sekiranya anda mengikuti tutorial ini dengan teliti, anda akan melihat bahawa model lengan di RVIZ tidak boleh pergi ke beberapa pose yang harus disokong oleh konfigurasi lengan.

Penyelesaian yang disyorkan adalah membuat penyelesai kinematik tersuai menggunakan OpenRave. Ia tidak begitu sukar, tetapi anda harus membinanya dan ia bergantung kepada sumber atau menggunakan wadah docker, mengikut mana sahaja yang anda mahukan.

Prosedurnya didokumentasikan dengan baik dalam tutorial ini. Ia disahkan berfungsi pada VM yang menjalankan Ubuntu 16.04 dan ROS Kinetic.

Saya menggunakan arahan berikut untuk menghasilkan pemecah

openrave.py - inversekinematika pangkalan data --robot = arm.xml --iktype = translation3d --iktests = 1000

dan kemudian berlari

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

untuk menjana pemalam MoveIt IKfast.

Keseluruhan prosedur ini agak memakan masa, tetapi tidak begitu sukar jika anda mengikuti tutorial dengan teliti. Sekiranya anda mempunyai pertanyaan mengenai bahagian ini, sila hubungi saya di komen atau PM.

Langkah 6: Ujian Ramp

Ujian Ramp!
Ujian Ramp!
Ujian Ramp!
Ujian Ramp!

Sekarang kami sudah bersedia untuk mencuba ujian tanjakan, yang akan kami laksanakan menggunakan ROS MoveIt Python API.

Kod Python dilampirkan pada langkah ini dan juga terdapat di github repositori. Sekiranya anda tidak mempunyai jalan atau ingin mencuba ujian lain, anda perlu menukar pose robot dalam kodnya. Untuk yang pertama laksanakan

gema rostopik / rviz_moveit_motion_planning_display / robot_interaction_interactive_marker_topic / maklum balas

di terminal apabila sudah menjalankan RVIZ dan MoveIt. Kemudian gerakkan robot dengan penanda interaktif ke kedudukan yang dikehendaki. Nilai kedudukan dan orientasi akan ditunjukkan di terminal. Salin sahaja ke kod Python.

Untuk menjalankan ujian tanjakan

rosrun my_arm_xacro pick / pick_2.py

dengan RVIZ dan nod rosserial sudah berjalan.

Nantikan bahagian ketiga artikel, di mana saya akan menggunakan kamera stereo untuk mengesan objek dan melaksanakan pemilihan dan meletakkan saluran paip untuk objek sederhana!

Disyorkan: