ROS ફ્રેમ્સ વિહંગાવલોકન – Gujarati ROS Tutorial

Written by Sonia

26/02/2024

This tutorial is created by Rosbotics Ambassador 024 Harsh

Rosbotics Ambassador Program https://www.theconstruct.ai/rosbotics-ambassador/)

આપણે શું શીખવા જઈ રહ્યા છીએ

  1. ગાણિતિક રીતે ROS ફ્રેમ્સ શું છે
  2. સિસ્ટમો મહત્વ અને જરૂરિયાત સંકલન
  3. બહુવિધ ફ્રેમ્સ સાથે કેવી રીતે કામ કરવું
  4. /world, /map અને /odom ફ્રેમ્સ શું છે
  5. આરઓએસ ફ્રેમ્સ સાથે મૂળભૂત કામગીરી

 

આ પોસ્ટમાં ઉપયોગમાં લેવાતા સંસાધનોની સૂચિ

  1. સૈદ્ધાંતિક સંદર્ભો:
  1. ROS2 અભ્યાસક્રમો –▸
    1. ROS2 Navigation:  https://app.theconstructsim.com/courses/148
    2. TF ROS2: https://app.theconstructsim.com/courses/217

ઝાંખી

ડી ફેક્ટો સ્ટાન્ડર્ડ “ફ્રેમવર્ક” બની રહ્યું છે . ROS2 માં ROS ફ્રેમ્સ દરેક જગ્યાએ છે અને તે શું છે અને તેનો ઉપયોગ કેવી રીતે કરવો તે સમજવું ખૂબ જ મહત્વપૂર્ણ છે.

 

સંકલન પ્રણાલીઓ અને તેનું મહત્વ

ROS ફ્રેમ્સને ગાણિતિક સંદર્ભમાં કોઓર્ડિનેટ સિસ્ટમ્સ કહેવામાં આવે છે. કોઈપણ ગાણિતિક સમસ્યામાં જ્યાં આપણને રુચિના બહુવિધ ભૌમિતિક પદાર્થોની સ્થિતિ અથવા અભિગમને ઓળખવાની જરૂર હોય, ત્યારે આપણે સંદર્ભ પ્રણાલીને વ્યાખ્યાયિત કરવાની જરૂર છે. વિવિધ પરિમાણો અને ઉપયોગ-કેસો માટે રચાયેલ વિવિધ પ્રમાણભૂત સંકલન પ્રણાલીઓ છે જે જટિલ ગણતરીઓને સરળ બનાવવા અને બહુપરીમાણીય સિસ્ટમોને સમજવા, ડિઝાઇન કરવા અને તેનું પ્રતિનિધિત્વ કરવાનું અમારા માટે સરળ બનાવવા માટે ઘણી એપ્લિકેશનોમાં વ્યાપકપણે ઉપયોગમાં લેવાય છે. સામાન્ય અર્થમાં, સંકલન પ્રણાલીઓમાં બહુવિધ સ્વતંત્ર રેખીય સંદર્ભોનો સમાવેશ થાય છે જે સમાનરૂપે નાના એકમોમાં વિભાજિત થાય છે. આ અમારા માટે દરેક પરિમાણ સાથે સિસ્ટમમાં ઑબ્જેક્ટ્સ માટે સંભવિત સ્થિતિઓને અલગ પાડવાનું અને તેનું પ્રતિનિધિત્વ કરવાનું સરળ બનાવે છે.

સંકલન પ્રણાલીના કેટલાક ઉદાહરણો ઉપર આપવામાં આવ્યા છે. સંદર્ભ તરીકે કોઓર્ડિનેટ સિસ્ટમનો ઉપયોગ કરીને અને કોઓર્ડિનેટ ભૂમિતિમાંથી ઉપલબ્ધ સાધનોનો ઉપયોગ કરીને, વાસ્તવિક સમયના સચોટ સિમ્યુલેશન, મોડેલિંગ અને નેવિગેશન જેવી જટિલ ગણતરીઓ વિકસાવવી સરળ બની છે.

બહુવિધ સંકલન પ્રણાલીઓની જરૂર છે

હવે જ્યારે આપણે કોઓર્ડિનેટ સિસ્ટમ્સ સમજીએ છીએ, ત્યારે આપણે સમજવાની જરૂર છે કે શા માટે આપણને કોઈપણ એપ્લિકેશનમાં બહુવિધ કોઓર્ડિનેટ સિસ્ટમ્સની જરૂર પડશે? શા માટે માત્ર એક જ સંકલન પ્રણાલી સાથે કામ ન કરવું?

 

સૌથી સરળ જવાબ એ છે કે બ્રહ્માંડ ખરેખર એક વિશાળ પર્યાવરણ છે, અને અમે કોઈપણ એપ્લિકેશન માટે ક્યારેય એક એકીકૃત સંકલન પ્રણાલીને વ્યાખ્યાયિત કરી શકીશું નહીં. સંકલન પ્રણાલીનો ઉપયોગ કરવાનો મુખ્ય મુદ્દો એ છે કે મૂળ અને અક્ષ ક્યાં હશે તે પસંદ કરવાની ક્ષમતા. વિવિધ એપ્લિકેશનો માટે સમાન સિસ્ટમમાં વિવિધ સંકલન સિસ્ટમો હોઈ શકે છે. સિસ્ટમમાં સબસિસ્ટમ્સ પણ હોઈ શકે છે જેની પોતાની કોઓર્ડિનેટ સિસ્ટમ હોય છે. સિસ્ટમની અંદર સમગ્ર સબસિસ્ટમ વંશવેલો હોઈ શકે છે. ઓટોમોબાઈલ ડિઝાઇન, રોબોટિક્સ મેનીપ્યુલેશન અથવા તો ગેમિંગ સિસ્ટમ્સ જેવી ખૂબ જ જટિલ એપ્લિકેશનો માટે, તે અમને સમગ્ર સિસ્ટમને નાના ઘટકોમાં વિભાજીત કરવાની અને સંબંધિત કાર્યોને સરળ વિગતવાર રીતે કરવાની ક્ષમતા આપે છે જેથી તેના આધારે વર્કફ્લોને વિભાજિત કરવાનું સરળ બને. ઘટકો, તેમને જાળવી રાખે છે અને તેમના રાજ્યોને નિયંત્રિત પણ કરે છે.

ઘણી બધી ફ્રેમ્સ! હું તેમની સાથે કેવી રીતે કામ કરી શકું?

હવે આપણને બહુવિધ કોઓર્ડિનેટ ફ્રેમ્સની જરૂરિયાતનો ખ્યાલ છે, આપણે આ બધી વિવિધ કોઓર્ડિનેટ ફ્રેમ્સ સાથે કેવી રીતે કામ કરીશું. બીજાના સંદર્ભમાં સંકલન ફ્રેમનું પ્રતિનિધિત્વ કરવા માટે આપણને અન્ય સંબંધમાં ફ્રેમની સંબંધિત સ્થિતિ અને અભિગમની જરૂર છે. આ બંનેને સમાવિષ્ટ કરવાથી આપણે જેને રૂપાંતર કહીએ છીએ તે મેળવીએ છીએ.

 

ગાણિતિક રીતે રૂપાંતરણને રજૂ કરવા અથવા તેનો ઉપયોગ કરવાની વિવિધ રીતો છે. સ્ટાન્ડર્ડ એ વર્લ્ડ કોઓર્ડિનેટ ફ્રેમને વ્યાખ્યાયિત કરવાનું છે અને દરેક કોઓર્ડિનેટ ફ્રેમના રૂપાંતરણોને સંગ્રહિત કરવાનું છે જેનો આપણે વિશ્વ ફ્રેમ અનુસાર ઉપયોગ કરવાની જરૂર છે. જટિલ સિસ્ટમોને સરળ બનાવવા માટે, અમે આ સબસિસ્ટમ્સની વંશવેલો બનાવીએ છીએ જ્યાં અમે પેરેંટ ફ્રેમના સંદર્ભમાં ચાઇલ્ડ ફ્રેમના ટ્રાન્સફોર્મને સંગ્રહિત કરીએ છીએ જેથી માતાપિતાની સ્થિતિ બદલાય તો સંદર્ભ સાથે કામ કરવું અને વિશ્વના સંદર્ભમાં ઑબ્જેક્ટનું સ્થાનિકીકરણ કરવું વધુ સરળ છે.

/world, /map અને /odom ફ્રેમ્સ શું છે?

તમે ઉપર જે જુઓ છો તે પ્રમાણભૂત ROS નેવિગેશન સ્ટેકના ઘટકો છે. મેપિંગ, સ્થાનિકીકરણ અને ઓડોમેટ્રી એ એવા ઘટકો છે જે આપણને એ સમજવામાં મદદ કરે છે કે રોબોટ વિશ્વમાં ક્યાં છે.

 

અહીં સિમ્યુલેટેડ રોબોટનું TF વૃક્ષ છે. રોબોટના આધારની ફ્રેમ “/base_link” છે. ઉલ્લેખ કર્યો છે તેમ, ફ્રેમનો વંશવેલો ક્રમ /world, /map, /odom અને /base_link છે. આ ત્રણ એવી કેટલીક ફ્રેમ્સ છે જે ફ્રેમ્સ હાયરાર્કી (ROS TF TREE) માં હાજર રહેવાની અપેક્ષા છે.

/ વર્લ્ડ ફ્રેમ સુપર પેરેન્ટ છે, જે TF વૃક્ષના મૂળમાં સ્થિત છે. અમે જે અન્ય ફ્રેમ પર કામ કરીએ છીએ તે બાળકો અથવા વિશ્વના દૂરના બાળકો છે.

/ મેપ ફ્રેમ નકશા સર્વર દ્વારા બનાવવામાં આવે છે જે પર્યાવરણની સંકલન પ્રણાલીને વ્યાખ્યાયિત કરે છે જ્યાં રોબોટ ખસેડી શકે છે. વિશ્વ ફ્રેમના સંદર્ભમાં આ એક સ્થિર સંકલન ફ્રેમ છે. આ ફ્રેમ “નકશા_સર્વર” દ્વારા લોડ કરવામાં આવી છે. આ ફ્રેમની ઉત્પત્તિ મેપિંગની પ્રક્રિયા પર આધારિત છે.

/odom ફ્રેમ એ ફ્રેમ છે જ્યાં રોબોટ તેની નેવિગેશન ફ્રેમ શરૂ કરે છે. નકશાથી ઓડોમ ટ્રાન્સફોર્મની ગણતરી કરવાની પ્રક્રિયાને સ્થાનિકીકરણ કહેવામાં આવે છે. ઓડોમ થી બેઝ_લિંક ટ્રાન્સફોર્મની ગણતરી કરવાની પ્રક્રિયાને ઓડોમેટ્રી કહેવામાં આવે છે.

ઓડોમેટ્રી અને સ્થાનિકીકરણ માટે વિવિધ પ્લગઇન્સ અને અલ્ગોરિધમ્સ ઉપલબ્ધ છે. નેવિગેશન કોર્સમાં વિગતવાર માહિતી ઉપલબ્ધ છે.

 

tf સાથે મૂળભૂત કામગીરી

ROS2 માંથી ઉપલબ્ધ સાધનોનો ઉપયોગ કરીને tf સાથે કરવા માટે અહીં કેટલીક મૂળભૂત કામગીરી છે. આ વિભાગ ધારે છે કે તમારી પાસે સાધનો સાથે સુલભ પ્લેટફોર્મ સેટઅપ છે. વધુ વિગતો માટે ROS2 tf કોર્સનો સંદર્ભ લો.

  1. પીડીએફ ફોર્મેટમાં ફ્રેમ જુઓ

ફ્રેમ્સ જોવા માટે , ROS2 નોડ સિસ્ટમના વર્તમાન TF ટ્રી સાથે ડાયાગ્રામ બનાવે છે.

નીચેનો આદેશ ડિરેક્ટરીમાં પીડીએફ ફાઇલ બનાવે છે જ્યાં તે ચલાવવામાં આવે છે:

ros2 run tf2_tools view_frames

ઉદાહરણ આઉટપુટ:
[INFO] [1674639098.682075534] [view_frames]: Listening to tf data for 5.0 seconds...
[INFO] [1674639103.684365772] [view_frames]: Generating graph in frames.pdf file...
[INFO] [1674639103.687394108] [view_frames]: Result:tf2_msgs.srv.FrameGraph_Response(frame_yaml="turtle_base_link: \n parent: 'odom'\n broadcaster: 'default_authority'\n rate: 100.206\n most_recent_transform: 315.002000\n oldest_transform: 310.142000\n buffer_length: 4.860\nodom: \n parent: 'world'\n broadcaster: 'default_authority'\n rate: 10000.000\n most_recent_transform: 0.000000\n oldest_transform: 0.000000\n buffer_length: 0.000\nturtle_attach_frame: \n parent: 'turtle_chassis'\n broadcaster: 'default_authority'\n rate: 10000.000\n most_recent_transform: 0.000000\n oldest_transform: 0.000000\n buffer_length: 0.000\nturtle_chassis: \n parent: 'turtle_base_link'\n broadcaster: 'default_authority'\n rate: 10000.000\n most_recent_transform: 0.000000\n oldest_transform: 0.000000\n buffer_length: 0.000\nback_pitch_link: \n parent: 'back_roll_link'\n broadcaster: 'default_authority'\n rate: 19.263\n most_recent_transform: 314.972000\n oldest_transform: 310.144000\n buffer_length: 4.828\nback_roll_link: \n parent: 'back_yaw_link'\n broadcaster: 'default_authority'\n rate: 19.263\n most_recent_transform: 314.972000\n oldest_transform: 310.144000\n buffer_length: 4.828\nback_yaw_link: \n parent: 'turtle_chassis'\n broadcaster: 'default_authority'\n rate: 19.263\n most_recent_transform: 314.972000\n oldest_transform: 310.144000\n buffer_length: 4.828\nfront_pitch_link: \n parent: 'front_roll_link'\n broadcaster: 'default_authority'\n rate: 19.263\n most_recent_transform: 314.972000\n oldest_transform: 310.144000\n buffer_length: 4.828\nfront_roll_link: \n parent: 'front_yaw_link'\n broadcaster: 'default_authority'\n rate: 19.263\n most_recent_transform: 314.972000\n oldest_transform: 310.144000\n buffer_length: 4.828\nfront_yaw_link: \n parent: 'turtle_chassis'\n broadcaster: 'default_authority'\n rate: 19.263\n most_recent_transform: 314.972000\n oldest_transform: 310.144000\n buffer_length: 4.828\nleft_wheel: \n parent: 'turtle_chassis'\n broadcaster: 'default_authority'\n rate: 19.263\n most_recent_transform: 314.972000\n oldest_transform: 310.144000\n buffer_length: 4.828\nright_wheel: \n parent: 'turtle_chassis'\n broadcaster: 'default_authority'\n rate: 19.263\n most_recent_transform: 314.972000\n oldest_transform: 310.144000\n buffer_length: 4.828\nchassis: \n parent: 'camera_bot_base_link'\n broadcaster: 'default_authority'\n rate: 10000.000\n most_recent_transform: 0.000000\n oldest_transform: 0.000000\n buffer_length: 0.000\ncamera_bot_base_link: \n parent: 'world'\n broadcaster: 'default_authority'\n rate: 20.273\n most_recent_transform: 314.922000\n oldest_transform: 310.088000\n buffer_length: 4.834\nrgb_camera_link_frame: \n parent: 'chassis'\n broadcaster: 'default_authority'\n rate: 10000.000\n most_recent_transform: 0.000000\n oldest_transform: 0.000000\n buffer_length: 0.000\n")

તમારી પાસે હવે ફ્રેમ્સ_XXXXXX.pdf નામની PDF ફાઇલ હોવી જોઈએ જેમાં વર્તમાન TF ટ્રી છે જે હાલમાં સિસ્ટમમાં બ્રોડકાસ્ટ થઈ રહ્યું છે, જ્યાં XXX એ તારીખ છે જ્યારે ફાઇલ જનરેટ કરવામાં આવી હતી.

ઉદાહરણ પીડીએફ:

  1. rqt_tf_tree નો ઉપયોગ કરીને TF ફ્રેમ્સ જુઓ

rqt_tf_tree એ view_frames જેવી જ કાર્યક્ષમતા આપે છે , પરંતુ તમે દર વખતે બીજી PDF ફાઈલ જનરેટ કર્યા વિના તાજું કરી શકો છો અને ફેરફારો જોઈ શકો છો .  નવા TF બ્રોડકાસ્ટનું પરીક્ષણ કરતી વખતે અને તમે જે ઉપયોગ કરી રહ્યાં છો તે હજુ પણ પ્રકાશિત થયેલ છે અથવા જો તે જૂનું પ્રકાશન છે કે કેમ તે તપાસતી વખતે આ ઉપયોગી છે.

ros2 run rqt_tf_tree rqt_tf_tree

ઉદાહરણ આઉટપુટ:

 

હવે, આ TF સ્થિર નથી, પરંતુ TF વૃક્ષની વર્તમાન સ્થિતિ દર્શાવવા માટે તેને તાજું કરી શકાય છે. જ્યારે પણ તમે નવીનતમ અપડેટ ઇચ્છો ત્યારે રિફ્રેશ બટન દબાવો.

 

  1. tf_echo નો ઉપયોગ કરીને ટર્મિનલમાં TF ફ્રેમ્સ જુઓ

નીચે, આરઓએસ રૂપાંતરણોને સંચાર કરવા માટે વિષયોનો ઉપયોગ કરે છે. પરિણામે, તમે વિષયો દ્વારા આ તમામ કાચો ડેટા જોઈ શકો છો. ત્યાં /tf નામનો વિષય છે અને અન્ય નામનો /tf_static છે, જ્યાં તમામ TF પ્રકાશિત થાય છે. એકમાત્ર સમસ્યા એ છે કે તમામ ફ્રેમ્સ ત્યાં પ્રકાશિત થાય છે. ત્યાં એક સરળ કમાન્ડ લાઇન ટૂલ છે જે ફિલ્ટર કરે છે કે જે પરિવર્તનમાં તમને રસ છે અને તમને તે બતાવે છે. અથવા, વધુ અગત્યનું, તે બે કનેક્ટેડ ફ્રેમ્સ વચ્ચેના પરોક્ષ રૂપાંતરણની ગણતરી કરે છે, પરંતુ સીધી રીતે નહીં. આ ઉપયોગી છે અને ઘણી એપ્લિકેશનો માટે વપરાય છે. /tf વિષય ફક્ત ડાયરેક્ટ TF પ્રકાશિત કરે છે, બધી ફ્રેમ્સ વચ્ચેના તમામ રૂપાંતરણોને નહીં. tf_echo તમને કોઈપણ કનેક્ટેડ ફ્રેમ્સ વચ્ચેના રૂપાંતરણ પરત કરે છે.

/tf વિષયનું એક પ્રકાશન સીધું જોવા માટે નીચેનો આદેશ ચલાવો:

ros2 topic echo /tf

અમે મોટા ભાગના કિસ્સાઓમાં ફ્રેમ્સ વચ્ચેના પરિવર્તન વિશે જાણવામાં રસ ધરાવીએ છીએ, ઉદાહરણ તરીકે રોબોટનું સ્થાન શું છે તે જાણવું અથવા તેના માતાપિતાના સંદર્ભમાં રોબોટના હાથની લિંક્સમાંથી કોઈ એકનું ઓરિએન્ટેશન/પોઝિશન શું છે. આનો અર્થ એ છે કે તમે reference_frame થી  target_frameમાં અનુવાદ અને પરિભ્રમણ જાણવા માગો છો . tf2_echo આદેશ નીચેની સામાન્ય રચના સાથે ચલાવવાનો છે:

ros2 run tf2_ros tf2_echo [reference_frame] [target_frame]

ઉદાહરણ આઉટપુટ:

સંદર્ભોમાં વધુ વિગતવાર સમજૂતી ઉપલબ્ધ છે.

સંબંધિત અભ્યાસક્રમો અને તાલીમ

જો તમે ROS અને ROS2 વિશે વધુ જાણવા માંગતા હો, તો અમે નીચેના અભ્યાસક્રમોની ભલામણ કરીએ છીએ:

 

Video Tutorial

 

Topics: ROS
Masterclass 2023 batch2 blog banner

Check Out These Related Posts

129. ros2ai

129. ros2ai

I would like to dedicate this episode to all the ROS Developers who believe that ChatGPT or...

read more

0 Comments

Submit a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Pin It on Pinterest

Share This