7. Ratasroboti parameetriline kirjeldus

Selles õppetükis vaatame, kuidas saab URDF mudelist luua paindliku ja kergesti muudetava XACRO mudeli. Loome XACRO formaadis kirjelduse eelnevas peatükis loodud robotimudelist.

Samm-sammulise juhendi vaatamiseks klikka harjutuse vahepealkirjadele.

XACRO on XML-põhine makrokeel, millega saab ROSi robotitele luua parametriseeritud mudeleid. Hästi organiseeritud XACRO olemasolu korral on roboti mudeli muutmine väga lihtne. URDF mudeli muutmine on tülikam, sest muudatusi peab tegema palju rohkemates kohtades.

Kuna XACRO fail on kõrgema tasemega kui URDF, on roboti mudeli ROS-is kasutamiseks vaja XACRO teisendada klassikalisse URDF formaati. Selle jaoks saab kasutada xacro käsku, mis on ROSis algusest peale olemas.

Võtame aluseks eelnevas peatükis loodud fourwheeler.urdf faili. Liigume urdf kausta ja teeme URDF failist koopia nimega fourwheeler.urdf.xacro.

XACRO formaadis kirjeldatud mudelit saame visualiseerida sama display.launch faili abil, mille lõime eelmisel sammul.

Leia üles eelnevalt loodud display.launch fail ja muuda seda nõnda, et mudeli fourwheeler.urdf asemel kasutataks mudelit fourwheeler.urdf.xacro.

Käivita nüüd käivitusfail. Avaneb RVizi aken, kus näeme eelnevalt loodud robotimudelit.

Avame fourwheeler.urdf.xacro faili endale meelepärases tekstiredaktoris.

Selleks, et saaksime XACRO keelt oma failis kasutada, peame märgendile robot lisama XACRO XML nimeruumi (xmlns).

Nimeruumi lisamise koodijupp, mis tuleb paigutada õigesse kohta (vt allolevalt animatsioonilt):

xmlns:xacro="http://www.ros.org/wiki/xacro"

Roboti kirjeldus algab base_link definitsiooniga. Näeme, et lüli geomeetria määravad kolm arvu, mis on konstantsed (märgendiga box size). Oletame, et oleme oma füüsilise roboti kere suurust muutnud, ja robot on nüüd 20 cm laiem. Mudeli muutmiseks peame muutma roboti kere suuruse teist väärtust (suurus y-teljes). Anname sellele väärtuse 0.320 asemel uue väärtuse 0.520.

Kui aga vaatame nüüd uuendatud mudelit, näeme, et rattad asuvad nüüd roboti kere sees. Oleks mugav, kui saaksime muuta roboti suurust selliselt, et rattad püsiksid alati kere kõrval.

.

Selleks, et saavutada mudel, kus kere suuruse muutumisel paigutuvad ka rattad ümber, saame kasutada XACRO muutujaid (ingl k. property).

Kui oleme korra muutuja väärtuse määranud, saame edaspidi lasta XACRO-l kasutada mitmes kohas sama muutujat. Kui hiljem on vaja muutuja väärtust korrigeerida, peame seda tegema ainult seal, kus muutuja on defineeritud.

Teeme muutuja kere laiuse (base_width) jaoks. Saame seda teha märgendiga xacro:property, millele järgnevad nimi (name) ja väärtus (value).

Lisame muutujad ka rataste raadiuse ja laiuse jaoks.

Vahepeal on kasulik teha ka muutujaid, mis ei ole tingimata ise otseselt mõne dimensiooni suurus. Vaatame üht sellist.

Lisame veel ühe muutuja, millele paneme nimeks half_track – see muutub meile hiljem kasulikuks.

half_track muutuja näitab kaugust y-teljes kere keskkoha ja ratta keskkoha vahel. Tahame, et rattad paikneksid täpselt kere vasaku ja parema külje vastas. Sel juhul on peab half_track muutuja väärtus olema poole kere laiuse ja poole ratta laiuse summa. Saame selle arvutuse jaoks kasutada juba loodud muutujaid.

XACRO muutujate ja aritmeetika kasutamiseks pannakse muutujanimed ja nendega sooritatavad tehted loogeliste sulgude vahele ning kõige ette sisestatakse $-sümbol. Nt muutuja kasutamisel ${muutujanimi} või aritmeetilise tehte korral ${muutuja1 + muutuja2}.

Nüüd saame määrata half_track väärtuse kui poole kere laiuse ja poole ratta laiuse summa.

Kuna kere laius on nüüd muutuja (base_width), saame seni konstandina määratud laiuse asendada vastava muutuja nimega.

Jätame praegu alles eesmise vasakpoolse ratta (front_left_wheel), ja kustutame kõigi muude rataste lülid ja liigendid.

Nüüd saame kasutada half_track muutujat, et joondada ratas kere vasaku küljega. Selleks tuleb vasakut ratast kerega ühendavas liigendis asendada y-koordinaat half_track muutujaga. Lisaks kasutame ratta laiuse ja raadiuse määramiseks muutujaid wheel_width ja wheel_radius.

Nüüd tasub kontrollida, kas roboti vasak esiratas on kerega korrektselt joondatud ja kas selle suurus on õige. Tulemus võiks olla näiteks selline:

.

Kui muudame roboti kere laiust või ratta mõõtmeid, näeme, et mudel on juba paindlikum kui enne. Aga mis saab teistest ratastest?

Meie roboti rattad on kõik ühesugused. Ning URDFi korral pidime iga ratta eraldi kirjeldama ja seejärel iga ratta eraldi liigendiga roboti kerega siduma. XACRO abil saame seda protsessi automatiseerida. Selleks defineerime makro, mida saame korduvalt välja kutsuda. Makro toimib samamoodi nagu programmeerimises funktsioon (või meetod). Igal makrol on teatud sisendparameetrid, mille väärtus antakse makro väljakutsel.

Loome siinkohal makro, mis kirjeldab ratta ja selle liigendi, mille abil ratas kere külge kinnitub. Selleks ümbritseme ratta ja seotud liigendi kirjelduse macro märgenditega. Anname makrole unikaalse nime wheel ja määrame sisendparameetriks ratta nime (wheel_name). Kuna lüli ja liigendi nimed on iga ratta puhul erinevad, määrame esimeseks parameetriks ratta nime (wheel_name). Kohtades, kus ratta kirjelduses esineb ratta nimi, asendame ratta nime parameetri nimega. Selleks kasutame sama ${parameetri_nimi} süntaksit nagu muutujate puhul.

Makro väljakutsumiseks kasutame märgendit xacro:<makro nimi>, millele järgnevad makro nimi ja vajalikud parameetrid, nt <xacro:wheel wheel_name=”front_left_wheel”/>.

Selleks, et ratta makroga loodavad rattad asuksid kummalgi pool kere, piisab kui vahetame ratta asukoha y-koordinaadil märgi. See animatsioon näitab, kuidas rataste asukohtade koordinaadid omavahel seotud on:

Lisame ratta ehk wheel-makro päisesse uue parameetri nimega reflect_y, mida kasutame nii, et vasakpoolsete rataste jaoks korrutame half_track muutujaga määratud koordinaadi 1-ga ja parempoolsete rataste jaoks -1-ga. Makro sees muudame liigendi y-koordinaadi arvutustehteks half_track * reflect_y. Kuna muutsime makro kirjelduse päist, siis tuleb muuta ka neid ridu, kus makrot välja kutsutakse.

Mudeli visualiseerimisel näeme, et mõlemad esirattad on nüüd joondatud kere külgedega. Nende kõigi suurust on võimalik muuta korraga, asendades wheel_width või wheel_radius muutuja väärtuse uue väärtusega.

Tekita robotile ka tagumised rattad, lisades makrole veel ühe parameetri reflect_x.