Innehållsförteckning:

ROS MoveIt Robotic Arm Del 2: Robotkontroller: 6 steg
ROS MoveIt Robotic Arm Del 2: Robotkontroller: 6 steg

Video: ROS MoveIt Robotic Arm Del 2: Robotkontroller: 6 steg

Video: ROS MoveIt Robotic Arm Del 2: Robotkontroller: 6 steg
Video: Webinar: KUKA.ForceTorqueControl and KUKA.RobotSensorInterface 2024, November
Anonim
Image
Image

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

I föregående del av artikeln har vi skapat URDF- och XACRO -filer för vår robotarm och lanserat RVIZ för att styra vår robotarm i simulerad miljö.

Den här gången gör vi det med den riktiga robotarmen! Vi lägger till griparen, skriver en robotstyrenhet och (tillval) genererar IKfast invers kinematics solver.

Geronimo!

Steg 1: Lägga till griparen

Lägga till griparen
Lägga till griparen
Lägga till griparen
Lägga till griparen
Lägga till griparen
Lägga till griparen

Att lägga till gripare var lite förvirrande först, så jag hoppade över den här delen i föregående artikel. Det visade sig inte vara så svårt trots allt.

Du måste ändra din URDF -fil för att lägga till griplänkar och skarvar.

Den modifierade URDF -filen för min robot är bifogad detta steg. I princip följer den samma logik som armdelen, jag har precis lagt till tre nya länkar (claw_base, claw_r och claw_l) och tre nya fogar (joint5 är fixerad, och joint6, joint7 är revolutfogar).

När du har ändrat din URDF -fil måste du också uppdatera MoveIt -genererade paket och xacro -fil med hjälp av MoveIt -installationsassistent.

Starta installationsassistenten med följande kommando

roslaunch moveit_setup_assistant setup_assistant.launch

Klicka på Redigera befintlig MoveIt -konfiguration och välj mappen med ditt MoveIt -paket.

Lägg till ny planeringsgruppsgrepp (med länkar och leder för griparen) och även en ändeffektor. Mina inställningar finns i skärmdumparna nedan. Lägg märke till att du inte väljer kinematiklösare för griparen, det är inte nödvändigt. Skapa paketet och skriv över filerna.

Springa

catkin make

kommandot i din catkin -arbetsyta.

Okej, nu har vi en arm med en gripare!

Steg 2: Bygga armen

Bygga armen
Bygga armen
Bygga armen
Bygga armen
Bygga armen
Bygga armen
Bygga armen
Bygga armen

Som jag nämnde tidigare är armen 3D -modell gjord av Juergenlessner, tack för ett fantastiskt arbete. Den detaljerade monteringsanvisningen finns om du följer länken.

Jag var tvungen att ändra kontrollsystemet dock. Jag använder Arduino Uno med sensorskydd för att styra servon. Sensorsköld hjälper mycket med att förenkla kabeldragningen och gör det också enkelt att leverera extern ström till servon. Jag använder en 12V 6A nätadapter som är ansluten via en nedtrappningsmodul (6V) till Sensor Shield.

En anteckning om servon. Jag använder MG 996 HR -servon köpta från Taobao, men kvaliteten är riktigt dålig. Det är definitivt en billig kinesisk knock-off. Den för armbågen gav inte tillräckligt med vridmoment och började till och med ryka en gång under tung belastning. Jag var tvungen att byta ut armbågsservon med MG 946 HR från en tillverkare av bättre kvalitet.

Lång historia kort - köp kvalitetsserver. Om det kommer magisk rök från dina servon, använd bättre servon. 6V är en mycket säker spänning, öka inte den. Det ökar inte vridmomentet, men kan skada servon.

Kabeldragning för servon enligt följande:

bas 2

axel2 4skuld1 3

armbåge 6

gripare 8

handleden 11

Ändra det gärna så länge du också kommer ihåg att ändra Arduino -skissen.

När du är klar med hårdvara, låt oss titta på den större bilden!

Steg 3: MoveIt RobotCommander -gränssnitt

MoveIt RobotCommander -gränssnitt
MoveIt RobotCommander -gränssnitt

Så, vad nu? Varför behöver du MoveIt och ROS ändå? Kan du inte bara styra armen genom Arduino -koden direkt?

Jo det kan du.

Okej, vad sägs om att använda GUI eller Python/C ++ - kod för att tillhandahålla robotpos att gå till? Kan Arduino göra det?

Ungefär. För det måste du skriva en invers kinematiklösare som tar en robotposition (översättning och rotationskoordinater i 3D -utrymme) och konverterar den till gemensamma vinkelmeddelanden för servon.

Trots att du kan göra det själv är det ett jäkla jobb att göra. Så, MoveIt och ROS ger ett trevligt gränssnitt för IK -lösare (invers kinematik) för att göra alla tunga trigonometriska lyft åt dig.

Kort svar: Ja, du kan göra en enkel robotarm som kommer att utföra en hårdkodad Arduino-skiss för att gå från en pose till en annan. Men om du vill göra din robot mer intelligent och lägga till datorsyn, är MoveIt och ROS vägen att gå.

Jag gjorde ett mycket förenklat diagram som förklarar hur MoveIt -ramverk fungerar. I vårt fall kommer det att bli ännu enklare, eftersom vi inte har feedback från våra servon och använder ämnet /joint_states för att förse robotstyrenheten med vinklarna för servon. Vi saknar bara en komponent som är robotstyrenheten.

Vad väntar vi på? Låt oss skriva några robotstyrenheter, så vår robot skulle vara … du vet, mer kontrollerbar.

Steg 4: Arduino -kod för robotstyrenhet

Arduino -kod för robotstyrenhet
Arduino -kod för robotstyrenhet
Arduino -kod för robotstyrenhet
Arduino -kod för robotstyrenhet
Arduino -kod för robotstyrenhet
Arduino -kod för robotstyrenhet

I vårt fall kommer Arduino Uno att köra en ROS -nod med rosserial vara robotstyrenheten. Arduino -skisskoden är bifogad detta steg och även tillgänglig på GitHub.

ROS -noden som körs på Arduino Uno prenumererar i princip på /JointState -ämne publicerat på datorn som kör MoveIt och konverterar sedan ledvinklarna från arrayen från radianer till grader och skickar dem till servon med hjälp av standard Servo.h -bibliotek.

Den här lösningen är lite hackig och inte hur det görs med industrirobotar. Helst ska du publicera rörelsebanan på /FollowJointState -ämnet och sedan få feedback på /JointState -ämnet. Men i vår arm kan hobbyservon inte ge feedback, så vi prenumererar direkt på /JointState -ämnet, publicerat av FakeRobotController -noden. I grund och botten antar vi att alla vinklar vi skickade till servon utförs helst.

För mer information om hur rosserialet fungerar kan du läsa följande självstudier

wiki.ros.org/rosserial_arduino/Tutorials

När du har laddat upp skissen till Arduino Uno måste du ansluta den med seriekabeln till datorn som kör din ROS -installation.

Utför följande kommandon för att ta fram hela systemet

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

Nu kan du använda interaktiva markörer i RVIZ för att flytta robotarmen till en pose och sedan trycka på Planera och utföra för att den faktiskt ska flytta in i positionen.

Magi!

Nu är vi redo att skriva Python -kod för vårt rampetest. Ja, nästan…

Steg 5: (Valfritt) Generera IKfast Plug-in

Som standard föreslår MoveIt att man använder KDL kinematiklösare, som inte riktigt fungerar med mindre än 6 DOF -armar. Om du följer denna handledning noga kommer du att märka att armmodellen i RVIZ inte kan gå till några poser som bör stödjas av armkonfigurationen.

Den rekommenderade lösningen är att skapa anpassade kinematiklösare med OpenRave. Det är inte så svårt, men du måste bygga det och det beror på källan eller använda dockningsbehållaren, beroende på vad du föredrar.

Proceduren är mycket väl dokumenterad i denna handledning. Det är bekräftat att det fungerar på VM som kör Ubuntu 16.04 och ROS Kinetic.

Jag använde följande kommando för att generera lösaren

openrave.py --databas inversekinematik --robot = arm.xml --iktype = translation3d --iktests = 1000

och sprang sedan

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

för att generera MoveIt IKfast plug-in.

Hela proceduren är lite tidskrävande, men inte särskilt svårt om du följer handledningen noga. Om du har frågor om denna del, vänligen kontakta mig i kommentarerna eller PM.

Steg 6: Ramptestet

Ramptestet!
Ramptestet!
Ramptestet!
Ramptestet!

Nu är vi redo att prova ramptestet, som vi kommer att utföra med ROS MoveIt Python API.

Python -koden är kopplad till detta steg och även tillgänglig på github -förvaret. Om du inte har en ramp eller vill prova ett annat test måste du ändra robotens positioner i koden. För den första körningen

rostopic echo/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback

i terminalen när RVIZ och MoveIt redan körs. Flytta sedan roboten med interaktiva markörer till önskad position. Position- och orienteringsvärdena visas i terminalen. Kopiera dem bara till Python -koden.

För att utföra ramptestkörningen

rosrun my_arm_xacro pick/pick_2.py

med RVIZ och rosserial nod redan igång.

Håll ögonen öppna för den tredje delen av artikeln, där jag kommer att använda stereokamera för objektdetektering och utföra pick and place pipeline för enkla objekt!

Rekommenderad: