Indholdsfortegnelse:

ROS MoveIt Robotic Arm Part 2: Robot Controller: 6 trin
ROS MoveIt Robotic Arm Part 2: Robot Controller: 6 trin

Video: ROS MoveIt Robotic Arm Part 2: Robot Controller: 6 trin

Video: ROS MoveIt Robotic Arm Part 2: Robot Controller: 6 trin
Video: How to operate a robot arm using MoveIt 2024, Juli
Anonim
Image
Image

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

I den forrige del af artiklen har vi oprettet URDF- og XACRO -filer til vores robotarm og lanceret RVIZ for at styre vores robotarm i simulerede omgivelser.

Denne gang gør vi det med den rigtige robotarm! Vi tilføjer griberen, skriver en robotcontroller og (valgfrit) genererer IKfast invers kinematics solver.

Geronimo!

Trin 1: Tilføjelse af griberen

Tilføjelse af griberen
Tilføjelse af griberen
Tilføjelse af griberen
Tilføjelse af griberen
Tilføjelse af griberen
Tilføjelse af griberen

Tilføjelse af griber var lidt forvirrende i starten, så jeg sprang denne del over i den forrige artikel. Det viste sig ikke at være så svært alligevel.

Du skal ændre din URDF -fil for at tilføje griberlinks og led.

Den ændrede URDF -fil til min robot er vedhæftet dette trin. Grundlæggende følger det den samme logik som armdelen, jeg har lige tilføjet tre nye links (claw_base, claw_r og claw_l) og tre nye led (joint5 er fastgjort, og joint6, joint7 er revolute led).

Når du har ændret din URDF -fil, skal du også opdatere MoveIt -genererede pakke og xacro -fil ved hjælp af MoveIt -installationsassistent.

Start installationsassistent med følgende kommando

roslaunch moveit_setup_assistant setup_assistant.lancering

Klik på Rediger eksisterende MoveIt -konfiguration, og vælg mappen med din MoveIt -pakke.

Tilføj ny planlægningsgruppegriber (med links og samlinger til griberen) og også en endeeffektor. Mine indstillinger er i skærmbillederne herunder. Bemærk, at du ikke vælger kinematisk solver til griberen, det er ikke nødvendigt. Generer pakken, og overskriv filerne.

Løb

catkin -mærke

kommando i dit catkin -arbejdsområde.

Okay, nu har vi en arm med en griber!

Trin 2: Bygning af armen

Bygning af armen
Bygning af armen
Bygning af armen
Bygning af armen
Bygning af armen
Bygning af armen
Bygning af armen
Bygning af armen

Som jeg nævnte før armen 3D -modellen er lavet af Juergenlessner, tak for et fantastisk arbejde. Den detaljerede samlevejledning kan findes, hvis du følger linket.

Jeg var dog nødt til at ændre kontrolsystemet. Jeg bruger Arduino Uno med sensorskjold til styring af servoer. Sensorskærm hjælper meget med at forenkle ledningerne og gør det også let at levere den eksterne strøm til servoer. Jeg bruger 12V 6A strømadapter, der er kablet gennem trin-ned modul (6V) til Sensor Shield.

En note om servoer. Jeg bruger MG 996 HR servoer købt fra Taobao, men kvaliteten er virkelig dårlig. Det er bestemt en billig kinesisk knock-off. Den til albueleddet gav ikke nok drejningsmoment og begyndte endda at ryge en gang under tung belastning. Jeg måtte udskifte albueledservo med MG 946 HR fra en producent af bedre kvalitet.

Lang historie kort - køb kvalitetsservoer. Hvis der kommer magisk røg ud af dine servoer, skal du bruge bedre servoer. 6V er en meget sikker spænding, ikke øg den. Det øger ikke drejningsmomentet, men kan beskadige servoerne.

Kabelføring til servoer som følger:

base 2

skulder2 4 skulder1 3

albue 6

griber 8

håndled 11

Du er velkommen til at ændre det, så længe du også husker at ændre Arduino -skitsen.

Når du er færdig med hardware, lad os se på det større billede!

Trin 3: MoveIt RobotCommander -grænseflade

MoveIt RobotCommander -grænseflade
MoveIt RobotCommander -grænseflade

Så hvad nu? Hvorfor har du alligevel brug for MoveIt og ROS? Kan du ikke bare styre armen direkte gennem Arduino -koden?

Ja du kan.

Okay, hvad med at bruge GUI eller Python/C ++ kode til at give robotpose at gå til? Kan Arduino gøre det?

På en måde. Til det skal du skrive en invers kinematisk solver, der vil tage en robotpose (oversættelses- og rotationskoordinater i 3D -rum) og konvertere den til fælles vinkelbeskeder for servoer.

På trods af at du kan gøre det selv, er det et helvede til en masse arbejde. Så MoveIt og ROS giver en god grænseflade til IK (invers kinematik) solver til at udføre alle de tunge trigonometriske løft for dig.

Kort svar: Ja, du kan lave en simpel robotarm, der udfører en hårdt kodet Arduino-skitse for at gå fra en pose til en anden. Men hvis du vil gøre din robot mere intelligent og tilføje computervision, er MoveIt og ROS vejen frem.

Jeg lavede et meget forenklet diagram, der forklarer, hvordan MoveIt -rammer fungerer. I vores tilfælde bliver det endnu enklere, da vi ikke har feedback fra vores servoer og bruger /joint_states emne til at give robotcontrolleren vinklerne til servoer. Vi mangler kun en komponent, som er robotcontrolleren.

Hvad venter vi på? Lad os skrive nogle robotcontrollere, så vores robot ville være … du ved, mere kontrollerbar.

Trin 4: Arduino -kode til robotcontroller

Arduino -kode til robotcontroller
Arduino -kode til robotcontroller
Arduino -kode til robotcontroller
Arduino -kode til robotcontroller
Arduino -kode til robotcontroller
Arduino -kode til robotcontroller

I vores tilfælde vil Arduino Uno, der kører en ROS -node med rosserial, være robotcontroller. Arduino -skitsekoden er knyttet til dette trin og er også tilgængelig på GitHub.

ROS -noden, der kører på Arduino Uno, abonnerer grundlæggende på /JointState -emne, der er offentliggjort på computeren, der kører MoveIt og konverterer derefter ledvinklerne fra arrayet fra radianer til grader og sender dem til servoer ved hjælp af standard Servo.h -bibliotek.

Denne løsning er lidt hacky og ikke hvordan det gøres med industrielle robotter. Ideelt set skal du offentliggøre bevægelsesbanen om /FollowJointState -emne og derefter modtage feedback om /JointState -emne. Men i vores arm kan hobbyservoer ikke give feedbacken, så vi abonnerer bare direkte på /JointState -emne, udgivet af FakeRobotController -node. Grundlæggende antager vi, at uanset hvilke vinkler vi overførte til servoer, udføres ideelt.

For mere information om hvordan rosserialet fungerer, kan du se følgende selvstudier

wiki.ros.org/rosserial_arduino/Tutorials

Når du har uploadet skitsen til Arduino Uno, skal du forbinde den med det serielle kabel til computeren, der kører din ROS -installation.

For at få hele systemet frem skal du udføre følgende kommandoer

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 bruge interaktive markører i RVIZ til at flytte robotarmen til en pose og derefter trykke på Plan og udfør, for at den faktisk kan flytte ind i positionen.

Magi!

Nu er vi klar til at skrive Python -kode til vores rampetest. Nå, næsten…

Trin 5: (Valgfrit) Generering af IKfast Plug-in

Som standard foreslår MoveIt at bruge KDL kinematisk solver, som ikke rigtig fungerer med mindre end 6 DOF -arme. Hvis du følger denne vejledning nøje, vil du bemærke, at armmodellen i RVIZ ikke kan gå til nogle stillinger, som bør understøttes af armkonfigurationen.

Den anbefalede løsning er at oprette brugerdefinerede kinematikløsninger ved hjælp af OpenRave. Det er ikke så svært, men du bliver nødt til at bygge det, og det er afhængigheder fra kilden eller bruge docker -containeren, alt efter hvad du foretrækker.

Proceduren er meget veldokumenteret i denne vejledning. Det er bekræftet at arbejde på VM, der kører Ubuntu 16.04 og ROS Kinetic.

Jeg brugte følgende kommando til at generere solver

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

og løb derefter

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

at generere MoveIt IKfast plug-in.

Hele proceduren er lidt tidskrævende, men ikke særlig vanskelig, hvis du følger vejledningen nøje. Hvis du har spørgsmål om denne del, bedes du kontakte mig i kommentarerne eller PM.

Trin 6: Rampetesten

Rampetesten!
Rampetesten!
Rampetesten!
Rampetesten!

Nu er vi klar til at prøve rampetesten, som vi vil udføre ved hjælp af ROS MoveIt Python API.

Python -koden er knyttet til dette trin og også tilgængelig på github -depot. Hvis du ikke har en rampe eller vil prøve en anden test, skal du ændre robotposerne i koden. For den første udførelse

rostopic echo/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback

i terminalen, når der allerede køres RVIZ og MoveIt. Flyt derefter robotten med interaktive markører til den ønskede position. Position og orienteringsværdier vises i terminalen. Bare kopier dem til Python -koden.

For at udføre rampetestkørslen

rosrun my_arm_xacro pick/pick_2.py

med RVIZ og rosserial node allerede kørende.

Hold øje med tredje del af artiklen, hvor jeg vil bruge stereokamera til genkendelse af objekter og udføre pick and place pipeline til enkle objekter!

Anbefalede: