AITRIOSエッジAIカメラとSO-101ロボットアームによる自律物体仕分けシステム

ゴミはゴミ箱へ、靴下は洗濯カゴへ。全部ロボットがやってくれたら最高じゃない?
SonyのAITRIOSカメラとPython制御ロボットアーム「SO-101」で、そんな夢が近づいてます。

AITRIOSプラットフォームの基本構成と主要機能

AITRIOS(アイトリオス)は、ソニーが提供するエッジAIセンシングプラットフォームです。インテリジェントビジョンセンサーIMX500を組み込んだエッジデバイスと、クラウド側の管理・開発環境を統合し、モデルの開発・デプロイから運用管理まで一貫してサポートします。AITRIOSはエッジAIカメラ上で画像を解析し、プライバシーに配慮してメタデータのみをクラウド送信する設計になっており、ネットワーク負荷やクラウド処理を大幅に削減します。

プラットフォームの構成要素と役割を以下にまとめます。

構成要素役割・機能概要
Console(コンソール)エッジデバイスの集中管理。Web UIまたはREST APIで操作し、モデルのトレーニング、エッジへのモデル/アプリ配信、デバイス状態監視、メタデータ収集などを行います。
エッジデバイスソニーIMX500インテリジェントビジョンセンサー搭載のAIカメラ等。画像センサー内でAI推論を実行し、結果をメタデータとして出力します。
AIモデルエッジデバイス上で実行されるニューラルネットワークモデル。モデル開発・訓練から量子化・パッケージ化・デプロイまで、ConsoleまたはSDKで一連のワークフローを実施可能です。
エッジアプリケーションエッジデバイスにデプロイして動作させるアプリケーション。AIモデルの出力データを加工・フィルタしたり、時系列解析するなどの独自ロジックを実装できます。Vision and Sensing Application SDK(AITRIOSエッジアプリSDK)を用いて開発します。
ソリューションエッジデバイスから送られてきたデータを活用する上位システム。例えばクラウド側で可視化や分析を行う小売店向け顧客分析などのアプリケーションが該当し、顧客テナント側で動作するクラウドアプリとして展開できます。

このようにAITRIOSでは、エッジデバイス~クラウドにまたがる構成要素を統合的に扱えます。特にコンソール上で、デバイス管理(ファームウェア更新・スケジューリング等)、モデル訓練・量子化、パッケージング、デプロイまで対応しており、煩雑になりがちなエッジAI開発を一つのプラットフォームで完結できます。またCloud SDKも提供されており、クラウド側でエッジデバイスからのデータを利用したアプリケーション開発(可視化や分析システムなど)を行うことも可能です。

開発環境として、ノーコードでモデル作成ができるツールや各種SDKが用意されています。たとえばBrain Builder for AITRIOS(ブレーンビルダー)はデータ収集・ラベリングからモデル訓練・評価・デプロイまでGUI上で行えるノーコードAIモデル開発ツールです。分類モデルや物体検出モデル、異常検知モデルを簡単な操作で作成でき、少ないサンプル(50枚程度)からでも学習可能なローカル環境向けAIトレーナーとなっています。

加えて、エッジアプリケーションSDK(Vision and Sensing Application SDK)はGitHub上で公開されている開発ツールキットで、CodespacesやDocker上の開発コンテナとして提供されます。これを使うことで、Jupyterノートブックやサンプルコードを活用しながらエッジデバイス上で動作するアプリを実装し、Console経由でデプロイすることができます。要するに、AITRIOSではAIモデル開発~デバイス実装~運用の全ステップを支援するエコシステムが整っているのが特徴です。

Raspberry Pi + IMX500によるエッジAIアプリ開発手順

図1: Raspberry Pi AIカメラ (Sony IMX500搭載) – ラズパイ向けのIMX500搭載AIカメラモジュール(12MP, 可変フォーカス)。このモジュール単体でニューラルネットワーク推論を実行し、結果をメタデータとして出力します

Raspberry PiとIMX500搭載AIカメラを組み合わせることで、低遅延・低消費電力でのエッジ推論が可能です。開発手順の概要は以下のとおりです。

セットアップ

「Raspberry Pi カメラのインストール」の手順に従って、カメラを Raspberry Pi 5 ボードに取り付けます。Raspberry Pi OSを最新に更新し、カメラ対応のファームウェアとドライバをインストールします(例:ターミナルで sudo apt update && sudo apt full-upgrade 実行後、sudo apt install imx500-all を実行)。

# Raspberry Pi OSを最新に更新
$ sudo apt update && sudo apt -y full-upgrade
Bash

IMX500ファームウェアをインストールします。

# IMX500ファームウェアをインストールする
$ sudo apt -y install imx500-all
Bash
  • IMX500センサーを動作させるために必要なファームウェアファイル(/lib/firmware/imx500_loader.fpk および /lib/firmware/imx500_firmware.fpk)をインストールします
  • 複数のニューラルネットワークモデルのファームウェアファイルを /usr/share/imx500-models/ に配置します
  • IMX500用のポストプロセス処理ソフトウェアを rpicam-apps にインストールします
  • 複数のニューラルネットワークモデルのファームウェアファイルを /usr/share/imx500-models/ に配置します
  • ソニー製のネットワークモデルパッケージングツールをインストールします

インストール後にシステムを再起動し、カメラが認識されることを確認します。

# インストール後にシステムを再起動
sudo reboot
Bash

モデルのデプロイ

IMX500センサー上で実行するAIモデルを用意します。ラズパイAIカメラにはMobileNet SSDによる物体検出モデルがプリロードされており、モデルのデプロイをしなくてもすぐに基本的な物体検出を試せます。加えて、TensorFlowやPyTorchで訓練したカスタムモデルをインポートして実行することも可能です。モデルのアップロードはI²Cや専用高速プロトコルで行われ、カメラ基板上のRP2040マイコンと16MBフラッシュが直近使用モデルをキャッシュするため、繰り返し利用時のアップロード負荷を低減します。

エッジAIアプリの実行

Raspberry Pi上でカメラ映像の取得とAI推論結果の取得を行うアプリケーションを動かします。libcamera/Picamera2ライブラリや専用のrpicam-appsを用いてカメラを制御し、AIメタデータを受け取ることができます。例えばコマンドラインから簡単に動作確認する場合、以下のように実行するとリアルタイムで物体検出の結果を表示できます。

rpicam-hello -t 0s --post-process-file /usr/share/rpi-camera-assets/imx500_mobilenet_ssd.json --viewfinder-width 1920 --viewfinder-height 1080 --framerate 30
Bash

これによりカメラのプレビュー映像が表示され、IMX500上で実行されたMobileNet SSDモデルの検出結果(物体のバウンディングボックスなど)が映像上に描画されます。同様に、rpicam-vidコマンドで動画録画しながら検出を行ったり、姿勢推定モデル(PoseNet)を指定して骨格検出を試すこともできます。

なお、実行するためのパラメータは、-post-process-fileパラメータで渡した、/usr/share/rpi-camera-assets/imx500_mobilenet_ssd.jsonに記載されています。

{
"imx500_object_detection":
{
"max_detections" : 5,
"threshold" : 0.6,
"network_file": "/usr/share/imx500-models/imx500_network_ssd_mobilenetv2_fpnlite_320x320_pp.rpk",

"save_input_tensor":
{
"filename": "/home/pi/input_tensor.raw",
"num_tensors": 10,
"norm_val": [384, 384, 384, 0],
"norm_shift": [0, 0, 0, 0]
},

"temporal_filter":
{
"tolerance": 0.1,
"factor": 0.2,
"visible_frames": 4,
"hidden_frames": 2
},

"classes":
[
"person",
"bicycle",
"car",
"motorcycle",
"airplane",
"bus",
"train",
"truck",
"boat",
"traffic light",
"fire hydrant",
"-",
"stop sign",
"parking meter",
"bench",
"bird",
"cat",
"dog",
"horse",
"sheep",
"cow",
"elephant",
"bear",
"zebra",
"giraffe",
"-",
"backpack",
"umbrella",
"-",
"-",
"handbag",
"tie",
"suitcase",
"frisbee",
"skis",
"snowboard",
"sports ball",
"kite",
"baseball bat",
"baseball glove",
"skateboard",
"surfboard",
"tennis racket",
"bottle",
"-",
"wine glass",
"cup",
"fork",
"knife",
"spoon",
"bowl",
"banana",
"apple",
"sandwich",
"orange",
"broccoli",
"carrot",
"hot dog",
"pizza",
"donut",
"cake",
"chair",
"couch",
"potted plant",
"bed",
"-",
"dining table",
"-",
"-",
"toilet",
"-",
"tv",
"laptop",
"mouse",
"remote",
"keyboard",
"cell phone",
"microwave",
"oven",
"toaster",
"sink",
"refrigerator",
"-",
"book",
"clock",
"vase",
"scissors",
"teddy bear",
"hair drier",
"toothbrush"
]
},

"object_detect_draw_cv":
{
"line_thickness" : 2
}
}

オブジェクト検出オーバーレイを使用してビデオを録画するには、rpicam-vidコマンドを使用します。

$ rpicam-vid -t 10s -o output.264 --post-process-file /usr/share/rpi-camera-assets/imx500_mobilenet_ssd.json --width 1920 --height 1080 --framerate 30
Bash

プログラムからの利用

よりカスタムなアプリを作るには、Pythonでカメラとモデルを扱うことも可能です。Sony提供のApplication Module Librarymodlib)を使うと、わずかなコードでカメラからの推論付き映像ストリームを取得できます。例えば,

from modlib.devices import AiCamera
from modlib.models.zoo import SSDMobileNetV2FPNLite320x320
device = AiCamera()
model = SSDMobileNetV2FPNLite320x320()
device.deploy(model) # カメラにモデルを適用
with device as stream:
for frame in stream:
detections = frame.detections[frame.detections.confidence > 0.55]
# 検出結果の処理(描画や判定など)

このようにストリーミングAPIで各フレームの検出結果(detections)をリアルタイム取得し、任意の処理(画面への描画、別デバイスへの送信など)が行えます。検出データはバウンディングボックス座標やクラスID・信頼度スコアを含むため、コード上でゴミや衣類の判別ロジックを実装できます。

通信・連携: AIカメラの推論結果は上記のようにローカルプログラムから直接取得できるほか、AITRIOSコンソールにデバイスを登録してクラウド経由でモニタリングすることも可能です。ただし本プロジェクトではロボットアームへのリアルタイム制御が必要なため、クラウドを介さずRaspberry Pi上のプログラム内で結果を解釈しロボット制御へ繋げる方法が適しています。この場合、後述のロボット制御ライブラリ(LeRobot)を同じRaspberry Pi上で動作させ、カメラ結果を直接渡すことでスムーズな連携が可能です。

以上がRaspberry Pi+IMX500 AIカメラでエッジAIアプリを構築する大まかな流れです。セットアップさえ済めば、AIカメラが画像内の対象物を認識し、そのメタデータ(例: 検出物の種類や座標)をほぼリアルタイムに取得できます。これを後段のロボットアーム制御に活用することで、自律的な物体把持システムの基盤が整います。

AITRIOSで利用可能なAI機能とカスタムモデル対応

AITRIOSプラットフォームおよびIMX500搭載カメラでは、多彩なビジョンAI機能を利用できます。代表的なものを挙げると:

  • 物体検出(Object Detection): 画像から特定クラスの物体を検出し、バウンディングボックスで位置を特定する機能です。人や車、商品など任意の物体クラスに対して検出モデルを適用できます。IMX500にはデフォルトでMobileNet SSDベースの検出モデルが搭載され、リアルタイムに複数物体を検知できます。ユーザ自身で学習した検出モデル(YOLOv5/8やNanoDetなど)を量子化してデプロイすることも可能です。
  • 分類(Classification): 画像全体または切り出した領域について、あらかじめ定めたカテゴリーに分類する機能です。例えば「ゴミ」 vs 「衣類」のようにカテゴリ分けしたい場合、分類モデルを用いて画像内オブジェクトを識別できます。Brain Builderを用いると独自データセットで分類AIを訓練しエッジデバイスに導入することが容易にできます。
  • 領域検出・人数カウント: 特定エリア内の対象検知や人数計測も実現できます。例えばIMX500を天井に設置し、あるエリアに人が入ったことを検出したり人数を数えるといったゾーン監視用途にも使われています。AITRIOSのエッジアプリを活用すれば、「ある領域に特定物体が何秒間存在したか」などのロジックもエッジ側で処理できます。
  • 姿勢推定(Pose Estimation): 人の骨格点を検出するモデルも動作します。実際、Raspberry Pi向けサンプルにはPoseNetモデルを利用した骨格キーポイント検出デモも含まれています。これにより人の動作検知や姿勢分類もエッジで可能です。
  • 異常検知(Anomaly Detection): 製造業などで活用される、不良品の検知やパターン異常検出も対応可能です。Brain Builderでは簡易的な異常検知モデルもノーコードで作成でき、エッジデバイス上でリアルタイムに良品/不良品の判定を行うことができます。

以上のように、AITRIOSでは検出(Detection)・分類(Classification)・領域監視(Zone Detection)・ポーズ推定・異常検知など幅広いコンピュータビジョン機能を実装できます。それぞれの機能について、ソニーから提供されるテンプレートモデルやモデルZooが用意されており、用途に応じて選択できます。さらにユーザ自身が学習したモデルを導入する柔軟性もあります。

カスタムAIモデルの導入

AITRIOSはクローズドなプラットフォームではなく、ユーザが用意した独自モデルを活用できるよう設計されています。具体的には、TensorFlowやPyTorchで訓練したモデルをオンセンサ用に最適化(量子化やパッケージング)するツールチェーンが提供されています。たとえばUltralytics社のYOLOv8で学習したモデルをエクスポートしIMX500にデプロイするガイドや、MobileNetベースの独自分類モデルをIMX500向けに再訓練・量子化するチュートリアルが公開されています。こうした手順を経ることで、自身のプロジェクトに必要なカスタムモデルをエッジデバイス上で動作させることができます。

ソニー自身もAIモデルのカスタマイズを強くサポートしており、Brain BuilderやModel Compression Toolkit (MCT)といったツールで少ないデータから効率良くモデルを訓練・量子化する仕組みを提供しています。Raspberry Pi AIカメラの場合、最初からMobileNet SSDモデルが搭載されているためすぐに物体検出を試せますが、用途に合わせてモデルを入れ替えることも可能です。例えば衣類やゴミの検出精度を上げるには、それぞれの物体に特化したデータセットでYOLOモデルを訓練しエッジにプッシュするといった運用が考えられます。

まとめると、AITRIOSプラットフォーム上では標準の検出・分類機能から高度なカスタムモデルまで柔軟に扱えます。まずは既存モデル(例えば汎用物体検出モデル)で対象物を識別できるか試し、必要に応じてカスタムデータで再訓練したモデルを投入する戦略が取れます。その際もAITRIOSのツール群がデータ準備からデバイス配信までを一貫支援してくれるため、比較的容易にモデル更新を行えるでしょう。

SO-101ロボットアームの制御方法(LeRobot)と学習アプローチ

出典: https://github.com/huggingface/lerobot
図2: SO-101ロボットアーム – Hugging FaceとRobotStudioが開発した6軸のデスクトップ向けオープンソースロボットアーム。3Dプリント部品と安価なサーボで構成され、LeRobotライブラリで制御・学習可能に設計されています

SO-101は、Hugging Face社がロボット工学コミュニティ向けに公開した低価格DIYロボットアームです。前身のSO-100を改良したモデルで、配線や組立性が向上し、部品費用は約$130(約1.5万円)と非常に安価に抑えられています。Seeed Studioからモーターキット(サーボ、制御基板、ケーブル類)が提供されており、3Dプリントしたフレームと組み合わせることで誰でも製作できます。特徴的なのは、2台1組の「リーダーアーム」と「フォロワーアーム」構成にも対応している点です。リーダーアームは人間が手で動かし、フォロワーアームがそれをトレースすることで、人の動きをデータとして収集する設計になっています。

このアプローチはHugging Faceの狙いである「模倣学習 (Imitation Learning)」に直結します。すなわち、人間がリーダーアームを操作して得た軌道データを用い、ロボットの制御モデル(ポリシーネットワーク)を教師あり学習で訓練する手法です。具体的には、リーダーで記録された一連の関節角度やグリッパー操作の時系列データをLeRobotのデータセット形式(LeRobotDataset)に蓄積し、それをニューラルネットワークに学習させて「ある入力に対して適切なロボット動作を出力する」AIモデルを作ります。こうすることで、人間の示範動作を模倣したロボット制御が実現できます。

制御にはLeRobotと呼ばれるPythonベースのライブラリを使用します。LeRobotは、PyTorch上に構築されたロボット制御フレームワークであり、模倣学習や強化学習によるロボットAIの実装をシンプルに行えるよう設計されています。主な特徴は以下の通りです:

  • 事前学習済みモデルとデータセットの提供: 人手で収集した操作デモを含む多様なデータセットや、模倣学習・強化学習で訓練されたポリシーモデルがあらかじめ公開されています。初心者でもそれらを使ってすぐ試せます。
  • シミュレーション環境: 実機を組み立てなくても試せるよう、シミュレータ上の仮想環境(例: ALOHA環境, PushT環境, SimXArm環境)で学習や評価が可能です。まずはシミュレーションで鍛えてから実機に展開するといった使い方ができます。
  • 実機対応: SO-101のような低コストロボットアームやNVIDIA Jetsonなど実ロボットへのインターフェースを備え、実機の動作制御やデータ収集を直接行えます。SO-101の場合、付属の制御基板(Feetech社製サーボ用)をPCやRaspberry PiにUSB接続し、LeRobot経由で各関節を動かします。
  • 柔軟なデータ構造: 時系列データや画像、各種センサ情報を効率的に扱えるカスタムデータセット形式を採用しています。これにより、操作デモの記録からモデル学習までスムーズにパイプラインを構築できます。

LeRobot自体のインストールはPython環境上で行い、Hugging FaceのGitHubリポジトリからクローンしてpip installする形になります。インストールオプションとして、SO-101のサーボ(Feetech社製)制御に必要な依存を含めるためにpip install -e ".[feetech]"といった指定を行います。セットアップ後は、PythonスクリプトからLeRobotのAPIを呼び出すことでアームを動かせます。

Pythonによる操作

LeRobotライブラリを用いると、関節角度の読み書きや特定位置への移動コマンドなど、高レベルな操作が可能です。例えば「特定の関節を5度動かす」「エンドエフェクタを特定の座標に移動させる」等の命令を簡潔に記述できます。また、テレオペレーション(遠隔操作)モードもサポートしており、ジョイスティックや別のデバイスでアームをリアルタイム操作しながらデータを記録することもできます。模倣学習用のデモ収集にはこのテレオペ機能が有用です。加えて、センサフィードバックを読み取って制御ループを形成することもPython上で可能なので、物体を掴んだ際の力加減調整など簡易なフィードバック制御も実装できます。

学習方法

模倣学習と強化学習がSO-101+LeRobotの肝となる部分です。

強化学習:

より汎用的なポリシーを得たり、人のデモではカバーしきれない状況に対応させたりするには、強化学習 (Reinforcement Learning) の活用が考えられます。LeRobotは強化学習アルゴリズムも統合しており、シミュレーション環境や実機を用いたトレーニングが可能です。例えば報酬関数を「正しくゴミ箱にゴミを入れたら+1」などと設計し、試行錯誤でポリシーを学習させることができます。強化学習は試行に時間がかかりますが、模倣学習で得たモデルを初期値にする「イミテーション+RL」のアプローチを取ることで効率的に学習を進めることも可能です。

模倣学習:

上述のように、人の操作データを教師データとしてロボットのポリシーモデルを訓練する手法です。SO-101ではリーダー/フォロワー構成でこれを容易にしていますが、1台のみの場合でもゲームパッド等で手動操作してデータ収集し、学習させることも可能です。模倣学習のメリットは短時間でそれなりに賢いポリシーが得られる点です。数回のデモであっても、単純なタスクならば人の意図を模倣した動きを再現できることがあります。例えば「目の前の物体を掴んで隣に置く」という動作を何度か教えれば、類似する位置にある物体に対して自律的にそれを実行するモデルを得られる可能性があります。

以上より、SO-101ロボットアームは安価で導入しやすく、Python経由で柔軟に制御・学習できるプラットフォームです。LeRobotライブラリにより、従来は難しかった実機ロボットの機械学習(模倣学習・強化学習)が比較的身近なものとなっていますnote.com。本プロジェクトにおいても、ゴミや衣類を掴んで移動するというロボット動作を学習させる際に、LeRobotの枠組みが大いに役立つでしょう。

AITRIOSとSO-101のシステム統合:認識→把持→配置の実現

最後に、AITRIOSベースの視覚系とSO-101ロボットアームを統合し、「物体を見つける→掴む→所定の場所に置く」までの一連の動作を自律実行させるシステムについて考えます。必要な技術要素やミドルウェア、通信方式を整理すると次の通りです。

座標系の統一とキャリブレーション

カメラで検出した物体の位置をロボットアームに伝えるには、両者の座標系を一致させる必要があります。例えばカメラが天井にある場合はワールド座標への射影変換、アームがテーブル上にある場合はテーブル面座標への変換が必要です。

具体的には、カメラの画素座標を実世界の長さ単位に変換し、さらにそれをアームの基地座標系にマッピングします。これにはカメラキャリブレーション(内部パラメータ補正)とハンドアイキャリブレーション(カメラとロボットの位置関係の校正)が関わります。簡易的には、カメラ視野内の既知サイズマーカーでスケール変換し、原点のオフセットを測定する、といった手法でも対応可能です。

ミドルウェアの選択

ロボット制御と画像認識のデータフローをつなげるには、何らかの通信やミドルウェアが必要です。

軽量な方法として同一プログラム内で処理を順次実行する(Pythonでカメラ→判定→アーム操作を直列に書く)こともできますが、拡張性を考えると**ROS (Robot Operating System)**の利用も検討できます。

ROS2であれば、カメラノードから物体座標のトピックを発行し、アーム制御ノードがそれを購読して動く、といった疎結合な構成にできます。一方でシンプルな実装を優先するなら、Pythonのマルチスレッド/マルチプロセスでカメラ処理とアーム処理を並行させ、キュー(共有メモリ)経由でデータ受け渡しする方法もあります。

AITRIOSのEdge Application機能を活用すれば、カメラ上で得られたメタデータをMQTTやWebSocketで配信する仕組みを組み込むこともできます。実際、IMX500のメタデータは非常に軽量(テキストやJSON)なので、ネットワーク越しに送っても負荷は小さいです。

把持動作の計画

単に座標を受け取ってその位置にアームを動かすだけでは、安定した把持はできません。物体の種類に応じて、適切な把持姿勢と経路を計画する必要があります。

例えば衣類(靴下)は掴みにくいので、下からすくうようにアプローチする、ゴミ(紙くず)は上から掴む、などの工夫が考えられます。これはロボットハンド(グリッパー)の形状や開閉角度にも依存します。

SO-101付属のグリッパーは簡易な2爪タイプなので、衣類なら端を摘むように、ゴミなら中央を挟むように狙うと良いでしょう。

アプローチの経路計画には逆運動学計算や経路補間が必要ですが、LeRobotやROSのMoveItを使えば比較的容易に実装できます。MoveItなら目標座標と姿勢を与えると自動で関節角度計算と障害物のない軌道生成を行ってくれます。

一方LeRobot独自の機能としては、模倣学習で把持軌道を学習させてしまう方法もあります。例えばゴミの位置を入力すると掴んで持ち上げるまでの一連動作をネットワークに出力させる、といったポリシーモデルを訓練することも理論上可能です。

配置動作の実行

掴んだ後、適切な場所に物体を置きに行く動作も自律化します。

これはゴミならゴミ箱上部までアームを動かして開放、衣類なら洗濯カゴの上で開放、という形になります。そのためにゴミ箱やカゴの位置もあらかじめ座標で教えておく必要があります。

固定位置に置く場合は事前にロボットの座標でその位置をキャリブレーションして登録しておきます。カメラでゴミ箱を認識させて位置を動的に計測する方法もありますが、環境内で固定されているターゲットについてはハードコーディングで十分です。

アームを対象位置まで動かす際、姿勢(オリエンテーション)も考慮し、真上から物を落とせるような向きに手首を回すなどの工夫が必要です。

リアルタイム制御と安全性

エッジAIカメラで物体を検出してからアームが把持・配置するまでの一連の流れをリアルタイムに行うには、各処理のレイテンシを抑える必要があります。

IMX500の推論は数十ms程度と高速ですし、Raspberry Pi内でのデータ授受も軽量なのでボトルネックは少ないでしょう。

むしろ注意すべきはロボットの物理動作時間(数秒オーダー)であり、その間に物体が動いていないかなどを検知する仕組みです。

必要に応じて、アーム動作中も定期的にカメラで対象を追跡し、ズレが大きければ計画を更新するといったフィードバック制御を取り入れると成功率が上がります。

また、安全のためアームが急停止できるよう、把持力が一定以上になったら止める、人が手を近づけたら動作を止める等のセンサ(力センサや距離センサ)の追加も検討できます。

AITRIOS × LeRobot による統合アーキテクチャの全体像

総合すると、本システムはエッジAIカメラの高精度物体認識ロボットアームの柔軟な操作を組み合わせることで実現します。

その統合には、座標変換、通信インフラ、動作計画といったロボット工学の要素が含まれますが、一つ一つは既存のフレームワーク(ROSやLeRobot、AITRIOS SDKなど)で対応可能です。特にAITRIOSは「認識結果の取得」までを大幅に簡素化してくれるため、開発者はその結果をどうロボットに反映させるかという高レベルのロジックに専念できます。逆に、ロボットアーム側のLeRobotも「物体を掴んで移動する」動作を機械学習で獲得させる道筋を用意しているため、開発者はカメラからの指示(例えば「座標Xにゴミあり」)をどう学習ポリシーに組み込むかに集中できます。

二者を繋ぐインターフェースは、シンプルには同じRaspberry Pi上のPythonコードで関数呼び出しを繋ぐ形になりますが、将来的な拡張性を考えればROS2ノード化やクラウド連携(MQTTブローカー経由など)も視野に入れるとよいでしょう。

プロジェクト実現までのステップと学習リソース

最後に、以上の技術を組み合わせてプロジェクトを完成させるまでの具体的なステップを段階的に示し、参考になる学習リソースや事例を紹介します。

ステップ1: 環境セットアップと基礎実験

まずは手元のRaspberry Pi+AIカメラで基本的な物体認識が動くことを確認します。SonyのAITRIOS開発者サイトには「Raspberry Pi AIカメラのセットアップガイド」やサンプルコードが公開されているので、それらを順に試しましょう。
Develop for Raspberry Pi AI Camera

例えば公式サイトのチュートリアルでは、物体検出やポーズ推定のデモを実行する手順が解説されています。また、Raspberry Pi財団の公式ドキュメントやブログ記事(「Getting started with Raspberry Pi AI Camera」など)も実践的な情報源です。Tom’s Hardwareの記事などでは、カメラの仕組みから実際のPythonコードまで紹介されています。

次に、SO-101ロボットアームを組み立て、単体で動作確認します。以下の記事では日本でのパーツの調達についてまとめられています。

Seeed StudioのWikiやHugging Faceのコミュニティフォーラムには、ハードウェア組立やキャリブレーション方法が共有されています。特にHugging FaceのLeRobot公式チュートリアルGitHubのREADME内のリンク)では、SO-101のセットアップから基本的な動作テストまで丁寧に案内されています。

これらを参考に、LeRobotライブラリをインストールし、付属のデモ(例えばキーボード操作でアームを動かすサンプル)を動かしてみましょう。

ステップ2: 物体認識モデルの調整

ゴミと衣類を識別するために、必要であればカメラのAIモデルをチューニングします。最初は既存のモデル(MobileNet SSDなど)でどの程度識別できるかテストします。識別精度が不足している場合、Brain BuilderやUltralyticsのYOLOv8を用いてカスタムデータセットで再訓します。例えば、床に落ちた靴下や紙くずの画像を50~100枚ほど用意し、Brain Builderでラベル付けして小規模な検出モデルを訓練することも可能です。

訓練したモデルはMCTツールで量子化・最適化し、AITRIOSコンソールやSDK経由でカメラにデプロイします。モデル作りの学習リソースとして、ソニー公式のAIチュートリアル(上で触れたBrain Builder動画チュートリアルやGitHub上のサンプル)や、Arducam社のIMX500ブログ記事なども参考になります。ArducamはIMX500向けに独自のモデルZooを公開しており、市販モデルを超えた応用例を紹介しています。

ステップ3: ロボットアーム制御プログラムの開発

次に、Pythonでカメラとアームを統合するコードを書きます。段階的には、まずカメラで検出した物体までアームを動かす単純なスクリプトを作ると良いでしょう。

Picamera2やmodlibで取得した物体座標を、そのままSO-101のアーム先端の目標位置として与え、直線的に動かす処理です。最初は安全のため速度を遅く設定し、手動で干渉しないか確認しながら実行します。LeRobotでの座標指定には逆運動学ソルバーが必要ですが、ライブラリに実装がある場合はそれを使い、ない場合は簡易的に関節角度を調整しながら目標に近づけるアルゴリズムでも構いません。重要なのは、一連の処理をループで回し、自律サイクルを作ることです。「カメラで検出→アーム動作→再度検出…」とループさせることで、落ちている物体を順次片付ける流れができます。

この時点ではまだ把持せず、単にターゲットの上までアームを持っていく程度にとどめ、システムが安定して動くか検証します。

ステップ4: 把持と配置動作の追加

物体を実際に掴んで動かす処理を加えます。LeRobotでグリッパーを閉じるコマンドを組み込み、ターゲット上方→下降→把持→上昇という一連の軌道を実行させます。把持できたかどうかの判定は難しいですが、一定距離アームを下ろしたら掴む動作を行い、持ち上げてみてカメラから物体が消えていれば成功、とみなす簡易な基準でも良いでしょう(高度な方法としては、グリッパーの電流値から物体を挟んだ感触を検知するやり方もあります)。

掴んだ後は、ゴミならゴミ箱座標まで、衣類なら洗濯かご座標までアームを動かし、上から開放します。これで1つの物体の処理サイクルが完了します。部屋に複数対象がある場合は、このサイクルを繰り返してすべて処理します。複数物体の優先度を決めるには、例えばカメラ視野に複数検出がある場合に一番近いものから処理するといった戦略が考えられます。

ステップ5: テストと反復改善

実際に部屋(あるいはテーブル上など設定した環境)でテストを重ね、失敗ケースを洗い出して改良します。例えば「衣類が掴めない」「誤認識でゴミでないものを掴もうとする」「把持時に物を押し出してしまう」等の問題が起きるでしょう。これらに対して、ハード面の改良(グリッパー先端にゴムを貼る、カメラの位置を変える)やソフト面の改良(把持位置を中心ではなく端にする、認識モデルに新しい負例を加えて再学習する)を行います。強化学習を導入するなら、この段階でシミュレータ上に環境を再現し、微調整したポリシーを実機に適用する、といったアプローチも可能です。

学習リソースと事例:

  • ソニー公式開発者サイトの「System Overview」や「Inference Operation Guide」は、AITRIOSのシステム全体像やエッジ~クラウドのデータフローを理解するのに役立ちます。特にエッジアプリSDKの実装ガイドには、ゾーン検知のサンプルなど現場志向の例も載っています。
  • Raspberry Pi財団の公式ドキュメント(カメラアクセサリの項)や、Core Electronicsなどコミュニティによるクイックスタートガイドも実践的です。例えばフォーラムではハロウィンのオブジェクト検出プロジェクトにAIカメラを使った報告などがあり、参考になるでしょう。
  • ロボットアームに関しては、Hugging FaceのEmbodied AI Hackathonの発表事例が示唆に富みます。これはSO-100を用いた競技でしたが、物体操作やモバイルベースとの組み合わせ(LeKiwiという移動台車)など、複数のチーム事例が共有されています。また、YouTube上にも「SO-100/SO-101を動かしてみた」系統の動画が徐々に増えてきています。

以上、AITRIOSとIMX500カメラの概要から、SO-101アームの制御・学習手法、そして両者を統合した自律システムの構築方法まで詳述しました。エッジAI×ロボットは難易度が高いテーマではありますが、AITRIOSプラットフォームやLeRobotといった強力なツールを活用することで開発ハードルは大きく下がります。段階的にスモールスタートし、確実にステップを踏みながら実装と検証を繰り返すことで、最終的には「ゴミと衣類を見分けて片付けてくれるロボット」という目標に到達できるはずです。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

上部へスクロール