v-rep

v-repとは

ロボットシミュレータ。マルチプラットフォーム、APIの多言語対応などが魅力。 Webページの素っ気なさで損をしていると思うが、使ってみるとかなり細かいところまで気を配って作られている印象。

教育用途(ホビイスト含む)は無償、プロ用ライセンスは価格不明。

IKのやりかた

TargetとTipという2つのdummyをつくり、リンクさせる。Targetを動かせばTip側がついてくる。ドキュメントで不十分なのは下記。

  • 各ジョイントをIK-modeにする。Hybrid チェックをつけておかないと重力で関節が落ちる。
  • f(x)のIK設定でcalc-methodをDLS,iteration99にしないと振動的になる。

python API

programming/remoteAPIbindings/lib/lib以下のdll/so/dylibと programming/remoteAPIbindings/python/python にパスを通すかコピーする。

childScriptにsimExtRemoteApiStart(19999)と書いてサーバを立ち上げる。

simpleTest.pyに習ってクライアントから接続。基本は、オブジェクトのHandleを取得して、コマンドを投げる、の繰り返し。opmodeの指定で悩むが、APIリファレンスにおすすめopmodeが書かれている。

IKのTargetを動かす

ret,handle=vrep.simxGetObjectHandle(clientID, "Target",vrep.simx_opmode_blocking)
vrep.simxSetObjectPosition(clientID,handle,-1,(0,0,0.6),vrep.simx_opmode_oneshot)

カメラの画像取得

とりあえずkinectの画像は取れた。kinect_rgbとkinect_depthという名前でそれぞれRGB, depthにアクセスできる。1回目だけstreamingで、2回目以降はbufferで呼べとリファレンスにはある。画像が上下反転しているのは仕様らしい。公式ドキュメントにもあるが、CameraとVisionSensorは別で、ダイレクトにAPIから画像を取れるのはVisionSensorだけのようだ。

ret,kinect_handle=vrep.simxGetObjectHandle(clientID, "kinect_rgb",vrep.simx_opmode_blocking)
ret,res,img=vrep.simxGetVisionSensorImage(clientID,kinect_handle,0,vrep.simx_opmode_str)
ret,res,img=vrep.simxGetVisionSensorImage(clientID, kinect_handle,0,vrep.simx_opmode_buffer)

img=np.asarray(img,dtype=np.uint8).reshape(480,640,3)
plt.imshow(img,origin='lower')