Program med Robot Operating System til glat servobevægelse - 💡 Fix My Ideas

Program med Robot Operating System til glat servobevægelse

Program med Robot Operating System til glat servobevægelse


Forfatter: Ethan Holmes, 2019

Robots Operating System (ROS) er en open source robotics platform, der hjælper din robot med at visualisere verden, kortlægge og navigere den og udføre fysiske interaktioner ved hjælp af state-of-the-art algoritmer. Hvis du vil bygge en kompleks robot, er der chancer for, at der er en ROS-kode, der allerede er tilgængelig for at hjælpe dig. Du kan bruge så lidt af ROS som du vil, og det installeres på maskiner fra Raspberry Pi niveauet opad.

Læs artikler fra magasinet lige her på Lave:. Har du ikke abonnement endnu? Få en i dag.

Lad os overveje, hvordan man styrer en servo som en introduktion til ROS. En ulempe ved servomotorer er, at de ofte løber så hurtigt, som de kan for at adlyde din kommando. Dette kan resultere i, at din robot falder over, fordi den pludselig begyndte at rotere med høj hastighed. Når vi har fået ROS til at styre servo, kan vi tilføje sinusformet kontrol for at holde din robot stabil. Du kan gøre dette i ROS uden at ændre den styrende kode eller den kode, der udsætter servo til ROS eller selve servo hardware. Og du kan nemt genbruge koden til andre projekter i fremtiden!

ROS har meget god support til installation på Ubuntu eller Debian, så du behøver ikke at kompilere for at komme i gang. Denne konstruktion bruger en Linux-maskine, der kører Ubuntu, en hobby servo, en Arduino og et par stykker af almindelige kabler som hookup-ledninger. ROS kører på Ubuntu-maskine og dets meddelelser vil blive sendt over USB til Arduino. Når du har installeret de binære ROS-pakker, lad dit Arduino-miljø kende om ROS-biblioteker ved at indtaste følgende kommandoer i et konsolprogram (som gnome-terminal eller konsole): cd ~ / sketchbook / libraries rm -rf ros_lib rosrun rosserial_arduino make_l ibraries.py.

Program Arduino

Foto af Hep Svadja

Nu kan vi uploade en skitse til en Arduino for at udføre den lave servostyring og styre den fra Linux-maskinen. Dette vil flytte en servo til et sted angivet som en procentdel (0,0 til 1,0) af den fulde bevægelse, vi vil tillade. Ved at bruge en procentdel i stedet for en eksplicit vinkel, kan Arduino-koden begrænse den nøjagtige vinkel, der kan indstilles, for eksplicit at undgå vinkler, som du ved, vil forårsage en kollision.

Som du kan se, bliver de normale opsætnings- og sløjfefunktioner ret sparsomme, når du bruger ROS. Sløjfefunktionen kan være den samme for enhver Arduino-kode, der kun abonnerer på data. I opsætningen skal du initialisere ROS og derefter ringe til at abonnere på hver ROS-abonnent, du har. Hver abonnent optager RAM på din Arduino, så du kan kun have 6-12 af dem afhængigt af, hvad din skitse skal gøre.

#omfatte #omfatte #omfatte #omfatte #define SERVOPIN 3 Servo servo; void servo_cb (const std_msgs :: Float32 & msg) {const float min = 45; const float interval = 90; float v = msg.data; hvis (v> 1) v = 1; hvis (v <0) v = 0; flydevinkel = min + (område * v); servo.write (vinkel); } ros :: Abonnent sub ("/ head / tilt", servo_cb); ros :: NodeHandle nh; void setup () {servo.attach (SERVOPIN); nh.initNode (); nh.subscribe (sub); } void loop () {nh.spinOnce (); forsinkelse (1); }

Nu skal du kunne tale med Arduino fra ROS verdenen. Den enkleste måde at gøre det på er med en robotstartfil. Mens nedenstående fil er meget enkel, kan disse omfatte andre lanceringsfiler, så du i sidste ende kan starte en meget kompleks robot med en enkelt kommando.

$ cat rosservo.launch $ roslaunch ./rosservo.lanch

Den rostopiske kommando lader dig se, hvor du kan sende ROS-beskeder på din robot. Som du kan se nedenfor, er / Hoved / tilt er tilgængelig fra Arduino. En besked kan sendes ved hjælp af rostopic pub, betyder -1 muligheden for kun at offentliggøre beskeden en gang, og vi vil snakke med / Hoved / tilt sender et enkelt flydende punktnummer.

$ rostopisk liste / diagnostik / hoved / tilt / rosout / rosout_agg $ rostopisk pub -1 / head / tilt std_msgs / Float32 0,4 $ rostopisk pub -1 / head / tilt std_msgs / Float32 0,9

På dette stadium kan alt, der ved, hvordan man offentliggør et nummer i ROS, bruges til at styre servo. Hvis vi bevæger os fra 0 til 1, kører servoen med fuld hastighed, hvilket i sig selv er fint, men vi kan godt lide at motoren skal accelerere til fuld hastighed og sænk derefter når den nærmer sig destinationspositionen. Mindre pludselig bevægelse, mindre rykkende robotbevægelse, mindre overraskelse for mennesker i området.

Glat med en anden knudepunkt

Det nedenstående Python-script lytter til meddelelser på / Hoved / tilt / glat og udgiver mange meddelelser til / Hoved / tilt at bevæge servo med en langsom rampe op og en rampe ned, når du kommer tæt på den ønskede position. Det moveServo_cb kaldes når en besked ankommer / Hoved / tilt / glat. Tilbagekaldelsen genererer derefter et tal for hver 10 grader fra -90 til +90 i vinklerne. Det synd() er taget på de vinkler, der giver værdier, der langsomt strækker sig fra -1 til +1. Tilføjelse 1 til det gør området 0 til +2, så en divide med 2 gør vores array rampe op fra 0 til +1. Det er så et spørgsmål om at gå gennem m-arrayet og udgive en besked hver gang og bevæge sig lidt længere gennem rækken r hver gang og slutter ved 1 * r eller hele spektret.

#! / usr / bin / env python fra tiden import søvn import numpy som np import rospy fra std_msgs.msg import Float32 currentPosition = 0.5 pub = Ingen def moveServo_cb (data): global currentPosition, pub targetPosition = data.data r = targetPosition - curren tPosition vinkler = np.array ((interval (1 90)) [0 :: 10]) - 90 m = (np.sin (vinkler * np.pi / 180.) + 1) / 2 for mi i np. nditer (m): pos = currentPosition + mi * r print "pos:", pos pub.publish (pos) søvn (0.05) currentPosition = targetPosi tion print "pos-e:", currentPos ition pub.publish (currentPosition) def lytter (): global pub rospy.init_node ('servoencod er', anonym = True) rospy.Subscriber ('/ head / til t / smooth', Float32, moveSer vo_cb) pub = rospy.Publisher ('/ h ead / tilt ', Float32, queue size = 10) rospy.spin () hvis __name__ ==' __main__ ': lytter ()

For at afprøve glat servobevægelse skal du starte Python-scriptet og udgive dine meddelelser til / Hoved / tilt / glat og du bør se en glattere bevægelse.

$ ./servoencoder.py $ rostopisk pub -1 / hoved / tilt / glat std_msgs / Float32 1 $ rostopisk pub -1 / hoved / tilt / glat std_msgs / Float32 0

Du kan også omforme navnet på ting i ROS. På den måde kan du genopbygge / Hoved / tilt / glat at være / Hoved / tilt og det program, der styrer servoen, ved ikke engang, at den sinusformede bevægelse anvendes.

Går videre

Jeg har fokuseret på simpel servostyring her, men ROS har støtte til meget mere. Hvis du vil vide, hvad der blokkerer din robot fra at flytte, er der allerede støtte til at bruge en Kinect i ROS. Selvom navigationsstakken bruger disse data til at gøre kortlægning, kan du også føje et lille Python-script, der flytter en servo til at spore det nærmeste objekt til robotten. Ja, øjnene følger dig virkelig.

Mine to ROS-projekter er Terry og Houndbot. Terry er en indendørs robot med to Kinects, den ene bruges udelukkende til navigation, den anden til dybdekortlægning, som jeg finder passende. Med sine seks Arduinos kan Terry styres via en ROS-backet web-interface eller direkte via PS3-fjernbetjening.

Jeg designede Houndbot til udendørs brug. Det har en RC fjernbetjening, GPS, kompas og ROS styrede ører. Jeg arbejder på at få det til at bruge et PS4 øje tvilling kamera til navigation. Det kan ikke bruge en Kinect, fordi solen holder op med at arbejde. Siden hunden er ca. 20 kg, har jeg opgraderet suspensionen for nylig, hvilket førte til at jeg lavede specialdele til legering.

Robot operativsystemressourcer

Installation på Ubuntu Delve i verden med navigation med ROS ROS Q & A Grib en af ​​de mange bøger på ROS Få din robotarm på farten med ROS & MoveIt! Kør NASA-GM Robonaut2 i en simulator. ROS er deroppe!



Du Kan Være Interesseret

Færdighedssæt: Lodning

Færdighedssæt: Lodning


Færdighedssæt: Bordsavsikkerhed

Færdighedssæt: Bordsavsikkerhed


Fitz Patterns - Chat med Designer Lisa Howden

Fitz Patterns - Chat med Designer Lisa Howden


Færdighedssæt: Træbearbejdningstips fra Laura's Dad

Færdighedssæt: Træbearbejdningstips fra Laura's Dad






Seneste Indlæg