ABEJA Tech Blog

中の人の興味のある情報を発信していきます

Amazonに売ってるモノで6軸ロボットアームを自作してみた (3Dモデル+ソースコード付き)

はじめに

ABEJA大田黒です。前回は以下の記事を執筆しました。今回はロボットアームを作ったので、そのお話になります。

tech-blog.abeja.asia

ロボットアームを自作しようと思ったきっかけについて触れます。

  • 将来的に家事をすべてロボット化したい。その為に、比較的安価で関節トルクが強いロボットアームがほしい
  • VLAの研究開発環境が自宅にほしい etc...

今回はこちらの3Dプリンター(Ender3 V3 Plus)とPLAフィラメントを使い、4基のロボットアームを製造しました。

設計まわり

構造・機械

よくある産業用ロボットアームを真似して、6DoF(自由度)にしてみました。Autodesk Fusion(旧名:Fusion360)を使って設計しています。第1関節〜第3関節(根本に近い部分)は強いトルクが掛かるため、Amazonで売っている強めのサーボモーターを使っています。今回はDS51150(強めのサーボモーター)とDS3218の二種類のサーボモーターを使っています。

Fig: サーボモーター(DS51150)の外観

※強トルクサーボは非常に危険です。使用時には電源をOFFにしてから手を触れるよう徹底してください。

Fig: サーボモーター(DS3218)の外観

安定したアームの回転を実現するために、ボールベアリング(MR608ZZ)を使っています。最初はベアリングを使っていなかったのですが、どうしても「ガタつき感」を改善する事ができず、ベアリングを使うことにしました。ベアリングは3Dプリント部品に万力で慎重に圧入しました。(圧入時は破損の可能性があるため注意が必要)

Fig: ボールベアリング(MR608ZZ)の外観

電源回路

Fig: ロボットアーム用電源回路

今回使っているサーボモーターは2種類あり、それぞれが12Vと5Vで動きます。今回はLED照明用の電源装置と昇降圧モジュールを2つ組み合わせて、電源回路を自作しました。 ※後述しますが、ローサイド(GND側)での電流センスとなっており、GND側の分流の影響を受け、正しい電流値の取得ができませんでした。

サーボモーター周りの配線が多かったので、カシメた。

制御回路

外部からロボットアームの制御信号(関節角度の制御信号)を受取り、サーボモーターへ信号を伝達するためにESP32-WROOM-32Eを利用しています。開発環境はPlatformIOを使っています。 ※技適を取得済みの製品を使っています。 ※回路基板は別件で作っているもので、そちらを転用しました。今回Amazonで売っていないモノになります。

ロボットアーム1本あたり、6DoF+エンドエフェクターになるため、サーボモーターを7個つかっています。ESP32から7つのサーボモーターに信号を送るために、PCA9685というモジュールを使っています。電源回路写真の右上に位置する長方形の基板です。このモジュールはI2C(IIC)接続可能で、I2C経由で16チャンネルのPWM信号の周波数・デューティ比を決めることができます。 PWM信号で制御可能なサーボモーターを最大16台まで接続することができます。

制御処理

こちらがESP32上で動かしているコードです。(2025年6月10日現在) github.com

ESP32がWi-Fiに直接接続し、シリアル通信・HTTP(TCP)・UDPで制御リクエストを受信できるようにしています。

制御用SDK周り

こちらが実際のSDKコードです。(2025年6月10日現在) github.com

SDKはClaudeで生成しました。myCobotの制御に似たような感じのコードが出力されています。

  • 現在角度・目的角度を計算しながら、適宜Waitを挟みながら関節を動かす系
    • 例: set_joint_angle
  • 独自に軌道制御をする為にサーボモーターに直接的に関節に指示を出す系
    • 例: set_joint_angle_unsafe

アーム作成の様子

今回はCreality Printと呼ばれるスライサーソフトを用いて3Dプリント用データの準備を行いました。スライサーソフトでは、Autodesk Fusion等の3D CADでモデリングしたデータ (STL形式)を読み込む事ができて、部品の配置や個数、サポート材の有無、インフィル率、その他細かいパラメータを決める事ができます。

www.creality.com

合計15時間程度でアーム1本分の部材を印刷する事ができました。 ※動画再生時は音量に注意してください

今回の学び

技術面

3D CADやAmazon購入画面に向き合っている時は、想像していなかった様々な事が発生しました。今回も楽しい学びをたくさん得ることができました。製品として確立されているロボットアームの完成度を改めて認識する学びが多かったです。所感をいくつか列挙します。

  • 曲げモーメントが強い場所において、3Dプリンターで印刷した部材が一部変形

    • PLAの縦弾性係数、部材の断面二次モーメントが個人的な感覚よりも小さかった
    • 厚さを変更したり、インフィル率を変えて試行錯誤。初期フェーズよりマシになったが剛性問題はまだ残っている。
    • 特にモーメントが掛かる部材は、金属加工で作ってもいいかもしれない。(meviyの出番?)
    • あと、金属粉末配合のPLAフィラメントにチャレンジしてみたい
  • サーボモーターのバックラッシュ(歯車の隙間)によるガタガタ感が気になった

    • 第一関節のバックラッシュによる遊びが、アーム全体を揺らしていた
    • 次回以降のサーボモーター選定や減速機設計に活かしたい
  • 組み立てることを考えて3Dモデリングする必要性がある(当たり前)

    • ドライバーと他の部材が干渉してネジが入らない、無理な力を入れて部材が割れる事が何度も発生
    • 「小さく設計して印刷して試す」という繰り返しをやればよかった
  • 高速な改善活動を回すなら家庭用3Dプリンター。ちゃんと作るなら、3Dプリンティングサービス

    • 最初は自宅の3Dプリンターではなく、DMM make様のようなサービスを利用していた
    • 非常に品質が高い反面、費用や時間面で高速な改善サイクルを回すのが難しいと感じた。1試行錯誤で数千円〜は必要。
  • ネジ穴を3Dモデル化し忘れた

    • ネジ穴のタップを切るのがすごく大変だった。切削とタップ切りを同時にやっている感覚。
  • M2.5のタップを切る連続作業が大変で腱鞘炎になりそうだった

    • サーボホーンと3Dプリンターで印刷した部材との接続部分
    • サーボホーンの穴の数x関節数×製造ロボットアームの本数だけタップを切った
    • 電動ドリルで回せるタップはM3までしか売っていないので、すべて手作業
  • サーボモーターの配線(電源・信号線)を通しやすい構造を考えておけばよかった

    • 結果的にスパイラルチューブと養生テープで固定する形となった
    • 見た目が悪いので、もっとアーム内部に通していきたい
  • 昇降圧コンバータの電流値が正しく表示されていなかった

    • 購入した昇降圧コンバータはローサイド(GND)側での電流センスになっていた
    • 12V生成用、5V生成用モジュールのGNDを共用しており、それぞれのGND配線で分流が発生
    • 回路全体の消費電流を約1/2した値がそれぞれのモジュールに表示されるようになった
  • ソフトウェアシミュレーション上の仮想角度と現実の角度は必ずしも一致しない

    • 組立時の誤差、サーボモーターとサーボホーンの噛み合わせにより、多少ずれる
    • 制御前にズレを補正しないと、順運動学の計算と実際のアームの位置ズレが大きくなる
  • サーボモーターの急な角度指示は危険

    • アームを勢いよく動かすと、怪我や部材破損リスクがある
    • エンコーダーを入れた角度検出を行い、角速度のリミット制御を今後は検討したい
  • 個別のサーボモーターの電流値モニタリングと電源ON/OFFをやれるようにしたい

    • ストール(動かない状態で電流を流し続ける)状態で放置すると、サーボモーターが過熱する
    • サーボモーターが想定していないPWM信号を送ったらハングアップする事があった。電源抜き差しでしか解決できなかった
  • もっと曲線デザインを取り込んでいけばよかった

    • SO-ARMかっこいい。デザイン性を意識するきっかけとなった

その他:ロボット作りはお金がかかる

1本あたり数万円ほど製造原価がかかりました。特にサーボモーターや電源関連の部品が高いですね。塵積ですが、ネジ代も積み重なると意外にコストがかさみました。(ネジをたくさん使うような設計にしてしまい反省)

3Dモデル・ソースコードについて

まだデータは整理中ですが、取り急ぎ下記にてまとめています。3Dモデルや関連ソフトウェア(ESP32用C++コード、ロボットアーム制御用PythonSDKなど)はアップロードしてします。ご興味がございましたら、覗いてみてください。リポジトリの内容物は随時更新予定です。

github.com

本データや記事を利用される場合は、すべて自己責任にてお願いいたします。製作物や作業中の事故・損害について、当方では一切の責任を負いかねます。

  • 電源装置は大電流を流すことができるため、短絡すると非常に危険
    • 回路を触るときは必ず電源OFFにしましょう
  • サーボモーターのトルクが非常に強いため、指挟み事故等には注意
    • モーターやアームに触れるときは電源OFFになっている事を確実に確認しましょう
  • 3Dプリンターの可動部・高温部に気をつける
    • FDMの場合、ノズル温度は約200~230度になります (PLAの場合)
  • 工具を利用する場合は、怪我に注意
    • はんだごて、ニッパー、カッターによる受傷に注意

追記:開発合宿で利用しました

今回作成したロボットアームですが、ABEJAの5月の開発合宿で利用する運びとなりました。開発合宿の様子は下記記事で執筆しています。

tech-blog.abeja.asia

We Are Hiring!

ABEJAは、テクノロジーの社会実装に取り組んでいます。 技術はもちろん、技術をどのようにして社会やビジネスに組み込んでいくかを考えるのが好きな方は、下記採用ページからエントリーください! (新卒の方やインターンシップのエントリーもお待ちしております!)

careers.abejainc.com