ড্রোন লক্ষ্যবস্তু


9

একটি 2 ডি প্লেনে একটি "ড্রোন" এবং একটি লক্ষ্য বিন্দুর কল্পনা করুন। আটটি প্যারামিটার রয়েছে:

P = my position
Q = target position
V = my velocity
I = my moment of inertia
w = my angular velocity
s = my angular position
T = max thrust
U = max torque

(আমরা কেবল লক্ষ্যটি স্থির করে নেব)

ড্রোনটির কাজ সর্বাধিক টর্ক এবং সর্বাধিক থ্রাস্ট মান্য করে যত তাড়াতাড়ি সম্ভব টার্গেটে পৌঁছানো। টর্ক প্রয়োগের জন্য কেবল দুটি উপায় রয়েছে, যেহেতু এটি কেবলমাত্র 2 ডি বিমানের মধ্যে। নৈপুণ্যের অভিযোজনের সাথে সামঞ্জস্য রেখে কেবলমাত্র এক দিকে যেতে সীমাবদ্ধ এবং ড্রোনটি ঘোরানো ছাড়া লক্ষ্য করা যায় না। যে কোনও প্রতিরোধকে অবহেলা করুন, আপনি কেবল এটি বাহির করতে পারেন এটি 2 ডি বাইরের স্থানে ভাসমান। আসুন বলুন যে ড্রোন সময় ব্যবধানে একটি সমীকরণ পরীক্ষা tকরে (সম্ভবত প্রতি .01 সেকেন্ডের মতো কিছু) প্যারামিটারগুলিতে প্লাগ ইন করে এবং তার টর্কে সামঞ্জস্য করে এবং তদনুসারে এটি চাপ দেয়। থ্রাস্ট এবং টর্কের সমীকরণগুলি কী হওয়া উচিত?


3
যদি চাপ কেবল এক দিকে যেতে পারে তবে আপনি কখনই দিক পরিবর্তন করতে যাবেন না।
MichaelHouse

1
আমার আরও স্পষ্টভাবে উল্লেখ করা উচিত ছিল - আপনি থ্রাস্ট জিম্বল করতে পারবেন না, অর্থাৎ থ্রাস্ট কেবল ক্র্যাফ্টের অরিয়েন্টেশনের সাথে সম্পর্কিত এক দিকে যেতে পারে। আপনি এখনও নৈপুণ্যটি ঘোরান এবং জোরের দিক পরিবর্তন করতে পারেন।
Gus

2
এই প্রশ্নটি কি নোডেওয়ারের সাথে সম্পর্কিত?
শেঠ ব্যাটিন

1
তারপরে আমি মনে করি আমি আপনার জন্য একটি ভাল সমাধান পোস্ট করতে পারি (আজ রাতে একটু পরে)। :)
শেঠ ব্যাটিন

1
এই প্রশ্নের আরও বর্ণনামূলক শিরোনাম প্রয়োজন, তবে আমি একটি ভালটির কথা ভাবতে পারি না। সম্বন্ধে সাহায্য?
আনকো

উত্তর:


5

আপনার প্রশ্নের প্রসঙ্গে, http://nodewar.com/ , আপনার সমাধানের জন্য কয়েকটি নির্দিষ্ট বিবেচনা রয়েছে:

  1. আপনার কাছে (কম) সর্বাধিক কৌণিক বেগ এবং খুব অল্প সময়ের মধ্যে এটি পৌঁছানোর জন্য পর্যাপ্ত সর্বাধিক টর্ক have
  2. আপনার ড্রোন এবং টার্গেটের প্রতিটিটির বেগ এবং বাহ্যিক ত্বরণ থ্রাস্টের সাথে সম্পর্কিত নয় (মহাকর্ষ প্রচুর পরিমাণে)।
  3. আপনার কাঙ্ক্ষিত লক্ষ্যটি এত ঘন ঘন পরিবর্তিত হয় যে নিখুঁতভাবে লক্ষ্য করার চেষ্টা করা ব্যর্থ হবে। আপনার কাছাকাছি যাওয়ার চেষ্টা করা উচিত, এবং প্রতিটি ফ্রেম এটি সংশোধন করা উচিত।

এই পদ্ধতিগুলি আমি পছন্দসই ত্বরণে পৌঁছানোর জন্য কাজ করার জন্য স্থির করেছিলাম।

ত্বরণ, বেগ নয়

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

// My target velocity is for maintaining a circular orbit.  Yours may differ.
// Earlier, I calculated total gravity and the perpendicular direction.
// You may wish to subtract gravity from your total, rather than match it.
var targetVel = o.lib.vec.times(lateralDir, targetVelMag);

var targetAccel = lv.sum(
  o.lib.vec.diff(targetVel, o.me.vel), 
  o.lib.vec.times(gravity, 1 / o.me.mass)  
);

ডান শিরোনাম দিকে স্টিয়ারিং

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

// convert acceleration to an angle
var polar = o.lib.vec.toPolar(targetAccel);
var traj = polar[1];

// constrain the angle to +/-2PI, because the ship's rotation is not limited 
// by default
var fixed_rot = o.lib.ang.rescale(o.me.rot);

// limit the correction to be +/-1PI
var traj_correction = traj - fixed_rot;
if (traj_correction > (Math.PI)){
  traj_correction = (2 * Math.PI) - traj_correction;
} else if (traj_correction < (-1 * Math.PI)){
  traj_correction = (2 * Math.PI) + traj_correction;
}

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

if (traj_correction > 0){
  torque = 1;
} else if (traj_correction < 0){
  torque = -1;
}

একটি কম সহজ সূত্র। এমন একটি পয়েন্ট আসবে যেখানে আপনি বাঁক চালিয়ে যেতে চান না, কারণ আপনি শেষ পর্যন্ত থামতে চান। সৌভাগ্যক্রমে, সেই কৌণিক বেগ ক্যাপটির অর্থ আপনি দ্রুততম কৌণিক গতি থেকে শূন্যে দ্রুত গতিতে পারেন। আপনাকে কখন এটি করতে হবে তা গণনা করতে হবে।

var max_a_accel = c.MAX_TORQUE / o.me.m_i;
var a_deccel_time = Math.abs(o.me.a_vel) / max_a_accel;
// the same math as linear acceleration, now in angles.
var stopping_angle = 0.5 * max_a_accel * a_deccel_time * a_deccel_time;


if (stopping_angle >= Math.abs(traj_correction)){
  // slowdown required.  Reverse torque
  torque *= -1;
}

আপনার প্রয়োজন অনুসারে উপরের কোডটি টুইট করার পরে, আপনার জাহাজটিকে লক্ষ্য হিসাবে আপনি যে কোণটি দিয়েছেন তা দ্রুত এবং সুনির্দিষ্টভাবে ঘোরানো উচিত।

রমিং গতি

তো, কখন চাপ দেবে? আবার লক্ষ্যটির দ্রুত পরিবর্তন এবং অন্যান্য কারণগুলি সঠিক সমাধান সমাধানে দুর্দান্ত অসুবিধা তৈরি করে। চেষ্টা করবেন না।

// if the heading is close to the final value, thrust.
if (Math.abs(traj_correction ) < 0.02) {  // about 1 degree
  if (true 
      // some logical test, in case you don't want to accelerate past
      // a maximum speed, or some such.  Not required for your stated purpose.
     ){
    thrust = 1;
  } 
}

সেই ক্ষেত্রে যেখানে আপনার আংশিক খোঁচা দরকার, আপনি আবার এই মুহুর্তে নির্ভর করতে পারেন যে আপনি প্রতি সেকেন্ডে 0 থেকে 1 এর মধ্যে বহুবার চয়ন করতে পারেন। এটি আপনাকে আসল মান পরিবর্তিত না করে কার্যকর আংশিক চাপ দেয়।

শুভকামনা!


দুর্দান্ত, ধন্যবাদ, এটি অনেক সাহায্য করে। আমার মনে হয় এটিকে আমি একটু সংশোধন করতে হবে। আপনার প্রজাতির নাম কি?
গাস

আমি সেগুলি সিড়ির দিকে ঠেলে দিইনি। তাদের আক্রমণ করার কোন পদ্ধতি নেই। :)
শেঠ ব্যাটিন

3

এই পুরো বিষয়টির আপাত নাম, "গতি পরিকল্পনা" সহ কিছু ভাল উত্তর সহ একই ধরণের প্রশ্ন:
/programming/2560817/2d-trajectory-planning-of-a-spaceship-with-phics

প্রোগ্রামার হিসাবে আমি ইউজার ৪70০৩65৫ এর পরামর্শটির কার্যকারিতা পছন্দ করি। তবে আমি আরও কঠোর পদ্ধতির দিকে ছুরিকাঘাত করব। আমার পরামর্শ এখানে শুরুতে একটি সম্পূর্ণ পরিকল্পনা গণনা করে তবে আমি মনে করি আপনি প্যারামিটারগুলি পরিবর্তিত হলে আপনি যতবার ইচ্ছা ততবার পুনরায় মূল্যায়ন করতে পারেন।

পরিকল্পনা

  1. একটি নির্দিষ্ট দিকে ঘুরুন, d , এবং সেই দিকটি ধরে রাখুন।
  2. একটি নির্দিষ্ট সময় পর্যন্ত অপেক্ষা করুন, টি , তারপরে একটি করুন, লক্ষ্য পৌঁছে না দেওয়া পর্যন্ত টিকিয়ে রাখুন।

বিস্তারিত

আমি d এবং t সন্ধান করার জন্য পুনরাবৃত্তি পদ্ধতিগুলি পরামর্শ দিই :

  1. কোনও চাপ, ধরে নেই ড্রোনটির ভবিষ্যতের ট্র্যাজেক্টোরির সাথে একটি লুপ এবং একটি ছোট টাইমস্টেপ ব্যবহার করুন:

    • ভবিষ্যতের সময়ে ড্রোন অবস্থান এবং বেগের জন্য, দিকনির্দেশ অনুসন্ধান করুন, d , যাতে একটি টেকসই জোর ড্রোনটিকে লক্ষ্যবস্তুতে নিয়ে আসে। 0 থেকে 360 ডিগ্রির মধ্যে প্রচুর দিকের নমুনা তৈরি করে এবং এটি আবিষ্কার করুন যা সবচেয়ে কম সময়ে ড্রোনকে লক্ষ্যমাত্রার কাছে নিয়ে আসে।
    • আমাদের এখন এবং ভবিষ্যতের সময়ের মধ্যে ডি তে পরিণত হওয়ার পর্যাপ্ত সময় আছে কিনা তা পরীক্ষা করে দেখুন । (টার্নিং অ-তুচ্ছ হয় is আলোচনা শেষে দেখুন)
    • আমাদের যদি পর্যাপ্ত সময় থাকে তবে আমাদের অনুসন্ধান সম্পূর্ণ, সুতরাং এই লুপটি ভেঙে ফেলুন।
  2. আমরা এখন d এবং t খুঁজে পেয়েছি ।

  3. ঘুরে যত তাড়াতাড়ি সম্ভব (আবার নীচে আলোচনা দেখুন)।
  4. হওয়া পর্যন্ত অপেক্ষা করুন টন , তারপর টেকসই খোঁচা শুরু।
  5. ড্রোনটি শেষ পর্যন্ত লক্ষ্যবস্তুতে আঘাত করা উচিত।

বাঁক

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


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