Up カメラの回転とカメラ映像の変化の対応関係 作成: 2021-05-17
更新: 2021-05-17


    カメラを水平に,deg 度回転する。
    カメラ映像──画像サイズを 640 × 480 とする──の中心座標 (0, 0) にあった像は,座標 (x, 0) に移動する。
    この対応 : deg ↔x を,ここで調べる。


    設定
    • カメラは,サーボで水平回転するカメラマウントに装着。
      カメラの水平回転は,サーボの回転。
      そしてサーボの制御に用いる GPIOピンは:
        pan サーボ:GPIO 23 (物理番号 16)


    作業
    1. カメラ映像は,MJPG-streamer を用いる
        システム使用手順
      1. PC から Raspberry Pi に ssh 接続
      2. Apache を起動
          $ sudo systemctl start apache2
      3. MJPG-streamer を,デーモンで起動 (画像サイズ 640 × 480):
          ~ $ ./mjpg.sh 640 480 1 50 &
      4. カメラ映像のストリーミングのページに,PC のブラウザで http 接続


    2. python のインタラクティブシェルで,サーボを操作
        $ python (サーボ制御ピンの設定) >>> import RPi.GPIO as GPIO >>> GPIO.setmode(GPIO.BCM) >>> servo_pin = 23 >>> GPIO.setup(servo_pin, GPIO.OUT) >>> servo = GPIO.PWM(servo_pin, 50) (サーボを指定角度だけ回転させる関数) >>> def servo_angle(degree): ... duty = 9.5 * degree / 180 + 7.25 ... servo.ChangeDutyCycle(duty) ... (角度0° ──duty比 7.25% ──から実験開始) >>> servo.start(7.25) (ここから,servo_angle(deg) の deg の値をいろいろ変えて,  対応 deg → x を調べる) >>> servo_angle(30)   ‥‥ (終了プロセス) >>> servo_angle(0) >>> servo.stop() >>> GPIO.cleanup() >>> quit() $

    3. ストリーミング停止
      1. MJPG-streamer を停止:
          $ sudo pkill mjpg
      2. Apache を停止:
          $ sudo systemctl stop apache2


    結果
      対応 deg ↔ x は,おおよそつぎのようになった:
        deg ≒ 0.1 x

      もっとも,サーボの振動がカメラマウントで増幅されてカメラがブレまくるので,きちんとした数値は最初から求めるべくもなかった。
      この式はきわめて雑駁なものである。