Robottikäyttöjärjestelmä (ROS) ei todellakaan ole käyttöjärjestelmä, vaan kehys ja joukko työkaluja, jotka tarjoavat käyttöjärjestelmän toiminnallisuuden heterogeenisessä tietokoneryhmässä. Sen hyödyllisyys ei rajoitu robotteihin, mutta suurin osa toimitetuista työkaluista keskittyy työskentelyyn oheislaitteiden kanssa.
ROS Se on jaettu yli 2000 pakettiin, jokaisella paketilla on erikoistuneita toimintoja. Kehykseen kytkettyjen työkalujen määrä on luultavasti sen suurin voima.
ROS tarjoaa toimintoja laitteiston abstraktioon, laiteohjaimiin, prosessien väliseen viestintään useilla koneilla, testaus- ja visualisointityökaluille ja paljon muuta.
ROS: n keskeinen piirre on tapa, jolla ohjelmisto toimii ja kommunikoi, jolloin voit suunnitella monimutkaisia ohjelmistoja tietämättä kuinka tietty laitteisto toimii. ROS tarjoaa tavan liittää prosessien (solmujen) runkoverkko. Solmut voivat toimia useilla laitteilla ja muodostaa yhteyden siihen keskittimeen eri tavoin.
Tärkeimmät keinot verkon luomiseksi ovat tarvittavien palvelujen tarjoaminen tai mainostajan tai tilaajan yhteyksien määritteleminen muihin solmuihin. Molemmat menetelmät kommunikoivat tietyntyyppisten viestien kautta. Jotkut tyypit tarjoavat ydinpaketit, mutta viestityypit voidaan määrittää yksittäisillä paketeilla.
Kehittäjät voivat koota monimutkaisen järjestelmän yhdistämällä olemassa olevat ratkaisut pieniin ongelmiin. Järjestelmän toteutustapa antaa meille mahdollisuuden:
Vaihda komponentit samanlaisilla rajapinnoilla lennossa, jolloin järjestelmä ei tarvitse pysähtyä erilaisten muutosten vuoksi.
Moninkertaistaa useiden komponenttien ulostulon toisen komponentin tuloon, jolloin eri ongelmat voidaan ratkaista rinnakkain.
Yhdistä eri ohjelmointikielillä valmistetut komponentit yksinkertaisesti liittämällä asianmukaiset liittimet viestijärjestelmään, mikä helpottaa ohjelmistokehitystä yhdistämällä olemassa olevat moduulit useilta kehittäjiltä.
Luo solmuja laiteverkossa huolimatta siitä, missä koodi suorittaa, ja ota käyttöön prosessin (IPC) ja etäkäytön kutsun (RPC) väliset tietoliikennejärjestelmät.
Muodosta yhteys suoraan etälaitteiden on-demand-virtoihin kirjoittamatta ylimääräistä koodia käyttämällä kahta edellistä pistettä.
Aiomme osoittaa, kuinka hyödyllinen se on iteratiivisesti yksinkertaisen ratkaisun kehittäminen. Muihin lähestymistapoihin verrattuna on useita keskeisiä etuja. ROS: lla on alustojen välinen tuki ja se mahdollistaa yhteydet useiden laitteiden prosessien välillä peer-yhteyksien kautta, joita hoidetaan kulissien takana. Suunnittelu sallii minkä tahansa kielen tuen määritettäessä C ++ -viestintäluokkia tai kehitettäessä luokkia manuaalisesti kielirajapinnalle.
ROS: n tekee sen oma yhteisö. Useiden vuosien jälkeen se johti suureen määrään uudelleenkäytettäviä paketteja, jotka on helppo integroida järjestelmäarkkitehtuurin ansiosta.
Vaihtoehtoiset lähestymistavat, kuten MRPT , CARMEN , LCM , Pelaaja , Microsoft RDS ja toiset tarjoavat joitain, mutta eivät kaikkia näitä ominaisuuksia. Suunnitteluvirheet ovat suurimmaksi osaksi kielituen rajoituksia, huono viestintä prosessien välillä tai tuen puute eri laitteille, mikä on kiistatta vaikein ratkaista ongelma.
Koska painopisteemme on kehys eikä algoritmit sellaisenaan, tietyille ongelmille, annettu ongelma on hyvin yksinkertainen. Tavoitteenamme on rakentaa ohjelmisto tietokoneelle, joka on osa prosessia ja jonka avulla voimme etäohjata ja valvoa robottia, joka on yhdistetty meihin Wi-Fi-yhteyden kautta, käyttämällä tietokoneellamme olevaa peliohjainta ja lähetystä robottiin asennetulta kameralta. .
Ensinnäkin yhdistämme yksinkertaisen ohjelman yksinkertaiseen simulaatioon, vain osoittamaan ROS: n perusperiaatteet. Yhdistämme peliohjaimen tietokoneeseen ja yritämme suunnitella hyvän ohjausjärjestelmän, jotta peliohjaimen tulo ohjataan robotin ohjaussignaaleille.
ROS-koodin kirjoittamisen pääkielet ovat C ++ ja Python, C ++ on suositeltava heikomman suorituskyvyn saavuttamiseksi. Selitämme esimerkkimme Python koska koodissa on vähemmän määrittelijöitä eikä erityistä rakennetta tarvitse tehdä.
ROS-versioihin viitataan nimellä. Tähän mennessä uusin julkaisu on Jade Turtle ja LTS-versio on Indigo-iglu . Versiosta siirtyminen on suositeltavaa, ja taaksepäin yhteensopivuutta ei taata ROS: ssa, joten kaikki esimerkit kirjoitetaan Indigo .
ROS on saatavana useilla * NIX-alustoilla. Virallisesti tuettu versio on Ubuntu. Yhteisö tukee OS X-, Arch Linux-, Debian-, Raspbian- ja Android-versioita.
Näemme Ubuntu 14.04: n asennusprosessin työpöydällä. Kaikkien tuettujen versioiden ja alustojen prosessit ovat saatavilla virallinen nettisivu . Saatavilla on myös virtuaalikoneita, joihin on jo asennettu ROS.
Asennus riippuu alustasta (ja useimmilla käyttöympäristöillä on paketteja), mutta työtilan asetukset ovat samat kaikille alustoille. .
ROS tarjoaa omat arkistonsa. Ensimmäinen askel on lisätä ne.
sudo sh -c 'echo 'deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main' > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net --recv-key 0xB01FA116 sudo apt-get update
Sen jälkeen sinulla on kaikki isännöityt paketit kaikille ROS-versioille käytettävissä Ubuntu-versiollesi. Esimerkiksi Ubuntu 14.04 tukee indigo
ja jade
.
Peruspakettien asentaminen työpöydälle on yksi kolmesta vaihtoehdosta:
sudo apt-get install ros-indigo-ros-base
minimaaliseen asennukseen
sudo apt-get install ros-indigo-desktop
saada ylimääräinen GUI-työkalu
sudo apt-get install ros-indigo-desktop-full
sinulla on kaikki viralliset ominaisuudet, mukaan lukien erilaiset simulaattorit ja kirjastot navigointiin ja havaitsemiseen.
Paremman työkokemuksen saamiseksi suositellaan koko vaihtoehtoa. Ase-versio on riittävä asennettavaksi laitteisiin, joita käytetään vain solmujen suorittamiseen. Mutta riippumatta siitä, minkä vaihtoehdon valitset, voit asentaa minkä tahansa tarvitsemasi paketin nimeltä package_name
suoritettaessa:
sudo apt-get install ros-indigo-
Alaviivat korvataan väliviivoilla lopullisessa nimessä, joten stage_ros
se on paketissa muodossa ros-indigo-stage-ros
.
Seuraava vaihe on aloittaa rosdep
. ROS-paketit voivat ilmoittaa, mistä komponenteista ne riippuvat. rosdep
voit kääntää nämä paketit turvautumatta liikaa manuaaliseen käsittelyyn. Aloita se soittamalla:
sudo rosdep init rosdep update
ROS: lla on monia ympäristömuuttujia, joita sen työkalut käyttävät. Oletusasennuksessa komentosarja lyödä niiden käynnistämiseksi se sijaitsee /opt/ros/indigo/setup.bash
. Muuttujat on aloitettava jokaisessa lyödä , joten paras ratkaisu on lisätä ne kohtaan ~/.bashrc
.
echo 'source /opt/ros/indigo/setup.bash' >> ~/.bashrc source ~/.bashrc
Jotkut paketit asentavat ulkoisia riippuvuuksia rosinstall
-palvelun kautta, joka on saatavana pakettina ja asennetaan sudo apt-get install python-rosinstall
-palvelun kautta.
Tämä on Ubuntu-asennuksen loppu. Seuraavassa on lyhyt esittely työtilan asetuksista.
Siitä asti kun Groovy Galapagos , ROS-työtiloja on hallinnoitu catkin
. Meidän on määritettävä hakemisto kaikille isännöimillemme paketeille. Hakemistoon luodaan kansio src
ja soitamme catkin_init_workspace
sisältä. Se luo useita symbolisia linkkejä ROS: n nykyiseen lähdeversioon. Seuraava askel on lisätä tämä työtila myös ympäristömuuttujiin.
Suorita kaikki nämä työtilan asetukset valitsemalla tyhjä hakemisto ja suorittamalla seuraavat komennot:
mkdir src cd src catkin_init_workspace cd .. catkin_make echo 'source $(pwd)/devel/setup.bash' >> ~/.bashrc source ~/.bashrc
Olet nyt luonut työtilan, jossa voit luoda omia ROS-paketteja.
Koodin luominen on valtava harppaus. Ensin tutustutaan joihinkin kulissien takana toimiviin järjestelmiin. Ensimmäinen askel on suorittaa perus-käyttöliittymä ja nähdä, mitä viestejä se tuottaa.
Jos haluat suorittaa mitään ROS: ssa, sinun on käynnistettävä pääprosessi. Se on yhtä helppoa kuin avata uusi pääteikkuna ja kirjoittaa:
roscore
Yhdistetyn laiteverkon kautta roscore
se on suoritettava vain kerran laitteella, joka isännöi keskusyksikköä viestinnän lähettämistä varten.
roscore
: N päärooli eli kertoa solmuille, joihin muiden solmujen tulisi muodostaa yhteys ja millä tavalla (joko verkkoportin tai jaetun muistin kautta). Tavoitteena on antaa solmujen huolehtia vain siitä, mitä tietoja he haluavat tietää, sen sijaan, mihin solmuun he haluavat muodostaa yhteyden, samalla kun minimoidaan aika tai kaistanleveys, jota he tarvitsevat kaiken viestinnän suorittamiseen.
Suorittamisen jälkeen roscore
voimme käynnistää ROS: n pääkäyttöliittymän: rqt
. Se, mitä näemme, on hyvin pettymys - tyhjä ikkuna. rqt
Siinä on laaja valikoima laajennuksia, jotka voidaan määrittää millä tahansa visuaalisella kokoonpanolla ja millä tahansa määrällä ennalta määritettyjä näkymiä.
Aloitamme suorittamalla laajennuksen Robottiohjaus , valitsemalla sen Plugins > Robot Tools > Robot Steering
. Saamme kaksi liukusäädintä, jotka edustavat lineaarista ja pyörivää liikettä, jonka haluamme robottimme olevan. Laajennuksen yläosassa on tekstiruutu, jossa on /cmd_vel
hänessä. Voimme antaa sille toisen nimen. Esittää sen aiheen nimen, johon julkaisu on suunnattu. Päätetyökalut ovat paras paikka nähdä, mitä taustalla tapahtuu.
ROS: lla on useita tehokkaita työkaluja järjestelmän tapahtumien tarkastamiseen. Ensimmäinen työkalu, jonka aiomme esitellä, on rostopic
, sen avulla voimme tarkastaa aiheita, joita solmut voivat tilata ja julkaista. Suorita rostopic list
Antaa:
/cmd_vel /rosout /rosout_agg
Kaksi viimeistä aihetta ovat aina käynnissä ja liittyvät ydin ROS-järjestelmiin. Aihe /cmd_vel
julkaistaan osoitteissamme. Aiheen nimeäminen uudelleen osoitteissa nimetään uudelleen myös tässä. Nyt olemme kiinnostuneita siitä, mitä aiheessa tapahtuu. Suorita rostopic echo /cmd_vel
se ei näytä meille mitään (ellet pelaa liukusäätimillä). Prosessi jatkuu, kunnes peruutamme sen. Siirretään nyt pystysuuntaista liukusäädintä nopeudella 20 m / s. Kaikua tarkasteltaessa voimme nähdä seuraavan toistuvan uudestaan ja uudestaan:
linear: x: 0.2 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0
Kuinka usein tämä viesti roskapostia? rostopic hz /cmd_vel
se sanoo keskimääräisellä taajuudella 10 Hz. No, kuinka monta tällaista kappaletta voin käyttää hitaalla Wi-Fi-yhteydelläni? rostopic bw /cmd_vel
havaitsee keskimäärin 480 B / s.
Kaikki on hyvin, mutta puhumme viestityypeistä. Nämä tiedot ovat hyviä ihmisille, mutta sovellus tarvitsee raakatiedot ja sen on tiedettävä viestityyppi tietojen tulkitsemiseksi. Viestityyppi voidaan tulkita rostopic type /cmd_vel
-merkillä sanomalla meille, että se on geometry_msgs/Twist
. Kaikki ilman argumentteja kutsutut ROS-päätelaitteet palauttavat tavallisen ohjeviestin.
ROS-wiki on hyvä tapa tehdä verkkohaku tälle merkkijonotulokselle Wiki-selityksessä siitä, mitä se sisältää ja miten se on jäsennelty. Mutta meidän ei tarvitse luottaa häneen. rosmsg
on yleinen työkalu viestityypeille. Suorita rosmsg show geometry_msgs/Twist
palata:
geometry_msgs/Vector3 linear float64 x float64 y float64 z geometry_msgs/Vector3 angular float64 x float64 y float64 z
Viesti koostuu kahdesta 3D-vektorista, jotka edustavat lineaarista ja kulmanopeutta 3D-avaruudessa.
Jos haluat tietää mihin aiheisiin solmu liittyy, rosnode info
Se antaa meille yksityiskohtaisia tietoja solmusta. Työkalut rostopic
, rosmsg
ja rosnode
ovat ensisijaisia työkaluja kiillottamattomien ROS-toimintojen tarkastamiseen. ROS: lla on paljon enemmän käyttöliittymiä ja päätelaitteita, mutta ne eivät kuulu tämän johdannon piiriin.
Tärkeimmät työkalut ROS-solmun suorittamiseen ovat rusrun
ja roslaunch
. rosrun
voit suorittaa solmuja rosrun
ja roslaunch
se ajaa käynnistystiedostoihin perustuvia solmuja, joiden kanssa tutustumme vähän, koska ne ovat ROS-automaation monimutkaisin osa.
Voimme sulkea kaiken, mitä ajamme, jotta voimme alkaa työskennellä ensimmäisen koodin parissa. Tulevaisuuden kannalta on selvää, että minkä tahansa ROS: ään liittyvän suorittaminen vaatii aktiivisen roscore
-esiintymän. Monet kohtaamistasi ongelmista voidaan ratkaista sulkemalla pääteikkuna roscore
ja avaa uusi käynnistääksesi sen uudelleen. Tämä päivittää kaikki riippuvuudet, jotka oli ladattava uudelleen, sekä bash
ja roscore
Ensimmäinen tavoitteemme on jäljitellä Robot Steering
-toimintoa luodaan solmu, joka julkaisee tietoja geometry_msgs/Twist
a /cmd_vel
perustuu peliohjaimen tuloon. Ensimmäinen pysäkkimme on joy
-paketti.
joy
Paketti joy
tarjoaa yleisiä ROS-ohjaimia ohjaussauvalle ja peliohjaimille. Se ei sisälly oletusasennukseen, joten se on asennettava:
sudo apt-get install ros-indigo-joy
Asennuksen jälkeen voimme suorittaa rosrun joy joy_node
. Tämä yhdistää meidät oletusarvoisesti ohjaussauvaan tai peliohjaimeen. Suorita rostopic list
osoittaa meille, että meillä on aihe nimeltä /joy
. Kuuntele rostopic echo
-palvelun kautta Se näyttää meille seuraavan muotoiset viestit (huomaa, että sinun on oltava vuorovaikutuksessa peliohjaimen tai ohjaussauvan kanssa, jotta viestit voidaan julkaista).
header: seq: 4156 stamp: secs: 1450707466 nsecs: 204517084 frame_id: '' axes: [0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0] buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Voit sivuuttaa otsikot toistaiseksi. Sen lisäksi meillä on axes
ja buttons
, jotka selittävät hienosti, mitä ne edustavat. Siirtämällä kirveet ja paina painikkeita ohjaimessa se johtaa näiden numeroiden muuttumiseen. Käyttämällä työkalujamme voimme selvittää, että viestityyppi on sensor_msgs/Joy
ja muoto on:
std_msgs/Header header uint32 seq time stamp string frame_id float32[] axes int32[] buttons
Ensimmäinen vaihe koodin kirjoittamisessa on paketin luominen. Kansiossa src
suorita työtilasta:
catkin_create_pkg toptal_tutorial rospy joy geometry_msgs sensor_msgs
Tässä ilmoitetaan luomamme paketin nimi, jota seuraavat paketit, joista aiomme riippua. Älä huoli, riippuvuudet voidaan päivittää manuaalisesti myöhemmin.
Nyt meillä on kansio toptal_tutorial
. Luo kansion sisälle kansio nimeltä scripts
joka sisältää kaikki Python-skriptimme.
Luodaan tiedosto nimeltä teleop.py
, ja sen sisällä meillä on:
#!/usr/bin/env python import rospy from sensor_msgs.msg import Joy def joy_callback(data): print data def main(): rospy.init_node('teleop') rospy.Subscriber('joy', Joy, joy_callback) while not rospy.is_shutdown(): pass if __name__ == '__main__': main()
Meidän on myös asetettava chmod +x teleop.py
näin komentosarja on suoritettava. Suorita rosrun joy joy_node
terminaalissa ja rosrun toptal_tutorial teleop.py
toisessa se johtaa päätelaitteen ulostulon teleop.py
täyttöön viesteillä Ilo .
Tarkastellaan, mitä koodi tekee.
Ensinnäkin tuomme huijaus , joka isännöi kirjastoa vuorovaikutuksessa ROS-kehyksen kanssa. Jokaisella viestien määrittelevällä paketilla on alipaketti msg
viestimääritelmillä. Tuomme Joy
käsittelemään syötettä. Upotettuja viestityyppejä (kuten Header
viestistä std_msgs.msg
Joy
) ei tarvitse tuoda, ellemme halua mainita niitä erikseen.
Ensimmäinen askel on alustaa solmu tietyllä nimellä (tässä tapauksessa kutsumme sitä 'teleopiksi'). Sen jälkeen luomme tilaajan, joka tilaa aihetyypin 'joy' sensor_msgs.msg.Joy
ja käsittelee jokaisen viestin kutsumalla joy_callback
-funktion. Soittopyynnöt vastaanottavat parametrin, sanomatiedot. Tietojäsenten käyttö on helppoa. Jos haluaisimme tulostaa ensimmäisen tilan akseli , jos muistamme viestityypin, soittaisimme print data.axes[0]
ja se olisi kelluva. Solmu solmujen päässä, kunnes ROS sammuu.
Seuraava askel olisi hallita tietoja jollakin tavalla. Meidän pitäisi luoda viesti Kierre se muuttuu syötteestä riippuen ja sitten julkaisemme sen aiheessa cmd_vel
#!/usr/bin/env python import rospy from sensor_msgs.msg import Joy from geometry_msgs.msg import Twist # new from functools import partial # new def joy_callback(pub, data): # modified cmd_vel = Twist() # new cmd_vel.linear.x = data.axes[1] # new cmd_vel.angular.z = data.axes[0] # new pub.publish(cmd_vel) # new def main(): rospy.init_node('teleop') pub = rospy.Publisher('cmd_vel', Twist, queue_size=1000) # new rospy.Subscriber('joy', Joy, partial(joy_callback, pub)) # modified while not rospy.is_shutdown(): pass if __name__ == '__main__': main()
Ensin lisätään viesti Twist
ja lisätään funktionaalisten argumenttien tuki sidonnilla functools.partial
-palvelun kautta. Luomme mainostajan pub
, joka julkaisee cmd_vel
viestityyppi Twist
. Sitomme kyseisen mainostajan takaisinsoittoon ja pakotamme hänet lähettämään viestin Kierre jokaisessa merkinnässä siten, että nopeudet ovat kaksi ensimmäistä kirveet . Tämä koodi tekee sen, mitä siitä odotetaan, ja voimme nähdä tuloksena olevan lähdön rostopic echo /cmd_vel
: n kautta.
Meillä on edelleen ongelma. Aihe /joy
voi lähettää suuria nopeuksia. Jos seuraamme rostopic hz /cmd_vel
ja liikutamme analogista sauvaa ympyröissä, jolloin voimme nähdä monia viestejä. Tämän seurauksena ei ole vain suuri määrä viestintää, vaan myös näiden viestien vastaanottavien prosessien on käsiteltävä kukin niistä; niin paljon dataa ei tarvitse lähettää niin usein, ja oikeastaan on parempi lähettää tasaisella 10 Hz: n taajuudella. Voimme saada tämän seuraavalla koodilla.
#!/usr/bin/env python import rospy from sensor_msgs.msg import Joy from geometry_msgs.msg import Twist from functools import partial def joy_callback(cmd_vel, data): # modified cmd_vel.linear.x = data.axes[1] cmd_vel.angular.z = data.axes[0] # moved pub.publish(cmd_vel) to main loop def main(): rospy.init_node('teleop') cmd_vel = Twist() # new pub = rospy.Publisher('cmd_vel', Twist, queue_size=1000) rospy.Subscriber('joy', Joy, partial(joy_callback, cmd_vel)) # modified rate = rospy.Rate(10) # new while not rospy.is_shutdown(): pub.publish(cmd_vel) # new rate.sleep() # new if __name__ == '__main__': main()
Muutamme soittopyyntöä vastaanottamaan muutettava objekti Twist
ja muokkaa sitä silmukan sisällä. Toiminto sleep
/ _ + _ | ylläpitää vakaata lähtötaajuutta.
Lopullinen koodi johtaa aiheeseen rospy.Rate
10 Hz: n komentonopeuksien saaminen, mikä jäljittelee laajennuksen lähtöä Robottiohjaus /cmd_vel
Ensimmäinen tavoitteemme on luoda ympäristö, jossa voimme simuloida tavoitetta, jonka haluamme saavuttaa. Solmu rqt
pakkauksen sisällä stageros
Sen avulla voimme suorittaa robotin kuvan määrittelemässä 2D-vaiheessa. Tässä on kuvattu koko synteesi paketti stage_ros
maailman arkistoihin ja niiden luomiseen. Tämä on melko suoraviivaista, mutta ulottumattomissa. Onneksi paketissa on useita maailman demoja. Mennään ensin tiedostohakemistoon suorituksen mukaan:
stage_ros
Kansion sisällä on useita tiedostoja. Suoritetaan yksi.
roscd stage_ros cd world
Eri teemoja luotiin. Jokaisen merkitys dokumentoidaan myös pakkauksen mukana. Tärkeää on, että sillä on rosrun stage_ros stageros willow-erratic.world
.
Esitetyn vaiheen sisällä on sininen laatikko, joka edustaa robottia, jota ohjaat. Käyttämällä koodia tai Robottiohjaus voimme hallita tätä robottia. Kokeile!
Ensin luomme kansion cmd_vel
tai launch
paketin sisällä ja sen sisällä luo tiedosto nimeltä lanzamiento
. Kansion lopullisen rakenteen tulisi näyttää tältä:
teleop.launch
Tiedoston sisällä toptal_tutorial/ ├── CMakeLists.txt ├── launch │ └── teleop.launch ├── package.xml ├── scripts │ └── teleop.py └── src
Määritämme useita solmuja ja niiden yhteyksiä.
teleop.launch
Uusi maailma koostuu neljästä robotista, ja jokaisella niiden teemalla on etuliite nimeltä robot_
. Siten robotilla numero 0 on komentonopeuden teema nimeltä robot_0/cmd_vel
. Siksi asetimme hallinnan nimitilaan, jonka nimi on robot_0
ja niin me mukautamme heidän nimensä uuteen muotoon. Tällä tavalla voit ajatella aiheiden nimiä kansioina tiedostojärjestelmässä.
Käynnistystiedostojen suorittamiseen ei tarvita roscore
Tavallaan roscore
se on vain erikoistapaus käynnistystiedostosta, joka ei tee mitään. Jos a roscore
vain ensimmäinen käynnistetty käynnistystiedosto suorittaa ytimen, kun taas loput muodostavat yhteyden siihen. Nyt toteutamme laukaisun seuraavilla tavoilla:
roslaunch toptal_tutorial teleop.launch
Jos kaikki on kunnossa, tuloksena on simulaattori, jossa on neljä robottia, joissa kaikkia ohjataan peliohjaimella tai ohjaussauvalla. Tässä maailmassa on paljon enemmän sisältöä kuin edellisessä. Jokaisella neljästä robotista on seuraavat:
/robot_/base_pose_ground_truth /robot_/base_scan_0 /robot_/base_scan_1 /robot_/camera_info_0 /robot_/camera_info_1 /robot_/cmd_vel /robot_/depth_0 /robot_/depth_1 /robot_/image_0 /robot_/image_1 /robot_/odom
Korvataan luvuilla 0, 1, 2 tai 3. Ja tämän kanssa tulemme viimeiseen aiheeseen.
rqt
-sovelluksellaAiemmin emme ole syventäneet rqt
mutta se on täydellinen työkalu monimutkaisemman datan visualisointiin. Voit kokeilla kaikkia teemoja, mutta keskitymme image_0
, image_1
, depth_0
ja depth_1
teemoihin.
Juoksu rqt
poistamme kaikki avoimet laajennukset. Nyt avataan 4 kuvankatselua (Plugins > Visualización > Vista Imagen
) ja laitetaan ne 2x2-ruudukkoon. Lopuksi valitsemme jokaisen näkymän vasemmassa yläkulmassa yhden neljästä robot_0
: lle määritetystä teemasta.
Saamme syvän havainnon stereonäkymän matalan resoluution kameroilla. Huomaa, että olisimme voineet saada tämän tuloksen ilman syöttöjärjestelmäämme. Jos suoritamme tämän (kansiosta stage_ros/world
sisältä):
rosrun stage_ros stageros willow-four-erratics-multisensor.world
Ja lisätään laajennus Robottiohjaus aiheen nimeltä /robot_0/cmd_vel
Meillä olisi voinut olla sama tulos, jos ohjaimet olisivat näytöllä.
Monet laitteistot tukevat täysin ROS: ää, usein kolmansien osapuolten ansiosta. Monilla robottiympäristöillä on ohjaimet, jotka tuottavat tämän tyyppisiä viestejä, ja ROS: lla on solmut, jotka aktivoivat verkkokameran ja julkaisevat syötteen kuvista.
Vaikka viimeinen tulos oli simulointi siitä, mitä haluamme saavuttaa; sama voidaan saavuttaa seuraavilla muutoksilla:
export ROS_MASTER_URI=http://:11311/
kun aloitat Bashissa, joten etätietokone tarkastelee kyseistä isäntää ja porttiarqt
ja / tai mikä tahansa komento robotin seuraamiseksi ja ohjaamiseksiLoppujen lopuksi etälaitteelle tulisi viedä vain sopiva muuttujaympäristö ja kaikki muu tapahtuu itse. ROS: n ajaminen tietokoneryhmässä vie vain yhden askeleen valmistautuakseen jokaiseen koneeseen.
Olemme osoittaneet, kuinka jokaisella koodilla, riippumatta siitä, kuinka pieni, sinulla voi olla monimutkainen muuttujajärjestelmä, jota voit manipuloida haluamallasi tavalla. Yksinkertainen julkaisija- / tilaajajärjestelmä mahdollistaa nopean ohjelmistokehityksen, joka käsittelee tietoja tietokoneryhmässä, mutta jättää sinulle mielenrauhan, jotta et välitä tiettyjen elementtien taustalla olevasta toteutuksesta.
Vaikka käytämme yksinkertaista simulaattoria, muut monimutkaisemmat simulaattorit, kuten gazebo
(joka sisältyy työpöydän täysversioon) avulla voit luoda 3D-maailmat monimutkaisilla fyysisillä antureilla Ja se antaa sinulle kokemuksen lopputuloksista ja tuotteesta ennen sen kehittämistä.
Tämä johdanto oli jonkin verran perustiedot, mutta on toivottavaa, että tunnet olevasi kiinnostuneempi työskentelemään tämän monipuolisen kehyksen kanssa.