この記事の執筆時点で、製品の推定最終コストは約70,000ルーブルです。 3Dプリンターをお持ちの場合は、そこから20,000ルーブルを安全に差し引くことができます。プリンターがない場合、その外観は楽しいボーナスになります。お金しかないと仮定して、すべての費用を説明します。
結果は次のようになります。
ハンドをプログラムするには、Linux OS(Ubuntu 18.04を使用)とROSフレームワーク(Melodicを使用)がインストールされたコンピューターが必要であることに注意してください。
「なぜ70Kルーブルが安いのか」という疑問が生じるかもしれません。
私が答える。当初、私はロボットアームの作成に煩わされることを望まず、単純であるが組み立てるのに十分機能的なものを購入することを考えました。
機能性の基準と私にとって許容できる最低限の単純さ(つまり、aliexpressのマニピュレーターが適していない理由)は、明白な人や興味のない人に負担をかけないようにコメントで説明できます。
市場での競争力のあるソリューション
ただし、市場で検討した内容の例を簡単に説明します
。1)top3dshop.ru/robots/manipulators/dobot-magician-basic.html176,000
ルーブル。 DOBOTはこの店だけでなく、通常はさらに高額で購入できます。確かにどこか安いところを見つけるチャンスはありますが、それでも70,000ルーブルよりはるかに高価です。
2)robotbaza.ru/product/robot-manipulyator-widowx-robotic-arm-mark-ii280,000
ルーブル。さらに高価です。一般に、TossenRoboticsのマニピュレーターは、メーカーから直接入手したもので、非常に高額な費用がかかります。しかし、彼らの店からロシア(そして私はここにいた)への配達は注文できません。
少し先に進んで、TossenRoboticsによって作成されたPhantomXPincherロボットアームキットMarkIIのコピーを作成すると言います。
合計で、70,000ルーブルはそれほど高価ではないことがわかります。
何を買う必要がありますか?
この記事の執筆時点(2020年7月)のすべての価格を引用します
。1)
1個で7200ルーブルの価格で購入した6つのDYNAMIXEL AX-12Aモーターですが、本当に必要な場合は6000で見つけることができるようです。運が悪く、7200で購入するとします。
総費用:43,200ルーブル
2)3Dプリンター
どんな単純なものでも、20,000ルーブル以内に収めることができます。
3)Arduino Uno +パワーシールド
コスト:〜4,000ルーブル
4)オプション(ただし、強くお勧めします):実験用電源
コスト:〜3,500ルーブル
アセンブリ
優れた!私たちは必要なものをすべて購入しました(おそらくモーターの配達を待つのに最も長い時間で、1か月以上私に運ばれました)。
次は何ですか?
1)マニピュレータのパーツを3Dプリンタで印刷してみましょう。ここから
STLファイルをダウンロードします
。2)モーターと組み合わせます。組み立てに問題はないはずですが、突然現れた場合は、この手順を使用できます。
3Dモデルの作成
クラス!手はありますが、なんとかコントロールする必要があります。人類の功績を生かしたいので、自分たちでROSをインストールしましょう。
ROSでマニピュレータを完全に使用するには、マニピュレータをURDFモデルにする必要があります。MoveITパッケージを使用してロボットアームを制御するために必要になります!
この記事の執筆時点で、最新の安定したビルドがMelodic / Ubuntu 18.04で利用可能です。これは、記事の冒頭でシステムとフレームワークのバージョンを選択したことを説明しています。
URDFモデルの構築は、このプロジェクトのかなり面倒な(そして私の意見では最も退屈な)部分です。コンポーネントモデルのstlファイルで少し仕上げて、XML型のファイルに接続し、パーツの相対的な正しい変位係数を手動で選択する必要があります。
自分で作業をしたい人は誰でも、他の人の神経を救い、完成したファイルへのリンクを提供します:
github.com/vladmiron85/armbot/blob/master/catkin_ws/src/armbot_description/urdf/base.urdf
このモデルはまだエキサイティングではありませんただし、デバイスは、現実の世界でオブジェクトをキャプチャするための現時点では、まだ遠いです。他のタスクの場合、このモデルで十分です。
モデルは次のようになります。
結果のURDFファイルから、MoveIT!Configを作成します。これにより、マニピュレータの動きをシミュレートし、実際のロボットアームに制御コマンドを送信できます。
構成を作成するための優れたチュートリアルがあります(リンク)。
ここでも時間を節約して構成を提供できます。ここにあります:
github.com/vladmiron85/armbot/tree/master/catkin_ws/src/armbot_moveit_config
githubから構成をダウンロードし、次のコマンドで実行できます。
roslaunch armbot_moveit_config demo.launch
ROSに接続すると、rvizを 介して実際のロボットアームを制御できるようになります。
本物の手はどうですか?
3Dモデルの世界から過酷な現実に移りましょう。以前に組み立てられたマニピュレーターがあります。なんとか彼を動かしたい。 ArduinoUNOとPowerShieldでこれを行いましょう。
マニピュレータの最初のモーター(下)を電源シールドと電源に次のように接続し
ましょう。はい、モーターのデータピンをArduinoの3ピンと4ピンに直接接続します。 Dynamixelマニュアルの好奇心旺盛な読者(ここでは彼です)は、モーターでの外界との通信が半二重非同期シリアル通信に従って編成されていることにすぐに気付くでしょう。つまり、データピンはコマンドの受信と応答にすぐに使用されます。
デフォルトでは、ハードウェアレベルでは、ArduinoはフルデュプレックスUARTでのみ機能します。この問題は、ソフトシリアルライブラリを使用することで回避できます。モーターのデータピンとシールドの3ピンと4ピンの接続を同時に説明するのは、ハーフデュプレックスモードの使用です。
半二重通信に加えて、Arduinoを介したDynamixelの操作には、最初から完全には明らかではないかもしれないいくつかの興味深い点があります。それらをすべてまとめましょう。
マニピュレーターを動かす方法は?
1)まず、必要なライブラリをダウンロードします。これはardynoと呼ばれ、Arduino Library Managerから、またはここ(リンク)から入手できます
。2)デフォルトでは、DynamixelAX-12Aはボーレート= 1000000で動作します。ただし、ソフトウェアシリアルインターフェイスはこの速度をサポートしないため、ボーレートを57600に下げる必要があります。したがって、プログラムを含むファイルの先頭は次のようになります。
#include "DynamixelMotor.h"
// communication baudrate
const long unsigned int baudrate = 57600;
SoftwareDynamixelInterface interface(3, 4);
3)すべてのモーターが直列に接続されています。それで、それらのそれぞれに対処するために、あなたはそのIDを知る必要がありますか?これは確かに当てはまります。DynamixelMotorオブジェクトは、初期化中に2つのパラメーターを受け取ります。interface(すべての人に同じ、前の段落で設定しました)とid(すべての人が異なっている必要があります。そうでない場合、マニピュレーターの動作は非常に奇妙になります)
DynamixelMotor motor(interface, id);
各モーターのIDは手動で設定する必要があります。直列に接続されているため、1から6までの数値を使用して計算できたようですが、これは提供されていません。したがって、各モーターを個別にArduinoに接続し(残りのモーターから切断)、次のプログラムを実行する必要があります。
#include "DynamixelMotor.h"
// communication baudrate
const long unsigned int baudrate = 57600;
// id of the motor
const uint8_t id=1;
SoftwareDynamixelInterface interface(3, 4);
DynamixelMotor motor(interface, id);
void setup()
{
interface.begin(baudrate);
delay(100);
// check if we can communicate with the motor
// if not, we turn the led on and stop here
uint8_t status=motor.init();
if(status!=DYN_STATUS_OK)
{
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
while(1);
}
motor.changeId(NEW_ID);
}
void loop()
{}
最初は、すべてのモーターのid = 1です。これが、上部に示されている理由です。
const uint8_t id=1;
各モーターのNEW_IDは、1から6までの数字に置き換える必要があります(はい、わかりました。最初のモーターに触れる必要はありません)。下から上に順番に番号を付けます。
やったー!移動できる本格的なマニピュレーターがあり、そのための3Dモデルもあります。あなたはROSを取り、どんなクールなものでもプログラムすることができます。しかし、これはすでに別の記事の話です(1つではありません)。ご清聴ありがとうございました!