Upload
others
View
6
Download
0
Embed Size (px)
Citation preview
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROS ülevaade, roboti juhtimineROS koolitus õpetajatele
(LTTI.TK.003)
Veiko VunderJuuni 2019
Männiku Metsatalu
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Millest oli juttu eile?Linux, käsurida, ROS ja geometry_msgs/Twist sõnumitüüp
2
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Tänased teemad
• 09:00 - 10:00 ROS ülevaade? Võimalused ja failisüsteem• 10:00 - 10:15 Kohvipaus• 10:15 - 11:00 ROS programmide käivitamine ja tähtsamad sõlmed• 11-00 - 12:00 Roboti sensorinfo kuvamine• 12:00 - 13:00 Lõuna• 13:00 - 14:15 Roboti programmeerimine: ülesanded simulaatoril• 14:15 - 14:30 Kohvipaus• 14:30 - 16:00 Roboti programmeerimine: ülesanded robotil• 19:00 - ... Õhtusöök
3
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROS: võimalused ja failisüsteem
4
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Mis on ROS?
• Tarkvararaamistik ja töövahendid robotite programmeerimiseks• Palju pisikesi programme, mis omavahel suhtlevad• ROSi abil loodud programmid saab üle kanda teistele robotitele• Ettevõtlussõbralikud tarkvaralitsentsid• Avatud platform teadlastele ja õpilastele programmide jagamiseks• Kogukond (kogu maailm kasutab ROSi)
5
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROS ajalugu lühidalt
• Välja kasvanud 00’ndatel Stanfordi Ülikoolist
• Ametlik algus 2007, Willow Garage
• Open Source Robotics Foundation (OSRF)
6
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROS ja kilpkonnad?
7
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROS Industrial
• Sai alguse 2012• Yaskawa• SWRI• Willow Garage
• Fokuseeritud tehnilised projektid• Kuni 2 aastat ainult liikmetele• Esindatud kolmes piirkonnas:
• ROS Industrial Americas• ROS Industrial Europe• ROS Industrial Asia - Pacific
8
Saad vastu
FTP
Maksad
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROS Industrial
9
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROSi põhiterminid
10
Tuum (roscore) – alati taustal, viib sõlmi omavahel kokku
Sõlm (node) – konkreetsele ülesandele pühendatud programm
Sõnum (message) – “muutujatüüp” ehk infokild
Rubriik (topic) – sõne, mis annab sõnumivoole tähenduse
Kuulutaja (publisher) – kuulutab sõnumeid kindlas rubriigis
Tellija (subscriber) – jälgib sõnumeid kindlas rubriigis
Kimp (package) - funktsionaalne kogum sõlmi
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Näide ROSi infovahetusest
11
ROS Tuum
Kaamera sõlm
Pilditöötlus-sõlm
Pildi kuvamise
sõlm
Registreerib
/Pilt
Registreerib
Registreerib
Kuulutab Tellib Tellib
/Pilt
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROS kimbudhttp://wiki.ros.org/Packages
ROS kimp võib sisaldada• ROS sõlmi,• ROSist sõltumatut teeki,• andmekogu,• seadistusfaile,• kolmanda osapoole programme,• kõike muud, mis moodustab loogilise osa.
ROS kimp peaks järgima põhimõtet:peaks sisaldama piisavalt funktsionaalsust, et olla kasulik, aga mitte liiga kohmakas, et oleks keeruline kasutada teistes programmides.
12
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe 13
~/catkin_ws/src/
kimp_1/ kimp_2/
scripts/
launch/
... scripts/
launch/
... kimp_3/
...
kimbud_kaustas/
kimp_4/
...
Kimpude struktuur visuaalselt
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROS kimbudhttp://wiki.ros.org/Packages
Mõned näited kaustadest ja failidest, mida veel ROS kimbus kohtab
•launch/: Kaust kiirkäitusfailide jaoks
•scripts/: Kaust pythoni ja teiste skriptide jaoks
•src/: Kaust C++ lähtekoodiga failide jaoks
•include/: C++ päised
•msg/: Kaust isetehtud sõnumitüüpide jaoks
•srv/: Kaust teenusefailidega
•CMakeLists.txt: Fail, mis kirjeldab, kuidas kimp paigaldatakse
•package.xml: Fail ROS kimbu kirjeldusega
14
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Näide: kimbud repositooriumis
15
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROS: Sõlmede käivitamine ja tähtsamad tööriistad
16
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROSi kimpude ja sõlmede kasutamine
rosrun - ühe ROSi sõlme käitamine, roscore peab juba taustal töötama
$ rosrun kimbu_nimi sõlme_nimi$ rosrun ros_koolitus move.py
roslaunch - mitme ROSi sõlme käivitamine, vajalik käivitusfail
$ roslaunch kimbu_nimi käivitusfail$ roslaunch robotont_teleop teleop_bare.launch
17
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
rosrun ja roslaunch näide
18
ROS Tuum
Kaamera sõlm
Pilditöötlus-sõlm
Pildi kuvamise
sõlm
/Pilt /Pilt
roslaunch
rosrun
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe 19
RViz
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Gazebo
20
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe 21
rqt_graph
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe 22
rqt
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Veel kasulikke tööriistu ROSis
● rosnode - info sõlmede kohta$ rosnode list$ rosnode info /sõlme_nimi
● rostopic - info rubriikide kohta$ rostopic list$ rostopic info /rubriigi_nimi$ rostopic echo /rubriigi_nimi
● rossrv, rosmsg, rosparam
● roscd, rosed, rospack, rosbag
23
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROS: Sensorinfo kuvamine
24
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe 25
$ roslaunch robotont_teleop teleop_with_laserscan.launch
Kauguse mõõtmine Clearbotiga
$ rostopic echo /scan_to_distance
1) 2)
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Robotite simuleerimineGazebo
26
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Miks kasutada simulatsioone?
1) Ajakulu vähendamine
Nt: saab kiiresti katsetada eri lahendusi
2) Rahakulu vähendamine
Nt: robot ei lähe päriselt katki
3) Teisiti ei saagi
Nt: soovime robotit testida mõne teise planeedi pinnal
27
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Gazebo
28
Robotimudel
Maailma mudel
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROS roboti programmeerimine:hoiame kindlat kaugust/suunda tuvastatud objektist
hoiame kindlat kaugust/suunda AR markerist
29
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROS + Simulatsioon
30
/cmd_velrubriik Sinu programm kuulutab
Twist-sõnumeid, et robotsõidaks otse!
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROSi sõnumidgeometry_msgs/Twist
from geometry_msgs.msg import Twist
vel_msg = Twist()
vel_msg.linear.x = 0
vel_msg.linear.y = 0
vel_msg.linear.z = 0
vel_msg.angular.x = 0
vel_msg.angular.y = 0
vel_msg.angular.z = 0
31
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROSi sõnumidgeometry_msgs/Twist
from geometry_msgs.msg import Twist
vel_msg = Twist()
vel_msg.linear.x = 0
vel_msg.linear.y = 0
vel_msg.linear.z = 0
vel_msg.angular.x = 0
vel_msg.angular.y = 0
vel_msg.angular.z = 0
32
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROS-sõnumi kuulutaminegeometry_msgs/Twist
from geometry_msgs.msg import Twist
vel_msg = Twist()
vel_msg.linear.x = 0
vel_msg.linear.y = 0
vel_msg.angular.z = 0
velocity_publisher.publish(vel_msg)
rospy.sleep(0.1)
33
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
ROS-sõnumi kuulutamine
Proovime järele!
• näiteülesanne simulaatoris• ülesanded simulaatoris• ülesanded robotil
34
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
For-tsükkelselleks, et teha mitu korda
for i in range(0,30):
vel_msg.linear.x = 0.2
vel_msg.linear.y = 0
vel_msg.angular.z = 0
velocity_publisher.publish(vel_msg)
rospy.sleep(0.1)
35
Proovime järele
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Funktsioonselleks, et sama asja uuesti kasutada
def mineOtseKolmSekundit():
for i in range(0,30):
vel_msg.linear.x = 0.2
vel_msg.linear.y = 0
vel_msg.angular.z = 0
velocity_publisher.publish(vel_msg)
rospy.sleep(0.1)
36
Proovime järele
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Funktsioon ja tsükkel
def otseEdasi(kestus, kiirus):
for i in range(0, kestus):
vel_msg.linear.x = kiirus
vel_msg.linear.y = 0
vel_msg.angular.z = 0
velocity_publisher.publish(vel_msg)
rospy.sleep(0.1)
37
Proovime järele
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Robot tegutsema!Algoritmid ja andurid
38
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Algoritmid robootikassõidame nelinurka
39
Robot sõidab otse 5 sekundit Robot jääb seisma Robot keerab
paremale 90 kraadi
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Algoritmid robootikas
40
Robot sõidab otse 5 sekundit Robot jääb seisma Robot keerab
paremale 90 kraadi
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Algoritmid robootikas
41
Robot sõidab otse 5 sekundit Robot jääb seisma Robot keerab
paremale 90 kraadi
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Algoritmid robootikas
42
Robot sõidab otse 5 sekundit Robot jääb seisma Robot keerab
paremale 90 kraadi
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Kontrolleret juhtida andurinäidu järgi
Bang-bang kontroller
• Liiga külm? Hakka soojendama!• Liiga palav? Hakka jahutama!
• Liiga lähedal? Mine kaugemale!• Liiga kaugel? Mine lähemale!
• Siht on vasakul? Mine vasakule!• Siht on paremal? Mine paremale!
43
Mõtestamineja
otsustamine
Tegevus
Taju
Tegevus
Bang-bang kontroller
(otsustamine)Taju
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Kaugusandur
44
# kaugus takistusest vasakus sektoris
distances.leftMin
# kaugus takistusest keskel
distances.centerMin
# kaugus takistuses paremas sektoris
distances.rightMin
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Tingimuslauseet võrrelda ja otsustada
if distances.centerMin < 0.3:
driveBackwards()
else:
stopRobot()
45
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Tingimuslauseet võrrelda ja otsustada
while (True):
if distances.centerMin < 0.3:
driveBackwards()
else:
stopRobot()
46
Copyright 2019, Litsents CC BY-ND-NC, Madis Kaspar Nigol, Veiko Vunder, Renno Raudmäe, Karl Kruusamäe
Tingimuslauseet võrrelda ja otsustada
while (True):
if distances.centerMin < 0.3:
driveBackwards()
elif distances.leftMin > 5:
driveDiagnonallyLeft()
else:
stopRobot()
47