Program med robot operativsystem for jevn servo bevegelse - 💡 Fix My Ideas

Program med robot operativsystem for jevn servo bevegelse

Program med robot operativsystem for jevn servo bevegelse


Forfatter: Ethan Holmes, 2019

Robots operativsystem (ROS) er en plattform for open source robotikk som hjelper roboten til å visualisere verden, kartlegge og navigere den, og utføre fysiske interaksjoner ved hjelp av toppmoderne algoritmer. Hvis du vil bygge en kompleks robot, er det sjanse for at det er noen ROS-kode som allerede er tilgjengelig for å hjelpe deg. Du kan bruke så lite av ROS som du vil, og det installeres på maskiner fra Raspberry Pi-nivået oppover.

Les artikler fra bladet her på Gjøre:. Har du ikke et abonnement ennå? Få en i dag.

La oss vurdere hvordan du styrer en servo som en introduksjon til ROS. En ulempe ved servomotorer er at de ofte vil løpe så fort som de kan for å adlyde din kommando. Dette kan føre til at roboten faller over, fordi den plutselig begynte å rotere i topphastighet. Når vi får ROS til å kontrollere servoen, kan vi legge til sinusformet kontroll for å holde roboten stabil. Du kan gjøre dette i ROS uten å endre den kontrollerende koden, eller koden som eksponerer servo til ROS, eller selve servo-maskinvaren. Og du kan enkelt gjenbruke koden for andre prosjekter i fremtiden!

ROS har veldig god støtte for installasjon på Ubuntu eller Debian, så du trenger ikke å kompilere for å komme i gang. Denne bygningen bruker en Linux-maskin som kjører Ubuntu, en hobby servo, en Arduino, og noen få biter av vanlige kabler som hookup-ledninger. ROS kjører på Ubuntu-maskinen, og meldingene vil bli sendt over USB til Arduino. Når du har installert de binære ROS-pakkene, la Arduino-miljøet vite om ROS-bibliotekene ved å skrive inn følgende kommandoer i et konsollprogram (for eksempel gnome-terminal eller konsole): cd ~ / skissebok / biblioteker rm -rf ros_lib rosrun rosserial_arduino make_l ibraries.py.

Programmér Arduino

Bilde av Hep Svadja

Nå kan vi laste opp en skisse til en Arduino for å utføre den lave servo kontrollen og styre den fra Linux-maskinen. Dette vil flytte en servo til et sted som er oppgitt som en prosentandel (0,0 til 1,0) av full bevegelsen vi vil tillate. Ved å bruke en prosentandel i stedet for en eksplisitt vinkel, kan Arduino-koden begrense den nøyaktige vinkelen som kan settes, for å eksplisitt unngå vinkler som du vet vil føre til kollisjon.

Som du kan se, blir de normale oppsett- og loopfunksjonene ganske sparsomme når du bruker ROS. Sløyfunksjonen kan være den samme for enhver Arduino-kode som bare abonnerer på data. I oppsettet må du initialisere ROS og deretter ringe abonnere på hver ROS-abonnent du har. Hver abonnent tar opp RAM på din Arduino, så du kan bare ha 6-12 av dem avhengig av hva annet skissen din trenger å gjøre.

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

Nå må du kunne snakke med Arduino fra ROS-verdenen. Den enkleste måten å gjøre det på er med en robotstartfil. Mens underfilen er veldig enkel, kan disse inkludere andre startfiler, slik at du til slutt kan starte en svært komplisert robot med en enkelt kommando.

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

Den rostopiske kommandoen lar deg se hvor du kan sende ROS-meldinger på roboten din. Som du kan se nedenfor, er /hode på skrå er tilgjengelig fra Arduino. En melding kan sendes ved hjelp av rostopic pub, betyr -1-alternativet å bare publisere meldingen en gang, og vi vil snakke med /hode på skrå sender et enkelt flytpunktsnummer.

$ rostopisk liste / diagnostikk / hode / tilt / rosout / rosout_agg $ rostopisk pub -1 / hode / vippe std_msgs / Float32 0,4 $ rostopisk pub -1 / hode / vippe std_msgs / Float32 0,9

På dette stadiet kan alt som vet hvordan man publiserer et nummer i ROS, brukes til å styre servoen. Hvis vi flytter fra 0 til 1, vil servoen kjøre med full fart, som i seg selv er bra, men vi vil kanskje at motoren skal akselerere til full fart og senk deretter når det kommer nær destinasjonsposisjonen. Mindre plutselig bevegelse, mindre rykkende robotbevegelse, mindre overraskelse for menneskene i området.

Glatt med en annen knutepunkt

Under Python-skriptet lytter til meldinger på / Hode / tilt / glatt og publiserer mange meldinger til /hode på skrå å flytte servoen med en langsom rampe opp og en rampe ned når du nærmer deg ønsket posisjon. De moveServo_cb kalles når en melding kommer fram / Hode / tilt / glatt. Tilbakeringingen genererer deretter et tall for hver 10 grader fra -90 til +90 i vinkelen array. De synd() er tatt på de vinklene som gir verdier som går sakte fra -1 til +1. Hvis du legger til 1 til det, blir rekkevidden 0 til +2, slik at en divisjon med 2 gjør vår array rampe opp fra 0 til +1. Det er så et spørsmål om å gå gjennom m-arrayet og publisere en melding hver gang, flytte litt lenger gjennom området r hver gang, ender opp med 1 * r eller hele spekteret.

#! / usr / bin / env python fra tid import 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 ((område (1 90)) [0 :: 10]) - 90 m = (np.sin (vinkler * np.pi / 180.) + 1) / 2 for mi i np. nditer (m): pos = nåværende posisjon + mi * r skrive ut "pos:", pos pub.publish (pos) sleep (0.05) currentPosition = targetPosi tion print "pos-e:", currentPos ition pub.publish 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 å teste ut jevn servobevegelse, start Python-skriptet og publiser meldingene dine til / Hode / tilt / glatt og du bør se en jevnere bevegelse.

$ ./servoencoder.py $ rostopisk pub -1 / hode / tilt / glatt std_msgs / Float32 1 $ rostopisk pub -1 / hode / tilt / glatt std_msgs / Float32 0

Du kan også omforme navnet på tingene i ROS. På denne måten kan du omforme / Hode / tilt / glatt å være /hode på skrå og programmet som styrer servoen, vet ikke engang at sinusformet bevegelse blir brukt.

Gå videre

Jeg har fokusert på enkel servostyring her, men ROS har støtte for mye mer. Hvis du vil vite hva som blokkerer roboten din fra å flytte, er det allerede støtte for å bruke en Kinect i ROS. Selv om navigasjonsbunken bruker disse dataene til å gjøre kartlegging, kan du også mate et lite Python-skript som beveger en servo for å spore det nærmeste objektet til roboten. Ja, øynene følger deg virkelig.

To ROS-prosjekter av mine er Terry og Houndbot. Terry er en innendørs robot med to Kinects, den ene brukes utelukkende til navigasjon, den andre for dybdekartlegging som jeg synes passer. Med sine seks Arduinos kan Terry styres via et ROS-støttet webgrensesnitt eller direkte via PS3-fjernkontroll.

Jeg designet Houndbot til utendørs bruk. Den har en RC-fjernkontroll, GPS, kompass og ROS-kontrollerte ører. Jeg jobber med å få det til å bruke et PS4-øyekamera for navigering. Det kan ikke bruke en Kinect fordi solen stopper det fra å fungere. Siden hunden er ca 20 kg har jeg oppgradert suspensjonen nylig, noe som førte meg til å lage tilpassede legeringsdeler.

Robot Operating System Resources

Installasjon på Ubuntu Delve i navigasjonsverdenen med ROS ROS Q & A Ta tak i en av de mange bøkene på ROS Få din robotarm på farten med ROS & MoveIt! Kjør NASA-GM Robonaut2 i en simulator. ROS er der oppe!



Du Kan Være Interessert

HVORDAN: Å bygge en out-of-band-enhet ...

HVORDAN: Å bygge en out-of-band-enhet ...


Giant Bord og Stoler Art Installasjon fra 3 For Life

Giant Bord og Stoler Art Installasjon fra 3 For Life


10 morsomme ting å se på maker Faire Kansas City | Gjøre

10 morsomme ting å se på maker Faire Kansas City | Gjøre


Denne Clockwork Carpenter er laget av en enkelt 2 × 4

Denne Clockwork Carpenter er laget av en enkelt 2 × 4






Siste Innlegg