読者です 読者をやめる 読者になる 読者になる

szmlb.net

tips for robotics

V-REPメモ (Child scriptが既に追加されたモデルに対する対応)

V-REPにおいて, ロボットモデルをSceneに読み込み, non-threadedなchild scriptが追加されたモデルをthreadedなchild scriptに変更したい場合がある.

下記の記事を見ると, child scriptの削除ができないように見える...
Youbot Child Scripts - Delete? - V-REP Forum

そこで, Scene hierarchyにdummyを追加し, dummyにthreadedなchild scriptを追加して, そこから任意のobjectにアクセスして制御する.

下の写真では, Pioneer_p3dxモデルを読み込んで, dummy "Pioneer_p3dx_controller"をScene hierarchyに追加し, child scriptを追加している.

f:id:szmlb:20140917232321j:plain

追加したScriptには, 地面に引いたPathに沿って動くdummyを目標として, ロボットが追従する簡単な制御則を記述した.

simSetThreadSwitchTiming(2)
simDelegateChildScriptExecution()

Pioneer_p3dx = simGetObjectHandle("Pioneer_p3dx")
motorLeft=simGetObjectHandle("Pioneer_p3dx_leftMotor")
motorRight=simGetObjectHandle("Pioneer_p3dx_rightMotor")
target = simGetObjectHandle("targetPosition")

while (simGetSimulationState()~=sim_simulation_advancing_abouttostop) do
	
    target_position = simGetObjectPosition(target, Pioneer_p3dx)
    Kpx = 10.0
    Kpy = 10.0
    vx = Kpx * target_position[1] - Kpy * target_position[2]
    vy = Kpx * target_position[1] + Kpy * target_position[2]

    simSetJointTargetVelocity(motorLeft, vx)
    simSetJointTargetVelocity(motorRight, vy)

end