বিপরীতমুখীজনিত সমস্যা কীভাবে সমাধান করা যায়?


20

একটি রোবোট আর্মের ফরোয়ার্ড গতিবিজ্ঞানগুলি সহজেই সমাধান করা যায়। আমরা ডেনাভিট – হার্টেনবার্গ রূপান্তর ম্যাট্রিক্স ব্যবহার করে প্রতিটি যৌথ প্রতিনিধিত্ব করতে পারি ।

উদাহরণস্বরূপ, যদি জয়েন্টটি একটি লিনিয়ার অ্যাকিউটেটর হয় তবে এর রূপান্তর ম্যাট্রিক্স থাকতে পারে:আমিটি

টিআমি=[10000100001আমি0001] যেখানে এক্সটেনশনের দৈর্ঘ্য দ্বারা সংজ্ঞায়িত করা হয়েছেআমি

তবে, ঘোরানো লিঙ্কটি হতে পারে:

টিআমি=[100এল0কোসাইন্αআমি-পাপαআমি00পাপαআমিকোসাইন্αআমি00001] যেখানে হল কোণ এবং লিঙ্কের দৈর্ঘ্য।এলαএল

আমরা তখন সব রূপান্তর ম্যাট্রিক্স গুন দ্বারা অবস্থান এবং শেষ effector সজ্জার পেতে পারবেন: ।Πটিআমি

প্রশ্নটি হল, আমরা কীভাবে বিপরীত সমস্যাটি সমাধান করব?

গাণিতিকভাবে, কাঙ্ক্ষিত শেষ effector পদের জন্য , খুঁজুন পরামিতি , যেমন যে । এই সমীকরণটি সমাধান করার জন্য কোন পদ্ধতি বিদ্যমান?এমআমিαআমিΠটিআমি=এম

উত্তর:


11

আগের দিন, যখন আমি শিখছিলাম, যখন আমি এগিয়ে যাচ্ছিলাম তখন এটি তৈরি করছিলাম, IK সমস্যা সমাধানের জন্য আমি সাধারণ গ্রেডিয়েন্ট নিম্নলিখিতটি ব্যবহার করেছি।

আপনার মডেলটিতে, আপনি প্রতিটি যৌথকে একটি সামান্য পরিমাণে ঘোরানোর চেষ্টা করেন, দেখুন শেষ পয়েন্ট অবস্থান ত্রুটির তুলনায় কতটা তফাৎ। এটি সম্পন্ন করার পরে আপনি প্রতিটি যৌথকে যে পরিমাণ সুবিধা দেয় তা আনুপাতিক পরিমাণে আবর্তিত করুন। তারপরে আপনি এটিকে বার বার করতে পারবেন যতক্ষণ না আপনি যথেষ্ট পর্যাপ্ত হন।

সাধারণত, এটি গ্রেডিয়েন্ট ফলোয়িং বা পার্বত্য অনুসরণ হিসাবে পরিচিত। দুই ডিগ্রি স্বাধীনতার সহিত একটি রোবট বাহুটি কল্পনা করুন:

আইকে

যৌথ আবর্তিত একটি একটি ক্ষুদ্র কিছুক্ষনের মধ্যে দিক শেষ বিন্দু চলে আসে একটি । একটি সামান্য বিট জয়েন্ট বি ঘোরার সমাপ্তি বিন্দুটি এর দিকে নিয়ে যায় । এই উভয়ই আমাদের প্রায় একই পরিমাণে লক্ষ্যকে আরও কাছে নিয়ে যায়, তাই আমাদের উভয় জয়েন্টগুলি প্রায় একই গতিতে ঘোরানো উচিত।

যদি আমরা লক্ষ্য বনাম যৌথ কোণগুলির দূরত্বের একটি গ্রাফ তৈরি করতে পারি তবে এটি দেখতে এটির মতো হবে:

আইকে

আমি কিছু সাহায্যে রঙিন করেছি কেবল সাহায্য করার জন্য। এই অ্যালগরিদমটি যে পথটি নিয়েছে আমরা তা দেখতে পাচ্ছি। আপনি যে বিষয়টি লক্ষ্য করবেন তা হ'ল যৌথ স্থানে নেওয়া পথটি সর্বোত্তম দেখাচ্ছে না। এটি একটি বক্ররেখা লাগে। তবে, সত্যিকারের জায়গাতে আপনি শেষের পয়েন্টটি লক্ষ্য পর্যন্ত মোটামুটি সরলরেখা দেখবেন। আপনি আরও দেখতে পাচ্ছেন যে সমস্যার দুটি সমাধান আসলেই রয়েছে এবং অ্যালগরিদম সবেমাত্র নিকটতমটিকে খুঁজে পেয়েছে।

বিপরীতমুখীজনিত সমস্যা সমাধানের একমাত্র উপায় এটি নয়। এটি অবশ্যই সেরা উপায় নয়।

পেশাদাররা:

  • এটি ধারণাগতভাবে সহজ, আপনি যদি কেবল এটি শিখেন তবে তা দুর্দান্ত।
  • এটি কার্যকর করা সহজ, এমনকি যদি ডেনাভিট – হার্টেনবার্গ রূপান্তর ম্যাট্রিক্সের দর্শন আপনাকে ভীষণ ঝড় দেয়।
  • এটি খুব সাধারণ, আপনাকে সমস্ত ধরণের জয়েন্টগুলি ব্যবহার করার অনুমতি দেয়: ঘূর্ণমান, রৈখিক, অন্য কিছু, যতক্ষণ আপনি অনুমান করতে পারেন যে কীভাবে তারা শেষ বিন্দুটি সরিয়ে নিয়ে যায়।
  • এটি শূন্য বা অসীম সংখ্যক সমাধান থাকা সত্ত্বেও এটি ভালভাবে মোকাবেলা করে।

কনস:

  • এটি স্লো, সমাধানটি খুঁজতে অনেকগুলি পুনরাবৃত্তি গ্রহণ করা। যাইহোক, এটি ঠিক আছে যদি আপনার আসল বাহুটি অ্যালগরিদমের অগ্রগতি অনুসরণ করতে পারে যেমন এটি গণনা করা হয়।
  • এটি স্থানীয় মিনিমাতে আটকে যেতে পারে। আইই এটি সর্বোত্তম সম্ভাব্য সমাধান খুঁজে পেতে পারে না, যদি এটির জন্য যথেষ্ট ভাল সমাধান পাওয়া যায়।

: আমার খুব পুরানো ওয়েব সাইটে এটি সম্পর্কে আরও বিস্তারিত সুদর্শন textured হালকা sourced বাউন্সি মজা স্মার্ট এবং প্রসার প্রবণ পৃষ্ঠা


3

জ্যাকবিয়ান ম্যাট্রিক্সকে কেন্দ্র করে এই সমস্যার অনেকগুলি সমাধান রয়েছে। এই স্লাইডশোতে জ্যাকবীয় পদ্ধতিগুলি অন্তর্ভুক্ত এবং একটি চক্রাকার স্থানাঙ্কিত বংশোদ্ভূত পদ্ধতি উল্লেখ করা হয়েছে, যার সাথে আমি অপরিচিত।

বিষয়টিতে প্রচুর সংস্থান রয়েছে - আপনি যদি গুগলকে "বিপরীতমুখী গতিবিজ্ঞান জ্যাকবিয়ান" এর জন্য জিজ্ঞাসা করেন ।

এছাড়াও, পরিচিতি রোবোটিক্সের উপর এম আইটির ওপেন কোর্স থেকে বক্তৃতা নোটগুলির অধ্যায় 5.3 দেখুন ।


1

দুটি বিস্তৃত পদ্ধতি আছে:

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

ম্যাটল্যাবের জন্য আমার রোবোটিক্স সরঞ্জাম বাক্স ব্যবহার করে, আমি ডানাভিট-হার্টেনবার্গ পরামিতিগুলি ব্যবহার করে একটি সুপরিচিত 6-অক্ষের রোবটের একটি মডেল তৈরি করেছি

>> mdl_puma560
>> p560

p560 = 

Puma 560 [Unimation]:: 6 axis, RRRRRR, stdDH, fastRNE            
 - viscous friction; params of 8/95;                             
+---+-----------+-----------+-----------+-----------+-----------+
| j |     theta |         d |         a |     alpha |    offset |
+---+-----------+-----------+-----------+-----------+-----------+
|  1|         q1|          0|          0|     1.5708|          0|
|  2|         q2|          0|     0.4318|          0|          0|
|  3|         q3|    0.15005|     0.0203|    -1.5708|          0|
|  4|         q4|     0.4318|          0|     1.5708|          0|
|  5|         q5|          0|          0|    -1.5708|          0|
|  6|         q6|          0|          0|          0|          0|
+---+-----------+-----------+-----------+-----------+-----------+

তারপরে একটি এলোমেলো যৌথ সমন্বয় চয়ন করুন

>> q = rand(1,6)
q =
    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340

তারপরে ফরওয়ার্ড গতিবিজ্ঞান গণনা করুন

>> T = p560.fkine(q)
T = 
   -0.9065    0.0311   -0.4210  -0.02271
    0.2451    0.8507   -0.4649   -0.2367
    0.3437   -0.5247   -0.7788    0.3547
         0         0         0         1

এখন আমরা 6 টি জয়েন্ট এবং একটি গোলাকার কব্জি সহ একটি রোবোটের জন্য একটি প্রকাশিত বিশ্লেষণাত্মক সমাধান ব্যবহার করে বিপরীতমুখী গতিবিজ্ঞান গণনা করতে পারি

>> p560.ikine6s(T)
ans =
    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340

এবং ভয়েলা, আমাদের মূল যৌথ স্থানাঙ্ক রয়েছে।

সংখ্যাগত সমাধান

>> p560.ikine(T)
Warning: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.63042 
> In SerialLink/ikine (line 244) 
Warning: failed to converge: try a different initial value of joint coordinates 
> In SerialLink/ikine (line 273) 

ans =

     []

ব্যর্থ হয়েছে, এবং এটি সাধারণত একটি সাধারণ সমস্যা যেহেতু তাদের সাধারণত একটি ভাল প্রাথমিক সমাধান প্রয়োজন। চেষ্টা করা যাক

>> p560.ikine(T, 'q0', [1 1 0 0 0 0])
ans =
    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340

যা এখন একটি উত্তর দেয় তবে এটি বিশ্লেষণাত্মক সমাধানের চেয়ে আলাদা। যদিও এটি ঠিক আছে, যেহেতু আইকে সমস্যার একাধিক সমাধান রয়েছে। আমরা সমাধানটি ফরওয়ার্ড কাইমেটিকস গণনা করে যাচাই করতে পারি

>> p560.fkine(ans)
ans = 
   -0.9065    0.0311   -0.4210  -0.02271
    0.2451    0.8507   -0.4649   -0.2367
    0.3437   -0.5247   -0.7788    0.3547
         0         0         0         1

এবং যা আমরা যে রূপান্তরটি দিয়ে শুরু করেছি (এটি এটি) একইরূপে এটি পরীক্ষা করা।

অন্যান্য উৎস:

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.