Raspberry Pi2 で、サーボを使って、物体追跡をする。このサイトを見て、

Raspberry Pi サーボモーターとOpen CVで物体追跡カメラ(Meanshift)
ArduinoとAdafruit 16-channel Servo Driverでサーボモーター多数制御

ブツを揃える、


これらを Amazon で Getした。この Qiita のサイトとは異なるブツだが、とりあえず安かったので買ってみた。
カメラは手持ちのヤツを使う。

◆サーボモータを動かす
i2c を有効にする

$ sudo apt-get install i2c-tools
$ sudo raspi-conifig

 > 5. interfacing options
     > P5 I2C

以下のように結線する。サーバを動かすために、Servo Driver基板中央に別途電源をつなぐ(6Vまでらしい)

   RaspPi2   16ch Servo Driver (PCA9685)
  -------------------------------------------------------------
    3.3V○   ○ GND
   I2C SDA○   ○
   I2C SCL○   ○ SCL
           ○   ○ SDA
     GND○   ○ VCC
        ○   ○


結線して、servo_test.py を動かすとちゃんと動いた。
# いかん! サーボモータが、動作電圧:4.8V(~5V) なので、乾電池は3つにしておこう。

PCA9685 16-channel 12bit PWM Fm + I2C-bus LED controller


◆カメラを動かす
$ sudo apt-get install libopencv-dev python-opencv


USBカメラと OpenCV で画像を表示させるサンプルプログラムはググると沢山でてくる。
ただ、最近のサンプルでないと遠回りする。
結局、
import cv2.cv  や CaptureFromCAM ではなく、以下に落ち着いた。(ターミナル上で、ctrl + c で終了)
これを camera.py に保存して、実行
import cv2

cv2.namedWindow("monitor")
vc=cv2.VideoCapture(0)

if vc.isOpened():
   rval, frame = vc.read()
else:
   rval = False

while rval:
   cv2.imshow("monitor", frame)
   rval, frame = vc.read()
   key = cv2.waitKey(10)
   if key == 27:
      break
cv2.destroyWindow("monitor")     

【追記 4/22】
自分の環境で、TightVNCで Raspiを動かしていた。 2行目の namedWindow で以下が出てこけた。

GdkGLExt-WARNING **: Window system doesn't support OpenGL.

で、ググったら、対処方法があったので試してみた。

$ sudo apt-get install libgl1-mesa-dri 
$ sudo reboot

で、これでもダメで、workaround(1) として

$ sudo apt-get install guvcview

をした。workaround(2) は、VNC をTightvnc をやめて、X11vnc 変えるとできるらしい。がやってない。
workaround(3) は、元に戻して、VNCやめて Raspi にモニター直結したら、もちろんOK。