1万円台でAI搭載ロボットアームを自作
このサイトではAI搭載ロボットアームの自作をしながら、 AIやロボット制御の基礎が学べる教材を作っています。
まずは上の動画を見てみてください。
AIで物体の位置を検出してから、物体の位置の位置にアームを移動させ、物体をつかんでいます。
このシステムの特徴は
・ 材料は合計で1万円台で、全部Amazonで買えます。
・ ロボットアームの組み立ては、ドライバーとラジオペンチでできます。
・ 配線はピンを穴に差し込むだけで、半田付けは必要ありません。
・ パソコンに接続してPythonで動かせます。
誰でも気軽にAI搭載ロボットアームを自作できる時代になりました。
ぜひチャレンジをしてみてください。
部品一覧
名前 |
価格 |
画像 |
---|---|---|
6自由度ロボットアームDIYキット |
8000円 |
|
20kg高トルク サーボモーター(※1) |
1800円 |
|
サーボモーター ドライバー |
1000円 |
|
Raspberry Pi Picoスターターキット |
2000円 |
|
電源アダプター (6V 3A) |
1900円 |
|
ウェブカメラ (1080P) |
4000円 |
(※1) アームの根元から2番目のモーターは高い負荷がかかるので、20kg高トルク サーボモーターに換装しました。
時期により価格は変動しますが、全部で1万9千円くらいです。
AIでロボットアームを動かすまでの手順
以下で各手順を説明します。
1. 配線
Raspberry Pi Picoとサーボモーター ドライバーは4本の線で接続します。
サーボモーター ドライバーには6Vの電源を供給します。
モーターの茶(GND)、赤(V+)、オレンジ(PWM)の線をサーボモーター ドライバーの黒・赤・黄の端子に接続します。(左図)
モーターの線の色が黒(GND)、赤(V+)、白(PWM)の場合もあります。(右図)
モーターはアームの根元から手先に向かって J1, J2, J3, J4, J5, J6 と呼びます。
サーボモーター ドライバーのピンをブレッドボードに挿し、下から順にJ1~J6のモーターを接続します。
J2のモーターは高い負荷がかかるので、20kg高トルク サーボモーターに換装します。
配線をすべて終えるとこんな感じです。
サーボドライバの表側 |
サーボドライバの裏側 |
---|---|
※ 一部のサーボドライバでは下図のようにV+のピンを接続する必要があります。
2. ソフトのセットアップ
Raspberry Pi PicoはMicroPythonのアプリで制御します。
Raspberry Pi Picoにアプリを書き込むにはThonnyというソフトを使います。
セットアップの手順は下記のリンクをご覧ください。
5. MicroPythonのアプリをRaspberry Pi Picoに書き込み
3. モーターの可動範囲の確認
配線とソフトのセットアップが終わったらパソコンからサーボモーターを動かしてみます。
詳細は モーターの可動範囲の確認 をご覧ください。
4. ロボットアームの組み立て
組み立てはドライバーとラジオペンチでできます。
動画を作りましたのでご覧ください。
5. 軸の角度の調整
サーボモーターへの角度の指令値と軸の角度との対応付けをします。
アームの根元から順に軸を J1, J2, J3, J4, J5, J6 と言います。
以下の写真ではJ2, J3, J4の軸の角度は0度です。
0ボタンをクリックして、0度の時のサーボモーターの角度を記憶しておきます。
以下の写真ではJ2の軸の角度は-90度です。
-90ボタンをクリックして、-90度の時のサーボモーターの角度を記憶しておきます。
その他の軸も同様に基準となる軸の角度でのサーボモーターの角度を対応付けをさせます。
詳細は アームの角度の調整 をご覧ください。
軸の角度はアームの手先の位置や姿勢に直接影響するので重要です。
詳細は以下をご覧ください。
6. カメラのキャリブレーション
このシステムには3種類の座標系があります。
カメラのキャリブレーションではカメラ座標系とスクリーン座標系の設定をします。
- カメラ座標系
カメラ位置を原点とし、視線の方向がZ軸の座標系です。
- スクリーン座標系
カメラで撮影した画像の座標系です。
画像の左上が原点で、右方向がX軸、下方向がY軸です。
- ロボット座標系
ロボットの土台を原点とする座標系です。
ロボットに向かって手前がX軸、右方向がY軸、上方向がZ軸です。
キャリブレーションにはチェッカーボードのような板を使います。
この板を様々な角度からカメラで撮影して、キャリブレーションをします。
詳細は カメラ キャリブレーション をご覧ください。
7. アームの手先の位置の検出
手先の位置の検出のために、OpenCVの ArUcoマーカー を使います。
ArUcoマーカーの作り方は ChArUcoボードとArUcoマーカーの印刷 をご覧ください。
ハンドの手先に2個と、ロボットの土台の板の上に3個のマーカーをつけています。
手先の2個のマーカーの中点が手先の位置になります。
カメラでマーカーを撮影すると、マーカーのカメラ座標とスクリーン座標が分かります。
板の上の3個のマーカーから、板の法線ベクトルが求まります。
詳細は 平面の法線ベクトル をご覧ください。
板の法線ベクトルと手先のマーカーから、手先と板の距離が求まります。
手先が板に激突しないためと、板の上の物体をつかむために、手先と板の距離は重要です。
詳細は 平面からの距離 をご覧ください。
8. AIで物体検出
システムにはお菓子の物体検出をするAIが入っています。
図の青い点はAIが検出した物体の位置です。
詳細は 物体検出 をご覧ください。
9. 物体検出した位置にアームを移動
AIが物体検出した座標はスクリーン座標です。
物体の位置にロボットアームを移動するにはスクリーン座標をロボット座標に変換する必要があります。
ロボット座標を指定して手先を移動させると、その位置での手先のカメラ座標とスクリーン座標が分かります。
下の写真のように複数の位置に手先を移動させ、ロボット座標とスクリーン座標のデータ対を作ります。
データ対を使ってスクリーン座標をロボット座標への変換器が作れます。
詳細は スクリーン座標からロボット座標への変換 をご覧ください。
まとめ
ロボットアームを物体の位置まで移動させる処理は以下になります。
1. 物体検出のAIを使い物体のスクリーン座標を得る。
2. スクリーン座標からロボット座標へ変換する。
3. ロボット座標から軸の角度を逆運動学で求める。
4. 軸の角度からサーボモーターへの指令値を計算する。
5. Raspberry Pi Picoにサーボモーターへの指令値を送る。
6. Raspberry Pi Picoの中のMicroPythonのアプリがモーター ドライバーへ指令を送る。
Pythonのプログラムの一覧
ファイル名 |
説明 |
---|---|
servo.py |
|
angle.py |
|
print.py |
|
board.py |
|
infer.py |
|
arm.py |