質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

0回答

1954閲覧

ラズパイとopencv,wiringpiを組み合わせた赤色物体の追尾ロボットの高速化

Leo0121

総合スコア12

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2019/02/02 06:33

実現したいこと

picameraを搭載したラズパイとopencvを組み合わせ,画像処理で赤色の物体を認識し,その物体を追跡するようにwiringpiを使用しモーターを作動させる.

すでにできていること

画像認識とモーターの作動,赤色の物体の位置によってモーターの回転方向の切り替えさらが実現している
###問題点
出力先をロボットのモーターではなくモーター単体で実験的に動作ができているか確認することはできているがいざロボットに繋いでみるとモーターの回転数が早く,制御が追いつかない.
繋いだロボットが本番機ではなく実験機なのでモーターの回転数が下がる予定で制御は間に合う可能性はあるが心配なので制御を早くしたい.

該当のソースコード

python3

1import wiringpi as pi 2import cv2 3import numpy as np 4import picamera 5 6picamera.resolution=(640,480) 7 8pi.wiringPiSetupGpio() 9pi.pinMode(14,1) 10pi.pinMode(15,1) 11pi.pinMode(23,1) 12pi.pinMode(24,1) 13 14def OUT_PUT(set): 15 if 220<=set<=420: 16 pi.digitalWrite(14,0) 17 pi.digitalWrite(15,1) 18 pi.digitalWrite(23,0) 19 pi.digitalWrite(24,1) 20 elif 0<=set<220: 21 pi.digitalWrite(14,1) 22 pi.digitalWrite(15,0) 23 pi.digitalWrite(23,0) 24 pi.digitalWrite(24,1) 25 elif 420<set<=640: 26 pi.digitalWrite(14,0) 27 pi.digitalWrite(15,1) 28 pi.digitalWrite(23,1) 29 pi.digitalWrite(24,0) 30 else: 31 pi.digitalWrite(14,1) 32 pi.digitalWrite(15,0) 33 pi.digitalWrite(23,0) 34 pi.digitalWrite(24,1) 35 36def find_rect_of_target_color(image): 37 hsv= cv2.cvtColor(image, cv2.COLOR_BGR2HSV_FULL) 38 h = hsv[:,:,0] 39 s = hsv[:,:,1] 40 mask = np.zeros(h.shape, dtype=np.uint8) 41 mask[((h < 20) | (h > 200)) & (s > 128)] = 255 42 _, contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 43 rects = [] 44 for contour in contours: 45 approx = cv2.convexHull(contour) 46 rect = cv2.boundingRect(approx) 47 rects.append(np.array(rect)) 48 x=(rect[0]+(rect[2]/2)) 49 y=OUT_PUT(x) 50 return rects 51 52if __name__ == "__main__": 53 capture = cv2.VideoCapture(0) 54 while cv2.waitKey(30) < 0: 55 _, frame = capture.read() 56 rects = find_rect_of_target_color(frame) 57 if len(rects) > 0: 58 rect = max(rects, key=(lambda x: x[2] * x[3])) 59 cv2.rectangle(frame, tuple(rect[0:2]), tuple(rect[0:2] + rect[2:4]), (0, 0, 255), thickness=2) 60 cv2.imshow('red', frame) 61 capture.release() 62 cv2.destroyAllWindows() 63 pi.digitalWrite(14,0) 64 pi.digitalWrite(15,0) 65 pi.digitalWrite(23,0) 66 pi.digitalWrite(24,0)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/02/02 07:22

ポートがどういう機能を持つのか不明ではどーしよーもないと思いますが。 回路図を提示しましょう
iwanote

2019/02/04 07:14

単純にモータの速度を下げてはいかがですか? どんな仕組みかわかりませんが
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問