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

Gesture Hawk: Зургийн боловсруулалтанд суурилсан интерфэйсийг ашиглан гараар удирддаг робот: 13 алхам (зурагтай)
Gesture Hawk: Зургийн боловсруулалтанд суурилсан интерфэйсийг ашиглан гараар удирддаг робот: 13 алхам (зурагтай)

Видео: Gesture Hawk: Зургийн боловсруулалтанд суурилсан интерфэйсийг ашиглан гараар удирддаг робот: 13 алхам (зурагтай)

Видео: Gesture Hawk: Зургийн боловсруулалтанд суурилсан интерфэйсийг ашиглан гараар удирддаг робот: 13 алхам (зурагтай)
Видео: SCP-1756 At the Movies - Siskel and Ebert Reviews Any DVD You Put In The DVD Player! 2024, Долдугаар сарын
Anonim
Gesture Hawk: Зургийн боловсруулалтанд суурилсан интерфэйсийг ашиглан гарын дохио хяналттай робот
Gesture Hawk: Зургийн боловсруулалтанд суурилсан интерфэйсийг ашиглан гарын дохио хяналттай робот

Gesture Hawk нь TechEvince 4.0 дээр дүрс боловсруулахад суурилсан хүний машины интерфейс хэлбэрээр харуулагдсан. Дифференциал жолоодох зарчмаар ажилладаг робот машиныг удирдахын тулд бээлийгээс өөр нэмэлт мэдрэгч, өмсдөг зүйл шаардлагагүй байдаг нь түүний ашиг тус юм. Энэхүү зааварчилгаанд бид системд ашиглагдаж буй объектуудыг хянах, дохио зангаа илрүүлэх ажлын зарчмыг авч үзэх болно. Энэхүү төслийн эх кодыг Github-аас https://github.com/shwetank6044/gesture-hawk.git линкээр татаж авах боломжтой.

Алхам 1: Шаардлагатай зүйлүүд:

Шаардлагатай зүйл
Шаардлагатай зүйл
Шаардлагатай зүйл
Шаардлагатай зүйл
Шаардлагатай зүйл
Шаардлагатай зүйл
Шаардлагатай зүйл
Шаардлагатай зүйл
  1. L298N мотор драйвер
  2. DC мотор
  3. Робот машины явах эд анги
  4. Ардуино Уно
  5. LiPo батерей
  6. Arduino USB кабель (урт)
  7. Python програмтай OpenCV номын сан

Алхам 2: АЖИЛЛАХ ЗАРЧИМ:

АЖИЛЛАХ ЗАРЧИМ
АЖИЛЛАХ ЗАРЧИМ

Gesture Hawk бол гурван үе шаттай боловсруулах систем бөгөөд дээрх диаграмаас харж болно.

Алхам 3: Оролт, боловсруулалт:

ОРОЛЦОО БОЛОВСРУУЛАХ, БОЛОВСРУУЛАХ
ОРОЛЦОО БОЛОВСРУУЛАХ, БОЛОВСРУУЛАХ

Оролт барихыг дээрх диаграммд өгөгдсөн илүү өргөн хүрээний ангиллаар ойлгож болно.

Гарын хэлбэрийг хүрээлэн буй орчноос гаргаж авахын тулд бид тодорхой өнгөний маск эсвэл шүүлтүүр (энэ тохиолдолд ягаан цэнхэр) ашиглах хэрэгтэй. Үүнийг хийхийн тулд та зургийг дараах кодын хэсгийг ашиглан BGR -ээс HSV формат руу хөрвүүлэх хэрэгтэй.

hsv = cv2.cvtColor (хүрээ, cv2. COLOR_BGR2HSV)

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

Алхам 4:

Зураг
Зураг

Алхам 5:

Энд маск бүтээх ийм мөрийг хийхийн тулд доор өгсөн кодын хэсэг байна:

cv2 импортлох

npdef юу ч биш (x) гэж импортлох: cv2.namedWindow ('зураг') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'зураг', 110, 255, юу ч биш) cv2.createTrackbar ('l_S ',' image ', 50, 255, юу ч биш) cv2.createTrackbar (' l_V ',' image ', 50, 255, юу ч биш) cv2.createTrackbar (' h_H ',' image ', 130, 255, юу ч биш) cv2. createTrackbar ('h_S', 'image', 255, 255, юу ч биш) cv2.createTrackbar ('h_V', 'image', 255, 255, юу ч биш) while (1): _, frame = img.read ()

hsv = cv2.cvtColor (frame, cv2. COLOR_BGR2HSV) lH = cv2.getTrackbarPos ('l_H', 'image') lS = cv2.getTrackbarPos ('l_S', 'image') lV = cv2.getTrackVPos, ' 'image') hH = cv2.getTrackbarPos ('h_H', 'image') hS = cv2.getTrackbarPos ('h_S', 'image') hV = cv2.getTrackbarPos ('h_V', 'image') low_R = np. массив ([lH, lS, lV]) дээд_R = np.мөрөл ([hH, hS, hV]) маск = cv2.inRange (hsv, доод_R, дээд_R) res = cv2.bitwise_and (хүрээ, хүрээ, маск = маск) cv2.imshow ('image', res) k = cv2.waitKey (1) & 0xFF if k == 27: break cv2.destroyAllWindows ()

Алхам 6: Боловсруулах хэсэг:

Боловсруулах хэсэг
Боловсруулах хэсэг

За, бид гарны геометрийн хэлбэртэй болсон, одоо үүнийг ашиглаж, гар дохио зангаа тодорхойлоход ашиглах цаг болжээ.

Гүдгэр их бие:

Гүдгэр их биетэйгээр бид хэлбэрийн хэт цэгүүдээр ойролцоогоор олон өнцөгтийг байрлуулахыг хичээдэг. Зүүн талд байгаа зураг нь гүдгэр цэгүүдээр улаанаар тэмдэглэгдсэн хэлбэрт өгөгдсөн ойролцоо полигоныг харуулав.

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

Энэ гүдгэр цэгийг олохын тулд бид хамгийн ойр талтай гүдгэр цэгийн зайг олох перпендикуляр зайн томъёог ашиглах хэрэгтэй. Цэнхэр үзүүртэй цэг нь хажуу талаасаа хамгийн их зайтай болохыг бид ажигласан тул бид энэ цэгийг олж авлаа.

Алхам 7:

Зураг
Зураг

Алхам 8:

Зураг
Зураг

Дараа нь бид эрхий хурууны үзүүрийг (эсвэл туйлын цэгийг) хэвтээ байрлалтай энэ гүдгэр цэг рүү холбосон шугамын налууг олох хэрэгтэй.

Алхам 9:

Зураг
Зураг

Дээрх тохиолдолд дохио зангаа зүүн тийш эргэх тохиолдолд α өнцөг нь 0-90 градусын хооронд байх ёстой. Энэ нь tan (α) эерэг байх ёстой.

Алхам 10:

Зураг
Зураг

Дээрх тохиолдолд, хэрэв дохио зангаа баруун тийш эргэх бол α өнцөг нь 180-90 градусын хооронд байх ёстой. Энэ нь tan (α) нь сөрөг байх ёстой.

Тиймээс, хэрэв Тан α эерэг байвал зүүн эргэх болно. Хэрэв Tan α сөрөг байвал баруун тийш эргэ. Одоо хамгийн чухал зогсоох командыг хэрхэн илрүүлэхийг харах цаг болжээ.

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

Алхам 11:

Зураг
Зураг

Эцэст нь хэлэхэд урд талын хөдөлгөөнийг OpenCV дээрх matchShape () функцээр шинжилдэг. Энэ функц нь дээрх тоолуурын гурвалжин дээрх сургалтын жишээг дээрх зургийн зүүн талын контуртай харьцуулсан хоёр тоолуурын хэлбэрийг харьцуулдаг. Энэ нь хоёр контур хэлбэрийн өөрчлөлтийн дагуу 0 -ээс 2 эсвэл 3 хүртэлх утгыг буцаана. Үүнтэй ижил контурын хувьд энэ нь 0 -ийг буцаана.

ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)

Энд cn1 ба cnt2 нь харьцуулах ёстой хоёр хэлбэр юм.

Алхам 12: ХӨДӨЛГӨӨНИЙ ХЯНАЛТ:

Хөдөлгөөний хяналт
Хөдөлгөөний хяналт

PySerial:

Бид python -ийн PySerial номын санг ашиглан боловсруулсан өгөгдлийг Arduino USB кабелиар дамжуулан Arduino Uno руу дамжуулах зорилгоор цуваа өгөгдөл болгон хөрвүүлэв. Тодорхой дохио зангаа opencv-ээр илрүүлсний дараа бид 'x' гэсэн түр зуурын хувьсагч үүсгэж, түүнд ямар нэгэн өвөрмөц утгыг өгөөд дараах командын мөрийг ашиглан цуваа оролт болгон хөрвүүлэв.

Pyserial номын санг импортлохын тулд цуваа #импортлох

Цуваа ('', baudrate = '9600', timeout = '0') # цуваа гаралтыг тохируулах.. PORT NAME бол өгөгдөл дамжуулах портны нэр юм.

serial.write (b'x ') # x бол порт руу илгээсэн цагаан толгой … b нь энэ мөрийг байт болгон хөрвүүлэх явдал юм.

Arduino боловсруулах:

Одоо arduino -ийг кодчилсон бөгөөд өөр өөр x цуваа бүрийг роботын жигд хөдөлгөөнийг хариуцдаг тодорхой үйлдэлд шугаман зураглуулдаг (зүүн хөдөлгөөнийг илрүүлэх нь хөдөлгүүрийг баруун тийш эргүүлэхэд хүргэдэг). Кодыг зөв өөрчилснөөр бид дугуй тус бүрийн хөдөлгөөнийг орчуулгын болон эргэлтийн байдлаар хянах боломжтой.

L298N мотор драйвер:-

Мотор драйвер нь мотор ба тэжээлийн эх үүсвэрийн хооронд зуучлагчаар ашиглагддаг тул бага хүчдэлийн түвшингээс болж моторыг шууд асаах боломжгүй байдаг. Li-Po Battery нь 12V оролтын терминалдаа холбогдсон бөгөөд бид arduino-ийн 5V залгуурыг моторт драйверын 5V оролттой холбож, эцэст нь Li-Po болон ардуиног мотор драйверийн нийтлэг залгуурт холбодог.

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

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