ロボットのGUIコントローラを作る(その6)
初稿: 2013/10/6, 最終更新:
6.関節可動範囲の追加
前回は、マウスで関節操作をできるようにしました。しかし、角度を際限なく動かせてしまうため、首が体にめり込んでしまったり、思うような角度に調整できないという不満がありました。今回は、これを直していきましょう。
6.1 角度制限の追加
まず、関節可動範囲の設定をする方法を考えましょう。通常一つの関節につき、可動範囲の角度の最小値と最大値の2つのパラメータを持っています。その数だけ新しいパラメータを定義してもいいのですが、少し煩雑ですね。openFrameworksは大変に便利で、範囲付きパラメータのコンテナofParameterも用意されていますのでこれを使いましょう。testApp.hのclass testAppに修正を加えてください。
ofParameter<float> chest, pan, tilt;
void testApp::setup()関数内で、可動範囲の設定をします。下の方に次の3行を加えてください。各パラメータに属性値を与えており引数は、名前、初期値、最小値、最大値の順になっています。HIRONXの関節可動範囲はメーカーマニュアルに記載されています。またColladaモデルの中の<limits>という
chest.set("chest", 0, -163, 163);
pan.set("pan", 0, -70, 70);
tilt.set("tilt", 0, -20, 70);
パラメータに与えた属性値を使って可動範囲の制限をすることにしましょう。パラメータの範囲を制限する簡単な関数adjust_value(ofParameter<float> p, float value)を追加します。valueは比率を表す0.0~1.0の数値で、最大値と最小値の幅のvalueの比の位置の値が返され、最大最小の範囲内に収まるように制限された値が返されます。*1
実行してみましょう。
fig.12 関節可動範囲
おお、ちゃんと制限が掛かるようになって、少しロボットぽく成ってきましたね。
*1:感覚的に合うように適当に作った関数なので、好みに合うように自分で調整してみてください。