イーサネットを介して制御されるロボットアーム
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 4 |
アプリとオンラインサービス
> ![]() |
| |||
| ||||
![]() |
|
このプロジェクトについて
はじめに
ロボットアームが大好きです。いくつかの単純な機械部品、いくつかのサーボまたはモーターが必要なだけで、優れたソフトウェアが必要であり、見事で楽しいだけでなく、実際に本当に便利なデバイスを入手できるのが好きです。大好きなロボット工学のコースがあったので、作りたかったのです。
ロボットアームを作ることで多くのことを学ぶことができるので、これはロボット工学の知識を深めるための素晴らしい中級レベルのプロジェクトだと思います。始めましょう!
ロボットアーム
ロボットアームは約20ドルから購入できます。実験のために、私はより安いものから始めたかった。後で、より本格的なロボットアームを構築または購入しますが、今のところ、Banggoodのこの25ドルのDIYロボットアームに取り組みます。
<図>
これは4DoF(Degrees of Freedom)ロボットアームで、3つのサーボが移動に使用され、1つはエフェクターに使用されます(プロジェクトではグリッパーと呼びました)。つまり、グリッパーは特定の領域の任意の位置に移動できますが、角度は変更できません。これは重大な制限ですが、今のところは問題ありません。それでも多くのことに適しています。
DIYキットには4つのサーボが付属しているため、実際には、コントローラー以外のすべてのコンポーネントを使用してロボットアームを構築できます。これらのサーボは悪くはありませんが、私はこれらを好みました:
<図>

これらのサーボは青いサーボよりも高速で、プラスチックの代わりに金属歯車を使用しています。
ロボット部品は4枚のプラスチックシートで提供されました。これらのシートからパーツを削除する必要があります。
<図>
たくさんのパーツで構成されたロボットアームキット。次のビデオをご覧になることをお勧めします。このビデオでは、ロシア人の男が同じタイプのロボットアームを構築しています。建物の部分は7:43に始まります。
パッケージにロボットアームの作り方のリンクがありましたが、画像も説明書も非常に低品質でした。そのビデオはずっと良いです。おそらくあなたは何が何であるかを理解することができますが、これを行うと、組み立て、分解、再組み立てのほぼ無限のループになってしまいます。
サーボを挿入するときは十分注意してください。この種のプラスチックを使用したこのデザインは、ネジを締めるときに非常に壊れやすい傾向があります。ネジの最適な締め具合は、ロボットの他の部分でも重要です。きつすぎると、サーボでロボットアームのセグメントを動かすことができなくなります。
いくつかの建物を建てると、自分だけのロボットアームができあがります。
<図>
ポジショニングサーボには十分な長さのケーブルがありますが、グリッパーにはもっと長いケーブルが必要です。そのサーボを分解し、古いケーブルをはんだ除去し、少なくとも2倍の長さのケーブルを使用しました。
脳
さて、ロボットアームの準備はできていますが、どういうわけかそれを制御したいと思う可能性が高いです。そのためにマイクロコントローラーが必要だったので、この仕事にArduino101を選びました。
<図>
これは、Intelマイクロコントローラー(Intel Curie)を使用する唯一の公式Arduinoボードです。ジャイロスコープと加速度計が内蔵されています。 Bluetoothも搭載しているので、将来的にはBLEでロボットを制御できる可能性があります。このボードのもう1つの非常に便利な機能は、シリアル通信の仕組みです。ほとんどのArduinoとは異なり、ピン1と0(TXとRX)のUSBシリアルとUARTは同じではありません。 Arduinoを再プログラムするときに、ピン0と1から他の通信回路を切断する必要がないなどの利点があります。デバッグの目的にも役立ちます。
USBポートのシリアルを使用する場合は、「シリアル」を使用する必要があります。GPIO0ピンとGPIO1ピンを使用する場合は、「シリアル1」を使用します。
<図>
Arduino 101には4つのPWM対応GPIO(GPIO3、GPIO5、GPIO6、GPIO9)があり、それらすべてを使用してサーボを制御しました。
コミュニケーション
私のロボットアームはシリアル(具体的にはSerial1)を介して制御できます。この目的のために、最新の通信モジュールであるWIZ750SRを使用しました。
<図>
これは、Cortex-M0MCUを備えた小さなイーサネットモジュールです。基本的な機能はシリアルからイーサネットへのモジュールですが、ニーズに合わせてモジュールを簡単に再プログラムできます。必要に応じて、このボードをI2C-イーサネットボードに変えることができます。
非常に優れた機能は、オンボードTCPサーバー(またはクライアント)です。 TCPサーバーを使用すると、USBシリアルを使用する場合と同じように、世界中のどこからでもArduinoをリモートで制御できます。 Arduino側では完全に透明です。このモジュールを使用するためにスケッチにコードを追加する必要はありません。
<図>

WIZ750SR-TTL-EVB評価ボードもあります。 WIZ750SRに電力を供給でき、デバッグUSBポートがありますが、初期の実験以外には使用しませんでした。
<図>
Arduino 101とWIZ750SRはどちらも3.3Vを使用しているため、TXピンとRXピンにレベルシフトを使用する必要はありませんでした。 Arduinoは、電源からイーサネットモジュールにも電力を供給しています。回路は非常に単純で、このプロジェクトの回路図セクションにあります。サーボには独自の5V電源があります。
<図>
モジュールのセットアップ
このボードを使用するには、最初にボードを構成する必要があります。 WIZnetの担当者はすでにここでそれを行っており、常に最新のドキュメントを入手できるので、この部分を再ドキュメント化することはしません。
彼らのドキュメントは素晴らしいですが、私は情報を知るのに良いことがあり、共有する価値のあるいくつかの(解決された)問題がありました。
まず、評価ボードのUSBポートからボードに電力を供給できますが、それ以外に、このポートは主にデバッグとフラッシュに使用されます。 USBポートを使用してWIZ750SRのTCPサーバーと通信することはできないと思いますが、このCOMポートに接続するとデバッグ情報を受け取ることができます。何を期待すればいいのかわからなかったので、最初は混乱しました。
<図>
次に、WIZ750SRがネットワークに接続しているときに青色のLEDがオンになっている場合は、ボードが正しく機能しているはずです。構成ツールを続行すると、ボードが検出されます。
この時点で、構成ツールでデバイスを検索しようとしたときに最大の問題が発生しました。最初は素晴らしかったのですが、時間がなかったのでそこで立ち止まりました。 2週間後、もう一度試してみましたが、複数のOSや複数のネットワーク上のコンピューターでボードが見つかりませんでした。
最新のファームウェアを使用して、評価ボードのデバッグUSBポートを介して再フラッシュを実行しましたが、機能しました。私のWindowsPCはまだそれを見つけることができませんでしたが、UbuntuのPythonバージョンは見つけることができました。何が問題だったのかわかりませんが、これらの手順でようやく問題が解決しました。 WIZ750SRを正常に構成した後、Windows PCでもそれを再度見つけることができたので、作業を続行しました。
私が読んだように、仮想ネットワークアダプター呼び出しを備えたVMも検索を台無しにするので、検索で問題が発生した場合は、それを確認する必要があります。
TCP通信をテストするための優れたツールはNetCatです。このソフトウェアを使用すると、WIZ750SRのTCPサーバーに接続できます。 NetCatをインストールした後、次のコマンドを使用して接続します。
nc [tcp_server_ip] [tcp_server_port]
その後、WIZ750SRと直接データを送受信できます。このツールをよく使いました。
AからBへの移動
ロボットアームを動かすには、コントローラーに何が欲しいかを伝える必要があります。最も簡単な方法は、すべてのサーボの角度を直接更新することです。関節角度の更新は試行錯誤しながら行うことができ、実際にうまく機能する可能性があります。
次のロボットアームプロジェクトでは、逆運動学を使用して世界座標でロボットアームを制御しますが、今のところ、関節角度のみを使用してロボットを制御します。
<図>
ここでは、システムの速度が重要なポイントです。サーボは非常に高速ですが、受信位置に到達するまでにはまだ時間が必要です。一方、ジャンパー線は非常に速い動きが好きではないので、私は物事を遅くしなければなりませんでした。ハードウェアとソフトウェアの両方の部分。
これは、システムへのパス計算を作成し、遅延を挿入することで作成しました。ロボットアームに新しい関節角度を送信するときは、追加のパラメータである速度(mDelay)を指定する必要があります。基本的に、あなたはロボットアームコントローラーにループの最小ステップ時間を伝えています。パス計算機は、各ポジショニングサーボのオプションのステップサイズを計算します。これは、すべてのサーボがほぼ同時に目標に到達し、速度が遅延に依存することを意味します。その結果、毎回非常に素晴らしく滑らかな線形運動が得られます。
エフェクターは別の方法で機能します。基本的には、スムーズな遷移なしで、開いた状態または閉じた状態(3つの異なるレベルの閉じた強度)のみを持つことができます。もちろん、できるだけ早くオブジェクトをつかむ必要がありますが、移動はスムーズで快適なはずです。
現在、このシステムには2種類のコマンドがあります。両方の例を次に示します。
- G1->グリッパーを軽く閉じます。 0は開いていることを意味します
- A 10 130 120 110->ロボットアームを10msのステップ時間、130°の上部関節角度、120°の下部関節角度、110°のベース回転子角度で移動します。
リモコン用Androidアプリ
さて、この時点で私は世界中のどこからでもロボットアームを制御できますが、すべての新しいコマンドを手動で作成する必要があります。この方法はあまり面白くありません。ロボットアームを制御するためのはるかにユーザーフレンドリーな方法が必要だったので、それを実行するためのAndroidアプリケーションを作成しました。
<図>
アプリにはTCPクライアントがあるため、WIZ750SRのTCPサーバーに直接接続できます。ロボットアームは、古い動きと将来の動きのプロットを保存しません。それは現在のゴール位置を知っているだけです。これは、アプリケーションが移動プロット全体をロボットアームに送信するだけでなく、位置フィードバックに基づいて定期的に新しい位置をロボットアームに送信することを意味します。アプリを閉じるか、WIZ750SRから切断すると、ロボットアームは、最後に受信した位置に到達するとすぐに動きを停止します。
ロボットアームに接続すると、[構成]画面が表示されます。 3ページあります。 1つ目はRun(詳細は後で説明します)、2つ目はInit、3つ目はLoopです。 InitとLoopは基本的に同じですが、唯一の違いは位置を保存する場所です。
<図>
画面には、保存ボタンのほかに4つのシークバーとグリッパーボタンがあります。これらのスライダーは動きの位置と速度を設定するために使用され、グリッパーボタンはエフェクターを開閉するために使用されます。すべての変更は瞬時に行われるため、ロボットアームの新しい位置がすぐに表示されますが、保存ボタンをクリックしてプロットに追加する必要があります。これについての簡単なデモンストレーションがあります:
グリッパーの状態とロボットアームの位置の両方を変更すると、2つの異なるコマンドとして保存されます。最初にグリッパーコマンド、次に位置コマンド。
<図>
ご想像のとおり、プロットの実行はinitから開始されます。 Initとloopは、Arduinoのセットアップとループ機能と同じように機能します。 Initは、後で繰り返されない動きに適しています。 initコマンドが終了すると、ループコマンドが続きます。ループコマンドは永久に繰り返されるか、少なくともプロットを停止するまで繰り返されます。 loopまたはinitのいずれも必要ない場合は、そのフィールドを空のままにします。
これらのフィールドはEditTextフィールドです。つまり、コンテンツを簡単に編集または削除できます。スライダーを使用したくない場合は、手動でコマンドを作成できます。プロットをコピーして貼り付けることもできます。アプリケーションは、後で使用するために実行した最後のプロットを記憶します。
「構成」の下の最初の行は、テストの視覚的なフィードバックとして使用されます。左側の部分はロボットアームの最新のゴール位置(S-送信済み)を示し、右側のフィールドはロボットアームの現在の位置(R-受信済み)を示しています。アプリは、目標と現在の位置が同じになるとすぐに、ロボットアームに新しい目標位置を送信します。
ご覧のとおり、initしかなかった場合、ロボットアームはinitコマンドを終了するとすぐに停止しました。
私のアプリでは、かなりのことができますが、将来的には改善の余地がたくさんあります。プロットで関数、条件付き制御、引数付きのループなどを使用する予定です。
同様のロボットを構築したい場合は、このプロジェクトのコードセグメントにArduinoコードとロボットアームコントローラーアプリケーションの両方があります。
結果
initコマンドとloopコマンドの両方を使用したところ、適度に複雑なタスクを実行できました。これは、私のロボットアームがゴム製のアヒルをセットアップし(init)、それからそれらを1つずつ動かし始め、永遠に(ループ)する方法についてのビデオです。
これが非常に安価なロボットアームであり、ハードウェアに関連する重大な制限があることを考慮に入れるとわかるように、動きは非常にスムーズで、連続的で、正確です。
結論
私のソフトウェアは非常にうまく機能しており、将来的にはこのロボットアームの改善に取り組むか、より高度なものを構築する予定です。このプロジェクトで計画したすべてのことを、深刻なブロッキングの問題なしに達成しました。
Arduino101はこの目的に最適です。ボードの唯一の制限は、4つのPWM対応GPIOのみです。将来、自由度の高い新しいロボットアームを作ると問題になるかもしれませんが、USBシリアルとGPIOシリアルを別々に開発することは非常に便利で、このボードは多くの計算能力を提供することもできます。
Androidアプリケーションは良いアイデアだったと思いますが、より堅牢でユーザーフレンドリーにし、機能を強化する必要があります。現時点ではアルファ版です。
WIZ750SRはとても嬉しい驚きでした。このボードでさらに問題が発生するのではないかと心配しましたが、構成後は完全に機能しました。それは完全に透明で、問題はありませんでした。これは非常に使いやすいデバイスであり、マイクロコントローラーでこれまで使用した中で最高のイーサネットモジュールです。
ロボットアームでの作業はとても楽しいので、私は間違いなくそれについてもっと学び、そして将来あなたと私の知識を共有します!読んでいただきありがとうございます!
<図>
コード
ArduinoWebエディター
Arduino Web Editorを使用して、私のプロジェクトのArduinoコードにアクセスして直接アップロードできますArduinoとAndroidのコード
https://github.com/abysmalsb/Robot-Arm-Controller 回路図
現在、システムは2つの別々の電源を使用しています。 1つはArduinoのUSBポートからのもので、もう1つはサーボの移動に使用される5Vソースからのものです。 
製造プロセス