そもそもロボットアームを作りたくなったのは、「初めて学ぶ 基礎ロボット工学」を読んだのがきっかけでした。この本は吉野さんが Web ページで紹介されていたので買ったのですが、やさしく書かれていて、とにかく何かを作りたくなる本でした。
特に、逆運動学によりロボットアームの先端位置から各関節の角度を計算する部分にソソラレてしまいました。いわゆる制御理論本では感じにくい、本に書かれている理論式と実際のコーディングとの融合がズバッと感じられたのです。丁度 RC サーボを使って角度制御してみたいと思っていた所でした。計算により得られた角度から RC サーボへの角度指令パルス幅への変換は簡単なので、ロボットアームなら比較的楽に実現できるだろうと思いました。
ロボットアームには関節軸の組み合わせ方でいくつかの方式があるようです。今後の発展も考え、一般的な多関節型ロボットアームを作ることにします。またロボットアームといえば先端にハンドのようなものが付いているイメージがあるのですが、今回は RC サーボを扱う最初の取り組みでもあるので、「先端軌跡を自由に制御する」を目標とし、3自由度のみのロボットアームを作成します。
RC サーボを動かしてみる
まずは RC サーボ単体を動かしてみます。三菱の M16C/62 を使った OAKS16 マイコンボードで遊んでみたかったので、これに RC サーボをつなげてみることにします。RC サーボは、あるパルス幅を持つ PWM 信号を与えると、パルス幅に応じた角度に出力軸を回転させます。つまり、このパルス幅を OAKS16 で変えることで、ロボットアームの関節角度を指定できることになります。
パルス幅を簡単に変化させるために、とりあえず OAKS16 の内蔵タイマを使ってみることにしました。信号出力可能なタイマ A を、角度分解能を考えて 16bit モードで動かすことにします。16bit タイマでは PWM 周期が分周比設定によって決まるため、自由度が低いのが難点です。4ms 周期か 32ms 周期のどちらかになってしまうのですが、4ms 周期では RC サーボが発振してしまったため、32ms 周期にします。
早速タイマ A の出力と 5V / GND の3本を RC サーボにつないで動かしてみました。サーボは Futaba S3101 を使いました。出力パルス幅を徐々に変えて有効なパルス幅の範囲を調べてみると、大体 16bit のタイマ値で 0x0400-0x1400 あたりが有効範囲となりました。私の手持ちの RC サーボでは、パルス幅と角度の関係に若干個体差が見受けられました。これに対しては各サーボごとにパラメータを変えて調整することにします。
メカの作成
メカの作成は苦手なので色々と問題があります。第1の問題は、アーム本体を構成する素材に何を使うかです。本当はアルミ板等を使いたいところなのですが、経験値が足りないので、気軽に使えるタミヤのユニバーサルアームセットを使うことにしました。このユニバーサルアームでジュラコンスペーサを挟み、平べったいアーム本体を作ります。
第2の問題は関節軸の駆動をどうするかです。RC サーボは回転軸が片側にしかないため、サーボ回転軸をそのまま関節軸とするためには、もう片方の軸を自作する必要があります。リンク機構を用いてサーボ出力軸と関節軸を分ける方法が良いのでしょうが、これまた経験値が足りないので、サーボ筐体に穴を空けてネジを内側から通して軸とし、サーボ回転軸をそのまま関節軸にしてみました。
第3の問題は RC サーボのアーム本体への固定方法です。RC サーボ筐体のネジ止め用穴は中央に近い部分にあるので、そのままではどこにも固定できません。またサーボ出力軸を関節軸としたため、サーボ両端での固定も難しい状況です。結局ジュラコンスペーサでアーム本体と片側だけ固定する方法で妥協しました。
アームの台座部分には格安バイスを使い、サーボをバイスで挟んでみました。バイス底面の吸盤で机の上への固定もバッチリ!と思っていたのですが、さすが格安バイス、しばらくするとすぐに吸盤が外れてしまいました。まあ台座部分の工作が一切省けたと思えば、仕方の無いことです。