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

Wallace автономит робот - 4 -р хэсэг - IR зай болон "Amp" мэдрэгчийг нэмнэ үү: 6 алхам
Wallace автономит робот - 4 -р хэсэг - IR зай болон "Amp" мэдрэгчийг нэмнэ үү: 6 алхам

Видео: Wallace автономит робот - 4 -р хэсэг - IR зай болон "Amp" мэдрэгчийг нэмнэ үү: 6 алхам

Видео: Wallace автономит робот - 4 -р хэсэг - IR зай болон
Видео: Казаки. История Украины 2024, Долдугаар сарын
Anonim
Image
Image
Дэмжих хэлхээг нэмэх (MCP3008)
Дэмжих хэлхээг нэмэх (MCP3008)

Сайн байна уу, өнөөдөр бид Уоллесийн чадавхийг сайжруулах дараагийн үе шатыг эхлүүлж байна. Тодруулбал, бид хэт улаан туяаны зайн мэдрэгч ашиглан саад тотгорыг илрүүлэх, түүнээс зайлсхийх чадварыг сайжруулахын зэрэгцээ робоклав мотор хянагчийн гүйдлийг хянах чадварыг ашиглан виртуал (програм хангамж) "мэдрэгч" болгон хувиргахыг хичээж байна. Эцэст нь бид SLAM (нэгэн зэрэг байршил ба зураглал)гүйгээр хэрхэн жолоодож болохыг харцгаая (одоогоор), учир нь роботод IMU (инерцийн хэмжих нэгж) эсвэл ToF (нислэгийн цаг) мэдрэгч хараахан байхгүй байна.

Жолоодлогын хувьд эхлээд энэ нь зөвхөн хоёр үндсэн зорилго байх болно.

  1. саад бэрхшээлээс зайлсхийх
  2. хаа нэгтээ гацсан, ямар ч ахиц дэвшил гаргахгүй байгааг олж мэдэх. ("ахиц дэвшил" гэдэг нь ямар ч утга учиртай зайг урагшлуулсан гэсэн үг юм)
  3. Гурав дахь зорилго бол хана руу тэгш өнцөгт байрлуулах явдал юм.

Энэхүү төсөл нь робот хэрэгсэл, гар болон ssh холболт ашиглан ажиллах үндсэн хөдөлгөөнийг авахаас эхэлсэн юм.

Хоёрдахь үе шат нь олон тооны мэдрэгчийг нэмж бэлдэх хангалттай дэмжих хэлхээг нэмж оруулах явдал байв.

Өмнөх зааварчилгаанд бид хэд хэдэн HCSR04 акустик мэдрэгчийг нэмж оруулсан бөгөөд робот орон сууцны эргэн тойронд явж байхдаа саад бэрхшээлээс зайлсхийх боломжтой болсон.

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

Нэг сайжруулалт бол ердийн моторын гүйдлийг хянах явдал бөгөөд хэрэв утга нь үсрэх юм бол робот ямар нэгэн зүйл оносон байх ёстой. Энэ бол сайн "төлөвлөгөө В" эсвэл бүр С. Гэхдээ энэ нь хоолны газрыг тойрон аялахад үнэхээр тус болохгүй.

(Шинэчлэлт: одоогоор одоогийн хяналт нь ухрах үед А төлөвлөгөө юм, учир нь би түр зуур арилгаж, арын мэдрэгчийг арилгасан).

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

Видеон дээр харж байгаа зүйл бол урд талын HCSR04 акустик мэдрэгч, хоёр Sharp IR мэдрэгч юм. IR мэдрэгч нь видеонд төдийлөн тоглоогүй. Ихэнхдээ робот нь робот ширээ, сандлын хөл рүү харсан хоолны газар байрладаг.

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

Эцэст нь, энэ нь нэг асуултанд хариулахын тулд сүүлийн 100 хөдөлгөөний түүх, зарим үндсэн анализыг ашигладаг.

"Саяхан бодит ахиц дэвшил гарсан уу (эсвэл зарим давтан бүжигт гацсан уу)?"

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

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

Алхам 1: Дэмжих хэлхээг нэмнэ үү (MCP3008)

Дэмжих хэлхээг нэмэх (MCP3008)
Дэмжих хэлхээг нэмэх (MCP3008)
Дэмжих хэлхээг нэмэх (MCP3008)
Дэмжих хэлхээг нэмэх (MCP3008)
Дэмжих хэлхээг нэмэх (MCP3008)
Дэмжих хэлхээг нэмэх (MCP3008)

IR мэдрэгчийг нэмэхийн өмнө бидэнд Raspberry Pi -ийн хоорондох интерфейсийн хэлхээ хэрэгтэй болно.

Бид MCP3008 аналог-тоон хөрвүүлэгчийг нэмж оруулах болно. Энэ чипийг Raspberry Pi -тэй холбох олон онлайн эх сурвалжууд байдаг тул би энд нэг их орохгүй.

Үндсэндээ бидэнд сонголт байна. Хэрэв IR мэдрэгчийн хувилбар 3V дээр ажилладаг бол MCP3008 ч бас ажиллах боломжтой бөгөөд бид Raspberry -тай шууд холбогдох боломжтой болно.

[3V IR мэдрэгч] - [MCP3008] - [Raspberrry Pi]

Гэхдээ миний хувьд би ихэвчлэн 5V гүйдэг тул энэ нь хоёр чиглэлтэй түвшний шилжүүлэгч гэсэн үг юм.

[5V IR мэдрэгч]-[MCP3008]-[5В-аас 3В хүртэл хоёр чиглэлтэй автобус]-[Raspberry Pi]

Тэмдэглэл: IR мэдрэгчээс зөвхөн нэг дохионы гаралт байна. Энэ нь MCP3008 -ийн оролтын аналог дохионы шугамуудын нэг рүү шууд очдог. MCP3008-аас бид Raspberry Pi руу 4 өгөгдлийн шугам (хоёр чиглэлтэй автобусаар) холбох шаардлагатай байна.

Одоогийн байдлаар манай робот ердөө хоёр ширхэг IR мэдрэгч ашиглан ажиллуулах гэж байгаа боловч бид нэмж нэмж болно. MCP3008 аналог оролтын найман суваг.

Алхам 2: IR мэдрэгчийг холбоно уу

IR мэдрэгчийг холбох
IR мэдрэгчийг холбох
IR мэдрэгчийг холбох
IR мэдрэгчийг холбох
IR мэдрэгчийг холбох
IR мэдрэгчийг холбох
IR мэдрэгчийг холбох
IR мэдрэгчийг холбох

Sharp нь хэд хэдэн өөр IR мэдрэгч хийдэг бөгөөд тэдгээр нь өөр өөр хүрээ, хамрах хүрээтэй байдаг. Би GP2Y0A60SZLF загварыг захиалсан юм. Таны сонгосон загвар нь мэдрэгчийн байршил, чиглэлд нөлөөлнө. Харамсалтай нь би яг ямар мэдрэгч авахаа сайн судлаагүй байна. Энэ нь "санал болгож буй эх сурвалжаас нь би нэр хүндтэй эх сурвалжаас боломжийн цаг, үнээр нь авах боломжтой" гэсэн шийдвэр байв.

(Шинэчлэлт: Гэсэн хэдий ч энэ нь хамаагүй байж магадгүй, учир нь эдгээр мэдрэгчийг орчны гэрэлтүүлгээс болж төөрөлдүүлж байх шиг байна. Би энэ асуудлыг судалж байна.)

Эдгээр мэдрэгчийг робот дээр суурилуулах дор хаяж гурван арга бий.

  1. Тэдгээрийг тогтмол байрлалд, урд талд нь, бие биенээсээ бага зэрэг харсан байдлаар байрлуулна.
  2. Тэднийг бие биенээсээ бага зэрэг харсан урд талд нь servo дээр тавь.
  3. Тэдгээрийг тогтмол байрлалд, урд талд нь байрлуулна, гэхдээ хамгийн зүүн, баруун талын хамгийн буланд бие биенээ харсан өнцгөөр байрлуулна.

1 -р сонголтыг 3 -р сонголттой харьцуулж үзвэл, #3 нь мөргөлдөөний талбайг илүү хамарна гэж бодож байна. Хэрэв та зургуудыг харвал №3 сонголтыг зөвхөн мэдрэгчийн талбарууд давхцахаас гадна роботын гадна болон гадна өргөнийг хамрах боломжтой.

1 -р сонголттой бол мэдрэгчүүд бие биенээсээ тусдаа өнцөгдөх тусам төв хэсэгт сохор цэг үүснэ.

Бид 2 -р зүйлийг хийж болох юм (би боломжоороо servo -той зарим зургийг нэмж оруулаад), тэднийг шүүрдэж ав, тэгвэл энэ нь ихэнх хэсгийг хамарч чадна. Гэсэн хэдий ч би дор хаяж хоёр шалтгаанаар servo ашиглах хугацааг аль болох удаан хойшлуулахыг хүсч байна.

  • Бид Raspberry Pi дээрх PWM холбооны сувгуудын нэгийг ашиглах болно. (Үүнийг сайжруулах боломжтой ч гэсэн …)
  • Одоогийн servo -ийн сугалаа нь ач холбогдолтой байж магадгүй юм
  • Энэ нь техник хангамж, програм хангамжид илүү ихийг нэмдэг

Нислэгийн цаг (ToF), эсвэл камер гэх мэт илүү чухал мэдрэгчүүдийг нэмж оруулахдаа servo сонголтыг дараа үлдээхийг хүсч байна.

2 -р сонголттой өөр нэг давуу тал нь бусад хоёр сонголтод байдаггүй. Эдгээр IR мэдрэгч нь гэрэлтүүлгээс хамааран төөрөгдөлд орж болзошгүй юм. Энэ нь робот ойрхон байгаа объектын уншилтыг олж авч магадгүй юм. 3 -р сонголтоор талбарууд нь давхцаж болох тул хоёр мэдрэгч нь ижил объектыг бүртгэж болно (өөр өөр өнцгөөс).

Тиймээс бид 3 -р байршлын сонголтыг хийх болно.

Алхам 3: Тест хийх цаг

Image
Image

Бид Raspberry Pi, MCP3008 ADC, Sharp IR мэдрэгч хоёрын хооронд бүх холболтыг хийсний дараа турших цаг болжээ. Систем нь шинэ мэдрэгчтэй ажиллаж байгаа эсэхийг шалгах энгийн тест.

Өмнөх зааврын дагуу би wiringPi C номын санг аль болох их ашигладаг. Аливаа зүйлийг илүү хялбар болгодог. WiringPi вэбсайтыг хянахад тийм ч тодорхой бус зүйл бол MCP3004/3008 -ийг шууд дэмждэг явдал юм.

Үүнгүйгээр та SPI өргөтгөлийг ашиглаж болно. Гэхдээ тэгэх шаардлагагүй. Хэрэв та Gordon -ийн wiringPi -ийн git репозиторыг сайтар ажиглавал тэдгээрийн нэг нь MCP3004/3008 -д зориулагдсан чипүүдийн жагсаалттай тааралдана.

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

Алхам 4: Виртуал мэдрэгч - AmpSensor

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

Одоогийн байдлаар робот нь HCSR04 акустик дууны мэдрэгч бүхий 8 мэдрэгчтэй (эдгээр нь зааварчилгааны үндсэн чиглэл биш юм) бөгөөд одоо хоёр Sharp IR зайны мэдрэгчтэй болжээ. Өмнө дурьдсанчлан, бид өөр нэг зүйлийн давуу талыг ашиглаж болно: Робоклавын мотор гүйдлийг мэдрэх онцлог.

Бид мотор хянагч руу илгээсэн хүсэлтийг C ++ ангилалд оруулан AmpSensor гэж нэрлэж болно.

Програм хангамжид зарим "ухаалаг" зүйлийг оруулснаар бид шулуун хөдөлгөөн (урагш, арагш), эргэлтийн хөдөлгөөнийг (зүүн, баруун) ажиглаж, тохируулж болно. Эдгээр амперын хүрээг мэдэж авсны дараа бид маш чухал утгыг сонгож болно, ингэснээр хэрэв AmpSensor нь моторын хянагчаас энэ утгаас хэтэрсэн гүйдлийн уншилтыг авбал хөдөлгүүр зогссон байж магадгүй бөгөөд энэ нь робот мөргөлдсөнийг илтгэнэ. ямар нэг зүйл рүү.

Хэрэв бид програм хангамжид уян хатан байдал (командын шугамын args ба / эсвэл гарны оролт) нэмж оруулах юм бол бид туршилт хийхдээ "чухал-ампер" босгыг нэмэгдүүлэх / бууруулах боломжтой. хоёулаа шууд дотогшоо эсвэл эргүүлэх үед.

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

Алхам 5: Навигац хийх

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

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

Одоогийн байдлаар робот дээр байгаа мэдрэгчүүдээс ямар нэг зайны заагийг олж авах боломжтой боловч тэдний харах хүрээ өргөн бөгөөд урьдчилан таамаглах аргагүй юм. Акустик дуу чимээ нь зөв тусахгүй байж магадгүй; хэт ягаан туяаг бусад гэрэлтүүлэг, эсвэл олон цацруулагч гадаргуутай андуурч болно. Робот хөдөлж байгаа эсэхийг, хэр зэрэг, аль чиглэлд хөдөлж байгааг мэдэхийн тулд зайны өөрчлөлтийг ажиглахыг оролдох нь тийм ч хэцүү зүйл биш гэдэгт би итгэлтэй байна.

Би санаатайгаар Arduino гэх мэт микро хянагч ашиглахгүй байхыг сонгосон, учир нь a) надад psuedo-C ++ орчин таалагдахгүй байна, b) хэт их хөгжил нь унших-бичих санах ойг элэгдүүлэх болно (?), Мөн би хөгжүүлэхийн тулд хост компьютер хэрэгтэй болно (?). Эсвэл би зүгээр л Raspberry Pi шиг тохиолдож магадгүй юм.

Raspbian-ийг ажиллуулж буй Pi нь бодит цагийн үйлдлийн систем биш тул эдгээр мэдрэгчийн тогтворгүй байдал болон OS-ийн тухай бүр уншихгүй байх хооронд эдгээр мэдрэгчийн зорилго нь саад бэрхшээлээс зайлсхийхэд илүү тохиромжтой гэдгийг би мэдэрсэн. бодит зайн хэмжилт.

Бид энэ зорилгоор илүү сайн ToF (нислэгийн цаг) мэдрэгчийг (хожим) ашиглаж чадвал энэ арга нь тийм ч ашиггүй мэт санагдсан.

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

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

Дээрх жишээ бол маш энгийн нэг жишээ юм. Ухаантай зүйл нэмж оруулснаар давтагдсан загварыг шинэ түвшинд хүргэж магадгүй ч робот буланд гацсан хэвээр байна.

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

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

Хөдөлгөөн түүхийг ашиглах хоёр үндсэн (энгийн) аргыг би бодож чадна.

  • Сүүлийн X тооны хөдөлгөөний хувьд тэд Y patttern -тэй таарч байна уу? Энгийн жишээ бол "урагшаа, урагшаа, урагшаа, урагшаа,….." байж болно. ҮНЭН (загвар олдсон) эсвэл ХУДАЛ (олдсонгүй) аль алиныг нь буцааж өгдөг тохирох функц байдаг. Хэрэв ҮНЭН бол програмын навигацийн хэсэгт бусад хөдөлгөөний дарааллыг оролдоорой.
  • сүүлийн X тооны хөдөлгөөний хувьд ерөнхий эсвэл цэвэр урагшлах хөдөлгөөн байна уу. Жинхэнэ урагшлах хөдөлгөөн гэж юу болохыг хэрхэн тодорхойлох вэ? За.. нэг хялбар харьцуулалт бол сүүлийн X шилжүүлгийн хувьд "FORWARD" нь "REVERSE" -ээс илүү тохиолддог. Гэхдээ энэ нь цорын ганц байх албагүй. Үүнийг яах вэ: "ЗӨВ, ЗӨВ, Зүүн, ЗӨВ". Энэ тохиолдолд робот булангаас гарахын тулд зөв эргэлт хийх ёстой эсвэл хананд өнцгөөр ойртсон тул энэ нь жинхэнэ урагшлах дэвшил гэж үзэж болно. Нөгөөтэйгүүр, "Зүүн, ЗӨВ, Зүүн, ЗӨВ …" нь жинхэнэ урагшлах дэвшил гэж тооцогдохгүй байж магадгүй юм. Тиймээс, хэрэв "ЗӨВ" нь "ЗҮҮН" -ээс илүү эсвэл "Зүүн" нь "ЗӨВ" -өөс илүү тохиолдвол энэ нь жинхэнэ дэвшил байж магадгүй юм.

Энэхүү зааварчилгааны эхэнд би гуравдахь зорилгыг дөрвөлжин хэлбэртэй болгох эсвэл хананд тэгшлэх боломжтой гэж хэлсэн. Гэхдээ үүний тулд бидэнд "бид ямар нэгэн объектод ойрхон байна уу" гэхээс илүү их зүйл хэрэгтэй болно. Жишээлбэл, хэрэв бид хоёр урагш харсан акустик мэдрэгчийг (энэ нийтлэлийн гол сэдэв биш) авч чадвал зайны талаар нэлээд сайн, тогтвортой хариулт өгөх боломжтой болно. өнцгөөр, эдгээр утгууд хоорондоо ойртож байгаа эсэхийг харахын тулд маневр хийхийг оролдож болно (хананд дөрвөлжин харсан).

Алхам 6: Эцсийн бодол, дараагийн үе шат …

Энэхүү заавар нь зарим санааг өгсөн гэж найдаж байна.

Илүү олон мэдрэгч нэмэх нь зарим давуу тал, бэрхшээлийг бий болгодог.

Дээрх тохиолдолд бүх акустик мэдрэгчүүд хоорондоо сайн хамтран ажилладаг байсан бөгөөд энэ нь програм хангамжийн хувьд илүү хялбар байсан.

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

Хэрэв акустик мэдрэгч бидэнд ямар ч саад байхгүй гэж хэлж байгаа бол юу хийх ёстой вэ гэдэг асуудал байсан, гэхдээ IR мэдрэгч.

Одоогоор туршилт, алдааны дараа бүх зүйл энэ тэргүүлэх чиглэлд дуусав.

  1. өсгөгч мэдрэгч
  2. IR мэдрэгч
  3. акустик мэдрэгч

Миний хийсэн зүйл бол хэт улаан туяаны мэдрэгчийн мэдрэмтгий байдлыг бууруулах явдал байсан тул тэд зөвхөн маш ойрхон объектуудыг (сандлын хөл гэх мэт) илрүүлэх болно.

Одоогийн байдлаар би Raspberry Pi болон Roboclaw мотор хянагчийн хооронд хяналт алдагдах (цуваа холбоо тасарсан) тулгарч байгаа боловч олон урсгалтай эсвэл тасалдсан програм хангамж хийх шаардлагагүй байна.

Энд E-Stop хэлхээ (өмнөх зааврыг үзнэ үү) ихэвчлэн ашиглагддаг. Гэсэн хэдий ч би хөгжүүлэлтийн явцад Roboclaw -ийг анхны байдалд нь оруулахыг хүсэхгүй байгаа тул робот тийм ч хурдан явахгүй байгаа тул би үүнийг хянаж, унтраахад бэлэн байна. E-Stop-ийг холбосон.

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

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

Өдий зэрэгтэй яваа танд баярлалаа.

Би зарим VL53L1X IR лазерийн ToF (нислэгийн цаг) мэдрэгчийг авсан тул энэ нь дараагийн зааварчилгааны сэдэв болох servo-ийн хамт байх магадлалтай юм.

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