VEX AI റോബോട്ടിനെ കോഡ് ചെയ്യുന്നു

VEXlink ഉപയോഗിച്ച് റോബോട്ടും റോബോട്ടും തമ്മിലുള്ള ആശയവിനിമയത്തിന്റെ സ്റ്റാറ്റസും ജെറ്റ്‌സണിലേക്ക് സ്റ്റാറ്റസും റിപ്പോർട്ട് ചെയ്യുന്ന ഒരു ഡാഷ്‌ബോർഡ് പ്രദർശിപ്പിക്കുന്ന ഒരു ഉദാഹരണ പ്രോജക്റ്റ് ഈ ലേഖനത്തിൽ ഉൾപ്പെടുത്തും. ai_demo പ്രോജക്റ്റ് ഞങ്ങളുടെ Githubൽ ഹോസ്റ്റ് ചെയ്‌തിരിക്കുന്നു. ഈ ഡെമോ പ്രോജക്റ്റ് ജെറ്റ്സൺ പ്രോസസറിൽ നിന്ന് യുഎസ്ബി സീരിയൽ കണക്ഷൻ വഴി ഡാറ്റ ശേഖരിക്കുന്നു. ഡാറ്റ ലഭിച്ചുകഴിഞ്ഞാൽ അത് V5 ബ്രെയിനിന്റെ സ്ക്രീനിൽ പ്രദർശിപ്പിക്കുകയും VEXlink വഴി ബന്ധിപ്പിച്ചിരിക്കുന്ന ഒരു പങ്കാളി V5 റോബോട്ടിലേക്ക് കൈമാറുകയും ചെയ്യുന്നു.

കുറിപ്പ്: ഈ പ്രോജക്റ്റിന് V5-നുള്ള VS കോഡ് എക്സ്റ്റൻഷന്റെ ഏറ്റവും പുതിയ പതിപ്പ് ആവശ്യമാണ്. V5 നുള്ള VS കോഡ് എക്സ്റ്റൻഷൻ ഇവിടെ നിന്ന് ഡൗൺലോഡ് ചെയ്യുക.


എൻവിഡിയ ജെറ്റ്സൺ നാനോ മുതൽ VEX V5 ബ്രെയിൻ കമ്മ്യൂണിക്കേഷൻസ് വരെ

VEX AI സോഫ്റ്റ്‌വെയറിൽ നിന്ന് ഇനിപ്പറയുന്ന ഡാറ്റ ശേഖരിക്കുന്ന ഒരു ആപ്ലിക്കേഷൻ ജെറ്റ്സൺ പ്രോസസറിൽ അടങ്ങിയിരിക്കുന്നു:

ലൊക്കേഷൻ ട്രാക്കിംഗിനായി റോബോട്ട് സ്ഥാനം, ഓറിയന്റേഷൻ, കോർഡിനേറ്റ് അക്ഷങ്ങൾ എന്നിവ കാണിക്കുന്ന രണ്ട് ഫീൽഡ് ഡയഗ്രമുകൾ.

റോബോട്ട് ലൊക്കേഷൻ ഡാറ്റ:

  • വയലിന്റെ മധ്യത്തിൽ നിന്ന് മീറ്ററുകളിൽ, റോബോട്ടിന്റെ X, Y സ്ഥാനം.
  • റോബോട്ടിന്റെ അസിമുത്ത് (ഹെഡിംഗ്), എലവേഷൻ (പിച്ച്), റൊട്ടേഷൻ (റോൾ) എന്നിവയെല്ലാം റേഡിയൻസിൽ.

ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ ഡാറ്റ (മൂന്ന് തരം):

നിറം, സ്ഥാനം, കോർഡിനേറ്റുകൾ, ദൂരം എന്നിവയാൽ ലേബൽ ചെയ്‌ത കണ്ടെത്തിയ ഗെയിം ഒബ്‌ജക്റ്റുകളുള്ള ക്യാമറ കാഴ്ച.

ഇമേജ് ഡിറ്റക്ഷൻ (ടൈപ്പ് ഒന്ന്):

  • ഈ ഡാറ്റ VEX AI ഇന്റൽ ക്യാമറ കണ്ടെത്തിയ ഒരു വസ്തുവിനെ പ്രതിനിധീകരിക്കുന്നു.
  • ക്യാമറ ഇമേജിനെ പരാമർശിച്ച് ഈ ഡാറ്റ വസ്തുവിനെ വിവരിക്കുന്നു.
  • X, Y, വീതി, ഉയരം എന്നിവയുടെ മൂല്യങ്ങൾ പിക്സലുകളുടെ യൂണിറ്റുകളിലാണ്. ചിത്രത്തിന്റെ മുകളിൽ ഇടത് കോണിലും ഒബ്ജക്റ്റ് ഡിറ്റക്ഷൻ ബോക്സിലും പിക്സൽ മൂല്യങ്ങൾ സൂചിപ്പിച്ചിരിക്കുന്നു. ചിത്രത്തിന്റെ റെസല്യൂഷൻ 640x480 ആണ്.

 

X, Y കോർഡിനേറ്റ് അക്ഷങ്ങളും ഫീൽഡിന്റെ മധ്യഭാഗത്തുള്ള X0 Y0 ന്റെ റഫറൻസ് സ്ഥാനവും കാണിക്കുന്ന ഫീൽഡ് ഡയഗ്രം.

മാപ്പ് കണ്ടെത്തൽ (തരം രണ്ട്):

  • ഈ ഡാറ്റ, മീറ്ററുകളിൽ റിപ്പോർട്ട് ചെയ്തിരിക്കുന്ന GPS സെൻസറിന്റെ അതേ കോർഡിനേറ്റ് സിസ്റ്റത്തിൽ ഫീൽഡിലെ വസ്തുവിന്റെ സ്ഥാനം പ്രതിനിധീകരിക്കുന്നു.
  • ഓരോ വസ്തുവിലും ഫീൽഡിന്റെ മധ്യഭാഗവുമായി താരതമ്യപ്പെടുത്തുമ്പോൾ വസ്തുവിന്റെ സ്ഥാനം അടങ്ങിയിരിക്കുന്നു. X, Y എന്നിവയുടെ മൂല്യങ്ങൾ അവയുടെ അച്ചുതണ്ടിലെ ഫീൽഡിന്റെ മധ്യത്തിൽ നിന്ന് മീറ്ററുകളുടെ യൂണിറ്റുകളിലാണ്. Z ന്റെ മൂല്യം ഫീൽഡ് ടൈലുകളിൽ നിന്ന് (ഉയരം) മീറ്ററാണ്.

ഡിറ്റക്ഷൻ ഒബ്ജക്റ്റ് (തരം മൂന്ന്):

കണ്ടെത്തിയ വസ്തുക്കളുടെ ഡാറ്റാ ഘടനകളെ നിർവചിക്കുന്ന C++ കോഡ് സ്നിപ്പെറ്റ്, വർഗ്ഗീകരണം, സ്ഥാനം, ഇമേജ്, മാപ്പ് കോർഡിനേറ്റുകൾ എന്നിവയുൾപ്പെടെ.

  • കണ്ടെത്തിയ വസ്തുക്കളെക്കുറിച്ചുള്ള എല്ലാ വിവരങ്ങളും ഇത് ഉൾക്കൊള്ളുന്നു.
  • കണ്ടെത്തിയ വസ്തുവിന്റെ വർഗ്ഗീകരണത്തെ പ്രതിനിധീകരിക്കുന്ന ഒരു മൂല്യം ഓരോ വസ്തുവിലും അടങ്ങിയിരിക്കുന്നു. (ക്ലാസ് ഐഡി: 0 = ഗ്രീൻ ട്രൈബോൾ, 1 = റെഡ് ട്രൈബോൾ, 2 = ബ്ലൂ ട്രൈബോൾ)
  • ഓരോ വസ്തുവിലും VEX AI യുടെ കണ്ടെത്തലിലുള്ള ആത്മവിശ്വാസത്തെ പ്രതിനിധീകരിക്കുന്ന ഒരു സാധ്യതയും അടങ്ങിയിരിക്കുന്നു. കുറഞ്ഞ സാധ്യതയുള്ള കണ്ടെത്തലുകൾ നീക്കം ചെയ്യുന്ന model.py-യിലെ ഒരു ഫിൽട്ടറിന് ശേഷമാണിത്.
  • കൂടാതെ, VEX AI ഇന്റൽ ക്യാമറയിൽ നിന്ന് വസ്തുവിന്റെ ആഴം മീറ്ററിൽ റിപ്പോർട്ട് ചെയ്യപ്പെടുന്നു.
  • ഇമേജ് ഡിറ്റക്ഷനും മാപ്പ് ഡിറ്റക്ഷനും ഓരോ വസ്തുവിലും ഘടിപ്പിച്ചിരിക്കുന്നത്, ഇമേജിലെയും യഥാർത്ഥ ലോകത്തിലെയും വസ്തുവിന്റെ കോർഡിനേറ്റുകളെ പ്രതിനിധീകരിക്കുന്നതിനാണ്.

ai_demo പ്രോഗ്രാമിന്റെ ഒരു വിശദാംശം:

മെയിൻ.സിപിപി

സ്റ്റാൻഡേർഡ് VEX പ്രോജക്റ്റ് കാണിക്കുന്ന C++ കോഡ് സ്നിപ്പെറ്റിൽ ഇനിഷ്യലൈസേഷൻ സജ്ജീകരണവും ഉൾപ്പെടുന്നു.

VEX പ്രോജക്റ്റുകൾക്ക് സ്റ്റാൻഡേർഡിൽ ഇവ ഉൾപ്പെടുന്നു:

// ലൊക്കേഷനും മറ്റ്
// ഡാറ്റയും ജെറ്റ്സൺ നാനോയിൽ നിന്ന് സ്വീകരിക്കുന്നതിന് ജെറ്റ്സൺ ക്ലാസ്സിന്റെ ഒരു ഉദാഹരണം സൃഷ്ടിക്കുക
//
ai::jetson jetson_comms;

ജെറ്റ്സൺ ക്ലാസിന്റെ ഒരു ഉദാഹരണം പ്രഖ്യാപിക്കുക. ജെറ്റ്‌സണിലേക്ക് ഡാറ്റയ്‌ക്കായുള്ള അഭ്യർത്ഥനകൾ അയയ്‌ക്കുന്നതിനും യുഎസ്ബി സീരിയൽ കണക്ഷൻ വഴി ഡാറ്റ സ്വീകരിക്കുന്നതിനും ഈ ക്ലാസ് ഉപയോഗിക്കുന്നു.

#മാനേജർ_റോബോട്ട് 1 നിർവചിക്കുക

#define MANAGER_ROBOT 1 എന്ന് വായിക്കുന്ന ഒരു define സ്റ്റേറ്റ്മെന്റ് ഉപയോഗിച്ച് മാനേജരുടെയും വർക്കർ റോബോട്ട് റോളുകളുടെയും കോൺഫിഗറേഷൻ കാണിക്കുന്ന C++ കോഡ് സ്നിപ്പെറ്റ്.

robot_link ക്ലാസ്സിന്റെ ഒരു ഉദാഹരണം പ്രഖ്യാപിക്കുക. ഈ റോബോട്ടിനും പങ്കാളി റോബോട്ടിനുമിടയിൽ ഡാറ്റ ബന്ധിപ്പിക്കുന്നതിനും കൈമാറുന്നതിനും ഈ വസ്തു ഉപയോഗിക്കും. ഈ പ്രോജക്റ്റ് രണ്ട് വ്യത്യസ്ത റോബോട്ടുകളിലേക്ക് ഡൗൺലോഡ് ചെയ്യാൻ കഴിയും. ഒരു റോബോട്ടിന് ഈ വരി ഉണ്ടായിരിക്കണം:

//#മാനേജർ_റോബോട്ട് 1 നിർവചിക്കുക

രണ്ടാമത്തെ റോബോട്ടിലേക്ക് കോഡ് ലോഡ് ചെയ്യുന്നതിനുമുമ്പ്, നിങ്ങൾ ആ വരിയിൽ കമന്റ് ചെയ്യേണ്ടതുണ്ട്:

റോബോട്ട്_ലിങ്ക് ക്ലാസ് റോബോട്ടിന്റെ VEXlink സജ്ജമാക്കുകയും രണ്ട് റോബോട്ടുകൾക്കിടയിൽ ഡാറ്റ കൈമാറുന്നതും സ്വീകരിക്കുന്നതും കൈകാര്യം ചെയ്യുകയും ചെയ്യുന്നു. ആ ക്ലാസ് എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്നതിനെക്കുറിച്ച് ഈ ലേഖനത്തിൽ നമ്മൾ വിശദമായി പറയില്ല. ആദ്യം VEXlink എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്ന് മനസ്സിലാക്കുന്നത് നന്നായിരിക്കും. V5 VEXlink API ഉപയോഗിക്കുന്നതിനെക്കുറിച്ചുള്ള കൂടുതൽ വിശദമായ വിവരങ്ങൾക്ക്, ഈ പ്രമാണം പുതിയ ലൈബ്രറികളെക്കുറിച്ചും റോബോട്ട്-ടു-റോബോട്ട് ആശയവിനിമയത്തിന് അവ എങ്ങനെ ഫലപ്രദമായി ഉപയോഗിക്കാമെന്നും വിശദീകരിക്കുന്നു.

  • മത്സര പരിപാടി കൈകാര്യം ചെയ്യുന്നവർ

    ഐസൊലേഷനും ഇന്ററാക്ഷൻ ഓട്ടോണമസ് റൂട്ടീനുകളും തമ്മിൽ മാറുന്ന കണ്ടീഷണൽ ലോജിക് കാണിക്കുന്ന C++ കോഡ്.

    VAIC യും VRC യും തമ്മിലുള്ള ഏറ്റവും വലിയ വ്യത്യാസങ്ങളിലൊന്ന് ഡ്രൈവർ നിയന്ത്രണ കാലയളവ് ഇല്ല എന്നതാണ്. പകരം രണ്ട് സ്വയംഭരണ കാലഘട്ടങ്ങളുണ്ട്, ഒറ്റപ്പെടൽ കാലഘട്ടവും പ്രതിപ്രവർത്തന കാലഘട്ടവും. ഈ ഉദാഹരണത്തിൽ, ഓരോ സ്വയംഭരണ കാലയളവിനും പ്രത്യേക ദിനചര്യകളുണ്ട്. VEX API രണ്ട് വ്യത്യസ്ത കോൾബാക്കുകളെ പിന്തുണയ്ക്കാത്തതിനാൽ, ഏത് ദിനചര്യയാണ് നടപ്പിലാക്കേണ്ടതെന്ന് നിർണ്ണയിക്കാൻ പ്രോഗ്രാമിൽ ഒരു ഫ്ലാഗ് ഉണ്ടായിരിക്കണം. ഈ ഉദാഹരണ പ്രോഗ്രാമിൽ, ആദ്യമായി ഓട്ടോണമസ് പ്രവർത്തനക്ഷമമാക്കുമ്പോൾ ഐസൊലേഷൻ ഫംഗ്‌ഷനെ വിളിക്കാൻ “firstAutoFlag” ഉപയോഗിക്കുന്നു, രണ്ടാമതും ഓട്ടോണമസ് പ്രവർത്തനക്ഷമമാക്കുമ്പോൾ ഇന്ററാക്ഷൻ ഫംഗ്‌ഷനെയും വിളിക്കുന്നു. ശ്രദ്ധിക്കേണ്ട ഒരു കാര്യം, എന്തെങ്കിലും കാരണത്താൽ മാച്ച് റീസെറ്റ് ചെയ്യേണ്ടി വന്നാൽ, ഫസ്റ്റ് ഓട്ടോഫ്ലാഗ് റീസെറ്റ് ചെയ്യാൻ കഴിയുന്നതിന് ഡെമോ പ്രോഗ്രാം റീസ്റ്റാർട്ട് ചെയ്യേണ്ടതുണ്ട്.

  • പ്രധാന()

    ജെറ്റ്‌സണിൽ നിന്നുള്ള ഡാറ്റ വീണ്ടെടുക്കൽ, പ്രോസസ്സിംഗ്, ഒരു പങ്കാളി റോബോട്ടുമായുള്ള ആശയവിനിമയം എന്നിവ കൈകാര്യം ചെയ്യുന്ന പ്രധാന ലൂപ്പിന്റെ C++ കോഡ് സ്‌നിപ്പെറ്റ്.

    ഇതാണ് ഈ പദ്ധതിയുടെ പ്രധാന കടമ. VEXcode എൻവയോൺമെന്റ് ശരിയായി സജ്ജീകരിക്കുന്നതിന് vexcodeInit() നെ വിളിച്ചുകൊണ്ടാണ് ഇത് ആരംഭിക്കുന്നത്. അടുത്തതായി, ജെറ്റ്സണിൽ നിന്ന് നമുക്ക് ലഭിക്കുന്ന ഡാറ്റ സംഭരിക്കുന്നതിന് ഒരു ലോക്കൽ AI_RECORD ഒബ്ജക്റ്റ് പ്രഖ്യാപിക്കപ്പെടുന്നു. ഏറ്റവും പുതിയ ഡാറ്റ ഉപയോഗിച്ച് സ്ക്രീൻ അപ്ഡേറ്റ് ചെയ്യുന്നതിനായി ഒരു പ്രത്യേക ടാസ്കും സജ്ജീകരിച്ചിരിക്കുന്നു. ആ ടാസ്ക്കിനുള്ള കോഡ് dashboard.cpp ഫയലിൽ അടങ്ങിയിരിക്കുന്നു. ഓട്ടോണമസ് പിരീഡുകൾ ആരംഭിക്കുമ്പോൾ കൈകാര്യം ചെയ്യുന്നതിനായി ഓട്ടോണമസ് കോൾബാക്കും രജിസ്റ്റർ ചെയ്തിട്ടുണ്ട്.

    പ്രധാന while() ലൂപ്പ് ആരംഭിക്കുന്നത് jetson_comms ഒബ്‌ജക്റ്റിൽ നിന്നുള്ള ഏറ്റവും പുതിയ ഡാറ്റ നമ്മുടെ ലോക്കൽ AI_RECORD ഒബ്‌ജക്റ്റിലേക്ക് പകർത്തിക്കൊണ്ടാണ്. പിന്നീട് അത് റോബോട്ടിന്റെ ലൊക്കേഷൻ വിവരങ്ങൾ ലിങ്ക് ഒബ്‌ജക്റ്റിലേക്ക് കൈമാറുന്നു, അങ്ങനെ അത് നമ്മുടെ പങ്കാളി റോബോട്ടിന് കൈമാറാൻ കഴിയും. ഡാറ്റ പ്രോസസ്സ് ചെയ്തുകഴിഞ്ഞാൽ, അത് ജെറ്റ്‌സണിൽ നിന്ന് കൂടുതൽ ഡാറ്റ അഭ്യർത്ഥിക്കുകയും 66 മില്ലിസെക്കൻഡ് ഉറങ്ങുകയും ചെയ്യും. ഈ ഡാറ്റയുടെ പോളിംഗ് നിരക്ക് 15Hz ആണ്. AI സിസ്റ്റം ഡാറ്റ ഏകദേശം 15Hz-ൽ അപ്‌ഡേറ്റ് ചെയ്യുന്നതിനാൽ വേഗത്തിൽ പോൾ ചെയ്യേണ്ട കാര്യമില്ല.

    കുറിപ്പ്: ജെറ്റ്സൺ മാപ്പ് ഡാറ്റ ഒരൊറ്റ ടാസ്‌ക്കിലൂടെ മാത്രമേ അഭ്യർത്ഥിക്കേണ്ടതുള്ളൂ.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: