Мазмуну:

Rpibot - Робототехниканы үйрөнүү жөнүндө: 9 кадам
Rpibot - Робототехниканы үйрөнүү жөнүндө: 9 кадам

Video: Rpibot - Робототехниканы үйрөнүү жөнүндө: 9 кадам

Video: Rpibot - Робототехниканы үйрөнүү жөнүндө: 9 кадам
Video: АЯЛДЫ КАНТИП КАНДЫРЫШ КЕРЕК КӨРГҮЛӨ! 2024, Июль
Anonim
Rpibot - Робототехниканы үйрөнүү жөнүндө
Rpibot - Робототехниканы үйрөнүү жөнүндө

Мен немис автомобиль компаниясында камтылган программалык инженермин. Мен бул долбоорду камтылган системалар үчүн окуу платформасы катары баштадым. Долбоор эрте жокко чыгарылды, бирок мага ушунчалык жагып, бош убактымда уланттым. Бул жыйынтык…

Менде төмөнкү талаптар болгон:

  • Жөнөкөй жабдыктар (фокус - бул программалык камсыздоо)
  • Арзан жабдыктар (болжол менен 100 €)
  • Кеңейтиле турган (кээ бир параметрлер мурунтан эле сүрөттөмөнүн бир бөлүгү)
  • Бирдиктүү 5V булагынан бардык компоненттерди камсыздоо чыңалуусу (powerbank)

Үйрөнүүдөн башка максат жок болчу. Платформа үйрөнүү, байкоо жүргүзүү, робот сынактары үчүн колдонулушу мүмкүн …

Бул башталгыч окуу куралы эмес. Сиз жөнүндө кээ бир негизги билимге муктаж:

  • Программалоо (Python)
  • Негизги электроника (модулдарды туура чыңалуу менен бириктирүү үчүн)
  • Негизги башкаруу теориясы (PID)

Акыр -аягы, мен сыяктуу көйгөйлөргө туш болушуңуз мүмкүн. Бир аз кызыгуу жана чыдамкайлык менен сиз долбоор аркылуу өтүп, кыйынчылыктарды чечесиз. Менин кодум мүмкүн болушунча жөнөкөй жана критикалык линияларга кеңеш берүү үчүн комментарий берилет.

Толук баштапкы код жана файлдар бул жерде жеткиликтүү:

Берилиштер:

Механика

  • 1х фанер тактасы (A4 өлчөмү, калыңдыгы 4 мм)
  • 3x M4 x 80 Бурама жана гайка
  • 2x Тиштүү моторлор кодер үчүн экинчи чыгаруучу вал менен. Wheels.
  • 1x Бекер дөңгөлөк

1x Пан жана жантайтуу камерасын орнотуу (милдеттүү эмес)

Электроника

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

1 -кадам: Шассиди куруңуз

Шассиди куруу
Шассиди куруу
Шассиди куруу
Шассиди куруу
Шассиди куруу
Шассиди куруу

Мен жакшы механик дизайнер эмесмин. Долбоорлордун максаты - шассиде өтө көп убакыт коротуу эмес. Кандай болбосун, мен төмөнкү талаптарды аныктадым:

  • Арзан материалдар
  • Тез монтаждоо жана ажыратуу
  • Кеңейтилүүчү (мисалы, сенсорлор үчүн орун)
  • Электр энергиясын үнөмдөө үчүн жеңил материалдар

Жеңил жана арзан шасси фанерадан жасалышы мүмкүн. Кыргыч менен жана кол менен бургулоо менен иштетүү оңой. Сенсорлорго жана моторлорго холдингдерди түзүү үчүн кичинекей жыгач бөлүктөрдү жабыштырсаңыз болот.

Дефект компоненттерин алмаштыруу же электр мүчүлүштүктөрдү оңдоо жөнүндө ойлонуп көрүңүз. Негизги бөлүктөр алмаштырылышы үчүн бурамалар менен бекитилиши керек. Ысык желим тапанча жөнөкөй болушу мүмкүн, бирок шасси куруунун эң жакшы жолу эмес … Бөлүктөрдү оңой ажыратуу үчүн жеңил түшүнүк жөнүндө ойлонуу үчүн мага көп убакыт керек болчу. 3D басып чыгаруу - жакшы альтернатива, бирок абдан кымбат же көп убакытты талап кылышы мүмкүн.

Акысыз дөңгөлөк акыры абдан жеңил жана минүүгө оңой. Альтернативалардын баары оор же сүрүлүүгө толгон болчу (мен акыркы бирин тапканга чейин алардын бир нечесин сынап көрдүм). Мен негизги дөңгөлөктөрдү орноткондон кийин куйругу бош дөңгөлөктү тегиздөө үчүн жыгач аралыгын кесишим керек эле.

Дөңгөлөктүн касиеттери (программалык камсыздоону эсептөө үчүн)

Айланасы: 21, 5 см Импульс: 20 импульс/айлануу Чечими: 1, 075 см (акыры 1 импульс болжол менен 1 см, бул программалык эсептөөлөр үчүн оңой)

2 -кадам: Электроника жана зымдар

Электроника жана зымдар
Электроника жана зымдар
Электроника жана зымдар
Электроника жана зымдар
Электроника жана зымдар
Электроника жана зымдар

Долбоор диаграммада көрсөтүлгөндөй ар кандай модулдарды колдонууда.

Raspberry Pi Zero - башкы контролер. Бул сенсорлорду окуу жана моторлорду PWM сигналы менен башкаруу. Ал алыскы компьютерге wifi аркылуу туташкан.

DRV8833-бул эки моторлуу H-көпүрө. Бул моторлорго жетиштүү токту камсыздайт (Raspberry Pi муну кыла албайт, анткени жыйынтыктар бир аз мА жеткире алат).

Оптикалык коддогуч жарыктын коддогуч дөңгөлөктөрүнөн өткөн сайын чарчы формада сигнал берет. Биз сигнал которулган сайын маалыматты алуу үчүн Raspberry Piнин HW үзгүлтүктөрүн колдонобуз.

Pca9695 - бул servo башкаруу тактасы. Бул I2C сериялык автобусу менен байланышып жатат. Бул такта PWM сигналдарын жана камсыздоо чыңалуусун камсыздайт, алар камеранын айлануусун жана ийилишин көзөмөлдөйт.

MPU9265-бул 3 огунун ылдамдануусу, 3 огунун бурчтуу айлануу ылдамдыгы жана 3 огунун магнит агымынын сенсору. Биз аны негизинен компастын башын алуу үчүн колдонобуз.

Ар кандай модулдар баары секирүүчү зым менен бириктирилген. Нан диспетчердин милдетин аткарат жана камсыздоо чыңалуусун (5V жана 3.3V) жана негиздерди камсыз кылат. Байланыштардын бардыгы туташуу таблицасында сүрөттөлгөн (тиркемени караңыз). 5Vны 3.3V кирүүсүнө туташтыруу сиздин чипти жок кылышы мүмкүн. Жеткирүүдөн мурун этият болуңуз жана бардык зымдарыңызды эки жолу текшериңиз (бул жерде атайын коддогуч эске алынышы керек). Бардык такталарды туташтыруудан мурун диспетчердик тактадагы негизги камсыздоо чыңалуусун мультиметр менен өлчөөңүз керек. Модулдар нейлон бурамалары менен шассиге бекитилген. Ошондой эле бул жерде мен аларды оңдоп койгонума кубанычтамын, бирок ошондой эле иштебей калганда алып салууга болот.

Жалгыз ширетүү акыры моторлор, нан жана баштар болчу. Чынын айтсам, мага секиргич зымдар жагат, бирок алар бош байланышка алып келиши мүмкүн. Кээ бир учурларда, кээ бир программалык мониторинг байланыштарды талдоодо сизге колдоо көрсөтүшү мүмкүн.

3 -кадам: Программалык инфраструктура

Программалык инфраструктура
Программалык инфраструктура
Программалык инфраструктура
Программалык инфраструктура

Механикага жеткенден кийин, биз ыңгайлуу өнүгүү шарттарына ээ болуу үчүн кээ бир программалык инфраструктураны орнотобуз.

Git

Бул акысыз жана ачык булак версиясын башкаруу тутуму. Бул Linux сыяктуу ири долбоорлорду башкаруу үчүн колдонулат, бирок ошондой эле кичинекей долбоор үчүн оңой колдонулушу мүмкүн (Github жана Bitbucketти караңыз).

Долбоордун өзгөрүүлөрүн жергиликтүү деңгээлде көзөмөлдөсө болот, ошондой эле программаны коомчулук менен бөлүшүү үчүн алыскы серверге түртсө болот.

Негизги колдонулган командалар:

git clone https://github.com/makerobotics/RPIbot.git [Баштапкы кодду жана git конфигурациясын алуу]

git pull Origin Master [алыскы репозиторийден акыркы жаңылыктарды алуу]

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

Кирүү

Python кээ бир курулган функцияларды камсыз кылат. Программалык камсыздоонун структурасы андан ары өнүктүрүүнү баштоодон мурун бардык журналдарды аныктап алышы керек.

Каттоочу терминалда же журнал файлында аныкталган формат менен кирүү үчүн конфигурацияланышы мүмкүн. Биздин мисалда, каттоочу веб -сервер классы тарабынан конфигурацияланган, бирок биз муну өз алдынча жасай алмакпыз. Бул жерде биз каттоонун деңгээлин DEBUG деп гана койдук:

logger = logging.getLogger (_ аты_)

logger.setLevel (logging. DEBUG)

Өлчөө жана график түзүү

Убакыттын өтүшү менен сигналдарды талдоо үчүн, аларды диаграммага салуу эң жакшы. Raspberry Pi консолдук терминалга гана ээ болгондуктан, биз маалыматты үтүрлүү үтүр менен бөлүнгөн csv файлында издейбиз жана аны алыскы ЖКтан түзөбүз.

Үтүрлүү үтүр менен бөлүнгөн издер файлы биздин башкы питон кодубуз тарабынан түзүлөт жана баштары мындай болушу керек:

убакыт белгиси; yawCorr; encoderR; I_L; odoDistance; ax; encoderL; I_R; yaw; eSpeedR; eSpeedL; pwmL; speedL; CycleTimeControl; wz; pwmR; speedR; Iyaw; hdg; m_y; m_x; eYaw;

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;

Биринчи тилкеде убакыт белгиси камтылган. Кийинки мамычалар бекер. Чийүү скрипти графикалык тилкелердин тизмеси менен аталат:

алыскы@pc: ~/python rpibot_plotter -f trace.csv -p speedL, speedR, pwmL, pwmR

Сюжеттин скрипти куралдар папкасында жеткиликтүү:

Плотер Pythonдо mathplotlib колдонуп жатат. Сиз аны компьютериңизге көчүрүшүңүз керек.

Көбүрөөк ыңгайлуулук үчүн, питон скрипти Raspberry Pi из файлын алыскы компьютерге көчүрүү жана сигнал тандоо менен плоттерге чалуу үчүн колдонулган bash скрипти (plot.sh) деп аталат. Баш скрипт "plot.sh" сурайт эгер файлды көчүрүү керек болсо. Бул ар бир жолу кол менен көчүрүүнүн ордуна мен үчүн ыңгайлуу болду. "sshpass" файлды Raspberry Piден алыскы компьютерге scp аркылуу көчүрүү үчүн колдонулат. Бул файлды сырсөздү сурабай эле көчүрө алат (ал параметр катары берилет).

Акыры сүрөттө көрсөтүлгөндөй сюжет менен терезе ачылат.

Алыстан байланыш

Raspberry Pi үчүн иштөө интерфейси SSH. Файлдар түздөн -түз максаттуу түрдө оңдолушу же scp аркылуу көчүрүлүшү мүмкүн.

Роботту башкаруу үчүн, Websockets аркылуу башкарууну камсыз кылган веб -сервер Piде иштеп жатат. Бул интерфейс кийинки кадамда сүрөттөлөт.

Raspberry Pi орнотуу

Булак кодунун "doc" папкасында Raspberry Pi орнотуусун сүрөттөгөн файл бар (setup_rpi.txt). Көптөгөн түшүндүрмөлөр жок, бирок көптөгөн пайдалуу буйруктар жана шилтемелер бар.

4 -кадам: Колдонуучу интерфейси

Колдонуучу интерфейси
Колдонуучу интерфейси

Биз колдонуучу интерфейсин жайгаштыруу үчүн жеңил Tornado веб -серверин колдонобуз. Бул роботту башкаруу программасын баштоодо биз атай турган Python модулу.

Программалык архитектура

Колдонуучу интерфейси төмөнкү файлдар аркылуу курулган: gui.html [Веб баракчанын көзөмөлүн жана жайгашуусун сүрөттөө] gui.js [Башкарууну башкаруу жана роботубузга веб -сокет туташуусун ачуу үчүн JavaScript кодун камтыйт] gui.css [Стилдерди камтыйт html көзөмөлдөйт. Бул жерде көзөмөлдүн позициясы аныкталган]

Интернеттеги байланыш

Колдонуучу интерфейси эң сонун эмес, бирок бул ишти кылып жатат. Мен бул жерде мен үчүн жаңы Websockets сыяктуу технологияларга басым жасадым.

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

Интерфейстин жайгашуусу

Колдонуучу интерфейсинде буйруктар үчүн кол менен киргизүү бар. Бул роботко буйруктарды жөнөтүү үчүн башында колдонулган. Белгилөө кутучасы камера агымын күйгүзүп жана өчүрүп жатат. Эки жылдыргыч камера пан жана tilt көзөмөлдөйт. Колдонуучу интерфейсинин жогорку оң бөлүгү роботтордун кыймылын көзөмөлдөйт. Сиз ылдамдыкты жана максаттуу аралыкты көзөмөлдөй аласыз. Негизги телеметрикалык маалымат роботтун чиймесинде көрсөтүлөт.

5 -кадам: Робот платформасын программалоо

Робот платформасын программалоо
Робот платформасын программалоо
Робот платформасын программалоо
Робот платформасын программалоо
Робот платформасын программалоо
Робот платформасын программалоо

Бул бөлүк долбоордун негизги максаты болгон. Мен жаңы кыймылдаткычты DC моторлору менен тааныштырып, программалык камсыздоонун көп бөлүгүн реформаладым.

  • Бул Raspberry Pi негизги тили
  • Бул жогорку деңгээлдеги тил, көптөгөн өзгөчөлүктөрү жана кеңейтүүлөрү бар
  • Бул объектке багытталган, бирок ырааттуу программалоо үчүн да колдонулушу мүмкүн
  • Эч кандай компиляция же курал тизмеги кереги жок. Кодду түзөтүңүз жана иштетиңиз.

Негизги программалык архитектура

Программа объектке багытталган, бир нече объекттерге бөлүнгөн. Менин оюм кодду 3 функционалдык блокко бөлүү болчу:

Сезимдүү ойлон

Sense.py

Негизги сенсорлорду алуу жана иштетүү. Маалыматтар кийинки этапта колдонуу үчүн сөздүктө сакталат.

Control.py

Кыймылдын кичи классы абстракциядан кийин моторлорду жана серволорду көзөмөлдөйт. Негизги Control объектиси жогорку деңгээлдеги буйруктарды, ошондой эле моторду башкаруу алгоритмдерин (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 -кадам: сенсордун калибрлөөсү

Sensor Calibrations
Sensor Calibrations
Sensor Calibrations
Sensor Calibrations
Sensor Calibrations
Sensor Calibrations

Эң биринчи эске алчу нерсе, бүт ӨИК туура иштеши керек. Мен 3 бөлүккө заказ берип, толук иштеген сенсорго ээ болгонго чейин кайра жөнөткөм. Ар бир мурунку сенсордо сенсордун кээ бир бөлүктөрү туура эмес иштейт же такыр иштебейт. Мен роботко орнотуудан мурун негиздерди текшерүү үчүн кээ бир мисал скрипттерин колдоном.

IMU сенсор сигналдары аны колдонуудан мурун калибрлениши керек. Кээ бир сенсор сигналдары орнотуу бурчуна жана абалына жараша болот.

Ылдамдануу жана айлануу ылдамдыгын калибрлөө

Эң оңой калибрлөө - узунунан ылдамдануу (A_x). Токтоп турганда болжол менен 0 м/с² болушу керек. Эгер сенсорду туура бурсаңыз, тартылуу күчүн өлчөй аласыз (болжол менен 9, 8 м/с²). A_xти калибрлөө үчүн, жөн гана туура орнотуп, анан 0 м/с² токтоп турган жерди аныктоо керек. Эми A_x калибрленет. Сиз токтоп турганда ушундай эле жол менен айлануу ылдамдыктарынын ордун ала аласыз.

Компас үчүн магнитометрдин калибрлөө

Магниттик талаа сенсорлору үчүн татаал калибрлөө керек. Горизонталдык деңгээлде магнит талаасын алуу үчүн m_x жана m_y колдонобуз. M_x жана m_y ээ болуу бизге компастын багытын эсептөөгө мүмкүнчүлүк берет.

Жөнөкөй максатыбыз үчүн биз темирдин четтөөсүн жөнгө салабыз. Бул сенсор магниттик талаанын бузулушуна жараша акыркы абалда болгондуктан аткарылышы керек.

Биз m_x жана m_y жаздырабыз, ал эми роботту z огунун айланасында айландырабыз. Биз 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 менен туташкан

DC мотору үчүн кошумча H-көпүрөсүн болтурбоо үчүн, мен биринчи кезекте үзгүлтүксүз айлануу сервосунан баштадым. Буларды буга чейин берилген 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 -кадам: Кийинки кадамдар…

Кийинки кадамдар…
Кийинки кадамдар…
Кийинки кадамдар…
Кийинки кадамдар…

Азыр бизде сенсорлор, кыймылдаткычтар жана камерасы бар жөнөкөй робот платформа бар. Менин максатым - автономдуу түрдө жылуу жана башка сенсорлорду кошпостон станцияга кайтуу. Бул үчүн мага төмөнкү кадамдар керек болот:

  • Yaw жана магниттик багыт сигналдарынын сенсордук биригүүсү
  • Камеранын сүрөтүн иштетүү (бул үчүн төмөн CPU гана бар)
  • Кагылышууну аныктоо (УЗИ аралык жана камера)
  • Карта куруу же багыттоо

Эми барып, өзүңүздүн кыйынчылыктарыңызды же максаттарыңызды түзүңүз …

Сунушталууда: