問題は逆運動学だけではありません。
サーボのコントロールでは目的の座標の変換だけでなく、線を引くという動作をさせないといけないので、線形補完した動作が出来る必要があります。

もう一つ厄介な問題は、ホストPCとの通信です。
今回のロボットアームは、パソコンから都度コマンドを発行してその命令で動作することを想定しています。

パソコンとはシリアル通信が出来ますが、基本バイト単位の通信機能しかありません。
もちろん小さなバッファー機能はありますが、JavaのStreamTokenizerのような便利な機能はないのです。
泣けます。

出来るだけ単純な機械に合わせたコマンド体系にする必要があります。
色々と課題があるのですが、とりあえずこんな状態で動き出しました。

イメージ 1

サーボを3個、直接ドライブさせていますが、グライダー用の小型サーボなのでなんとか持ちこたえているようです。
ただ実験に使っているサーボは、散々使い倒したボロボロの中古サーボなのでかなりガタが出ています。
何度となく墜落もしましたからねー・・・

例えば、腕の長さが300㎜のアームを動かすとすると、単純に1度違うだけで腕先では5.2㎜もズレます。
誤差対策は大切なのです。

Arduinoではservo.write(1度単位)を使った制御方法以外に、アナログ制御することで最大1024段階に制御する方法もあるようです。
ただしサーボがそのコントローに追随できるかは別問題です。
元々ガチャ付きますからね。

心配になってきたのでサーボのチェック用スケッチを作って検証してみました。
今回使うのはWaipoint W-060が2個とTowerpro SG-50が1個です。

イメージ 2

SG-50は以前に出火騒動のあったサーボですので全く期待していません。
元々ギアのバックラッシュが大きくてガタつきがあります。
W-060は静止状態ではガタつきは少ないですがどうでしょうか。

テストはまず90度のセンター出しを行ってから0~180度までピックアップしてテストしてみました。

まずSG-50ですが、0度まで稼動しますがジージー音がします。
最小の角度は10度程度までにしたほうが無難なようです。
180度は回りません。170度ぐらいが限界のようです。
稼動範囲は余裕を見て20~160度の範囲で使うほうが良いかと思います。

W-060ですが、全くお話になりません。
これほど酷いものとは今まで気付きませんでした。
まず、45度以下はどこまで回るか・・・適当なようです。
上限も130度付近から怪しいです。
おそらくこのサーボには角度といった概念は存在しないと思います。
50~120度の範囲で適当に動いてくれる程度と思ったほうが無難です。

予想はしていましたが、これじゃ逆運動学なんて無意味ですね。(笑)

まーラジコン飛行機を飛ばしている程度であれば、最終はアナログの指先でコントロールしますのでこんな精度でも十分利用できるんでしょうが、数値で角度コントロールするには程遠いもののようです。
結局ボリュームを回しているんですからね。
デジタルサーボでも結果は同じようなものだと思います。

ということで精度はゼロというこが確定しましたが、
とりあえず形を目指して進めます。