[V-REP] モータを作る(トルク制御)
Jointを使って回転する簡単なモデルを作成します。
—
2014/10/08追記
プログラムを3.1.3仕様に変更しました。
Jointの回転方向
jointの回転方向は回転速度の正負で決定されますが、何を基準にしているかを確認しておきます。
jointを追加した後、クリックして選択するとそのjointの軸が表示されます(長さを短くしないとZ軸は見えない)
これに正の回転速度を与えると、Z軸(青)を軸とした右ねじの方向に回転します。つまり画像の矢印の方向に回転します。
モデルの作成
右クリック -> Add -> Primitive Shape -> Cuboid から 2つのオブジェクトを追加します。そして 右クリック -> Add -> Joint -> Revolute からjointを追加します。今回は次のように追加しました。
このようにオブジェクトとJointとの間に空間があっても問題ありません(もちろんオブジェクトにJointを突き刺しても良い)。
簡単のために一番下のオブジェクトを”dodai”、Jointを”joint、一番上のオブジェクトを”kaiten”とリネームしておきます。これらをScene hierarchyで次のような親子関係にします。
Jointの設定
トルク制御で回転できるように設定します。
jointの Scene Object Properties(Scene hierarcyのjointアイコンをダブルクリック) の Joint mode を “joint is in torque/force mode” にします。
さらに Joint Dyanamic Properties(Scene Object PropertiesのShow dynamic parametersから開く) の Motor enabled にチェックを入れます。
初期状態ではチェックが入っていませんが、 Joint Dyanamic Properties の Control loop enabled にチェックが入っていないことを一応確認しておきましょう。
トルクと速度の指定
GUI
Joint Dynamic Properties の Target velocity と Max. torque/force から指定します。
Target velocity には正負が指定でき、その符号で回転の向きが決まります。目標速度なのでJointに負荷がかかっている場合には徐々に加速していきます。
API Function(プログラム)
次のようなプログラムをchild scriptに書き込みます。
1 2 3 4 5 |
if (sim_call_type==sim_childscriptcall_initialization) then joint_handle=simGetObjectHandle('joint') simSetJointTargetVelocity(joint_handle,1) simSetJointForce(joint_handle,2.5) end |
simSetJointTargetVelocityの速度単位はradian/sec です。
GUIとchild script とではchild scriptの設定が優先されます。
ver 3.1.3より前の場合は以下のコードです。
1 2 3 4 5 |
if (simGetScriptExecutionCount()==0) then joint_handle=simGetObjectHandle('joint') simSetJointTargetVelocity(joint_handle,1) simSetJointForce(joint_handle,2.5) end |
コメントを残す