Arduino UNO でロボットアームを堪能 ーロボットアーム自作への道4ー

Home > Advent Calendar > Arduino UNO でロボットアームを堪能 ーロボットアーム自作への道4ー
すき 1
うんこ 0

Arduino Advent Calendar 2019 | 17日目

これまで楽しんできたロボットアーム自作をアドベントカレンダーへの参加を機にここいらで一旦まとめてみたいと思います。

割と自由自在に動かせるようになりましたので紹介させてください。

 

構成

ロボットアームをPWMサーボを3つ使用して組み立てます。

部品

  • Arduno UNO

     
  • サーボモータMG995

     
  • サーボモータDS3115

 
 

動作

マウスを動かしてPC上に書いたものを、ロボットアームでダイソーの磁石のイラストボード上にリアルタイムに再現します。

消すのも自動でロボットアームがやってくれます。

なんか健気で可愛いですよね。

ロボットアーム

サーボモータDS3115の2つを縦方向、サーボモータMG995を首振り方向に使用しました。

 

ダイソーのイラストボードのペン先を切ってロボットアームのペンのフタに接着しました。

 

逆運動学

このロボットアームはアーム先端の座標(x, y, z)を指定して、逆運動学(Inverse Kinematics)によって各サーボの角度を算出し制御します。

ここでは座標から各サーボの角度を算出する式を導きだしてみましょう。

各アームの長さは以下の通りです。
 $L_1 = 92$ mm
 $L_2 = 137$ mm
 $L_3 = 190$ mm

 
座標は以下のように平面上を(x, y)、高さをzとします。

首振りサーボの角度$θ_1$は平面座標(x, y)ですぐ導出できます。

$$θ_1 =\tan^{-1} \left(\frac{y}{x} \right)$$

 

2個目のサーボの角度$θ_2$は余弦定理を用いて導出します。

${L_3}^2 = {L_2}^2 + {l_d}^2 – 2{L_2}{l_d}\cos{θ_2}’$

${θ_2}’ = \cos^{-1} \left(\frac{{L_2}^2+{l_d}^2 – {L_3}^2}{2{L_2}{l_d}} \right)$

$$θ_2 = {θ_2}’ + φ = \cos^{-1} \left(\frac{{L_2}^2+{l_d}^2 – {L_3}^2}{2{L_2}{l_d}} \right) + φ$$

$$      但し、φ = \tan^{-1} \left(\frac{z – L_1}{l} \right)$$

$$       l_d = \sqrt{l^2 + \left(z – L_1\right)^2}$$

$$       l = \sqrt{x^2 + y^2}$$

 

3個目のサーボの角度$θ_3$も余弦定理を用いて導出します。

${l_d}^2 = {L_2}^2 + {L_3}^2 – 2{L_2}{L_3}\cos \left(90°+ {θ_3}’\right)= {L_2}^2 + {L_3}^2 + 2{L_2}{L_3}\sin {θ_3}’$

${θ_3}’ = \sin^{-1} \left(\frac{{l_d}^2-{L_2}^2 – {L_3}^2}{2{L_2}{L_3}} \right)$

$$θ_3 = {θ_3}’ + 90° = \sin^{-1} \left(\frac{{l_d}^2-{L_2}^2 – {L_3}^2}{2{L_2}{L_3}} \right) + 90°$$

 

以上のとおり、所望の座標(x, y, z)とロボットアームの長さ$L_1$、$L_2$、$L_3$からサーボの角度を導出することができました。

アーム制御システム

Processingのウィンドウ上の座標をArduinoにシリアル送信してロボットアームの平面状の座標(x, y)として制御します。

マウスをクリックするとアームについたマジックペンの先がイラストボードに接地し(z = 4)、ドラッグで線や絵を描けます。マウスがクリックされていない時は、ペン先を浮かせます(z = 35)。

キーボードの”Q”を押すと、消去作業を実行します。

 

Processingコード

640 × 960のウィンドウを表示して、ウィンドウ上のカーソルをマウスで動かして、座標(x, y)をPCにつながったArduinoに送信します。座標の数値は1/8に圧縮して送信しています。

マウスがクリックされていないときはz = 35を、クリックされているときはz = 4を送信します。

マウスをクリックしてドラッグするとウィンドウ上に線が描けます。キーボード”Q”で消去します。

Arduinoコード

Processingからの座標データを受けて、逆運動学でアームをリアルタイムに制御します。

ik()で逆運動学で求めた式でサーボモータの角度を算出しています。

Processingのウィンドウの座標とロボットアームの平面座標にオフセットがありますので、受信後に変換処理をしています。

キーボード”Q”のクリックによる信号でイラストボードの消去動作に入ります。

 

おわりに

リーズナブルなPWMサーボモータでロボットアームが作れてしまいました。
しかも制御すための式も自分で導出し、その通りに動いたときはうれしいものです。

 
当然ですが、産業用のロボットアームの性能には遠く及ばないので引き続き学習いたします。

☟うちのはコレ。。。。

 

☟このくらいハイテクノロジーでクレイジーでありたい

参考

コントローラ自作

ロボットアームを制御するコントローラも自作しました。

自作コントローラで制御 ーロボットアーム自作への道5ー

ロボットアーム時計

ロボットアームを時計にしてみました。

Clock Arm 時計を自作

「Arduino UNO でロボットアームを堪能 ーロボットアーム自作への道4ー」への1件のフィードバック

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください