工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Rocky Rover: PixyCamとArduino 101でロボットビジョンシステムを構築

必要な部品と材料

部品名数量
Arduino 1011
Adafruit Motor/Stepper Shield V21
SparkFun Dagu DG102 タンクシャーシ1
単3電池1セット
USB-A to Bケーブル1
Adafruit USBバッテリーパック1
M2.5スペーサー(ナット・ネジ付き)4
JSTバッテリーコネクター(オス/メス)1組
ピンヘッダー 40P 1列 (0.1インチ)1
ジャンパーワイヤー(オス-オス)1セット
Pixy (CMUcam5)1
Pixyパンチルトキット1

使用ツール・サービス

プロジェクト概要

Intel Arduino 101ベースのPixyCam搭載ローバー

Hackster LiveイベントでIntelがスポンサーとなり、Arduino 101が提供されました。Johnathan Hottell氏のチュートリアルに従ってBLEローバーを構築し、さらにPixyCamを追加してビジョン機能を拡張しました。バッテリーホルダーを前方に移動し、パン/チルトカメラを搭載できるようにしています。

PixyCamについて

PixyCamはDIYロボティクス向けの高速ビジョンセンサーです。ボタンを押すだけでオブジェクトを学習でき、数百個のオブジェクトを同時に追跡し、追跡対象のデータのみを出力します。
Rocky Rover: PixyCamとArduino 101でロボットビジョンシステムを構築 今回はオレンジ色のカボチャを追跡対象としました。
Rocky Rover: PixyCamとArduino 101でロボットビジョンシステムを構築 セットアップとパンチルト機構の組み立て手順はこちら(画像豊富で分かりやすい)。
Rocky Rover: PixyCamとArduino 101でロボットビジョンシステムを構築

PixyCam Arduino API

Arduinoでの使用はシンプルです。SPIとPixyヘッダーをインクルードし、グローバルインスタンスを作成します。

#include <SPI.h>
#include <Pixy.h>
Pixy pixy;

最も重要なメソッドはgetBlocks()で、検出されたオブジェクト数を返します。pixy.blocks[]配列で各オブジェクトの情報(シグネチャ番号、中心座標X/Y、幅、高さ、角度、print()メソッド)にアクセスできます。

ローバー用コード(抜粋)

オリジナルのBLEコードをベースに、オブジェクト追跡機能を追加しました。

void setup() {
  .....
  pixy.init();
  .... 
}

void loop() {
  ......
  static int i = 0;
  int j;
  uint16_t blocks;
  char buf[32];
  int32_t panError, tiltError;
  
  blocks = pixy.getBlocks();
  if (blocks) {
    panError = X_CENTER - pixy.blocks[0].x;
    tiltError = pixy.blocks[0].y - Y_CENTER;
    panLoop.updatePan(panError);
    tiltLoop.update(tiltError);
    pixy.setServos(panLoop.m_pos, tiltLoop.m_pos);
    
    i++;
    if (i % 10 == 0) {
      int trackedBlock = 0;
      sprintf(buf, "Detected %d:\n", blocks);
      Serial.print(buf);
      long maxSize = 0;
      for (j = 0; j < blocks; j++) {
        sprintf(buf, " block %d: ", j);
        Serial.print(buf);
        pixy.blocks[j].print();
        long newSize = pixy.blocks[j].height * pixy.blocks[j].width;
        if (newSize > maxSize) {
          trackedBlock = j;
          maxSize = newSize;
        }
      }
      // モーター制御ロジック(面積ベースで前進/後退/停止)
      int32_t followError = RCS_CENTER_POS - panLoop.m_pos;
      size += pixy.blocks[trackedBlock].width * pixy.blocks[trackedBlock].height;
      size -= size >> 3;
      int forwardSpeed = constrain(400 - (size/256), -100, 400);
      int32_t differential = (followError + (followError * forwardSpeed)) >> 8;
      int leftSpeed = constrain(forwardSpeed + differential, -400, 400);
      int rightSpeed = constrain(forwardSpeed - differential, -400, 400);
      motor1->setSpeed(leftSpeed);
      motor3->setSpeed(leftSpeed);
      motor2->setSpeed(rightSpeed);
      motor4->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;
      }
    }
  }
}

Blynkで手動操作する場合は、PixyCamにレンズキャップを付けて干渉を防いでください。

製造プロセス

  1. Arduino POVクロック:残像効果で浮かび上がるLED時計を自作する
  2. SERENA:Arduino Mega 2560とTFT LCDタッチスクリーン搭載カスタムアラームシステム
  3. Arduino駆動3Dプリントロボットアームの製作:ステップバイステップガイド
  4. Arduinoプロジェクトのための最適化電源ソリューション
  5. Arduinoベースのヌンチャク操作6自由度ロボットアームキット
  6. Arduino 101 BLE + Blynk:スマホで操作するBluetooth戦車ロボット
  7. Arduino 101とtinyTILE BLEでスマートマッチングサングラスを作る
  8. Arduino UNOとATtiny85で作る携帯型POV(残像)ディスプレイ
  9. DIY Arduino スマートウォッチ — Apple Watch 風腕時計を自作
  10. スマート地下室換気システム:Arduinoで湿度制御
  11. ロボット手術ビジョンシステムの照明設計最適化