Lietuvių

Išsami ROS programavimo analizė viso pasaulio robotikos entuziastams, apimanti pagrindines koncepcijas, kūrimą ir praktinį pritaikymą kuriant išmaniąsias sistemas.

Robotų operacinės sistemos (ROS) įvaldymas: pasaulinis ROS programavimo vadovas

Robotikos sritis sparčiai vystosi, o dirbtinio intelekto, mašininio mokymosi ir automatizavimo pasiekimai formuoja pramonės šakas visame pasaulyje. Šios technologinės revoliucijos centre yra Robotų operacinė sistema (ROS) – lanksti ir galinga sistema, tapusi nepakeičiamu įrankiu kuriant robotus. Šis išsamus vadovas skirtas pasaulinei inžinierių, tyrėjų, studentų ir entuziastų auditorijai, norinčiai suprasti ir panaudoti ROS programavimą kuriant sudėtingas robotų sistemas.

Kas yra Robotų operacinė sistema (ROS)?

ROS nėra operacinė sistema tradicine prasme, kaip „Windows“ ar „Linux“. Tai yra lanksti tarpinė programinė įranga (middleware), teikianti bibliotekų, įrankių ir konvencijų rinkinį robotų programinei įrangai kurti. Iš pradžių sukurta „Willow Garage“ ir dabar prižiūrima ROS bendruomenės, ROS siūlo standartizuotą būdą rašyti robotų programinę įrangą, kurią galima lengvai bendrinti ir pakartotinai naudoti skirtinguose robotuose ir programose. Ji veikia kaip komunikacijos sluoksnis, leidžiantis skirtingiems roboto sistemos komponentams – tokiems kaip jutikliai, pavaros, navigacijos algoritmai ir vartotojo sąsajos – sklandžiai sąveikauti.

Pagrindiniai ROS principai

ROS yra pagrįsta keliais pagrindiniais principais, kurie prisideda prie jos lankstumo ir galios:

Kodėl verta rinktis ROS savo robotikos projektams?

Plačiai paplitęs ROS pritaikymas mokslinių tyrimų institucijose ir pramonėje visame pasaulyje liudija apie daugybę jos privalumų:

ROS programavimas: pagrindiniai elementai

ROS programavimas apima jo pagrindinių komponentų ir jų sąveikos supratimą. Pagrindinės ROS kūrimo kalbos yra Python ir C++, suteikiančios kūrėjams galimybę rinktis atsižvelgiant į našumo reikalavimus ir asmeninius pageidavimus.

Mazgai (Nodes)

Kaip minėta, mazgai yra pagrindiniai skaičiavimo vienetai ROS sistemoje. Kiekvienas mazgas paprastai atlieka konkrečią užduotį, pavyzdžiui, valdo variklį, nuskaito jutiklio duomenis arba vykdo kelio planavimo algoritmą. Mazgai bendrauja vieni su kitais per pranešimus.

Pavyzdys: Mazgas gali būti atsakingas už duomenų nuskaitymą iš IMU (inercinio matavimo vieneto) jutiklio ir jų paskelbimą kaip sensor_msgs/Imu pranešimą.

Temos (Topics)

Temos yra pavadintos magistralės, leidžiančios mazgams keistis duomenimis. Mazgas, kuris generuoja duomenis (skelbėjas), siunčia pranešimus į temą, o kiti mazgai (prenumeratoriai), kurie domisi šiais duomenimis, gali gauti tuos pranešimus iš temos. Šis skelbimo-prenumeratos modelis yra pagrindinis ROS decentralizuotos prigimties elementas.

Pavyzdys: Mazgas, skelbiantis kameros vaizdus, galėtų skelbti temoje pavadinimu /camera/image_raw. Kitas mazgas, atliekantis objektų aptikimą, prenumeruotų šią temą.

Pranešimai (Messages)

Pranešimai yra duomenų struktūros, naudojamos bendravimui tarp mazgų. ROS apibrėžia standartinius pranešimų tipus įprastiems robotikos duomenims, tokiems kaip jutiklių rodmenys, pozos ir komandos. Kūrėjai taip pat gali apibrėžti pasirinktinius pranešimų tipus, kad atitiktų konkrečius programos poreikius.

Įprasti pranešimų tipai:

Paslaugos (Services)

Nors temos naudojamos nuolatiniams duomenų srautams, paslaugos naudojamos užklausos-atsakymo komunikacijai. Kliento mazgas gali iškviesti serverio mazgo teikiamą paslaugą, o serverio mazgas atliks veiksmą ir grąžins atsakymą. Paslaugos yra naudingos operacijoms, kurioms nereikia nuolatinio duomenų srauto, pavyzdžiui, roboto būsenos nustatymui iš naujo ar konkretaus skaičiavimo atlikimui.

Pavyzdys: Paslauga galėtų būti naudojama norint priversti robotą judėti į konkrečią tikslinę vietą, o paslauga grąžintų sėkmės ar nesėkmės būseną.

Veiksmai (Actions)

Veiksmai suteikia aukštesnio lygio sąsają ilgai trunkančioms užduotims su grįžtamuoju ryšiu atlikti. Jie tinka tikslams, kurių įgyvendinimas užtrunka ir reikalauja nuolatinio stebėjimo. Veiksmus sudaro tikslas, grįžtamasis ryšys ir rezultatas.

Pavyzdys: Navigacijos veiksmų serveris galėtų priimti geometry_msgs/PoseStamped tikslą, nurodantį tikslinę vietą. Tada jis teiktų nuolatinį grįžtamąjį ryšį apie roboto progresą ir grąžintų rezultatą, nurodantį, ar tikslas buvo sėkmingai pasiektas.

Kaip pradėti programuoti su ROS

Pradėti savo ROS programavimo kelionę yra jaudinantis žingsnis. Štai planas, padėsiantis jums pradėti:

1. Diegimas

Pirmas žingsnis yra įdiegti ROS savo kūrimo kompiuteryje. ROS yra stabiliausia ir plačiausiai palaikoma Ubuntu Linux sistemoje. Diegimo procesas paprastai apima:

Oficiali ROS wiki svetainė (wiki.ros.org) teikia išsamias, konkrečiai distribucijai skirtas diegimo instrukcijas įvairioms operacinėms sistemoms.

2. ROS įrankių supratimas

Susipažinkite su pagrindiniais ROS komandinės eilutės įrankiais:

3. Pirmojo ROS paketo kūrimas

ROS paketas yra pagrindinis programinės įrangos organizavimo vienetas. Išmoksite kurti paketus, kuriuose bus jūsų mazgai, scenarijai ir konfigūracijos failai.

Paketo kūrimo žingsniai:

  1. Eikite į savo ROS darbo aplinkos src katalogą.
  2. Naudokite komandą: catkin_create_pkg my_package_name roscpp rospy std_msgs (ROS 1) arba ros2 pkg create --build-type ament_cmake my_package_name (ROS 2).

Ši komanda sukuria naują katalogą su standartiniais ROS paketo failais, tokiais kaip package.xml ir CMakeLists.txt (C++) arba setup.py (Python).

4. ROS mazgų rašymas

Rašant ROS mazgus naudojamos ROS kliento bibliotekos (roscpp C++ ir rospy Python), kad būtų galima sukurti skelbėjus, prenumeratorius, paslaugų klientus/serverius ir veiksmų klientus/serverius.

Python pavyzdys (ROS 1 `rospy`): paprastas skelbėjas (Publisher)


import rospy
from std_msgs.msg import String

def talker():
    pub = rospy.Publisher('chatter', String, queue_size=10)
    rospy.init_node('talker', anonymous=True)
    rate = rospy.Rate(1) # 1hz
    while not rospy.is_shutdown():
        hello_str = "hello world %s" % rospy.get_time()
        rospy.loginfo(hello_str)
        pub.publish(hello_str)
        rate.sleep()

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass

C++ pavyzdys (ROS 1 `roscpp`): paprastas skelbėjas (Publisher)


#include "ros/ros.h"
#include "std_msgs/String.h"

int main(int argc, char **argv)
{
  ros::init(argc, argv, "talker");
  ros::NodeHandle nh;
  ros::Publisher chatter_pub = nh.advertise("chatter", 1000);
  ros::Rate loop_rate(1);

  while (ros::ok())
  {
    std_msgs::String msg;
    msg.data = "Hello World";
    chatter_pub.publish(msg);
    
    ros::spinOnce();

    loop_rate.sleep();
  }

  return 0;
}

5. Darbo aplinkos kompiliavimas

Sukūrus ar modifikavus ROS paketus, reikia kompiliuoti savo darbo aplinką naudojant catkin_make (ROS 1) arba colcon build (ROS 2). Šis procesas sukuria jūsų C++ mazgus ir padaro jūsų Python scenarijus atpažįstamus ROS sistemai.

ROS 1:


cd ~/catkin_ws # Arba jūsų darbo aplinkos katalogas
catkin_make
source devel/setup.bash

ROS 2:


cd ~/ros2_ws # Arba jūsų darbo aplinkos katalogas
colcon build
source install/setup.bash

Pažangios ROS koncepcijos ir pritaikymas

Kai įgysite pagrindų supratimą, galėsite tyrinėti pažangesnes ROS koncepcijas ir pritaikymus:

ROS navigacijos rinkinys (Navigation Stack)

ROS navigacijos rinkinys yra galingas įrankių rinkinys, leidžiantis mobiliems robotams autonomiškai naršyti savo aplinkoje. Jis atlieka tokias užduotis kaip:

Šis rinkinys yra labai svarbus tokioms programoms kaip autonominiai sandėlių robotai, pristatymo dronai ir paslaugų robotai, veikiantys įvairiose aplinkose.

ROS manipuliavimas

Robotams su rankomis ar griebtuvais ROS teikia bibliotekas ir įrankius manipuliavimui. Tai apima:

Šios galimybės yra būtinos pramoninei automatizacijai, robotinei chirurgijai ir surinkimo užduotims.

ROS suvokimui (Perception)

Suvokimas yra modernios robotikos pagrindas, leidžiantis robotams suprasti savo aplinką. ROS sklandžiai integruojasi su daugybe kompiuterinės regos ir jutiklių apdorojimo bibliotekų:

Šie įrankiai yra gyvybiškai svarbūs robotams, veikiantiems dinamiškose ir nestruktūrizuotose aplinkose, pavyzdžiui, autonominėms transporto priemonėms ir inspekcijos dronams.

ROS ir DI/ML integracija

ROS ir dirbtinio intelekto / mašininio mokymosi sinergija iš esmės keičia robotiką. ROS veikia kaip ideali platforma ML modeliams diegti ir testuoti:

ROS 2: naujoji karta

ROS 2 yra reikšminga pradinės ROS sistemos evoliucija, sprendžianti apribojimus ir įtraukianti naujas funkcijas šiuolaikiniam robotikos vystymui:

Bręstant robotikos kraštovaizdžiui, suprasti tiek ROS 1, tiek ROS 2 tampa vis svarbiau.

Pasaulinis ROS poveikis ir pritaikymas

ROS įtaka tęsiasi visame pasaulyje, skatindama inovacijas įvairiuose sektoriuose:

Iššūkiai ir geriausios praktikos ROS programavime

Nors ROS yra galinga sistema, efektyviam kūrimui reikia atsižvelgti į tam tikrus iššūkius ir laikytis geriausių praktikų:

Iššūkiai

Geriausios praktikos

ROS programavimo ateitis

ROS evoliucija yra glaudžiai susijusi su robotikos ir DI pažanga. Augant išmaniųjų, autonominių sistemų paklausai, ROS ir toliau bus gyvybiškai svarbi sistema. Ateities pokyčiai greičiausiai bus sutelkti į:

Išvados

Robotų operacinės sistemos (ROS) programavimas yra pagrindinis įgūdis kiekvienam, siekiančiam kurti modernias robotų sistemas. Jos lanksti architektūra, plačios bibliotekos ir gyvybinga pasaulinė bendruomenė daro ją neprilygstamu įrankiu inovacijoms. Suprasdami jos pagrindinius principus, įvaldydami jos įrankius ir laikydamiesi geriausių praktikų, galite atskleisti ROS potencialą kurti išmanius robotus, kurie formuos pramonės šakas ir gerins gyvenimus visame pasaulyje. Nesvarbu, ar dirbate su autonominėmis transporto priemonėmis Kalifornijoje, pramonine automatizacija Japonijoje, ar moksliniais tyrimais Europoje, ROS suteikia bendrą kalbą ir įrankių rinkinį, skatinantį robotikos progresą.