জাহাজটি ঘোরানোর জন্য কোন থ্রাস্টার চালু করতে হবে তা কীভাবে নির্ধারণ করবেন?


47

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

http://i.stack.imgur.com/GSBSH.png

আমি এ পর্যন্ত যা চেষ্টা করেছি তা হ'ল ফায়ারিং ভেক্টর এবং জাহাজের ভর কেন্দ্রে নির্দেশক ভেক্টরটি কল্পনা করা:

http://i.stack.imgur.com/ZzNzi.png

দুর্ভাগ্যক্রমে, আমি এটির সাথে খুব বেশি দূরে যাইনি।


7
আপনি ফোর্স ভেক্টরগুলির সাথে সঠিক দিকে এগিয়ে চলেছেন। আপনি জাহাজকে ভরের কেন্দ্রের চারদিকে ঘোরানোর চেষ্টা করছেন বলে আঙুলের বেগের সূত্রগুলি অনুসন্ধান করার চেষ্টা করুন।
পরিবর্ধিত 91

কিভাবে আমি এর ঠিক করতে ভুলবেন কিন্তু মূলত প্রতিটি বিন্দুতে তার মাত্র বাহিনী en.wikipedia.org/wiki/Center_of_mass এবং বিশেষ করে en.wikipedia.org/wiki/Parallel_axis_theorem
CobaltHex

1
আমার ঠিক একই ধারণা ছিল! আপনার পক্ষে সহজতর করতে পারে এমন একটি টিপটি হ'ল প্রতিটি থ্রাস্টারের জন্য আপনাকে কেবল একবার কৌণিক এবং লিনিয়ার ত্বরণ গণনা করতে হবে, সুতরাং গণনাগুলি আপনার পছন্দ মতো জটিল হতে পারে।
মার্কাস ফন ব্রডি

@ এমপ্লিফাইটি ৯৯, আপনার মন্তব্যটি নির্ভর করে আমাকে এটিকে বের করতে সহায়তা করেছে, ধন্যবাদ!
মাইগিমুঞ্জ

1
@ মিগিমুঞ্জ আমি বরং থ্রাস্টারে প্রতি ত্বরণ গণনা করার জন্য ভাবছিলাম, কী চাপানো (থ্রাস্টারদের দল) দ্বারা নয়। এছাড়াও, খেলোয়াড়কে এমন কোন পছন্দ দেওয়া যা কোন থ্রাস্টারগুলি সক্রিয় করা উচিত যার উপর চাপানো কী কী আকর্ষণীয় হতে পারে (কিছু লোক স্থানে ঘোরার জন্য দ্রুত ঘোরানো বাণিজ্য করবে)
মার্কাস ভন ব্রোডি ২

উত্তর:


22

সফল! এটি এখানে, এবং এটি যেমনটি ঘোরানো হচ্ছে তেমনি: এখানে চিত্র বর্ণনা লিখুন

আমি যা করেছি তা নিম্নরূপ: প্রতিটি থ্রাস্টারের জন্য, আমি ভর কেন্দ্রের সাথে সম্পর্কযুক্ত, টর্কটির মাত্রা গণনা করি।

private function thrustTorque():Float
{
    // distToCom is the distance vector between the thruster and center of mass
    // fire angle is a unit vector representing the direction of the thruster
    var distAngle = Math.atan2(distToCOM.y, distToCOM.x);
    var fireAngle = Math.atan2(dir.y, dir.x);
    var theta = fireAngle - distAngle;
    var torque = distToCOM.length * Math.sin(theta);
    return torque;
}

উইকিপিডিয়া অনুসারে টর্কের ম্যাঙ্গিটিউটের সমীকরণটি T = rF sin(theta)যেখানে,

  • আর থ্রাস্টার এবং সিওএম এর মধ্যে দূরত্ব
  • এফ হ'ল প্রয়োগকৃত বলের মাত্রা (আমি এটিকে ছাড়ি, এটির একটি ভান করে, কারণ আমি কেবল সাইন সম্পর্কে যত্নশীল)।
  • থিটা হ'ল দুটি ভেক্টরের মধ্যবর্তী কোণ

যখন প্লেয়ারটি চলে যায়, আমি সেই থ্রাস্টারের জন্য টর্কের চিহ্নটি পরীক্ষা করে দেখি - যদি এটি শূন্যের চেয়ে কম হয়, তবে আমি থ্রাস্টারটিকে ফায়ার করি। এটি ঘড়ির কাঁটার দিকে ঘুরিয়ে দেওয়ার জন্য ঠিক বিপরীত।

এটি সম্ভবত ভেক্টরগুলির মধ্যে কোণটির কোসাইন গণনা করার জন্য ডট পণ্য ব্যবহার করে উন্নত করা যেতে পারে তবে আগামীকাল পর্যন্ত অপেক্ষা করতে হবে।

অবশেষে, এখানে একটি লাইভ ডেমো রয়েছে


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

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

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

3
কোণ গণনা এড়াতে আপনি যা করতে চান তা হ'ল লম্ব ডট পণ্য ব্যবহার করা ( যদি আপনি z = 0 দিয়ে 3 ডি ভেক্টর ব্যবহার করেন তবে টর্ক T = r ক্রস এফ এর ক্রস প্রোডাক্ট সংজ্ঞা থেকে প্রাপ্ত )। আপনি ভেক্টরটি গ্রহণ করেন (-ry, rx), যা একই মাত্রার সাথে আর লম্ব হয় এবং আপনি সেই ভেক্টরের ডট পণ্যটি F এর সাথে গণনা করেন T ফলাফলটি T = rx * Fy - ry * Fx। তারপরে অ্যাবস (টি) হ'ল টর্কের দৈর্ঘ্য এবং এর চিহ্নটি নির্দেশ করে: টি> 0 টি ঘড়ির কাঁটার বিপরীতে, টি <0 টি ঘড়ির কাঁটার দিকে।
জোরেেন

1
এটি কেন কাজ করে তা স্বজ্ঞাতভাবে দেখতে সহজ: r ডট এফ = আর এফ কোস θ θ আপনি ঘোরাতে তাহলে = পাপ (θ) - 90 ডিগ্রী দ্বারা বামাবর্তে এবং ডট পণ্য তুলবেন, আপনি দ এফ পাপ θ কারণ কোসাইন্ (90˚ θ) পেতে।
জোরেেন

14

ঘূর্ণন সঁচারক বল জন্য সাধারণ 3D অভিব্যক্তি স্থানচ্যুতি এবং বল ক্রস পণ্য হল: টি = Rএফ । দুটি মাত্রায়, টর্কের জন্য একটি স্কেলারের মান যথেষ্ট হবে, এবং থ্রাস্টারদের জন্য কেবল চারটি অर्थোগোনাল দিকনির্দেশনা দেওয়া হয়েছে, আমরা টুকরোজ আকারে লিখতে পারি:

  • দিকনির্দেশে + x: টি = এফ * (-আর)
  • দিকের দিকে চাপ দিন -x: T = F * (ry)
  • দিকনির্দেশে + y: টি = এফ * (আরএক্স)
  • দিকনির্দেশে জোর করুন -y: টি = এফ * (-আরএক্স)

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

পদার্থবিজ্ঞানের একটি পরিমিতরূপে সঠিক উপস্থাপনের জন্য, আপনাকে কেবল জোরের চিহ্নটিই জানতে হবে না, এর সম্পূর্ণ পরিমাণ এবং ঘূর্ণন জড়তাও। তদুপরি, আপনি ঘোরানোর জন্য কেবল সমস্ত সঠিকভাবে সংযুক্ত থ্রাস্টারকে সক্রিয় করতে চান না।

মহাকাশযান

অঙ্কিত হিসাবে, থ্রাস্টার বি, ডি এবং ই পূর্ণ শক্তি আবর্তন সর্বাধিক বাড়িয়ে তুলবে, তবে জাহাজটিকে ডানদিকে ত্বরান্বিত করবে। ডি বন্ধ করে দিলে এটি প্রতিরোধ করবে। পরিবর্তে, ডানদিকে ত্বরান্বিত করার উদ্দেশ্যে, কিন্তু একটি ঘড়ির কাঁটার ঘোরানো নয়, সবচেয়ে কার্যকর উপায় হ'ল ডি এবং বরাবর দুই তৃতীয়াংশ পূর্ণ ক্ষমতাতে সি এবং এফ উভয় সক্ষম করে is

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


7

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

দ্বিতীয়ত, আপনার মডেলটিকে চোখের সামনে দেখে মনে হচ্ছে আপনার "ভর কেন্দ্র" আসলে আপনার ভর কেন্দ্র নয়। ভাগ্যক্রমে, এটি টর্কের জন্য আপনার গণনাগুলিকে প্রভাবিত করবে না। তবে এটি গণ-স্থানচ্যুতি কেন্দ্রের জন্য আপনার গণনাগুলিকে প্রভাবিত করবে। আমি নিশ্চিত নই যে আপনি যদি সেই স্তরের নির্ভুলতার বিষয়ে চিন্তা করেন তবে আপনার "ভর কেন্দ্র" কমপক্ষে ভরয়ের প্রকৃত কেন্দ্রের নিকটতম বর্গক্ষেত্র।

তৃতীয়, আপনি যদি কোনও নির্দিষ্ট থ্রাস্টার ঘূর্ণনকে কীভাবে প্রভাবিত করবেন তা গণনা করতে চান তবে আপনার এটি ঠিক আছে, যদিও আপনি একটি অযোগ্য সূত্র ব্যবহার করছেন। টর্ক হিসাবে গণনা করা যেতে পারে r x F, যার দৈর্ঘ্য রয়েছে r*F*sin(theta)। তবে, এই ক্ষেত্রে কোণগুলি গণনা করা একটি অদক্ষ পদ্ধতি। পরিবর্তে, আপনার সরাসরি টর্কের ক্রস-প্রোডাক্ট সংজ্ঞাটি ব্যবহার করা উচিত, কারণ আপনার উপস্থাপনাগুলি ব্যবহার করে এটি আরও সহজ হবে। আপনার সমস্ত ভেক্টরগুলির কোনও জেড উপাদান নেই বলে ক্রস প্রোডাক্টের সূত্রটি খুব সহজ করে।

আপনার গণনার ফলাফলকে কোনও পরিবর্তন না করেই আমরা কেবল আপনার কোড আপডেট করতে পারি

private function thrustTorque():Float
{
    var torque = distToCOM.x*dir.y-distToCOM.y*dir.x;
    return torque;
}

এটি অনেক সুন্দর (এবং দ্রুত)।

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

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

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

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

এ পর্যন্ত লেখার পরে, এটিকে অপ্টিমাইজ করার জন্য আমাকে অ্যালগরিদম সম্পর্কে আরও কিছু ভাবতে হবে। আমার মনে হয় আমার বাকী পোস্টটি যেমন রয়েছে তেমন সহায়ক, তাই আমি এটি পোস্ট করছি তবে আমি এই কনফিগারেশনটি অনুকূল করার সর্বোত্তম উপায় বের করার সময় আপডেট করব (আনুমানিক উত্তর পাওয়ার কয়েকটি উপায় সম্পর্কে আমি ভেবেছিলাম, তবে তাদের কোনওটিই সঠিক নয়)।


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

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