JBR-001 オープンソース3Dプリントデスクトップロボットの概要

TL;DR

JBR-001は、Arduino UNO Qをベースにした完全オープンソースの3Dプリント可能なデスクトップロボットです。3つのサーボ、カメラ、距離センサー、ブザー、8×13のビットマップディスプレイを搭載しており、ホビーユーザーがエッジAI、コンピュータビジョン、物理的なインタラクションを実験できるよう設計されています。


JBR-001とは?

JBR-001は、ロボット工学、知覚、エッジAIの迅速なプロトタイピングのために設計された、コンパクトな3Dプリント可能なロボットプラットフォームです。すべての機械部品、ファームウェア、CADファイルはオープンソースライセンスで公開されており、部品表は安価な市販コンポーネントで構成されています:

  • Arduino UNO Q(中央コントローラー)
  • カメラ接続用USB-Cハブ
  • カメラモジュール×1(前方)
  • Modulino距離センサー(後方)
  • Modulinoブザー(音声フィードバック)
  • ホビー用サーボ×3(頭部および両腕)
  • サーボ用外部5 V/2 A電源
  • GitHubで公開されている完全なSTLファイル

このロボットは、ユーザーへの挨拶、鼓動するハートのアニメーション表示、距離センサーによる物体検知、そしてオンボードでのコンピュータビジョンモデルの実行が可能です。


基本アーキテクチャと配線

Arduino UNO Qはすべての周辺機器を制御し、コンピュータビジョンモデルの推論を実行します。主な配線ルールは以下の通りです:

  1. 頭部サーボ → ピン 9
  2. 左腕サーボ → ピン 10
  3. 右腕サーボ → ピン 11
  4. すべてのサーボ → 外部5 V電源(UNO Qから直接給電しないでください)
  5. 外部電源のグランド ↔ UNO Qのグランド(共通の基準)
  6. Modulino距離センサー&ブザー → UNO Qのピン(配線図参照)
  7. カメラ → USB-Cハブ → UNO Q

重要: サーボの電源をUNO Qに直接接続すると、電圧降下が発生し動作が不安定になります。必ず専用の電源を使用し、グランドを共通にしてください。


機械的組み立て

ロボットの本体は、電子部品とサーボを収める3Dプリントパーツで構成されています。組み立て手順:

  1. すべてのSTLファイルをプリントします。
  2. 頭部サーボ(水平回転)と腕サーボ(垂直移動)を取り付け、シャフトの調整を確認します。
  3. 頭部にカメラを、後部に距離センサーを取り付けます。
  4. シェルを閉じる前に、プリントされたチャンネルを通してケーブルを配線します。
  5. Arduino UNO Qを固定し、外部電源を接続します。

プロジェクトページにて、組み立ての全工程を解説した動画が公開されています。


ディスプレイアニメーション(鼓動)

8×13のLEDマトリックスは、アイドル時に鼓動するハートを表示します。2つのビットマップ配列(heartSmallとheartLarge)が、センサーの読み取りをブロックしないタイマー制御のステートマシンでレンダリングされます:

unsigned long heartbeatTimer = 0;
int heartbeatStep = 0;
void heartbeat() {
  unsigned long now = millis();
  switch (heartbeatStep) {
    case 0: matrix.renderBitmap(heartLarge,8,13); heartbeatTimer=now; heartbeatStep=1; break;
    case 1: if (now-heartbeatTimer>=120) { matrix.renderBitmap(heartSmall,8,13); heartbeatTimer=now; heartbeatStep=2; }
    case 2: if (now-heartbeatTimer>=100) { matrix.renderBitmap(heartLarge,8,13); heartbeatTimer=now; heartbeatStep=3; }
    case 3: if (now-heartbeatTimer>=160) { matrix.renderBitmap(heartSmall,8,13); heartbeatTimer=now; heartbeatStep=4; }
    case 4: if (now-heartbeatTimer>=700) { heartbeatStep=0; }
  }
}

このノンブロッキング設計により、ロボットは距離センサーとカメラを同時に監視できます。


ブザーによる音声フィードバック

距離センサーが近くの物体を検知した際に、4音のメロディでフレンドリーな挨拶を行います:

void playHello() {
  buzzer.tone(523,120); delay(150);
  buzzer.tone(659,120); delay(150);
  buzzer.tone(784,180); delay(210);
  buzzer.tone(1047,250); delay(270);
}

開発者は、メロディをカスタムの音階シーケンスに置き換えて、ロボットのさまざまな状態を通知させることができます。


近接検知

後部の距離センサーが継続的に範囲を報告します。典型的なインタラクションパターンは以下の通りです:

if (distanceSensor.available()) {
  float d = distanceSensor.get();
  if (d < DETECTION_DISTANCE && !objectDetected) {
    objectDetected = true;
    playHello();
  }
  if (d > RESET_DISTANCE) objectDetected = false;
}

DETECTION_DISTANCEとRESET_DISTANCEを調整して、応答性を最適化してください。


サーボ制御のガイドライン

サーボは標準のServo.write(angle)呼び出しで駆動されます。推奨される慣行:

  • プリントされたジョイントの機械的範囲内に動きを制限する(0~180°の全範囲スイープは避ける)。
  • 自然な動作のために、小さく表情豊かな動き(例:10~30°の首振り)を使用する。
  • 常に外部電源からサーボに給電し、グランドを共通に保つ。

エッジAI:UNO Qでのコンピュータビジョン実行

カメラは96×96(または同等)のフレームをArduino UNO Qに供給し、Edge Impulseで生成されたモデルが推論を実行します。ワークフローは以下の通りです:

  1. データセット取得 – VisionDatasets.comを使用して合成データセット(例:Arduino Modulinoの画像)をダウンロードします。
  2. Edge Impulseへのインポート – 提供されたAPIキーを使用してデータセットを直接アップロードします。
  3. モデルトレーニング – 画像分類インパルスを設定します。Edge Impulseがトレーニングと検証を処理します。
  4. デプロイ – モデルをC++ライブラリとしてエクスポートし、JBR-001のファームウェアに統合します。
  5. 推論ループ – フレームをキャプチャし、run_classifier()を実行して、予測されたクラスに基づいて動作します。

これにより、ロボットは特定の物体(例:異なるModulino)を認識し、首を振る、腕を上げる、音を鳴らす、ディスプレイを変更するといった連動したアクションをトリガーできます。


応用例:Modulino認識

開発者は、いくつかのArduino Modulinoボードを識別するモデルをトレーニングしました。Modulinoがロボットの前に現れると、以下のシーケンスが発生します:

  1. カメラが画像をキャプチャ。
  2. Edge ImpulseモデルがModulinoのクラスを予測。
  3. ファームウェアがクラスを動作(例:首振り+腕上げ+ビープ音)にマッピング。

データセットには多様な照明、ポーズ、背景が含まれているため、モデルは現実世界のキャプチャに対しても汎用性を発揮します。


JBR-001の拡張

このプラットフォームは意図的にモジュール式になっています:

  • カメラの交換:より高解像度なものや赤外線カメラに変更可能。
  • センサーの追加:空いているUNO Qピンに接続して、温度センサーやIMUなどを追加可能。
  • ディスプレイの交換:より大きなマトリックスやOLEDに変更してUIをリッチに可能。
  • 新しいモデルのトレーニング:VisionDatasets.comやカスタム画像を使用して、あらゆる物体セットを学習可能。
  • カスタム動作のプログラミング:Arduino IDEやPlatformIOで、同じノンブロッキングループ構造を活用してプログラム可能。

コミュニティの反応

Hacker Newsのスレッドでは、いくつかのユーザーの視点が強調されました:

  • オープンソースの性質と家族で楽しめるビルド体験に対する熱狂的な支持(salamachinasによるコメント)。
  • UNO Qのコストとクローン製品の入手性の低さに対する懸念(mrheosuper)。
  • Otto DIYのような初期のオープンソースキットとの比較、および商業化への傾向についての指摘(phil42)。
  • ロボットの美学と実用性に関する軽快なコメント(shevy-java、krisoft)。

これらのコメントは、プロジェクトの教育的価値と、ハードウェアを安価かつ真にオープンに保つことの重要性を浮き彫りにしています。


結論

JBR-001は、安価な3Dプリントパーツと1枚のArduino UNO Qボードから、AI機能を備えた完全に機能するデスクトップロボットを構築できることを証明しています。そのオープンソース設計、完全なファームウェア例、そしてシームレスなEdge Impulse統合により、ロボット工学、コンピュータビジョン、エッジAIを学ぶための理想的なサンドボックスとなっています。

Sources

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト