編集履歴一覧に戻る
verylowfreqのアイコン画像

verylowfreq が 2021年02月28日21時08分39秒 に編集

初版

タイトルの変更

+

ロボットアームの製作(4自由度。Arduino,M5Stack制御)

タグの変更

+

Arduino

+

M5Stack

+

ロボットアーム

+

サーボモーター

+

秋葉原2021

メイン画像の変更

メイン画像が設定されました

本文の変更

+

## 概要 ロボットアームを製作しました。人生初ロボットアームです。 myCobotにあこがれて、あれほどのものは作れないけどとりあえずロボットアームの自作にチャレンジです。本来はモーターのトルクを考慮して選定や設計すべきなのですが、よくわからないのでモーターありきで現物合わせ。 当初想定の条件は、myCobotみたいなイケてる外観、4軸(3軸?)制御、SG-90クラスのサーボ、全高30cm程度、でした。先頭以外は満たせています。 操作方法として、つまみによる角度指定の駆動、記録したモーションの再生、ネットワーク経由でのコマンド送信、を実装しました。 おまけとして、自走式に改造中です。 #### 主要スペック 全高: 28cm 到達半径: 18cm 持ち上げ重量: 36g程度 モーター数: 4(このうち指の開閉に1) 重量: 246g(Arduino基板やカウンターウェイトを含む。M5Stackや電池を含まない。) ## 構成 ### アーム ![](https://camo.elchika.com/42b7cd6894f22e8a1160455518293e822c0d5fdb/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376633303665652d656131352d343334662d626333342d6162343139336638333839392f39393761613062632d643661632d343164312d393335382d653834633338316132366462/) 4自由度で、MG90Dを3個, SG-90を1個で駆動しています。 MG90DはSG-90に近い寸法で(同一ではない)、ちょっとだけSG-90よりトルクの大きい、金属ギアなサーボモーターです。(作った結果としては、SG-90でもよかったような気がします。)位置フィードバックはないので、現在角度はわかりません。重要なことにあとで気が付いたのですが、MG90Dの可動域は前後90度です。狭い。 製作して実際に動かしてみると、やはりサーボのトルクが足りなかったため、カウンターウェイトを追加しました(写真中の9V電池)。全体重量は重くなりますが、ペイロードは少し稼げます。 myCobotにあこがれて製作を始めたので、(今回の技術的条件に対する合理性は度外視してでも)、あんな感じの外観を目指しました。(あんなにスマートにはできませんでしたが。) ### Arduino つまみ付きのブレッドボード試作(Arduino Nano互換機)。 ![](https://camo.elchika.com/0d7b039c591c0a150da561f66ac394c44c736719/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376633303665652d656131352d343334662d626333342d6162343139336638333839392f66613862373133362d633939632d343935352d616434632d376265356332613863393366/) つまみのないユニバーサル基板での実装(Arduino Pro Mini系互換機; 秋月電子 AE-ATMEGA328-MINI)。 ![](https://camo.elchika.com/95be571416785746077b7a94cd6525e2cba54175/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376633303665652d656131352d343334662d626333342d6162343139336638333839392f34663761623466332d323066632d343735332d623538342d383730303962323363643832/) サーボモーターへのPWM信号を生成し、外部とはUARTで通信します。可変抵抗を接続しているものは、単独でもつまみを操作してロボットアームを操作できます。 プログラムはArduino環境のC++で記述しています。 サーボ用に4chのPWM出力、可変抵抗用に4chのAD変換、ツマミの中央合わせインジケーター LED用に4chのGPIO出力ができれば、どんなボード/マイコンでも良いと思います。 ### M5Stack(ゲームパッドパネル併用) ![](https://camo.elchika.com/a1b4e15c834dfb956f52ba55542e27c1691ce140/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376633303665652d656131352d343334662d626333342d6162343139336638333839392f39363736346562642d623462352d346364302d393964662d356139386565353638373934/) 各種のUIを担当。サーボの駆動は、ArduinoへUART経由でコマンド(独自仕様)を送信することで行ないます。UART配線は、Arduinoは5V、M5StackのIOは3.3Vなので、本来は電圧変換が必要ですが、今のところは1kOhm抵抗に頑張ってもらってます。 十字キーでのサーボの操作、モーションの記録と再生、TCP/IP経由でのリモート操作が実装済みです。 プログラムはMicroPythonで記述しています。(M5StackのUIFlowのファームウェアを使用。) ### 回路の構成 図示するほどのものではないですが、いちおう。 ![](https://camo.elchika.com/505d88aa12e8f6779770fb34c3c223b3a90c4e87/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376633303665652d656131352d343334662d626333342d6162343139336638333839392f35303263633636392d333231342d343635362d383362662d626264616232313933386538/) ### 電源 ![](https://camo.elchika.com/b354497134c7736520dbbce2e504b6ff007aed51/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376633303665652d656131352d343334662d626333342d6162343139336638333839392f34306435373664632d363465342d346365622d396333342d393263316462363133653235/) 深い理由はないのですが、ニッケル水素充電池4本を使用しています。Arduino、サーボモーター、M5Stack、すべてこの電源から供給しています。 充電直後で実測5.2V、公称値4.8Vなので、壊れる心配はなさそうです。サーボモーターはトルクのために電圧を上げたいところではありますが、とりあえず見送り。 (新規で作るなら、モバイルバッテリーで十分だと思います。) ## 製作手順 1. myCobotの記事を読んで、気分を盛り上げます。 2. 3D CADで設計します。設計できたら3Dプリンターで印刷します。 3. Arduino周辺の回路を組みます。この段階では、ツマミでサーボモーターが駆動できれば十分です。デバッグに便利なので、UART経由のコマンドも実装しておくとさらに進めやすいです。 4. 作成したロボットアームのハードウェアと、Arduino回路を組み合わせ、試運転します。可動域や干渉などのハードウェア的な問題を洗い出し、修正します。 5. M5Stack側のプログラムを書きます。 6. できあがり。 ## プログラムについて ### Arduino側の機能 **つまみによる駆動:** つまみでサーボの角度(実際にはパルス幅)を指定し、サーボにその信号を即時に送信します。 **コマンドによる駆動:** コマンドは「どのモーターを、どの角度に、何秒かけて」駆動するかを流し込みます。サーボの現在角度のフィードバックはないので、現在位置の取得はできません。 `M,0,600,1200`で、 0番モーターを、600の位置(0-1000のレンジ)へ、1200ミリ秒で駆動、みたいな感じです。バイナリフォーマットでも良いのですが、デバッグしやすいので文字列で。 ### M5Stack側の機能 **十字キーによる駆動:** つまみによる駆動を十字キー操作に置き換えただけです。 **モーションの記録と再生:** 通過地点を指定し、地点間は直線で補完します。 通過地点の指定は、Arduinoからコマンドでつまみの位置を取得し、その値を採用しています。 **ネットワーク経由でのコマンド送信** TCP/IPで待ち受けて、その文字列をそのままArduinoへ送信するだけです。実装してはみたけど、まだ利用してない。 ## 部品表 外部から調達して使用することになる部品を以下に列挙します。3Dプリンターで自作したパーツは含まれません。 なお、私が実際にこのために実際に追加で買ったのはMG90DとSG-90だけです。(残りは部品箱から引っ張り出した。) | カテゴリ | 品名 | 数量 | 目安価格 | | --------- | ------------------------------------------------------------ | -------- | -------------- | | サーボ | SG-90 | 1 | 400 | | サーボ | MG90D | 3 | 800 | | マイコン1 | Arduino Nano互換機(あるいはArduino Pro Mini互換機、記事中ではAE-ATMEGA328-MINI) | 1 | 450 (390, 780) | | マイコン2 | M5Stack Faces(M5Stackとパネルのセット)(あるいはM5Stack単体) | 1 | 7040 (3575) | | ネジ | M3やM4あたり。 | 少々 | | | 配線材等 | ブレッドボード、ユニバーサル基板、ジャンパ線など。 | 適量 | | ## おまけ: 自走式ロボットアームにする タミヤの履帯キットを使用して、自走式にしてみました。意味はないけど強そう。 ![](https://camo.elchika.com/7e69bc654016d5feec566572a7f6915535918a9a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376633303665652d656131352d343334662d626333342d6162343139336638333839392f32393533643638382d663966392d343363312d616433342d376161376563336537313031/) 履帯の駆動は、本来ならばモータードライバ回路でタミヤのギヤユニットを駆動させたかったのですが、あいにくモータードライバICの持ち合わせがなかったので、安いサーボモーター(360度回転に改造済み)でむりやり回しています。 積載にあたってM5Stackは大きすぎるので、M5Atom Liteに交換の見込みです。 ### 部品表(追加分) | カテゴリ | 品名 | 数量 | 目安価格 | | -------- | -------- | ---- | -------- | | 履帯 | タミヤ トラック&ホイールセット | 1 | 508 | | 板 | タミヤ ユニバーサルプレート | 1 | 275 | | サーボ | 360度回転サーボ(※普通にギアボックス使ったほうがいいです。) | 2 | 540 | | マイコン | M5Atom Lite | 1 | 968 | ## 感想と展望 - サーボモーターのトルクはしっかり予測を立てないと、パワーに余裕はない。今回は応急処置でカウンターウェイトをつけたけど、無いほうが外見上はスマートなので、どうにかしたい。 - IK(逆運動学)による位置制御をやりたい。 - カメラを載せて、遠隔からビデオを確認しつつ操作できるようにしたい。 - 2眼カメラを載せれば、VR視点で操作できるか? (積載量が確保できれば) - この場合の、適切な通信手段の選定。 - 6軸を作る。