Innehållsförteckning:
- Steg 1: Lägga till griparen
- Steg 2: Bygga armen
- Steg 3: MoveIt RobotCommander -gränssnitt
- Steg 4: Arduino -kod för robotstyrenhet
- Steg 5: (Valfritt) Generera IKfast Plug-in
- Steg 6: Ramptestet
Video: ROS MoveIt Robotic Arm Del 2: Robotkontroller: 6 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
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
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
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
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
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
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:
Robotic Arm Game - Smartphone Controller: 6 steg
Robotic Arm Game - Smartphone Controller: Hej! Här är ett roligt sommarspel: Robotarmen som styrs av Smartphone !! Som du kan se på videon kan du styra armen med några joysticks på din smartphone. Du kan också spara ett mönster, att roboten kommer att reproducera i en loop, för att
Popsicle Stick Robotic Arm (alternativt format): 6 steg
Popsicle Stick Robotic Arm (alternativt format): Lär dig hur du bygger en enkel Arduino-baserad robotarm med en gripare med hjälp av popsicle-pinnar och några servon
Popsicle Stick Robotic Arm: 17 steg (med bilder)
Popsicle Stick Robotic Arm: Så här bygger du en enkel robotarm med en gripare med popsicle -pinnar, en Arduino och några servon
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM: 4 steg
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM:
ROS MoveIt robotarm: 4 steg
ROS MoveIt Robotic Arm: Detta kommer att bli en serie artiklar om hur man gör en robotarm som styrs med ROS (Robotic Operating System) och MoveIt. Om du är i robotik är ROS en bra ram som hjälper dig att bygga bättre robotar snabbare. Det låter dig återanvända