Агуулгын хүснэгт:

Rpibot - Робот техникийг сурах тухай: 9 алхам
Rpibot - Робот техникийг сурах тухай: 9 алхам

Видео: Rpibot - Робот техникийг сурах тухай: 9 алхам

Видео: Rpibot - Робот техникийг сурах тухай: 9 алхам
Видео: How to Bend a Spoon w/ Your Mind (Psychokinesis) | Guide & Advice | + Ghost Stories: Loyd Auerbach 2024, Долдугаар сарын
Anonim
Rpibot - Робот техникийг сурах тухай
Rpibot - Робот техникийг сурах тухай

Би Германы автомашины компанид суулгагдсан програм хангамжийн инженер хүн. Би энэ төслийг суулгагдсан системийг сурах платформ болгон эхлүүлсэн. Төслийг эрт цуцалсан боловч надад маш их таалагдсан тул би чөлөөт цагаараа үргэлжлүүлэв. Энэ бол үр дүн…

Надад дараах шаардлага тавигдсан.

  • Энгийн тоног төхөөрөмж (програм хангамжид гол анхаарлаа хандуулдаг)
  • Хямд тоног төхөөрөмж (ойролцоогоор 100 евро)
  • Өргөтгөх боломжтой (зарим сонголтууд аль хэдийн тайлбарын нэг хэсэг болсон)
  • Бүх бүрэлдэхүүн хэсгүүдийн нэг хүчдэлийн 5V эх үүсвэрээс тэжээлийн хүчдэл

Сурахаас өөр зорилго байгаагүй. Платформыг суралцах, тандалт хийх, роботын тэмцээн, …

Энэ бол эхлэгчдэд зориулсан заавар биш юм. Танд дараах үндсэн мэдлэг хэрэгтэй болно.

  • Програмчлал (Python)
  • Үндсэн электроник (модулийг зөв хүчдэлээр холбох)
  • Хяналтын үндсэн онол (PID)

Эцэст нь та над шиг асуудалтай тулгарах болно. Бага зэрэг сониуч зан, тэсвэр тэвчээрээр та төслийг хэрэгжүүлж, бэрхшээлийг шийдвэрлэх болно. Миний код аль болох энгийн бөгөөд чухал кодын мөрүүдийг тайлбарлах үүднээс тайлбарласан болно.

Бүрэн эх код, файлуудыг эндээс авах боломжтой:

Хангамж:

Механик

  • 1х фанер хавтан (А4 хэмжээтэй, 4 мм зузаантай)
  • 3x M4 x 80 Шураг ба самар
  • Кодлогчын хоёрдогч гаралтын босоо ам бүхий 2х араатай мотор. Дугуй.
  • 1х үнэгүй дугуй

1х Пан болон налалтын камер суурилуулах (заавал биш)

Электроник

  • Толгой ба камертай 1х Raspberry Pi Zero
  • 1х PCA 9685 servo хяналт
  • 2х Оптик кодлогч дугуй ба хэлхээ
  • 1х эмэгтэй холбогч утас
  • 1х USB цахилгаан банк
  • 1x DRV8833 хос моторт драйвер
  • Камерыг эргүүлэх, хазайлгах зориулалттай 2x Micro servos SG90 (заавал биш)
  • 1х MPU9250 IMU (заавал биш)
  • 1х HC-SR04 хэт авианы зайн мэдрэгч (заавал биш)
  • 1х цоолсон хавтан ба гагнуурын утас, толгой,…

Алхам 1: Явах эд анги бүтээх

Явах эд анги бүтээх
Явах эд анги бүтээх
Явах эд анги бүтээх
Явах эд анги бүтээх
Явах эд анги бүтээх
Явах эд анги бүтээх

Би сайн механик дизайнер биш. Мөн төслийн зорилго бол явах эд ангидаа хэт их цаг зарцуулахгүй байх явдал юм. Ямар ч байсан би дараахь шаардлагыг тодорхойлсон.

  • Хямд үнэтэй материал
  • Хурдан угсрах, задлах
  • Өргөтгөх боломжтой (жишээ нь, нэмэлт мэдрэгчийн зай)
  • Электроникийн эрчим хүч хэмнэх хөнгөн материал

Энгийн бөгөөд хямд явах эд ангиудыг фанераар хийж болно. Хүрээ, гар өрөм ашиглан машин хийхэд хялбар байдаг. Бага модон эд ангиудыг нааж, мэдрэгч ба моторын бэхэлгээг хийж болно.

Согогтой эд ангиудыг солих эсвэл цахилгаан дибаг хийх талаар бодоорой. Үндсэн хэсгүүдийг боолтоор бэхэлж, сольж болно. Халуун цавуу буу нь энгийн байж болох ч явах эд анги хийх хамгийн сайн арга биш байж магадгүй … эд ангиудыг амархан задлах хялбар ойлголтын талаар бодоход надад маш их цаг хугацаа хэрэгтэй байсан. 3D хэвлэх нь сайн хувилбар боловч нэлээд үнэтэй эсвэл цаг хугацаа их шаарддаг.

Үнэгүй дугуй нь маш хөнгөн бөгөөд угсрахад хялбар байдаг. Альтернативууд нь бүхэлдээ хүнд эсвэл үрэлт ихтэй байсан (би эцсийнхийг олохын өмнө хэд хэдэн удаа туршиж үзсэн). Гол дугуйг суурилуулсны дараа зөвхөн сүүлгүй дугуйг тэгшлэхийн тулд модон тусгаарлагчийг огтлох шаардлагатай болсон.

Дугуйны шинж чанар (програм хангамжийн тооцооллын хувьд)

Тойрог: 21, 5 см Пульс: 20 импульс/эргэлт. Шийдэл: 1, 075 см (эцэст нь 1 импульс нь ойролцоогоор 1 см байдаг бөгөөд энэ нь програм хангамжийг тооцоолоход хялбар байдаг)

Алхам 2: Электроник ба утас

Электроник ба утас
Электроник ба утас
Электроник ба утас
Электроник ба утас
Электроник ба утас
Электроник ба утас

Төсөл нь диаграммд үзүүлсэн шиг өөр өөр модулийг ашиглаж байна.

Raspberry Pi Zero нь гол хянагч юм. Энэ нь мэдрэгчийг уншиж, хөдөлгүүрийг ХОУХ -ны дохиогоор хянаж байна. Энэ нь алсын компьютерт wifi -ээр холбогдсон байна.

DRV8833 бол хос хөдөлгүүртэй H-гүүр юм. Энэ нь моторуудад хангалттай гүйдэл өгдөг (гаралт нь зөвхөн зарим мА -ийг дамжуулж чаддаг тул Raspberry Pi үүнийг хийж чадахгүй).

Оптик кодлогч нь кодлогч дугуйгаар гэрэл дамжих бүрт дөрвөлжин хэлбэртэй дохио өгдөг. Бид Raspberry Pi -ийн HW тасалдлыг ашиглан дохио солигдох бүрт мэдээлэл авах болно.

Pca9695 бол servo хяналтын самбар юм. Энэ нь I2C серийн автобусаар холбогдож байна. Энэхүү самбар нь камерын хазайлт ба хазайлтыг хянах зориулалттай ХОУХ -ны дохио, тэжээлийн хүчдэлийг хангадаг.

MPU9265 нь 3 тэнхлэгийн хурдатгал, 3 тэнхлэгийн өнцгийн эргэлтийн хурд, 3 тэнхлэгийн соронзон урсгалын мэдрэгч юм. Бид үүнийг луужингийн чиглэлийг авахад голчлон ашиглах болно.

Янз бүрийн модулиуд нь бүгд холбогч утсаар холбогддог. Талхны самбар нь диспетчерийн үүргийг гүйцэтгэдэг бөгөөд тэжээлийн хүчдэл (5V ба 3.3V) болон үндэслэлээр хангадаг. Холболтыг хүснэгтэд тайлбарласан болно (хавсралтыг үзнэ үү). 5V -ийг 3.3V оролтод холбох нь таны чипийг устгах болно. Нийлүүлэхийн өмнө бүх утсаа сайтар шалгаж, шалгаж үзээрэй (энд тусгайлан кодчилогчийг анхаарч үзэх хэрэгтэй). Бүх самбарыг холбохын өмнө диспетчерийн самбар дээрх тэжээлийн гол хүчдэлийг мултиметрээр хэмжих хэрэгтэй. Модулийг нейлон эрэг ашиглан явах эд анги руу бэхлэв. Мөн энд би тэдгээрийг засаж залруулсан боловч эвдэрсэн тохиолдолд салгаж авахад баяртай байсан.

Цорын ганц гагнуур нь эцэст нь мотор, талх, толгой байв. Үнэнийг хэлэхэд би холбогч утасд дуртай боловч холболт тасрах болно. Зарим тохиолдолд зарим програм хангамжийн хяналт нь холболтыг шинжлэхэд танд тусалж магадгүй юм.

Алхам 3: Програм хангамжийн дэд бүтэц

Програм хангамжийн дэд бүтэц
Програм хангамжийн дэд бүтэц
Програм хангамжийн дэд бүтэц
Програм хангамжийн дэд бүтэц

Механикийг олж авсны дараа бид тав тухтай хөгжлийн нөхцлийг бүрдүүлэхийн тулд програм хангамжийн зарим дэд бүтцийг бий болгоно.

Гит

Энэ бол үнэгүй, нээлттэй эхийн хувилбарын хяналтын систем юм. Энэ нь том төслүүдийг Линукс болгон удирдахад хэрэглэгддэг боловч жижиг төсөлд ашиглахад хялбар байдаг (Github болон Bitbucket -ийг үзнэ үү).

Төслийн өөрчлөлтийг орон нутагт хянах боломжтой бөгөөд програм хангамжийг олон нийттэй хуваалцахын тулд алсын сервер рүү шилжүүлэх боломжтой.

Ашигласан гол командууд нь:

git clone https://github.com/makerobotics/RPIbot.git [Эх код болон git тохиргоог авах]

git pull үүслийн мастер [алсын репозитороос хамгийн сүүлийн үеийн мэдээллийг авах]

git status [локал репозиторын статусыг авах. Өөрчлөгдсөн файлууд байна уу?] Git log [даалгаврын жагсаалтыг авах] git add. [өөрчлөгдсөн бүх файлыг дараагийн үүрэг даалгаварт авч үзэх үе шатанд нэмж оруулна уу] gitapt -m "даалгаврын талаархи тайлбар" [өөрчлөлтийг локал репозиторт оруулах]

Мод бэлтгэх

Python нь мод бэлтгэлийн зарим функцийг хангаж өгдөг. Програм хангамжийн бүтэц нь цаашдын хөгжүүлэлтийг эхлүүлэхийн өмнө мод бэлтгэх бүх хүрээг тодорхойлох ёстой.

Бүртгэгчийг терминал эсвэл бүртгэлийн файлд тодорхой форматаар бүртгүүлэхээр тохируулж болно. Бидний жишээн дээр логгерийг вэб серверийн ангиар тохируулсан боловч бид үүнийг бие даан хийх боломжтой. Энд бид зөвхөн бүртгэлийн түвшинг DEBUG болгож тохируулсан болно.

logger = logging.getLogger (_ нэр_)

logger.setLevel (бүртгэх. DEBUG)

Хэмжих ба төлөвлөх

Цаг хугацаа өнгөрөх тусам дохиог шинжлэхийн тулд тэдгээрийг диаграммд оруулах нь хамгийн сайн арга юм. Raspberry Pi нь зөвхөн консолийн терминалтай тул бид өгөгдлийг цэг таслалаар тусгаарлагдсан csv файлаар хайх ба алсын компьютерээс зурах болно.

Цэг таслалаар тусгаарлагдсан ул мөр файлыг манай үндсэн питон кодоор үүсгэсэн бөгөөд дараах толгойтой байх ёстой.

timestamp; yawCorr; encoderR; I_L; odoDistance; ax; encoderL; I_R; yaw; eSpeedR; eSpeedL; pwmL; speedL; CycleTimeControl; wz; pwmR; speedR; Iyaw; hdg; m_y; m_x;

1603466959.65;0;0;25;0.0;-0.02685546875;0;25;0;25;25;52;0.0;23;0.221252441406;16;0.0;0;252.069366413;-5.19555664062;-16.0563964844;0;6; 1603466959.71;0;0;50;0.0;0.29150390625;0;50;0;25;25;55;0.0;57;-8.53729248047;53;0.0;0;253.562118111;-5.04602050781;-17.1031494141;0;6; 1603466959.76;0;-1;75;0.0;-0.188232421875;1;75;2;25;25;57;0;52;-24.1851806641;55;0;0;251.433794171;-5.64416503906;-16.8040771484;2;7;

Эхний багана нь цагийн тэмдгийг агуулсан болно. Дараах багана үнэгүй. Зургийн скриптийг зурах багануудын жагсаалтаар дууддаг.

remote@pc: ~/python rpibot_plotter -f trace.csv -p speedL, speedR, pwmL, pwmR

Зургийн скриптийг хэрэгслийн хавтаснаас авах боломжтой:

Плоттер нь Python дээр mathplotlib ашиглаж байна. Та үүнийг компьютер дээрээ хуулах ёстой.

Илүү тохь тухтай байхын тулд питон скриптийг basp скрипт (plot.sh) гэж нэрлэдэг бөгөөд энэ нь Raspberry Pi -ийн ул мөр файлыг алсын компьютерт хуулж, дохио сонгох замаар плоттер руу залгахад ашигладаг. "Plot.sh" bash скриптийг асууна. хэрэв файлыг хуулах шаардлагатай бол. Тэр болгонд гараар хуулахын оронд энэ нь надад илүү тохиромжтой байсан. "sshpass" нь Raspberry Pi -аас файлыг алсын компьютерт scp ашиглан хуулахад хэрэглэгддэг. Нууц үг асуухгүйгээр файл хуулах боломжтой (үүнийг параметр болгон дамжуулдаг).

Эцэст нь зураг дээр үзүүлсэн шиг зураг бүхий цонх нээгдэнэ.

Алсын харилцаа холбоо

Raspberry Pi -ийн хөгжлийн интерфэйс нь SSH юм. Файлуудыг зорилтот хэсэгт шууд засварлах эсвэл scp ашиглан хуулж болно.

Роботыг хянахын тулд Pi дээр вэб сервер ажиллаж байгаа бөгөөд энэ нь Websockets -ээр дамжуулан хяналт тавьдаг. Энэ интерфэйсийг дараагийн алхамд тайлбарласан болно.

Raspberry Pi -ийг тохируулна уу

Эх кодын "doc" фолдерт Raspberry Pi -ийн тохиргоог тайлбарласан файл байдаг (setup_rpi.txt). Олон тайлбар байдаггүй боловч олон хэрэгтэй тушаал, холбоосууд байдаг.

Алхам 4: Хэрэглэгчийн интерфэйс

Хэрэглэгчийн интерфейс
Хэрэглэгчийн интерфейс

Хэрэглэгчийн интерфэйсийг байршуулахын тулд бид хөнгөн Tornado вэб серверийг ашигладаг. Энэ бол роботын хяналтын програмыг эхлүүлэх үед бидний нэрлэдэг Python модуль юм.

Програм хангамжийн архитектур

Хэрэглэгчийн интерфэйсийг дараах файлуудаар бүтээсэн болно: gui.html [Вэб хуудасны хяналт, зохион байгуулалтыг тайлбарлах] gui.js [Хяналтыг зохицуулах, манай роботтой вэбсокет холболтыг нээх JavaScript кодыг агуулсан болно] gui.css [Загварыг агуулсан html удирдлага. Хяналтын байрлалыг энд тодорхойлсон болно]

Вэбсокетын харилцаа холбоо

Хэрэглэгчийн интерфэйс нь хамгийн гайхалтай биш боловч энэ ажлыг хийж байна. Би энд Websockets шиг шинэлэг технологиуд дээр анхаарлаа хандуулсан.

Вэбсайт нь роботын вэб сервертэй Websockets -ээр холбогддог. Энэ бол хоёр чиглэлтэй харилцаа холбооны суваг бөгөөд холболтыг эхлүүлэх үед нээлттэй байх болно. Бид роботын тушаалыг Websocket -ээр Raspberry Pi руу илгээж, мэдээллийг (хурд, байрлал, камерын урсгал) буцааж харуулдаг.

Интерфейсийн зохион байгуулалт

Хэрэглэгчийн интерфэйс нь командын гарын авлагын оролттой байдаг. Үүнийг робот руу командыг илгээхэд ашиглаж байсан бөгөөд шалгах хайрцгийг ашиглан камерын урсгалыг асааж, унтрааж байна. Хоёр гулсагч нь камерын тавиур ба хазайлтыг хянадаг бөгөөд хэрэглэгчийн интерфэйсийн баруун дээд хэсэг нь роботуудын хөдөлгөөнийг хянадаг. Та хурд болон зорилтот зайг хянах боломжтой. Телеметрийн үндсэн мэдээллийг роботын зураг дээр харуулав.

Алхам 5: Робот платформыг програмчлах

Робот платформыг програмчлах
Робот платформыг програмчлах
Робот платформыг програмчлах
Робот платформыг програмчлах
Робот платформыг програмчлах
Робот платформыг програмчлах

Энэ хэсэг нь төслийн гол зорилго байв. Би DC явах мотортой шинэ явах эд ангиудыг танилцуулж байхдаа олон програм хангамжийг дахин боловсруулж, янз бүрийн шалтгааны улмаас Python -ийг програмчлалын хэл болгон ашигласан.

  • Энэ бол Raspberry Pi -ийн үндсэн хэл юм
  • Энэ бол олон түвшний онцлог шинж чанар, өргөтгөлүүдтэй өндөр түвшний хэл юм
  • Энэ нь объектод чиглэсэн боловч дараалсан програмчлалд ашиглаж болно
  • Эмхэтгэл, багаж хэрэгслийн сүлжээ шаардлагагүй. Кодыг засаад ажиллуулна уу.

Програм хангамжийн үндсэн бүтэц

Програм хангамж нь объектод чиглэсэн бөгөөд хэд хэдэн объектод хуваагддаг. Миний санаа бол кодыг 3 функциональ блок болгон хуваах явдал байв.

Мэдрэмжтэй сэтгэх

Мэдрэмжтэй

Үндсэн мэдрэгчийг олж авах, боловсруулах. Өгөгдлийг толь бичигт хадгалж, дараагийн үе шатанд ашиглах болно.

Control.py

Хөдөлгүүрийн дэд анги нь хийсвэрлэл хийсний дараа мотор, servo -ийг хянадаг. Хяналтын гол объект нь өндөр түвшний командууд болон хөдөлгүүрийн хяналтын алгоритмуудыг (PID) зохицуулдаг.

rpibot.py

Энэхүү гол зорилго нь Tornado вэб серверийг удирдах, мэдрэхүйн болон хяналтын ангиудыг тусдаа хэлхээнд оруулах явдал юм.

Модуль бүрийг дангаар нь эсвэл төслийн нэг хэсэг болгон ажиллуулж болно. Мэдрэгчийг зөв холбосон эсэхийг шалгахын тулд зөвхөн мэдрэгчийн мэдээллийг мэдэрч хэвлэж болно.

PID хяналт

Эхний даалгавар бол юуг хянахыг хүсч байгаагаа олж мэдэх явдал юм. Би албан тушаалыг хянах гэж оролдсон бөгөөд энэ нь маш нарийн төвөгтэй байсан бөгөөд тийм ч их тус болохгүй байв.

Эцэст нь бид дугуй бүрийн хурд, роботын чиглэлийг хянахыг хүсч байна. Үүнийг хийхийн тулд бид хоёр хяналтын логикийг каскад хийх ёстой.

Нарийн төвөгтэй байдлыг алхам алхамаар нэмэгдүүлэхийн тулд роботыг хянах шаардлагатай.

нээлттэй давталт (тогтмол хүчээр)

pwm = K

дараа нь ойрхон давталтын алгоритмыг нэмнэ үү

pwm = Kp.speedError+Ki. Integration (speedError)

Эцэст нь чиглэлийн хяналтыг сүүлчийн алхам болгон нэмнэ үү.

Хурдны хяналтыг хийхийн тулд би "PI" удирдлага, "P" -г зөвхөн эрүүгээр ашигласан. Би туршилт хийх замаар параметрүүдийг гараар тохируулсан. Эндээс хамаагүй илүү сайн параметрүүдийг ашиглаж болох юм. Миний зорилт бол зүгээр л шулуун шугам байсан бөгөөд би үүнийг бараг л олж авлаа. Хэрэглэгчийн интерфэйсээр зарим хувьсагчийг бичих програм хангамж дээр би интерфэйс үүсгэсэн. Kp параметрийг 1.0 болгож тохируулахын тулд хэрэглэгчийн интерфейс дээр дараах тушаалыг өгөх шаардлагатай:

SET; Kp; 1.0

Би хэтрүүлэхгүйн тулд P параметрийг хангалттай бага болгож болно. Үлдсэн алдааг I параметрээр засна (нэгдсэн алдаа)

Хоёр хяналтыг хэрхэн яаж каскад хийх талаар олж мэдэхэд надад хэцүү байсан. Шийдэл нь энгийн, гэхдээ би өмнө нь өөр олон аргыг туршиж үзсэн … Эцэст нь би дугуйны хурдны зорилгыг өөр чиглэлд эргүүлэхээр өөрчилсөн. Хурдны хяналт нь энэхүү эвдрэлийг арилгахыг оролдож байсан тул хурдны хяналтын гаралтыг шууд өөрчлөх нь алдаа байв.

Ашигласан хяналтын диаграммыг хавсаргасан болно. Энэ нь роботын удирдлагын зөвхөн зүүн талыг харуулдаг.

Алхам 6: Мэдрэгчийн шалгалт тохируулга

Мэдрэгчийн шалгалт тохируулга
Мэдрэгчийн шалгалт тохируулга
Мэдрэгчийн шалгалт тохируулга
Мэдрэгчийн шалгалт тохируулга
Мэдрэгчийн шалгалт тохируулга
Мэдрэгчийн шалгалт тохируулга

Анхаарах зүйл бол ОУХХ бүхэлд нь зөв ажиллах ёстой. Би 3 эд анги захиалж, бүрэн ажиллагаатай мэдрэгчтэй болтол буцааж илгээсэн. Өмнөх мэдрэгч бүрт мэдрэгчийн зарим хэсэг нь буруу ажиллаж байсан эсвэл огт ажилладаггүй байсан бөгөөд би робот дээр суулгахаасаа өмнө үндсийг нь шалгахын тулд хэдэн жишээ скрипт ашигласан.

IMU мэдрэгчийн дохиог ашиглахаасаа өмнө тохируулга хийх шаардлагатай. Зарим мэдрэгчийн дохио нь бэхэлгээний өнцөг, байрлалаас хамаарна.

Хурдатгал ба эргэлтийн хурдыг тохируулах

Хамгийн хялбар шалгалт тохируулга нь уртааш хурдатгал (A_x) юм. Зогсоох үед ойролцоогоор 0 м/кв² байх ёстой. Хэрэв та мэдрэгчийг зөв эргүүлбэл хүндийн хүчийг хэмжиж чадна (ойролцоогоор 9, 8 м/кв²). A_x -ийг тохируулахын тулд та үүнийг зөв холбож, дараа нь 0 m/s² зогсоход офсетыг тодорхойлох хэрэгтэй. Одоо A_x шалгалт тохируулга хийгдэж байна.

Луужингийн соронзон хэмжүүрийн шалгалт тохируулга

Соронзон орны мэдрэгчийн хувьд илүү нарийн тохируулга хийх шаардлагатай. Бид m_x ба m_y ашиглан соронзон орныг хэвтээ түвшинд авах болно. M_x ба m_y байх нь луужингийн чиглэлийг тооцоолох боломжийг бидэнд олгоно.

Энгийн зорилгоор бид зөвхөн хатуу төмрийн хазайлтыг тохируулах болно. Мэдрэгч нь соронзон орны цочролоос хамаарч эцсийн байрлалд байгаа тул үүнийг хийх ёстой.

Бид роботыг z тэнхлэгийг эргүүлэхдээ m_x ба m_y гэж бичдэг. Бид m_x vs m_y -ийг XY графикаар зурдаг. Үр дүн нь зурган дээрх шиг эллипс болно. Эллипс нь гарал үүслийн төвд байх ёстой. Энд бид m_x ба m_y -ийн хамгийн их ба хамгийн бага утгыг харгалзан хоёр чиглэлд офсет авах болно. Эцэст нь бид шалгалт тохируулгыг шалгаж, эллипс одоо төвлөрч байгааг харж байна.

Зөөлөн төмрийн шалгалт тохируулга нь зургийг эллипсээс тойрог болгон өөрчилнө гэсэн үг юм. Үүнийг сенсор бүрийн утга дээр хүчин зүйл нэмэх замаар хийж болно.

Туршилтын горимыг одоо дахин тохируулах эсвэл мэдрэгчийг тохируулагдсан эсэхийг шалгахын тулд кодлох боломжтой.

Луужингийн гарчиг

Магнитометрийн өгөгдлийг луужингийн чиглэлийг тооцоолоход ашиглах болно. Үүний тулд бид m_x ба m_y дохиог өнцөг болгон хувиргах ёстой. Python нь энэ зорилготой math.atan2 функцийг шууд хангадаг. Бүрэн тооцооллыг mpu9250_i2c.py файлд тодорхойлсон болно ("calcHeading (mx, my, mz)").

Алхам 7: Альтернатив дизайн

Альтернатив дизайн
Альтернатив дизайн
Альтернатив дизайн
Альтернатив дизайн
Альтернатив дизайн
Альтернатив дизайн

Загвар нь бүрэн нээлттэй болсон тул төсөл маш их цаг хугацаа шаардсан. Бүрэлдэхүүн хэсэг бүрийн хувьд би прототипийг хэрэгжүүлж, системийн хязгаарыг мэдэрсэн.

Хамгийн төвөгтэй сэдэв бол дугуй кодлогч байв. Би одоо ашиглаж буй оптик кодлогч олохын өмнө 3 өөр сонголтыг туршиж үзсэн. Ийм төсөлд цуцлагдсан шийдлүүд бас маш сонирхолтой байдаг гэж би бодож байна. Энэ нь миний хамгийн их сурч мэдсэн хэсгүүдэд хамаатай.

Pca 9695 -т холбогдсон тасралтгүй эргэлтийн servo

DC моторт нэмэлт H гүүрээс зайлсхийхийн тулд эхлээд тасралтгүй эргүүлэх servo-оос эхлэв. Эдгээрийг одоо байгаа pca 9695 servo драйвер жолоодож байсан. Бүх хөдөлгүүрийн механик ба корреспондент электроник нь хамаагүй хялбар байв. Энэхүү загвар нь хоёр сул талтай байв.

  • Сервүүдийн хяналтын хүрээ муу байна.
  • Алдагдсан кодлогч байршил

Серво нь 50% pwm -ээр хөдөлж эхэлдэг бөгөөд 55% орчим бүрэн хурдтай байдаг. Энэ бол маш муу хяналтын хүрээ юм.

Кодлогч байхгүй бол бэлэн кодлогч олоход маш хэцүү байсан. Би явах эд анги дээр суурилуулсан 3 өөр цацруулагч кодлогчыг туршиж үзсэн. Би өөрөө хийсэн кодлогч дугуйг хар цагаан хэсэгтэй дугуйны гадна талд наасан. Би зөв дохиог авахын тулд маш их дохио боловсруулах шаардлагатай QTR-1RC мэдрэгчийг ашигласан. Raspberry Pi нь ийм төрлийн бодит боловсруулалтыг хийж чадаагүй. Тиймээс би NodeMCU D1 mini -ийг робот дээр бодит цагийн хянагч болгон нэмэхээр шийдлээ. Энэ нь боловсруулсан мэдрэгчийн өгөгдлийг хүргэхийн тулд UART цувралаар бөөрөлзгөнө Pi -тэй холбогдсон байв. NodeMCU нь HC-SR04 мэдрэгчийг удирдаж байсан. Механик нь хэцүү, тийм ч бат бөх биш, цуваа шугам нь I2C шугам болон мотороос дуу чимээ авдаг байсан тул эцэст нь би явах эд ангиудын хоёр дахь хувилбарыг энгийн араагаар ажилладаг DC мотороор бүтээсэн. H гүүр. Эдгээр моторууд нь оптик кодлогч байрлуулах хоёрдогч гаралтын босоо амтай байдаг.

Алхам 8: Зураг боловсруулах

Зураг боловсруулах
Зураг боловсруулах
Зураг боловсруулах
Зураг боловсруулах
Зураг боловсруулах
Зураг боловсруулах
Зураг боловсруулах
Зураг боловсруулах

Автономит жолоодлогыг сайжруулахын тулд бид зураг боловсруулж болно.

Opencv номын сан нь үүний лавлах болно. Үүнийг Python ашиглан саад тотгор илрүүлэх ажлыг хурдан хэрэгжүүлэх боломжтой.

Бид зураг авч, зураг боловсруулах зарим ажлыг хэрэгжүүлдэг.

Эхний туршилтыг Канни, Собел хоёрын хувиргалтаар хийсэн. Канни сайн нэр дэвшигч байж болох ч хангалттай ухамсартай биш юм. Собел хэтэрхий ухамсартай (хэт их объект илрүүлсэн).

Эцэст нь би бүх хэвтээ ба босоо градиентийг холихын тулд өөрийн шүүлтүүрийг хийсэн (тавилга илрүүлэх):

  • Өнгөт зургийг саарал түвшний зураг болгон хувиргана уу
  • Жижиг дуу чимээг арилгахын тулд зургийг бүдгэрүүлээрэй
  • Зургийг хар ба цагаан дүрс болгон босго болгоно
  • Одоо бид хана, тавилга гэх мэт объектуудыг илрүүлэхийн тулд хэвтээ ба босоо градиентийг илрүүлж байна
  • Бид зөвхөн үлдсэн том контурыг шүүнэ (зураг дээрх өнгөт контурыг үзнэ үү)

Одоо бид энэхүү шинэ мэдээллийг ашиглан саад бэрхшээлийг илрүүлж чадна …

Алхам 9: Дараагийн алхамууд …

Дараагийн алхмууд…
Дараагийн алхмууд…
Дараагийн алхмууд…
Дараагийн алхмууд…

Одоо бид мэдрэгч, идэвхжүүлэгч, камер бүхий энгийн робот платформтой боллоо. Миний зорилго бол бие даан хөдөлж, өөр мэдрэгч нэмж оруулахгүйгээр станц руу буцах явдал юм. Үүний тулд надад дараах алхмууд хэрэгтэй болно.

  • Явах ба соронзон чиглэлийн дохионы мэдрэгчийг нэгтгэх
  • Камерын зураг боловсруулах (зөвхөн бага CPU боломжтой)
  • Мөргөлдөөнийг илрүүлэх (хэт авианы зай ба камер)
  • Газрын зураг бүтээх эсвэл чиглүүлэх

Одоо очоод өөрийн сорилт, зорилгоо бүтээгээрэй …

Зөвлөмж болгож буй: