ブロックの位置を「教えてもらう」のではなく、天井のカメラの画像だけから見つけて片付けます。画像から色ごとにブロックを切り出し、中心と向きを求め、カメラの画角と深度(カメラからの距離)で机の上の座標に直してから、つかみに行きます。下の画像で、ロボットの目に何が見えているかを確かめられます。
| 色 | 位置 x, y [cm] | 向き | 本当との差 |
|---|
元の Python 版(vision_pick.py)との違い: OpenCV は使わず、色の切り出し・連結成分・向きの推定を JavaScript の小さな実装で書き直しています(向きは輪郭を囲む長方形ではなく、全画素の 4 回回転モーメントから出しています)。カメラの画像は MuJoCo の光線(mj_ray)を画素ごとに飛ばして作り、深度も同じ光線から得ます。深度が分かるときは、ブロックの上の面だけで位置を測ります。手先の角度の計算は mink ではなく減衰つき最小二乗法です。乱数も別物なので、同じ番号でも置き方は Python 版と違います。