ইউনিট 2 / 9

রোবোটিক্স এবং মোশন কন্ট্রোলে কৃত্রিম বুদ্ধিমত্তা

লাভ:

  • AI এর সাহায্যে ফরোয়ার্ড/ইনভার্স গতিবিদ্যা এবং ট্র্যাজেক্টরি প্ল্যানিং সমস্যা সেট আপ এবং সমাধান করার ক্ষমতা
  • প্রম্পটের প্রসঙ্গ হিসাবে রোবট যৌথ সীমা, গতি এবং ত্বরণের সীমাবদ্ধতা দিয়ে নিরাপদ কক্ষপথ তৈরি করার ক্ষমতা
  • এআই দ্বারা উত্পাদিত গতি এবং গতিপথের আউটপুট সংখ্যাগত এবং শারীরিকভাবে যাচাই করার ক্ষমতা

একটি রোবট বাহুর শেষে গ্রিপারকে স্থানের একটি নির্দিষ্ট বিন্দুতে, একটি নির্দিষ্ট অভিযোজনে নিয়ে আসা; এটি সহজ শোনাচ্ছে, কিন্তু এর পিছনে গতিশীল সমীকরণ, যৌথ সীমা, এককতা এবং গতিপথ পরিকল্পনা রয়েছে। এখানে, মেকাট্রনিক্স ইঞ্জিনিয়ার একসাথে ত্রিকোণমিতি, রৈখিক বীজগণিত এবং নিয়ন্ত্রণ তত্ত্ব ব্যবহার করে। কৃত্রিম বুদ্ধিমত্তা এই প্রক্রিয়ার একটি শক্তিশালী সাহায্য: এটি এগিয়ে গতিবিদ্যা সমীকরণ স্থাপন করতে পারে, বিপরীত গতিবিদ্যার জন্য সমাধান পদ্ধতির পরামর্শ দিতে পারে, বেগ/ত্বরণ সীমাবদ্ধতা অনুসারে একটি ট্র্যাজেক্টোরিকে প্যারামিটারাইজ করতে পারে। যাইহোক, রোবোটিক্স হল মেকাট্রনিক্সের অন্যতম ক্ষেত্র যেখানে সবচেয়ে বেশি শারীরিক ঝুঁকি রয়েছে; যদি AI দ্বারা উত্পন্ন একটি কোণ ক্রম যাচাই না করেই রোবটে পাঠানো হয়, তাহলে হাতটি নিজেই, পরিবেশ বা অপারেটরকে আঘাত করতে পারে। এই ইউনিটে আমরা দেখব কিভাবে AI এর সাথে গতিবিদ্যা এবং ট্রাজেক্টরি প্ল্যানিং সেট আপ এবং যাচাই করা যায়।

ফরোয়ার্ড এবং ইনভার্স কিনেমেটিক্স

ফরোয়ার্ড কাইনেমেটিক্স (FK): জয়েন্ট অ্যাঙ্গেল জানা থাকলে শেষ-প্রভাবকের অবস্থান এবং ওরিয়েন্টেশন খোঁজা। একমাত্র সমাধান আছে, তা হল সরাসরি।

ইনভার্স কাইনেমেটিক্স (IK): শেষ ফাংশনের পছন্দসই অবস্থান জানা থাকলে, জয়েন্ট কোণগুলি খুঁজে বের করা যা এটি প্রদান করবে। এটিতে সাধারণত একাধিক সমাধান থাকে (যেমন কনুই উপরে/নিচে), কখনও কখনও এটির কোনও সমাধান থাকে না (অনুগমযোগ্য বিন্দু), কখনও কখনও এটির অসীম সমাধান (এককতা) থাকে।

ধারণা

ইনপুট

আউটপুট

সমাধানের সংখ্যা

এগিয়ে গতিবিদ্যা

যৌথ কোণ

চরম অবস্থান/ওরিয়েন্টেশন

একক

বিপরীত গতিবিদ্যা

চরম অবস্থান/ওরিয়েন্টেশন

যৌথ কোণ

একাধিক/কোনটি/অসীম

একটি দুই-জয়েন্ট প্ল্যানার আর্মের জন্য, বিপরীত গতিবিদ্যা AI তে সেট আপ করা যেতে পারে এবং ম্যানুয়ালি যাচাই করা যেতে পারে নিম্নরূপ:

npdef inverse_kinematik_2r(x, y, L1, L2) হিসাবে numpy আমদানি করুন: """2-জয়েন্ট প্ল্যানার বাহুর জন্য IK। রেডিয়ানে কোণ ফেরত দেয় (কনুই-নিচু সমাধান)।""" r2 = x**2 + y**2 # অ্যাক্সেসিবিলিটি চেক: ওয়ার্কস্পেতে বিন্দু আছে? যদি np.sqrt(r2) > (L1 + L2) বা np.sqrt(r2) < abs(L1 - L2): raise ValueError("পয়েন্ট অ্যাক্সেসযোগ্য কাজের জায়গার বাইরে") cos_t2 = (r2 - L1**2 - L2**2) / (2 * L1 * L2) cos_t2, cos_t2 = (2 * L1 * L2) cos_t. 1.0) # সংখ্যাসূচক নিরাপত্তা t2 = np.arccos(cos_t2) # কনুই ডাউন t1 = np.arctan2(y, x) - np.arctan2(L2*np.sin(t2), L1 + L2*np.cos(t2)) রিটার্ন np.degree(s) , Values (2) ডিগ্রি L1=L2=1, লক্ষ্য (1,1) -> প্রত্যাশিত t2=90 ডিগ্রি স্প্রিন্ট(বিপরীত_কাইনেম্যাটিক_2r(1.0, 1.0, 1.0, 1.0)) # ~ (0.0, 90.0)

এখানে গুরুত্বপূর্ণ লাইনগুলি হল যেখানে AI প্রায়শই এড়িয়ে যায়: পৌঁছানোর ক্ষমতা পরীক্ষা (ওয়ার্কস্পেসের বিন্দু) এবং `np.clip` (রাউন্ডিং ত্রুটির কারণে আর্কোস ইনপুটকে ±1 এর বাইরে যেতে বাধা দেয়)। এই দুটি সুরক্ষা ছাড়া, কোডটি NaN তৈরি করবে বা একটি অবৈধ পয়েন্টে ক্র্যাশ করবে।

টিপ: IK রেজোলিউশনের জন্য জিজ্ঞাসা করার সময়, স্পষ্টভাবে AI কে বলুন "অ্যাক্সেসিবিলিটি কন্ট্রোল যোগ করুন এবং ক্লিপে আর্কোস ইনপুট সীমিত করুন"। এই দুটি লাইন নীরব ত্রুটিগুলি প্রতিরোধ করে যা ক্ষেত্রের সবচেয়ে মাথাব্যথার কারণ হয়।

যৌথ সীমা, এককতা এবং একাধিক সমাধান

একটি বাস্তব রোবটের প্রতিটি জয়েন্টের একটি কোণ পরিসীমা (যেমন -170° থেকে +170°), একটি গতিসীমা এবং একটি ত্বরণ সীমা থাকে। IK গাণিতিকভাবে বৈধ কোণ দিলেও, সেই কোণটি জয়েন্টের ভৌত সীমার বাইরে থাকলে এটি ব্যবহার করা যাবে না। অতিরিক্তভাবে, কিছু কনফিগারেশনে রোবটটি এককতার মধ্যে পড়ে: দুটি অক্ষ সারিবদ্ধ হয়, এক ডিগ্রি স্বাধীনতা হারিয়ে যায় এবং যৌথ বেগ একটি ছোট টিপ আন্দোলনের জন্য অনন্তে যাওয়ার চেষ্টা করে।

সেজন্য একা এইচআর সমাধান যথেষ্ট নয়; প্রতিটি সমাধান একটি গ্রহণযোগ্যতা ফিল্টার পাস করা আবশ্যক:

def solution_gecerli_mi(acilar_deg, limits_deg): """বেদনা: [t1,t2,...], সীমা: [(মিনিট,সর্বোচ্চ),...]""" ব্যথার জন্য, (আমিন, অ্যাম্যাক্স) জিপে (acilar_deg, limits_deg): যদি না হয় (amine <= pain <= amax): রিটার্ন false: {1}False: int-false} deg ({amine},{amax}) ব্যতীত" রিটার্ন সত্য, "ঠিক আছে" সীমা = [(-170, 170), (-120, 120)]মুদ্রণ(cozum_valid_mi([0.0, 90.0], limits)) # (True, 'OK')print(cozum_valid_mi,01,0mi) #1. (মিথ্যা, 'যৌথ সীমা অতিক্রম করেছে...')

AI IK এর "গাণিতিক" সমাধান দিতে পারে; কিন্তু যৌথ সীমা এবং এককতা পরিহার আপনার সিস্টেমের জন্য নির্দিষ্ট এবং প্রম্পটের প্রসঙ্গ হিসাবে দেওয়া আবশ্যক।

কক্ষপথ পরিকল্পনা

রোবটকে বিন্দু A থেকে বি বিন্দুতে নিয়ে যাওয়া মানে দুটি কোণের মধ্যে একটি সরল রেখা আঁকা নয়। আকস্মিক গতি পরিবর্তন যান্ত্রিক শক এবং কম্পন সৃষ্টি করে। পরিবর্তে, নরম প্রোফাইলগুলি ব্যবহার করা হয়: ট্র্যাপিজয়েডাল বেগ প্রোফাইল (ধ্রুব ত্বরণ-ধ্রুবক গতি-ধ্রুবক হ্রাস) বা S-বক্ররেখা (মসৃণ, যেখানে ত্বরণও সীমিত)। AI-কে একটি ট্র্যাজেক্টোরি তৈরি করার সময়, আপনাকে অবশ্যই লক্ষ্য, সময়কাল এবং সীমাবদ্ধতা দিতে হবে।

npdef trapez_yorunge(q0, q1, v_max, a_max, dt=0.01) হিসাবে numpy আমদানি করুন: """একটি একক জয়েন্টের জন্য ট্র্যাপিজয়েডাল বেগ প্রোফাইল। অবস্থান বিন্যাস ফেরত দেওয়া হয়েছে।""" দূরত্ব = abs(q1 - q0) দিক = np.sign(q1 - max_1) = np.sign দূরত্ব_গতি = 0.5 * a_max * t_speed**2 যদি 2 * দূরত্ব_গতি > দূরত্ব: # ত্রিভুজাকার প্রোফাইল (v_max পৌঁছানো যায় না) t_speed = np.sqrt(দূরত্ব / a_max) t_constant = 0.0 v_peak = a_max * t_speedant = / t_conspeed = */d_conspeed অন্য) v_max v_peak = v_max T = 2 * t_accelerate + t_constant t = np.arange(0, T, dt) # ... প্রতিটি t এর জন্য অবস্থান গণনা (ত্বরণ/ধ্রুবক/ক্ষতির পর্যায়গুলির উপর ভিত্তি করে) রিটার্ন t, T, v_peak, সময়কাল, vz = trapezoidal,0, (trapezoidal0. v_max=60.0, a_max=120.0)মুদ্রণ(f"মোট সময়কাল: {সময়কাল:.3f} s, সর্বোচ্চ গতি: {vz:.1f} deg/s")

এখানে যুক্তি পরীক্ষা হল: দূরত্ব কম হলে, মোটর কখনই v_max এ পৌঁছাবে না এবং প্রোফাইলটি ট্র্যাপিজয়েডাল থেকে ত্রিভুজাকার হয়ে যাবে। যদি AI এই শর্তটি মিস করে, তাহলে সংক্ষিপ্ত নড়াচড়ার জন্য ভুল সময়কাল গণনা করা হবে। আপনি একটি পরিচিত মান দিয়ে কোড পরীক্ষা করে এটি যাচাই করতে পারেন (উদাহরণস্বরূপ, একটি খুব কম দূরত্ব)।

দুর্বল প্রম্পট / শক্তিশালী প্রম্পট

দুর্বল:"একটি ট্র্যাজেক্টরি লিখুন যা রোবট আর্মকে A থেকে B পর্যন্ত নিয়ে যায়।"(কোন বাধা নেই: গতির সীমা? ত্বরণ? জয়েন্ট স্পেসিং? অন্ধ আউটপুট।)STRONG:"6-অক্ষের রোবটের জন্য জয়েন্ট স্পেসে একটি পয়েন্ট-টু-পয়েন্ট ট্রাজেক্টোরি তৈরি করুন। প্রতিটি জয়েন্টের গতি সীমা হল 90 ডিগ্রী^20, ডিগ্রী 201 ডিগ্রী সীমা, সারণীতে কোণ পরিসীমা দেওয়া আছে, যদি দূরত্ব ছোট হয়, তাহলে প্রতিটি জয়েন্টের আউটপুট একটি যাচাই ফাংশন লিখুন যে এটি সীমা অতিক্রম করছে না: {{টেবিল}}।

যাচাইকরণ: সিমুলেশন থেকে রোবট পর্যন্ত

AI দ্বারা উত্পন্ন ট্র্যাজেক্টরি রোবটে যাওয়ার আগে এই ক্রমে যাচাই করা হয়:

  1. সংখ্যাসূচক: যৌথ কোণ, গতি এবং প্রতিটি ধাপের ত্বরণ কি সীমার মধ্যে রয়েছে?
  2. সংঘর্ষ: ট্র্যাজেক্টোরি বরাবর, বাহুটি কি নিজের সাথে বা পরিবেশের সাথে সংঘর্ষ হয় (সম্ভব হলে কল্পনা/সিমুলেট করুন)?
  3. সিঙ্গুলারিটি: কক্ষপথটি কি একটি সিঙ্গুলারিটি অঞ্চলের মধ্য দিয়ে যায় (জ্যাকোবিয়ান নির্ধারক কি শূন্যের দিকে যায়)?
  4. ধীরগতির হার্ডওয়্যার পরীক্ষা: কম গতিতে রোবটটি পরিচালনা করুন (যেমন 10%) এবং এটি দৃশ্যমানভাবে পর্যবেক্ষণ করুন।
  5. ধীরে ধীরে গতি বৃদ্ধি: একবার সবকিছু যাচাই করা হলে, গতি ধাপে ধাপে নামমাত্র মূল্যে বৃদ্ধি পায়।
সতর্কতা: প্রথমবার একটি নতুন ট্র্যাজেক্টোরি সহ একটি রোবট শুরু করার সময়, গতি ওভাররাইড সর্বদা কম হওয়া উচিত এবং ই-স্টপ উপলব্ধ হওয়া উচিত। এমনকি AI আউটপুট "গাণিতিকভাবে সঠিক" হলেও, শারীরিক সেটআপে একটি অফসেট, রিভার্স অক্ষ বা তারের স্নেগ শুধুমাত্র ধীরগতির পরীক্ষার মাধ্যমে প্রকাশ করা হবে।

মিনি কেস

অটোমেশন ইঞ্জিনিয়ার Ece পিক-এন্ড-প্লেস অ্যাপ্লিকেশনের জন্য জয়েন্ট স্পেসে একটি ট্র্যাজেক্টরি কোডের জন্য AI-কে জিজ্ঞাসা করেন। AI একটি ট্র্যাপিজয়েডাল প্রোফাইল তৈরি করে, কিন্তু যখন Ece একটি স্বল্প-দূরত্বের পদক্ষেপ পরীক্ষা করে, তখন সে দেখে যে সময়টি নেতিবাচক: কোডটি ত্রিভুজাকার প্রোফাইল কেসটি পরিচালনা করেনি যেখানে v_max পৌঁছানো যায় না। Ece প্রম্পটকে "যদি দূরত্ব কম হয়, ত্রিভুজাকার প্রোফাইলে পড়ে" বলে এটি সংশোধন করে। এটি তারপরে AI দ্বারা প্রদত্ত জয়েন্ট অ্যাঙ্গেলগুলিকে তার নিজস্ব সীমা টেবিলের বিপরীতে বৈধকরণ ফাংশনের মাধ্যমে চালায় এবং খুঁজে পায় যে জয়েন্ট 5 এক পর্যায়ে +125° চেয়েছিল, যেখানে সীমাটি +120° ছিল। তিনি ট্র্যাজেক্টরিটি পুনরায় পরিকল্পনা করেন এবং এটি নিরীক্ষণ করেন, এবার 10% গতিতে রোবট চালাচ্ছেন। প্রথম রাউন্ডে, তিনি দেখেন যে গ্রিপার টেবিলের খুব কাছাকাছি চলে আসছে এবং Z অফসেট সংশোধন করে। এআই মিনিটের মধ্যে একটি কাজের রূপরেখা ফিরিয়ে দিয়েছে; কিন্তু তিনটি পৃথক বৈধতা (ত্রিভুজাকার প্রোফাইল, যৌথ সীমা, ধীর পরীক্ষা) তিনটি পৃথক বাস্তব সমস্যা ধরা পড়েছে।

সাধারণ ভুল

  • যৌথ সীমা এবং অ্যাক্সেসিবিলিটি নিয়ন্ত্রণ ছাড়াই IK সমাধান ব্যবহার করা।
  • arccos/arcsin এন্ট্রি ক্লিপ করা নয় কিন্তু রাউন্ডিং ত্রুটির ক্ষেত্রে NaN তৈরি করা।
  • গতি/ত্বরণ সীমাবদ্ধ না করে এবং যান্ত্রিক শক তৈরি না করে কক্ষপথের অনুরোধ করা।
  • সিঙ্গুলারিটি জোন উপেক্ষা করা এবং জয়েন্টের গতি আকাশচুম্বী করা।
  • স্বল্প দূরত্বে ট্র্যাপিজয়েডাল-ত্রিভুজাকার প্রোফাইল স্থানান্তর এড়িয়ে যাওয়া এবং ভুল সময় গণনা করা।
  • সম্পূর্ণ গতিতে এবং ই-স্টপ অ্যাক্সেস ছাড়াই প্রথম অরবিটাল পরীক্ষা পরিচালনা করা।

সংক্ষেপে

  • ফরোয়ার্ড গতিবিদ্যার একটি একক সমাধান আছে; বিপরীত গতিবিদ্যা একাধিক, অস্তিত্বহীন বা অসীম সমাধান তৈরি করতে পারে।
  • IK সমাধানগুলি অগত্যা যৌথ সীমা, অ্যাক্সেসযোগ্যতা এবং এককতার পরিপ্রেক্ষিতে ফিল্টার করা হয়।
  • গতিপথ পরিকল্পনা; এটি নরম, সীমা-সামঞ্জস্যপূর্ণ প্রোফাইল যেমন ট্র্যাপিজয়েডাল বা এস-বক্ররেখা ব্যবহার করে।
  • স্বল্প দূরত্বে প্রোফাইল ট্র্যাপিজয়েডাল থেকে ত্রিভুজাকারে পরিবর্তিত হয়; এটি কোডে পরিচালনা করা উচিত।
  • AI গণিতের গতি বাড়ায়; সীমা এবং শারীরিক ইনস্টলেশন প্রসঙ্গে প্রম্পটে প্রবেশ করা উচিত।
  • নতুন ট্র্যাজেক্টোরি সর্বদা একটি কম গতির অনুপাত এবং অ্যাক্সেসযোগ্য ই-স্টপ সহ প্রথমবারের জন্য চালানো হয়।

আবেদন টাস্ক

একটি দুই- বা তিন-জয়েন্ট আর্ম মডেল নির্বাচন করুন (বাস্তব বা কাল্পনিক লিঙ্কের দৈর্ঘ্য এবং যৌথ সীমা সহ)। এআই-কে এই প্রসঙ্গের সাথে একটি বিপরীত গতিবিদ্যা ফাংশন এবং একটি ট্র্যাজেক্টরি প্ল্যানার তৈরি করতে দিন। তারপর: (1) একটি পরিচিত লক্ষ্যের সাথে ম্যানুয়ালি IK আউটপুট যাচাই করুন (আপনি কি কোণগুলিকে পিছনে রাখুন এবং FK এর মতো একই বিন্দুতে ফিরে যান), (2) পরীক্ষা করুন যে কোডটি কমপক্ষে একটি দুর্গম বিন্দু এবং একটি যৌথ সীমা লক্ষ্য অতিক্রম করে তাদের ক্যাপচার করে, (3) পরীক্ষা করুন যে অল্প দূরত্বে অরবিটাল সময় যুক্তিসঙ্গত বলে প্রমাণিত হয়েছে। কোডের প্রথম সংস্করণে আপনি কতটি বৈধতা সমস্যা খুঁজে পেয়েছেন এবং কোন স্তরটি প্রতিটিতে ধরা পড়েছে তা লিখুন।