カメラを水平に,deg 度回転する。
カメラ映像──画像サイズを 640 × 480 とする──の中心座標 (0, 0) にあった像は,座標 (x, 0) に移動する。
この対応 : deg ↔x を,ここで調べる。
設定
- カメラは,サーボで水平回転するカメラマウントに装着。
カメラの水平回転は,サーボの回転。
そしてサーボの制御に用いる GPIOピンは:
pan サーボ:GPIO 23 (物理番号 16)
作業
- カメラ映像は,MJPG-streamer を用いる
システム使用手順
- PC から Raspberry Pi に ssh 接続
- Apache を起動
$ sudo systemctl start apache2
- MJPG-streamer を,デーモンで起動 (画像サイズ 640 × 480):
~ $ ./mjpg.sh 640 480 1 50 &
- カメラ映像のストリーミングのページに,PC のブラウザで http 接続
- 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()
$
- ストリーミング停止
- MJPG-streamer を停止:
- Apache を停止:
$ sudo systemctl stop apache2
結果
対応 deg ↔ x は,おおよそつぎのようになった:
もっとも,サーボの振動がカメラマウントで増幅されてカメラがブレまくるので,きちんとした数値は最初から求めるべくもなかった。
この式はきわめて雑駁なものである。
|