INHOUDSOPGAWE:

ROS MoveIt Robotic Arm Deel 2: Robotbeheerder: 6 stappe
ROS MoveIt Robotic Arm Deel 2: Robotbeheerder: 6 stappe

Video: ROS MoveIt Robotic Arm Deel 2: Robotbeheerder: 6 stappe

Video: ROS MoveIt Robotic Arm Deel 2: Robotbeheerder: 6 stappe
Video: ВСЯ НОЧЬ С ПОЛТЕРГЕЙСТОМ В ЖИЛОМ ДОМЕ, я заснял жуткую активность. 2024, November
Anonim
Image
Image

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

In die vorige deel van die artikel het ons URDF- en XACRO -lêers vir ons robotarm geskep en RVIZ gelanseer om ons robotarm in 'n gesimuleerde omgewing te beheer.

Hierdie keer doen ons dit met die regte robotarm! Ons voeg die gryper by, skryf 'n robotbeheerder en (opsioneel) genereer IKfast inverse kinematiese oplosmiddel.

Geronimo!

Stap 1: Voeg die Gripper by

Voeg die Gripper by
Voeg die Gripper by
Voeg die Gripper by
Voeg die Gripper by
Voeg die Gripper by
Voeg die Gripper by

Die byvoeging van die gryper was aanvanklik 'n bietjie verwarrend, so ek het hierdie gedeelte in die vorige artikel oorgeslaan. Dit blyk toe nie so moeilik te wees nie.

U moet u URDF -lêer verander om grypskakels en verbindings by te voeg.

Die aangepaste URDF -lêer vir my robot is by hierdie stap aangeheg. Dit volg basies dieselfde logika as die armdeel; ek het pas drie nuwe skakels (klou_basis, klou_r en klou_l) en drie nuwe gewrigte (gewrig5 is vasgemaak, en gewrig6, gewrig7 is omskakelgewrigte) bygevoeg.

Nadat u u URDF -lêer gewysig het, moet u ook die MoveIt -gegenereerde pakket en xacro -lêer opdateer deur die MoveIt -opsetassistent te gebruik.

Begin die instellingsassistent met die volgende opdrag

roslaunch moveit_setup_assistant setup_assistant.launch

Klik op Wysig die bestaande MoveIt -konfigurasie en kies die gids met u MoveIt -pakket.

Voeg nuwe beplanningsgroepgrijper (met skakels en verbindings vir die grijper) by en ook 'n eindversterker. My instellings is in die skermkiekies hieronder. Let op dat u nie 'n kinematiese oplosmiddel vir die grijper kies nie; dit is nie nodig nie. Genereer die pakket en skryf die lêers oor.

Hardloop

katjie maak

opdrag in u catkin -werkruimte.

Goed, nou het ons 'n arm met 'n gryp!

Stap 2: Bou die arm

Die bou van die arm
Die bou van die arm
Die bou van die arm
Die bou van die arm
Die bou van die arm
Die bou van die arm
Die bou van die arm
Die bou van die arm

Soos ek al genoem het, is die 3D -model van die arm gemaak deur Juergenlessner, dankie vir die wonderlike werk. Die gedetailleerde monteerinstruksies kan gevind word as u die skakel volg.

Ek moes egter die beheerstelsel verander. Ek gebruik Arduino Uno met sensorskerm om servo's te beheer. Sensorskerm help baie met die vereenvoudiging van die bedrading en maak dit ook maklik om servo's van eksterne krag te voorsien. Ek gebruik 'n 12V 6A-kragadapter wat deur die afstapmodule (6V) bedraad is na Sensor Shield.

'N Nota oor servo's. Ek gebruik MG 996 HR -servo's wat by Taobao gekoop is, maar die kwaliteit is regtig sleg. Dit is beslis 'n goedkoop Chinese afslag. Die een vir die elmbooggewrig het nie genoeg wringkrag verskaf nie en het selfs een keer onder swaar vrag begin rook. Ek moes die elmbooggewrig servo vervang deur MG 946 HR van 'n vervaardiger van 'n beter gehalte.

Lang storie kort - koop kwaliteit servo's. As daar toorrook uit u servo's kom, gebruik beter servo's. 6V is 'n baie veilige spanning, moenie dit verhoog nie. Dit verhoog nie die wringkrag nie, maar kan die servo's beskadig.

Bedrading vir servo's soos volg:

basis 2

skouer2 4skouer1 3

elmboog 6

gryp 8

pols 11

Verander dit gerus solank u ook onthou om die Arduino -skets te verander.

Nadat u klaar is met hardeware, kyk ons na die groter prentjie!

Stap 3: MoveIt RobotCommander -koppelvlak

MoveIt RobotCommander -koppelvlak
MoveIt RobotCommander -koppelvlak

So, wat nou? Waarom het u in elk geval MoveIt en ROS nodig? Kan u nie net die arm direk deur die Arduino -kode beheer nie?

Ja jy kan.

Goed, hoe gaan dit nou met die gebruik van GUI- of Python/C ++ - kode om robotpose na te gaan? Kan Arduino dit doen?

Soortvan. Hiervoor moet u 'n inverse kinematiese oplosmiddel skryf wat 'n robot -houding (vertaling en rotasie -koördinate in 3D -ruimte) sal neem en dit omskakel in gesamentlike hoekboodskappe vir servo's.

Alhoewel u dit self kan doen, is dit baie werk om te doen. MoveIt en ROS bied dus 'n goeie koppelvlak vir IK (inverse kinematika) -oplosser om al die swaar trigonometriese hefwerk vir u te doen.

Kort antwoord: Ja, u kan 'n eenvoudige robotarm doen wat 'n hardgekodeerde Arduino-skets sal uitvoer om van die een pose na die ander te gaan. Maar as u u robot intelligenter wil maak en rekenaarvisie -funksies wil byvoeg, is MoveIt en ROS die regte pad.

Ek het 'n baie vereenvoudigde diagram gemaak wat verduidelik hoe MoveIt -raamwerk werk. In ons geval gaan dit nog eenvoudiger wees, aangesien ons geen terugvoer van ons servo's het nie en ons /joint_states -onderwerp gaan gebruik om die robotbeheerder die hoeke vir servo's te voorsien. Ons kort net een komponent, naamlik die robotbeheerder.

Waarvoor wag ons? Kom ons skryf 'n paar robotbeheerders, sodat ons robot sou wees … u weet, meer beheerbaar.

Stap 4: Arduino -kode vir robotbeheerder

Arduino -kode vir robotbeheerder
Arduino -kode vir robotbeheerder
Arduino -kode vir robotbeheerder
Arduino -kode vir robotbeheerder
Arduino -kode vir robotbeheerder
Arduino -kode vir robotbeheerder

In ons geval is Arduino Uno die bestuur van 'n ROS -knoop met rosserial. Die Arduino -sketskode is by hierdie stap aangeheg en ook beskikbaar op GitHub.

Die ROS -knoop wat op Arduino Uno werk, teken basies in op /JointState -onderwerp gepubliseer op die rekenaar met MoveIt en skakel dan die gesamentlike hoeke om van die skikking van radiale na grade en gee dit aan servo's deur gebruik te maak van die standaard Servo.h -biblioteek.

Hierdie oplossing is 'n bietjie hacky en nie hoe dit met industriële robotte gedoen word nie. Ideaal gesproke is dit veronderstel dat u die bewegingsbaan op /FollowJointState -onderwerp publiseer en dan die terugvoer oor /JointState -onderwerp ontvang. Maar in ons arm kan die stokperdjie -servo's nie die terugvoer gee nie, so ons sal net direk inteken op die /JointState -onderwerp, gepubliseer deur FakeRobotController -knoop. Eintlik gaan ons uit dat die hoeke wat ons aan servo's oorgedra het, ideaal uitgevoer word.

Raadpleeg die volgende tutoriale vir meer inligting oor hoe die rosserial werk

wiki.ros.org/rosserial_arduino/Tutorials

Nadat u die skets na Arduino Uno opgelaai het, moet u dit met die seriële kabel koppel aan die rekenaar waarop u ROS -installasie uitgevoer word.

Voer die volgende opdragte uit om die hele stelsel weer te gee

roslaunch my_arm_xacro demo.launch rviz_tutorial: = waar

sudo chmod -R 777 /dev /ttyUSB0

rosrun rosserial_python serial_node.py _port: =/dev/ttyUSB0 _baud: = 115200

Nou kan u interaktiewe merkers in RVIZ gebruik om die robotarm na 'n houding te skuif en dan op Plan en uitvoer uit te voer sodat dit werklik in die posisie kan beweeg.

Towerkuns!

Nou is ons gereed om Python -kode vir ons haptoets te skryf. Wel, amper…

Stap 5: (opsioneel) Genereer IKfast-inprop

By verstek stel MoveIt voor dat u KDL kinematika -oplosmiddel gebruik, wat nie regtig met minder as 6 DOF -arms werk nie. As u hierdie tutoriaal noukeurig volg, sal u agterkom dat die armmodel in RVIZ nie kan gaan na 'n paar posisies wat deur die armkonfigurasie ondersteun moet word nie.

Die aanbevole oplossing is om pasgemaakte kinematiese oplossers te skep met behulp van OpenRave. Dit is nie so moeilik nie, maar u moet dit bou en dit hang af van die bron of gebruik die docker -houer, wat u ook al verkies.

Die prosedure is baie goed gedokumenteer in hierdie tutoriaal. Dit is bevestig dat dit werk op VM met Ubuntu 16.04 en ROS Kinetic.

Ek het die volgende opdrag gebruik om die oplossing op te wek

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

en toe gehardloop

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

om MoveIt IKfast-inprop te genereer.

Die hele proses is 'n bietjie tydrowend, maar nie baie moeilik as u die tutoriaal noukeurig volg nie. As u vrae het oor hierdie deel, kontak my asseblief in die kommentaar of PM.

Stap 6: Die ramptoets

Die ramptoets!
Die ramptoets!
Die ramptoets!
Die ramptoets!

Nou is ons gereed om die hellingtoets te probeer, wat ons sal uitvoer met behulp van ROS MoveIt Python API.

Die Python -kode is aan hierdie stap gekoppel en ook beskikbaar op die github -bewaarplek. As u nie 'n oprit het nie of 'n ander toets wil probeer, moet u die posisies van die robot in die kode verander. Vir die eerste uitvoering

rostopiese eggo/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/terugvoer

in die terminale as u reeds RVIZ en MoveIt gebruik. Beweeg dan die robot met interaktiewe merkers na die gewenste posisie. Die posisie en oriëntasie waardes sal in die terminaal vertoon word. Kopieer dit net na die Python -kode.

Om die oprit toetsrit uit te voer

rosrun my_arm_xacro pick/pick_2.py

met RVIZ en rosserial node wat reeds loop.

Bly ingeskakel vir die derde deel van die artikel, waar ek 'n stereokamera sal gebruik vir die opsporing van voorwerpe en die kies en plaas pypleiding vir eenvoudige voorwerpe!

Aanbeveel: