ডিফারেনশাল ড্রাইভ রোবটের অবস্থান গণনা করুন


14

আপনি কীভাবে ইনক্রিমেন্টাল সেন্সর সহ ডিফারেনশিয়াল ড্রাইভ রোবটের অবস্থান গণনা বা আপডেট করবেন?

দুটি ডিফারেনশিয়াল চাকার প্রত্যেকটিতে সংযুক্ত একটি বাড়ন্ত সংবেদক রয়েছে। উভয় সেন্সর দূরত্ব নির্ধারণ করে শ্রুতি। Δ r আমি তাদের চাকা একটি পরিচিত সময় ঘূর্ণিত হয়েছে Δ টিΔleftΔrightΔt

প্রথমে, উভয় চাকার মাঝখানে কেন্দ্রটি ধরে নেওয়া যাক রোবটের অবস্থান চিহ্নিত করে। এই ক্ষেত্রে, কেউ অবস্থান হিসাবে এটি গণনা করতে পারে:

x=xleft+xright2y=yleft+yright2

উভয় চাকা একটি সরলরেখায় গড়িয়েছে (যেটি ছোট দূরত্বের জন্য প্রায় সঠিক হওয়া উচিত) এই ধারণার অধীনে এই সমীকরণগুলিকে "ডেরাইভিং" করতে হবে:

ΔxΔt=12(ΔleftΔt+ΔrightΔt)cos(θ)ΔyΔt=12(ΔleftΔt+ΔrightΔt)sin(θ)

যেখানে হ'ল রোবটের ওরিয়েন্টেশনের কোণ। এই কোণটির পরিবর্তনের জন্য আমি সমীকরণটি পেয়েছিθ

ΔθΔt=1w(ΔleftΔtΔrightΔt)

কোথায় উভয় চাকার মধ্যে দূরত্ব।w

কারণ এবং Δ Y উপর নির্ভর করে θ , আমি ভাবছি কিনা আমি প্রথম নতুন নিরূপণ করা উচিত θ যোগ করে Δ θ অথবা যদি আমি বরং 'পুরানো' ব্যবহার করা উচিত θΔxΔyθθΔθθ ? একে অপরকে ব্যবহার করার কোনও কারণ আছে কি?

তারপরে, এখন ধরে নেওয়া যাক উভয় চাকার মধ্যবর্তী কেন্দ্রটি রোবটের অবস্থান চিহ্নিত করে না । পরিবর্তে আমি একটি পয়েন্ট ব্যবহার করতে চাই যা রোবটের সীমানা বাক্সের জ্যামিতিক কেন্দ্রকে চিহ্নিত করে। তারপরে এবং y এতে পরিবর্তন করুন:xy

x=xleft+xright2+lcos(θ)y=yleft+yright2+lsin(θ)

"ডেরাইভিং" প্রথমটি দেয়:

ΔxΔt=12(ΔleftΔt+ΔrightΔt)cos(θ)lsin(θ)ΔθΔt

এখন সেখানে একটি মুখাপেক্ষিতা হয় এই "নতুন" ব্যবহার করার জন্য একটি কারণ আছে θ ?Δθθ

অবস্থান এবং ওরিয়েন্টেশনের যুগোপযোগী আপডেট করার জন্য এর চেয়ে ভাল আর কোন পদ্ধতি কি থাকতে পারে? জটিল সংখ্যা (3 ডি চতুর্ভুজ হিসাবে একই পদ্ধতির?) বা সমজাতীয় স্থানাঙ্ক ব্যবহার করা যেতে পারে?

উত্তর:


8

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

সুতরাং, একবার কল্পনা করুন যে প্রতিটি সময় পদক্ষেপের উপরে, বা প্রতিবার আপনি যখন ইনক্রিমেন্টাল সেন্সরগুলির পরিবর্তনটি গণনা করেন, রোবটটি বিন্দু A থেকে বিন্দু বিতে একটি খিলানটির উপরে ভ্রমণ করে: enter image description here গণিতের সাথে এখানে কিছু নমুনা কোড সরল:

// leftDelta and rightDelta = distance that the left and right wheel have moved along
//  the ground

if (fabs(leftDelta - rightDelta) < 1.0e-6) { // basically going straight
    new_x = x + leftDelta * cos(heading);
    new_y = y + rightDelta * sin(heading);
    new_heading = heading;
} else {
    float R = unitsAxisWidth * (leftDelta + rightDelta) / (2 * (rightDelta - leftDelta)),
          wd = (rightDelta - leftDelta) / unitsAxisWidth;

    new_x = x + R * sin(wd + heading) - R * sin(heading);
    new_y = y - R * cos(wd + heading) + R * cos(heading);
    new_heading = boundAngle(heading + wd);
}

স্টিয়ারিংয়ের বিভিন্ন উপায়ে প্রদর্শন করতে আমি একটি সিমুলেটরটিতে অনুরূপ গণিত ব্যবহার করেছি: http://www.cs.utexas.edu/~rjnevels/RobotSimulator4/demos/SteeringDemo/


1
উপরের কোড স্নিপেটে ব্যবহৃত সমীকরণগুলি এখানে উত্পন্ন হয়েছে: rossum.sourceforge.net/papers/DiffSteer
কামেক

দুর্দান্ত ব্যাখ্যা! সিমুলেটারের লিঙ্কটি নষ্ট হয়েছে
স্মার্কম্যান

2

বারবার গণনার জন্য, আপনি এটি সন্ধান করেন কিনা তা বিবেচ্য নয় Δθ আপনি আবেদন করার আগে বা পরে θ যাও Δএক্স,ΔYহিসাব। আপনি সবসময় অবস্থান এবং অরিয়েন্টেশন গণনার মধ্যে বিকল্প হবেন।

ব্যবহারিক অর্থে, এটি গণনা করা ভাল Δθ আপনি গণনা করার পরে Δএক্স,ΔY, যেহেতু লুপের মাধ্যমে আপনার প্রথম পুনরাবৃত্তির প্রাথমিক মান প্রয়োজন θ

মনে রাখবেন যে এটি যাইহোক ত্রুটি-প্রবণ পরিমাপ পদ্ধতি - এটি 3 ডি বিশ্বের প্রায় 2D অনুমানের খাওয়ানো 1D পরিমাপের একজোড়া। এমনকি যদি আপনি একটি পেতে সক্ষম হনΔটি খুব নিকটে 0, এটি এখনও হুইল স্লিপেজ এবং অসম ভূখণ্ডের জন্য অ্যাকাউন্ট করবে না।


"ডিফারেন্টাল ড্রাইভ যানবাহনের অগ্রগতি গতিবিজ্ঞান" অনুসন্ধান করা এই প্রশ্নের আরও গাণিতিক পদ্ধতির সাথে অনেকগুলি নিবন্ধ সরবরাহ করা উচিত।
আয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.