ROS: সেরা অনুশীলন?


14

আমি একটি ছোট রোবট সিস্টেম তৈরি করতে যাচ্ছি , এবং দেখে মনে হচ্ছে যে সিস্টেমটি নিয়ন্ত্রণ এবং প্রোগ্রাম করার জন্য আরওএস একটি সুন্দর কাঠামো পরিবেশন করে।

তবে আমি ভাবছি যে আমার রোবটের উপাদানগুলি পরিচালনা করার জন্য সেরা অনুশীলন।

  • সমস্ত সেন্সরকে একটি নোডে রাখার অর্থ কী?

  • আমি কি একই ধরণের সেন্সরগুলি কেবল একটি নোডে রেখেছি বা একটি সেন্সরের জন্য একটি নোড রাখাই ভাল?

  • কোনও ধরণের হ্যান্ডলার নোড রাখা কি একটি ভাল অনুশীলন, যা সেন্সরগুলির কাছ থেকে ইনপুট নেয় এবং সংশ্লিষ্ট অ্যাকিউটিউটরকে চালিত করে বা অ্যাক্টুয়েটার নোড এবং সেন্সর নোডগুলি সরাসরি যোগাযোগ করা উচিত?


  1. হ্যান্ডলারের সাথে সংযুক্ত সেন্সর নোড এবং অ্যাক্টিভেটর নোড 1. হ্যান্ডলারের সাথে ফিউজড সেন্সর নোড এবং অ্যাক্টিভেটর নোড

  2. হ্যান্ডলারের সাথে একক সেন্সর এবং অ্যাকুয়েটার নোড এখানে চিত্র বর্ণনা লিখুন

  3. সরাসরি যোগাযোগ এখানে চিত্র বর্ণনা লিখুন

আমার জন্য, আমার অনুমানটি হ'ল একরকম হ্যান্ডলার থাকা, যা সেন্সর এবং অ্যাকিউটুয়েটরের মধ্যে যোগাযোগ পরিচালনা করে এবং রোবটের প্রতিটি উপাদানগুলির জন্য একটি নোড থাকে (যেমন চিত্র 2-তে) কারণ সিস্টেমটি এইভাবে আলগাভাবে জুড়ে এবং সহজেই বাড়ানো যেতে পারে তবে আপনার মতামত কী তা জানতে চাই।

উত্তর:


15

খুব সংক্ষিপ্ত উত্তর: 2


সেন্সরগুলো

একটি নোডে বা প্রতিটি পৃথক পৃথকভাবে সেন্সরগুলি থেকে পড়া কিনা সে সম্পর্কে আপনার নিজের উচিত এই প্রশ্নটি:

সেন্সরগুলি কি অন্য ছাড়া অর্থহীন?

এই প্রশ্নটি জিজ্ঞাসা করে যে সেন্সরগুলি দৃly়ভাবে মিলিত হয়েছে কি না। উদাহরণস্বরূপ, বলুন যে আপনার কাছে এমন একটি সেন্সর রয়েছে যা তাপমাত্রার সাথে সংবেদনশীল (এবং আপনার এটির ক্ষতিপূরণ দিতে হবে)। প্রাথমিকভাবে অন্যান্য সেন্সরের মান ঠিক করতে আপনি একটি তাপমাত্রা সংবেদক যুক্ত করেন। এই দৃশ্যে, উভয় মান একই সাথে পড়ার অর্থ হয়, যেহেতু তারা দৃly়ভাবে একত্রিত হয় coup প্রকৃতপক্ষে, তাপমাত্রা সেন্সর থেকে পড়া ছাড়া, মূল সেন্সর থেকে পড়া অকেজো।

অন্যদিকে, সেন্সরগুলি যদি স্বতন্ত্রভাবে কার্যকর হয় তবে সেগুলি যে কোনও উপায়ে পৃথক নোডে রাখবে। এর অনেক সুবিধা রয়েছে:

  • নোডগুলি পৃথক প্রসেসরের উপর চালানো যেতে পারে
  • নোডগুলি ভবিষ্যতের রোবোটগুলিতে পুনরায় ব্যবহার করা যেতে পারে
  • একটি নোডের সাথে যোগাযোগের ব্যর্থতা পুরো সিস্টেমটিকে ডাউন করে না
  • ত্রুটিযুক্ত সেন্সর বোর্ড থেকে অধিগ্রহণ পুনরায় আরম্ভ করা অন্যদের থেকে পৃথকভাবে করা যেতে পারে

প্রকৃতপক্ষে, যদি আপনাকে উপরের কোনও সুবিধাগুলির প্রয়োজন হয় তবে সেন্সরগুলি দৃ tight়ভাবে একত্রিত করা হলেও আপনাকে পৃথক নোড দিয়ে যেতে হবে, তবে সাধারণত এটি হয় না।

actuators

এটি সাদৃশ্যপূর্ণ।

অভিনেতা অন্য ছাড়া কি অর্থহীন?

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

অন্যদিকে, যেখানে অ্যাক্টিউটররা স্বতন্ত্র (প্রচলিত কেস) থাকে, সেখানে প্রতিটি অ্যাক্টুয়েটারের জন্য একটি নোড থাকা বোঝা যায়। সেক্ষেত্রে প্রত্যেককে আলাদা নোডে রাখা যেতে পারে। সেন্সরগুলির মতো ঠিক একই সুবিধাগুলি ছাড়াও এই অতিরিক্ত সুবিধা রয়েছে:

  • যদি কোনও অ্যাকিউইউটর আটকে থাকে (যে কোনও কারণেই হোক), অন্য অভিনেতা এখনও কাজ করে। যদি স্বাধীনতার অপ্রয়োজনীয় ডিগ্রি থাকে তবে তারা এটির জন্য সম্পূর্ণ ক্ষতিপূরণ দিতে পারে।

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

হ্যান্ডলার থাকা উচিত?

যদিও উত্তরটি "এটি নির্ভর করে", সেখানে অনেক সুবিধা সহ একটি সাধারণ পন্থা রয়েছে। নামটি পরিবর্তন করে এটিকে "নিয়ামক" বলি। পদ্ধতির "হ্যাঁ, একটি নিয়ামক থাকা উচিত"।

একটি নিয়ামক থাকার সুবিধা (অনেকের মধ্যে):

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

এগুলি বলেছে, অসুবিধাগুলিও রয়েছে। আরও নোড থাকা (যে কোনও নোড, কেবল নিয়ামক নয়) এর অর্থ:

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

উপরের সমস্ত অসুবিধাগুলিতে, সমাধানটি হ'ল নোডের সংখ্যা হ্রাস করা, পছন্দমত একক নোডকে। এক মিনিট অপেক্ষা করুন, এটি আর আরএস ব্যবহার করছে না! যথাযথভাবে।

সংক্ষেপ:

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

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


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