سلام! من به عنوان یک تأمین کننده AGV ، یک تجربه در برنامه نویسی این وسایل نقلیه هدایت شده خودکار را تجربه کردم. امروز ، من می خواهم شما را در طی مراحل برنامه نویسی AGV قدم بزنم و نکات و ترفندهایی را در این راه به اشتراک بگذارم.
درک اصول برنامه نویسی AGV
اول چیزها ابتدا ، بیایید در مورد AGV صحبت کنیم. دروسیله نقلیه هدایت شده خودکاریک وسیله نقلیه خود در حال حرکت است که بدون نیاز به یک اپراتور انسانی ، مواد را در اطراف یک تسهیلات حرکت می دهد. آنها در انواع صنایع ، از تولید تا انبارداری ، برای بهبود کارآیی و کاهش هزینه های نیروی کار استفاده می شوند.
قبل از شروع برنامه نویسی ، باید سخت افزار AGV را درک کنید. معمولاً از شاسی ، موتورها ، سنسورها و یک واحد کنترل تشکیل شده است. سنسورها بسیار مهم هستند زیرا به AGV کمک می کنند تا محیط آن را ببینند. سنسورهای متداول شامل اسکنر لیزر ، دوربین و سنسورهای مجاورت هستند.


انتخاب زبان برنامه نویسی مناسب
چندین زبان برنامه نویسی وجود دارد که می توانید برای برنامه ریزی AGV استفاده کنید. انتخاب بستگی به پیچیدگی کارها و قابلیت های سیستم کنترل AGV دارد.
- پیتون: این یک انتخاب محبوب است زیرا یادگیری آن آسان است و تعداد زیادی کتابخانه دارد. به عنوان مثال ، می توانید از
اعماقکتابخانه برای محاسبات عددی وOpenCvبرای انجام وظایف رایانه ای اگر AGV شما مجهز به دوربین است. - C/C ++: این زبانها پایین تر هستند و عملکرد بهتری ارائه می دهند. آنها برای کارهایی که نیاز به کنترل زمان واقعی دارند ، مانند کنترل موتور و پردازش داده های سنسور بسیار عالی هستند.
تعریف وظایف AGV
مرحله بعدی این است که بفهمید AGV چه کارهایی را باید انجام دهد. این می تواند چیزی به سادگی حرکت از نقطه A به نقطه B یا به همان اندازه پیچیده انتخاب و رها کردن موارد در چندین مکان باشد.
بیایید بگوییم که شما می خواهید AGV در یک مسیر از پیش تعریف شده حرکت کند. شما باید مختصات مسیر را تعریف کنید. شما می توانید از یک سیستم مختصات بر اساس چیدمان تسهیلات خود استفاده کنید. به عنوان مثال ، اگر تسهیلات شما یک انبار است ، می توانید از ردیف ها و ستون های قفسه های ذخیره سازی به عنوان مرجع استفاده کنید.
برنامه نویسی حرکت AGV
برنامه ریزی مسیر
برنامه ریزی مسیر بخش مهمی از برنامه نویسی AGV است. برای رسیدن به مقصد خود باید کوتاهترین و امن ترین مسیر را برای AGV پیدا کنید. چندین الگوریتم وجود دارد که می توانید برای برنامه ریزی مسیر استفاده کنید:
- بوهاالگوریتم*: این یک الگوریتم محبوب برای یافتن کوتاهترین مسیر در یک نمودار است. برای رسیدن به هدف ، فاصله بین گره ها و هزینه تخمینی را در نظر می گیرد. شما می توانید طرح تسهیلات خود را به عنوان نمودار نشان دهید ، جایی که گره ها نقاط روی کف هستند و لبه ها مسیرهای ممکن بین نقاط هستند.
- الگوریتم Dijkstra: مشابه الگوریتم A* ، اما از هزینه تخمینی برای هدف استفاده نمی کند. به سادگی کوتاهترین مسیر را از یک گره شروع به تمام گره های دیگر در نمودار پیدا می کند.
در اینجا یک مثال ساده از نحوه اجرای الگوریتم A* در پایتون آورده شده است:
وارد کردن Heapq def Heuristic (a ، b): بازگشت ABS (a [0] - b [0]) + abs (a [1] - b [1]) def a_star (array ، start ، هدف): همسایگان = [(0 ، 1) ، (0 ، -1) ، (1 ، 0) ، (-1 ، 0)] close_set: start = {starm = {starm = {gscore = {starm = {gscore = {gscore = {gscore = {gscore = {gscore = {gscore = {gscore = {gscore = {gscore = {gscore = {gscore = {gscore = {gscore = {{gscore = {gscore = {{gscore = {gscore =) {شروع: اکتشافی (شروع ، هدف)} OHEAP = [] Heapq.heappush (Oheap ، (fscore [start] ، start)) در حالی که OHEAP: جریان = heapq.heappop (OHEAP) [1] اگر فعلی == هدف: داده ها = [] در حالی که جریان در حال حاضر ، append (جریان) for) for justm (جریان) jOnd.Ad.Ad data_from_from cond.Ad.Ad.ad data_from_from joind. = جریان [0] + i ، جریان [1] + j temperative_g_score = gscore [جریان] + اکتشافی (جریان ، همسایه) اگر 0 <= همسایه [0] <len (آرایه): اگر 0 <= همسایه [1] <len (آرایه [0]): اگر آرایه [همسایه [0]] [همسایه [1]]] == 1: # Array # Array: and teamative_g_score> = gscore.get (همسایه ، 0): ادامه دهید اگر teasiative_g_score <gscore.get (همسایه ، 0) یا همسایه نه در [i [1] برای من]: come_from [همسایه] = gscore فعلی [همسایه] = teasiation_g_score [همسایه] = همسایگی (همسایه) = tentative_g_gore + hearistic + hearistic + hearistic + hearistic + hearistic (همسایه) (FSCORE [همسایه] ، همسایه)) هیچ کدام را برگردانید
کنترل موتور
پس از برنامه ریزی مسیری ، باید موتورهای AGV را کنترل کنید تا مسیر را دنبال کنید. سیستم کنترل AGV معمولاً دارای درایور موتور است که با ارسال دستورات قابل کنترل است.
اگر از میکروکنترلر برای کنترل AGV استفاده می کنید ، می توانید از مدولاسیون عرض پالس (PWM) برای کنترل سرعت موتورها استفاده کنید. PWM با تغییر عرض پالس های ارسال شده به درایور موتور کار می کند ، که به نوبه خود ولتاژ متوسط اعمال شده روی موتور را کنترل می کند.
در اینجا یک مثال ساده از نحوه کنترل یک موتور با استفاده از PWM در Arduino (که از C/C ++ استفاده می کند) آورده شده است:
const int motorpin = 9 ؛ void setup () {pinmode (موتور ، خروجی) ؛ loop void loop () {// سرعت موتور را روی 50 ٪ آنالوگ نویس تنظیم کنید (MotorPin ، 128) ؛ تأخیر (1000) ؛ // سرعت موتور را روی 100 ٪ آنالوگ نویس تنظیم کنید (موتور سیکلت ، 255) ؛ تأخیر (1000) ؛ }
رسیدگی به موانع
یکی از چالش های برنامه نویسی AGV ، رسیدگی به موانع است. AGV باید بتواند موانع موجود در مسیر خود را تشخیص دهد و یا از آنها جلوگیری کند یا با خیال راحت متوقف شود.
تشخیص مانع
همانطور که قبلاً ذکر شد ، از سنسورهایی مانند اسکنر لیزر و دوربین می توان برای تشخیص مانع استفاده کرد. یک اسکنر لیزر پرتوهای لیزری را ساطع می کند و مدت زمان لازم برای تیرها را به عقب می اندازد. اگر مانعی در مسیر وجود داشته باشد ، زمان پرواز کوتاه تر خواهد بود.
همچنین می توان از دوربین ها برای تشخیص موانع استفاده کرد. شما می توانید از تکنیک های دید رایانه ای برای تجزیه و تحلیل تصاویر ضبط شده توسط دوربین و شناسایی اشیاء موجود در صحنه استفاده کنید.
جلوگیری از مانع
پس از شناسایی مانع ، AGV باید از آن جلوگیری کند. یکی از راه های انجام این کار ، برنامه ریزی مجدد مسیر است. شما می توانید از الگوریتم های برنامه ریزی یکسان که قبلاً ذکر شد استفاده کنید ، اما با اطلاعات به روز شده در مورد مانع.
رویکرد دیگر استفاده از یک استراتژی کنترل واکنشی است. به عنوان مثال ، اگر AGV مانعی را در سمت چپ خود تشخیص دهد ، می تواند به سمت راست بماند تا از آن جلوگیری شود.
برنامه نویسی برای کارهای تخصصی
دست زدن به بار
اگر AGV شما برای رسیدگی به بارها طراحی شده است ، مانندوسیله نقلیه هدایت شده با لیزر سنگین، شما باید مکانیسم حمل بار را برنامه ریزی کنید. این می تواند شامل کنترل بازوی روباتیک یا کمربند نقاله باشد.
شما باید اقدامات را برای برداشتن و رها کردن بار تعریف کنید. به عنوان مثال ، اگر AGV از یک بازوی روباتیک استفاده می کند ، برای رسیدن به بار و گرفتن آن باید حرکت اتصالات بازو را برنامه ریزی کنید.
برقراری ارتباط با سایر سیستم ها
در یک سناریوی واقعی جهانی ، AGV ممکن است نیاز به برقراری ارتباط با سایر سیستم های موجود در این مرکز ، مانند یک سیستم مدیریت انبار (WMS) داشته باشد. برای برقراری ارتباط می توانید از پروتکل هایی مانند Modbus یا اترنت/IP استفاده کنید.
به عنوان مثال ، WMS می تواند وظایف را به AGV ارسال کند و AGV می تواند وضعیت خود را به WMS برگرداند.
پایان
برنامه نویسی AGV یک کار پیچیده اما با ارزش است. این شامل درک سخت افزار ، انتخاب زبان برنامه نویسی مناسب ، تعریف وظایف ، برنامه های برنامه ریزی ، کنترل موتورها ، رسیدگی به موانع و برنامه نویسی برای کارهای تخصصی است.
اگر به دنبال ادغام AGV در عملیات خود هستید ، ما برای کمک به اینجا هستیم. این که آیا شما به یک AGV اساسی برای کار با مواد ساده یا یک وظیفه سنگین نیاز داریدوسیله نقلیه هدایت شده با لیزر سنگین، ما تخصص لازم را برای برنامه ریزی و سفارشی سازی AGV برای پاسخگویی به نیازهای خاص شما داریم. برای شروع بحث در مورد نیازهای خود با ما تماس بگیرید و ببینید که چگونه می توانیم گردش کار شما را با راه حل های AGV خود بهینه کنیم.
منابع
- "هوش مصنوعی: یک رویکرد مدرن" توسط استوارت راسل و پیتر نورویگ
- "ربات های برنامه نویسی با ROS" اثر مورگان کویگلی ، برایان گریکی و ویلیام دی.
- مستندات Arduino: https://www.arduino.cc/reference/en/



