فهرست مطالب:

مریخ نورد تحت کنترل وب: 14 مرحله (همراه با تصاویر)
مریخ نورد تحت کنترل وب: 14 مرحله (همراه با تصاویر)

تصویری: مریخ نورد تحت کنترل وب: 14 مرحله (همراه با تصاویر)

تصویری: مریخ نورد تحت کنترل وب: 14 مرحله (همراه با تصاویر)
تصویری: آیا س*کس از پشت را دوست دارید ؟😱😂😂😱(زیرنویس فارسی) 2024, جولای
Anonim
روور تحت کنترل وب
روور تحت کنترل وب
مریخ نورد تحت کنترل وب
مریخ نورد تحت کنترل وب

ساختن و بازی با روبات ها اصلی ترین لذت گناهکار من در زندگی است. دیگران گلف یا اسکی بازی می کنند ، اما من روبات می سازم (چون نمی توانم گلف بازی کنم یا اسکی کنم:-). به نظرم آرامش بخش و سرگرم کننده است! برای ساخت بیشتر ربات های خود ، از کیت های شاسی استفاده می کنم. استفاده از کیت ها به من کمک می کند آنچه را که بیشتر دوست دارم انجام دهم ، نرم افزار و وسایل الکترونیکی و همچنین باعث می شود شاسی بهتری برای تمام انگشتان دست خود داشته باشم.

در این دستورالعمل ، ما به بررسی آنچه برای ساخت یک مریخ نورد ساده اما قوی Wifi/web کنترل می شود نیاز داریم. شاسی مورد استفاده Actobotics Gooseneck است. من آن را از نظر اندازه ، قابلیت افزایش و هزینه انتخاب کردم ، اما شما می توانید از هر شاسی دیگری به انتخاب خود استفاده کنید.

برای چنین پروژه ای ، ما به یک کامپیوتر تک صفحه ای خوب نیاز داریم و برای این ربات من استفاده از Raspberry Pi (RPI) رایانه مبتنی بر لینوکس را انتخاب کردم. RPI (و لینوکس) گزینه های زیادی برای کدگذاری در اختیار ما قرار می دهد و از پایتون برای قسمت برنامه نویسی استفاده می شود. برای رابط وب از Flask استفاده می کنم ، یک چارچوب وب سبک برای پایتون.

برای رانندگی موتورها ، من RoboClaw 2x5a را انتخاب کردم. این امکان برقراری ارتباط سریالی ساده برای فرمان آن را فراهم می کند و با RPI و موتورهای Gooseneck به خوبی کار می کند.

در نهایت ، دارای یک وب کم برای بازخورد ویدیویی از نوع POV برای رانندگی از راه دور است. بعداً هر مبحث را با جزئیات بیشتری پوشش خواهم داد.

مرحله 1: سخت افزار مورد نیاز است

سخت افزار مورد نیاز
سخت افزار مورد نیاز
سخت افزار مورد نیاز
سخت افزار مورد نیاز
سخت افزار مورد نیاز
سخت افزار مورد نیاز
سخت افزار مورد نیاز
سخت افزار مورد نیاز
  • شاسی Actobotics Gooesneck یا جایگزینی مناسب به انتخاب شما
  • Raspberry Pi به انتخاب خود (یا کلون) - از RPI مدل B در این ربات استفاده می شود ، اما هر کدام با حداقل دو پورت USB کار می کنند
  • استاندارد سروو بشقاب B x1
  • براکت کانال تک زاویه 90 درجه x1
  • راننده موتور RoboClaw 2x5a
  • S3003 یا سروو اندازه استاندارد مشابه
  • نان برد کوچک یا مینی بردبرد کوچک
  • سیمهای جهنده زن به زن
  • سیمهای جهنده نر به ماده
  • وب کم (اختیاری) - من از Logitech C110 استفاده می کنم و در اینجا لیستی از دوربین های پشتیبانی شده برای RPI آمده است.
  • منبع تغذیه 5v-6v برای قدرت سروو
  • باتری 7.2v-11.1v برای تغذیه موتور محرک
  • پاوربانک USB 5V 2600mah (یا بالاتر) برای RPI
  • آداپتور USB Wifi

در ربات خود ، من از چرخ های 4 اینچی استفاده می کنم تا کمی بیشتر در تمام مناطق داخلی ساخته شود. برای این گزینه به موارد زیر نیاز دارید:

  • 4 اینچ چرخ سنگین x2
  • هاب 4 میلی متری پیچ هاب (0.770 اینچ) x2

مرحله 2: مونتاژ شاسی

مونتاژ شاسی
مونتاژ شاسی
مونتاژ شاسی
مونتاژ شاسی
مونتاژ شاسی
مونتاژ شاسی

ابتدا شاسی را طبق دستورالعمل های همراه شاسی یا فیلم مونتاژ کنید. پس از اتمام کار باید چیزی شبیه به تصویر داشته باشید. توجه: هنگام مونتاژ قسمت گردن ، فقط براکت نصب را خاموش بگذارید.

در ربات خود ، من چرخ هایی را انتخاب کردم که شاسی با آن چرخ های 4 اینچی سنگین دارد. این اختیاری است و نیازی به آن نیست مگر اینکه بخواهید همین کار را انجام دهید.

مرحله 3: نصب وسایل الکترونیکی

نصب تجهیزات الکترونیکی
نصب تجهیزات الکترونیکی
نصب تجهیزات الکترونیکی
نصب تجهیزات الکترونیکی
نصب تجهیزات الکترونیکی
نصب تجهیزات الکترونیکی

Gooseneck اتاق و گزینه های زیادی برای نصب لوازم الکترونیکی شما دارد. من این تصاویر را به عنوان یک خط راهنما در اختیار شما قرار می دهم ، اما شما می توانید انتخاب کنید که چگونه می خواهید همه چیز را به نمایش بگذارید. برای نصب برد و باتری می توانید از استند آف ، نوار دو طرفه ، Velcro یا نوار سرو استفاده کنید.

مرحله 4: اضافه کردن وب کم

افزودن وب کم
افزودن وب کم
افزودن وب کم
افزودن وب کم
افزودن وب کم
افزودن وب کم

برای این مرحله براکت 90 درجه ، سرو هاب سبک و چهار (4) پیچ 3.3125 اینچی را بردارید:

  • هاب سروو را بردارید و آن را در یک طرف براکت قرار دهید و آنها را با پیچ های.2125 اینچی مطابق تصویر ثابت کنید
  • سپس سروو را در براکت سروو نصب کنید
  • براکت 90 درجه را با شاخ سرو به ستون فقرات سروو وصل کنید و از پیچ بوق همراه سروو برای اتصال آنها به یکدیگر استفاده کنید.
  • حالا سروو را در براکت با پیچ های باقی مانده روی بالای گردن غاز نصب کنید
  • دوربین را با زیپ یا نوار دو طرفه روی براکت 90 درجه نصب کنید

در صورت نیاز از تصاویر راهنما استفاده کنید.

مرحله 5: سیم کشی همه چیز

سیم کشی همه چیز
سیم کشی همه چیز
سیم کشی همه چیز
سیم کشی همه چیز
سیم کشی همه چیز
سیم کشی همه چیز
سیم کشی همه چیز
سیم کشی همه چیز

سیم کشی این روبات نسبتاً تنگاتنگ است.

موتورها:

اگر قبلاً این کار را نکرده اید ، لحیم کاری روی هر دو موتور انجام می شود

با روبوت های جلویی (انتهای گردن غاز) رو به روی شما:

  • سیم های موتور سمت چپ را به کانال M1A و M1B وصل کنید
  • سیمهای موتور سمت راست را به کانال M2A و M2B وصل کنید

اتصالات زمینی (GND):

  • یک پین زمینی روی RoboClaw را به برد بلوز زمین متصل کنید. خط پین زمینی در RoboClaw نزدیکترین مرکز است (عکس را ببینید)
  • PIN 6 را روی RPI به برد جامپر وصل کنید. برای تخصیص پین به عکس سرصفحه RPI مراجعه کنید.
  • GND را از باتری سروو به یکی از پین های روی صفحه جامپر وصل کنید.
  • یک سیم جامپر را از روی صفحه جامپر به سیم servos GND منتقل کنید.

RPI به RoboClaw:

پین RPI GPIO14 TXD را به پین RoboClaw S1 وصل کنید

قدرت:

  • سیم POS را از باتری سروو به سرور POS سروو وصل کنید
  • سیم POS را از باتری موتور به POS (+) پایانه ورودی قدرت موتور RoboClaw وصل کنید. در حال حاضر ترمینال GND را قطع می کنیم.

مرحله 6: تنظیم RPI

راه اندازی RPI
راه اندازی RPI

فرض می کنم کاربر در اینجا اطلاعاتی در مورد لینوکس و RPI دارد. من نحوه تنظیم یا اتصال به یکی را توضیح نمی دهم. اگر در این زمینه به کمک نیاز دارید از صفحات زیر استفاده کنید.

برای دریافت تنظیمات RPI خود ، به صفحات زیر نگاه کنید:

  • تنظیمات اولیه RPI
  • راهنمای شروع سریع RPI
  • انجمن راه اندازی NOOBS

برای صفحات پرش عمومی ، صفحه اصلی RPI و صفحات eLinux مکانهای خوبی برای شروع هستند.

برای پیکربندی RPI عمومی Wifi به این پیوند مراجعه کنید.

اگر قصد استفاده از نوعی دوربین یا وب کم در ربات را دارید ، به این صفحات نگاهی بیندازید تا فایل های اولیه مورد نیاز را دریافت کنید.

  • راه اندازی دوربین RPI
  • راه اندازی دوربین eLinix RPI

پخش ویدئو:

چند روش برای ایجاد جریان ویدئو روی RPI وجود دارد ، اما روشی که من ترجیح می دهم استفاده از Motion است.

برای نصب آن بر روی RPI خود این دستور را اجرا کنید: sudo apt-get install motion

این دستورالعمل می تواند راه اندازی آن را برای پخش نیز انجام دهد.

مرحله 7: پیکربندی پورت سریال RPI

ما باید حالت کنسول لینوکس را برای استفاده از RX و TX غیرفعال کنیم زیرا می خواهیم با کنترلر موتور RoboClaw از این پورت صحبت کنیم. برای این کار می توانید از این روش یا این ابزار استفاده کنید. انتخاب با روش شماست زیرا هر دو در نهایت یک کار را انجام می دهند.

مرحله 8: نصب ماژول های پایتون

شما به پایتون نصب شده روی RPI و همچنین پیپ نصب کننده پایتون نیاز دارید.

برای نصب pip مراحل زیر را انجام دهید:

  1. sudo apt-get python-setuptools را نصب کنید
  2. sudo easy_inst pip

سپس:

  1. فلاسک نصب sudo pip
  2. sudo pip install pyserial
  3. sudo pip RPIO را نصب کنید

این همه ماژول های مورد نیاز برای اجرای کد خواهد بود.

مرحله 9: راه اندازی RoboClaw

من کد روبات را دارم که با RoboClaw در حالت سریال استاندارد در 19200 baud صحبت می کند.

برای راه اندازی RoboClaw برای این کار ، موارد زیر را انجام دهید:

  1. دکمه "MODE" را در RoboClaw فشار دهید
  2. دکمه تنظیم را فشار دهید تا LED بین تأخیرها 5 (پنج) بار چشمک بزند
  3. برای ذخیره ، دکمه "LIPO" را فشار دهید
  4. سپس دکمه "SET" را فشار دهید تا LED بین تاخیرها 3 (سه) بار چشمک بزند
  5. برای ذخیره دکمه LIPO را فشار دهید

این برای راه اندازی کنترل موتور است. برای اطلاعات بیشتر در صورت نیاز به پی دی اف پیوند شده در بالا مراجعه کنید.

مرحله 10: نصب برنامه یا فایلهای Rover

فایل rover.zip را در RPI خود در فهرست کاربری pi خود بارگیری و کپی کنید.

اگر از لینوکس یا مک استفاده می کنید ، می توانید از 'scp' برای انجام این کار استفاده کنید:

scp ~/location/of/the/file/rover.zip pi@your_rpi_ip:/

برای Windows ، می توانید pscp را بارگیری و استفاده کنید و سپس انجام دهید:

pscp /location/of/the/file/rover.zip pi@your_rpi_ip:/~

پس از کپی فایل zip در RPI ، به عنوان کاربر pi وارد آن شوید.

حالا اجرا کنید:

unzip rover.zip

با این کار فایل ها به پوشه ای با نام 'rover' باز می شوند و موارد زیر در زیر آن پوشه قرار می گیرند:

  • restrover.py (کد پایتون برای ربات)
  • استاتیک (فایل های تصویری دکمه های صفحه کنترل را نگه می دارد)
  • قالب ها (دارای فایل index.htlm ، صفحه وب کنترل)

اگر از وب کم استفاده می کنید ، خط را در انتهای فایل index.html در پوشه قالب اصلاح کنید. URL را در خط IFRAME تغییر دهید تا با URL src جریان ویدیوی شما مطابقت داشته باشد.

مرحله 11: راه اندازی Bot Up

راه اندازی ربات بالا
راه اندازی ربات بالا

برق USB را به RPI وصل کنید.

برای راه اندازی کد ربات ، به عنوان کاربر pi وارد شوید و اجرا کنید:

  • سی دی مریخ نورد
  • sudo python restrover.py

اگر همه چیز خوب بود ، باید در این مرحله صفحه ای مشابه تصویر مشاهده کنید

در صورت مشاهده هرگونه خطا یا مشکلی ، باید قبل از اقدام به رفع آنها اقدام کنید.

اکنون ، سیم GND (-) را به پایانه NEG (-) در ورودی قدرت موتور RoboClaw وصل کنید.

مرحله 12: دسترسی به صفحه کنترل ربات

دسترسی به صفحه کنترل ربات
دسترسی به صفحه کنترل ربات
دسترسی به صفحه کنترل ربات
دسترسی به صفحه کنترل ربات

پس از اجرای اسکریپت پایتون ربات ، RoboClaw را فعال کنید و سپس به IP RPI خود بروید مانند:

your_rpi_ip

باید ببینید صفحه کنترل وب مانند عکس ها ظاهر می شود. در غیر اینصورت ، ترمینال خروجی RPI خود را بررسی کرده و به دنبال خطاها باشید و آنها را اصلاح کنید.

پس از ورود به صفحه ، شما آماده کنترل ربات هستید.

این ربات در حالت "Med run" و با سرعت متوسط شروع به کار می کند.

ربات را می توان از طریق دکمه های روی صفحه یا با کلیدهای صفحه کلید کنترل کرد.

کلیدها عبارتند از:

  • w - به جلو
  • z - معکوس/عقب
  • الف - دور طولانی به چپ
  • s - پیچ طولانی به راست
  • q - دور چپ کوتاه
  • e - پیچ کوتاه راست
  • 1 - دوربین تابه سمت چپ
  • 2 - پان دوربین سمت راست
  • 3 - تابه را کامل چپ کنید
  • 4 - تابه کامل سمت راست
  • / - خانه/ دوربین مرکزی
  • h - توقف/توقف ربات

بین دستورات ارسال شده یک بافر تاخیر نیم ثانیه ای وجود دارد. من این کار را برای حذف دستورات تکراری ناخواسته انجام دادم. البته اگر دوست دارید می توانید این را از کد حذف کنید (در index.html)

بقیه کنترل ها و کنترل آن باید خود توضیحی باشد.

مرحله 13: کد پایتون/فلاسک

این ربات از پایتون و چارچوب وب Flask استفاده می کند. در صورت علاقه می توانید در مورد Flask در اینجا اطلاعات بیشتری کسب کنید.

تفاوت بزرگ با برنامه Flask و اسکریپت معمولی پایتون در @app.route کلاس/روشی است که برای انجام کار با URI استفاده می شود. به غیر از این در اکثر موارد پایتون معمولی است.

#!/usr/bin/env پایتون

# # Wifi/Web -Rover # # نوشته شده توسط Scott Beasley - 2015 # # از RPIO ، pyserial و Flask # واردات سریال واردات زمان از RPIO import PWM از واردات فلاسک ، render_template ، درخواست برنامه = فلاسک (_name_ ، static_url_path = ") # به پورت comm وصل شوید تا با کنترلر موتور Roboclaw صحبت کنید سعی کنید: یافت شد ") sys.exit (0) # متغیرهای کنترل سرعت و رانندگی last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # موقعیت خنثی سروو (خانه) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18 ، servo_pos) # کمی برای تنظیم زمان زمان. خواب (3) # # کنترل کننده های URI - تمام اقدامات صفحه ربات در اینجا انجام می شود # # ارسال صفحه کنترل رباتها (صفحه اصلی) @app.route ("/") def index (): return render_template ('index.html'، name = Hone) @app.route ("/forward") def forward (): last_direction global، run_ti من چاپ "جلو" رفتن app.route ("/backward") def backward (): last_direction global، run_time print "Backward" go_backward () last_direction = 1 # sleep 100ms + run_time time.sleep (0.100 + run_time) # اگر مداوم نباشد ، پس از تأخیر متوقف شوید if run_time> 0: last_direction = -1 halt () بازگشت "ok" @app.route ("/left") def left (): global_direction ، turn_tm_offset print "Left" go_left () last_direction = -1 # sleep @1 /2 second.sleep (0.500 - turn_tm_offset) # توقف توقف () time.sleep (0.100) بازگشت "ok" @app.route ("/right") def right (): global_direction global، turn_tm_offset print "Right" go_right () # sleep @1/2 second.sleep (0.500 - turn_tm_offset) last_direction = -1 # توقف توقف () time.sleep (0.100) بازگشت "ok" @app.route ("/ltforward") def ltforward (): global last_direction ، turn_t m_offset print "گردش به چپ به جلو" go_left () # sleep @1/8 second.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # توقف توقف () time.sleep (0.100) بازگشت "ok"app مسیر stop stop () time.sleep (0.100) بازگشت "ok" @app.route ("/stop") def stop (): global last_direction print "Stop" stop () last_direction = -1 # خواب 100ms time.sleep (0.100) "ok" @app.route ("/panlt") def panlf (): global servo_pos print "Panlt" servo_pos -= 100 if servo_pos 2500: servo_pos = 2500 servo.set_servo (18 ، servo_pos) # خواب 150ms زمان. sleep (0.150) return "ok" @app.route ("/home") def home (): global servo_pos print "Home" servo_pos = 1250 servo.set_servo (18 ، servo_pos) # خواب 150ms time.sleep (0.150) بازگشت "ok" @app.route ("/panfull_lt") def panfull_lt (): global servo_pos print "Pan full l eft "servo_pos = 500 servo.set_servo (18 ، servo_pos) # خواب 150ms time.sleep (0.150) بازگشت" ok " @app.route ("/panfull_rt ") def panfull_rt (): global servo_pos print" Pan full right "servo_pos = 2500 servo.set_servo (18 ، servo_pos) # خواب 150ms time.sleep (0.150) بازگشت "ok" @app.route ("/speed_low") def speed_low (): speed_offset جهانی ، last_direction ، turn_tm_offset speed_offset = 42 turn_tm_offset = 0.001 # جهت فعلی را برای دریافت سرعت جدید در صورت last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) بازگشت "ok" @app.route ("/speed_mid") def را به روز کنید speed_mid (): speed_offset جهانی ، last_direction ، turn_tm_offset speed_offset = 84 turn_tm_offset = 0.166 # جهت فعلی را برای به دست آوردن سرعت جدید به روز کنید) برگرداندن "ok" @app.route ("/speed_hi") def speed_hi (): سراسری_سرعت سراسری ، آخرین_ جهت ، turn_tm_offset speed_offset = 126 تور n_tm_offset = 0.332 # جهت فعلی را برای به دست آوردن سرعت جدید درصورت last_direction == 0: برو ") def berdewam (): global run_time print" Continuous run "run_time = 0 # sleep 100ms time.sleep (0.100) return" ok " @app.route ("/mid_run ") def mid_run (): global run_time print" Mid اجرا "run_time = 0.750 halt () # sleep 100ms time.sleep (0.100) بازگشت" ok " @app.route ("/short_time ") def short_time (): print_time global run" short run "run_time = 0.300 stop () # sleep 100ms time.sleep (0.100) return "ok" # # توابع درایو موتور # def go_forward (): global_offset if speed_offset! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_backward (): speed_offset جهانی اگر speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.wri te (chr (255 - speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) def go_left (): speed_offset جهانی اگر speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_right (): global_offset if speed_offset! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) def halt (): roboclaw.write (chr (0)) if _name_ == "_main_": app.run (host = '0.0.0.0'، port = 80، debug = True)

اگر نمی خواهید یا نیازی به اطلاعات اشکال زدایی از Flask ندارید ، اشکال زدایی را در خط app.run روی 'false' قرار دهید.

if _name_ == "_main_":

app.run (host = '0.0.0.0'، port = 80، debug = False)

همچنین می توانید پورتی را که سرور http Flask به آن گوش می دهد نیز در اینجا تغییر دهید.

مرحله 14: استفاده از سایر سخت افزارها

اگر می خواهید از سخت افزارهای دیگر استفاده کنید ، مانند یک نوع دیگر از SBC (رایانه تک بورد) ، هنگام استفاده از Python و Flask روی تخته های دیگر مانند Beagle Bone ، PCDuino و غیره باید مشکلات کمی داشته باشید … شما باید کد را برای مطابقت با GPIO تغییر دهید. چیدمان کنید و از قابلیت های رانندگی سروو برد جدید استفاده کنید.

برای استفاده از یک نوع راننده موتور دیگر ، فقط باید عملکردهای go_forward ، go_backward ، go_left ، go_right و توقف را تغییر دهید تا بتوانید آنچه را که درایور موتور جایگزین نیاز دارد موتور را برای انجام این عملکرد خاص انجام دهید ، انجام دهید.

توصیه شده: