Rocky Rover:Robotic Vision System PixyCam&Arduino 101
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> |
| |||
|
このプロジェクトについて
PixyCamを搭載したIntelArduino 101ベースのローバー!
ハックスターライブイベントは素晴らしいです! IntelはHacksterDallasイベントを後援し、Roversを構築するためにIntel Arduino101を送ってくれました。 Intelに感謝し、Arduinoに感謝します。これが私がイベントのために作ったローバーです。
Johnathan Hottellのこのチュートリアルに従って、このデバイスを作成しました。彼はBLEローバーを構築するためにいくつかのビデオを作成しました。そして、それは簡単です!こちらでチェックしてください。これがJohnathanHottellのビデオです。
私は4つのモーターを備えたローバーを持っているので、これに従いました。
ローバーを構築し、ブリンクと接続した後。ビルドを改善してPixyCamを追加することにしました。パン/チルトカメラを取り付けることができるように、バッテリーホルダーを前に移動しました。
PixyCam
PixyCamを使用すると、ロボットによるビジョンが簡単になります。 PixyはDIYロボット工学用の高速視覚センサーであり、ボタンを押すだけで簡単にPixyにオブジェクトを教えることができます。何百ものオブジェクトを同時に追跡することができ、追跡しているデータのみを提供します。
オレンジ色のカボチャを追跡することにしました。
私はそれを実行するのがいかに簡単であるかに驚いています。 PixyCamをArduinoに接続する手順のリンクは次のとおりです。パン/チルト機構の組み立て手順については、ここをクリックしてください。たくさんの写真があり、とてもわかりやすいのがうれしいです。セットアップとビルドの手順、Arduinoとの統合方法に従いました。私は彼らの例をテストしました。
これが私がAPIについて知ったものです。
PixyCam Arduino API
ArduinoでPixyを使用するのは本当に簡単です。 SPIヘッダーとPixyヘッダーを含めるだけです:
#include #include
そして、この小さな男を setup()
の外に置いて、Pixyのグローバルインスタンスを作成します。 および loop()
機能:
Pixy pixy;
Arduinoライブラリで最も重要なメソッドは getBlocks()
です 、Pixyが検出したオブジェクトの数を返します。次に、 pixy.blocks []
を確認できます。 検出された各オブジェクトに関する情報の配列(検出されたオブジェクトごとに1つの配列メンバー)。各配列メンバー( i
)次のフィールドが含まれています:
-
pixy.blocks [i] .signature
検出されたオブジェクトの署名番号(通常の署名の場合は1〜7)
-
pixy.blocks [i] .x
検出されたオブジェクトの中心のx位置(0〜319)
-
pixy.blocks [i] .y
検出されたオブジェクトの中心のy位置(0〜199)
-
pixy.blocks [i] .width
検出されたオブジェクトの幅(1〜320)
-
pixy.blocks [i] .height
検出されたオブジェクトの高さ(1〜200)
-
pixy.blocks [i] .angle
検出されたオブジェクトがカラーコードの場合、オブジェクトが検出されたオブジェクトの角度。
-
pixy.blocks [i] .print()
検出されたオブジェクト情報をシリアルポートに出力するメンバー関数
したがって、ArduinoでPixyと話すのは簡単です! ArduinoライブラリとAPIの詳細については、こちらをご覧ください。これがローバーに使用されるコードです。元のBLEコードを変更し、オブジェクトトラッキングを追加しました。セットアップ中:
void setup(){..... pixy.init(); ....}
メインループは次のようになります:
void loop(){...... // pixyデータを読み取り、ブロックを取得static int i =0; int j; uint16_tブロック; char buf [32]; int32_t panError、tiltError;ブロック=pixy.getBlocks(); //ブロックがある場合if(blocks){panError =X_CENTER-pixy.blocks [0] .x; tileError =pixy.blocks [0] .y-Y_CENTER; panLoop.updatePan(panError); tileLoop.update(tiltError); pixy.setServos(panLoop.m_pos、tiltLoop.m_pos); i ++; //フレームはArduinoをダウンさせますif(i%10 ==0){int trackedBlock =0; sprintf(buf、 "検出された%d:\ n"、ブロック); Serial.print(buf); long maxSize =0; for(j =0; j maxSize){trackedBlock =j; maxSize =newSize; }} int32_t followError =RCS_CENTER_POS --panLoop.m_pos; //サイズはオブジェクトの面積です。 //最後の8の移動平均を保持します。size+ =pixy.blocks [trackedBlock] .width * pixy.blocks [trackedBlock] .height;サイズ-=サイズ>> 3; int forwardSpeed =Constraint(400-(サイズ/ 256)、-100、400); int32_t差動=(followError +(followError * forwardSpeed))>> 8; int leftSpeed =Constraint(forwardSpeed +差動、-400、400); int rightSpeed =Constraint(forwardSpeed-差動、-400、400); motor1-> setSpeed(leftSpeed); //左モーター3-> setSpeed(leftSpeed); motor2-> setSpeed(rightSpeed); //左モーター4-> setSpeed(rightSpeed); double width =pixy.blocks [trackedBlock] .width; if(width <=5){} else if(width <20 &&!running){Serial.println( "running"); motor1-> run(FORWARD); motor3-> run(FORWARD); motor2-> run(FORWARD); motor4-> run(FORWARD); running =true; } else if(width> 80 &&!running){Serial.println( "running"); motor1-> run(BACKWARD); motor3-> run(BACKWARD); motor2-> run(BACKWARD); motor4-> run(BACKWARD); running =true; } else if(width> =20 &&width <=80 &&running){motor1-> setSpeed(128); motor2-> setSpeed(128); motor3-> setSpeed(128); motor4-> setSpeed(128); motor2-> run(RELEASE); motor4-> run(RELEASE); motor1-> run(RELEASE); motor3-> run(RELEASE); running =false; }}}}
PixyCamが制御せずにBlynkを実行するには、レンズキャップを装着します。 PixyCamがボットの制御に干渉しないようにします。このプロジェクトでArduinoでのプログラミングや、次のプロジェクトでのPixyCamの使用に興味を持った場合は、[プロジェクトを尊重する]ボタンをクリックしてフォローしてください。
お気軽にご質問ください。
コード
ロッキーローバー
製造プロセス