カメラを使ってみる

・ここではロボットの頭部に内蔵したラズパイ専用カメラをちょっと使ってみます。

事前準備

・ラズパイカメラにケーブルを接続します。ケーブルには表裏があります。金属端子が露出している面をレンズ側に向けてください。

・ラズパイにカメラケーブルを接続します。

・ラズパイにディスプレイを接続して電源を入れてください。

・ 接続状態を確認するため、以下のコマンドを実行してみてください。

$ sudo raspistill -rot 180 -o test.jpg

・写真がとれているかどうかを確認してみましょう。タスクバーのファイルマネージャのアイコンをクリックしてください。

・/home/pi/bezelie/edgarの下にtest.jpgが生成されていることを確認してください。ファイルをダブルクリックすることでイメージビューワが起動し、撮影した画像を表示することができます。


サンプルプログラムsample_camera1.py

・サンプルプログラムを実行してみましょう。

$ cd ~/bezelie/edgar
$ python sample_camera1.py

・ディスプレイにカメラの画像を映しながら、べゼリーが周囲を見回したら成功です。

・終了させたいときは、Ctrl+Cを押してください。


ソースコード
#!/usr/bin/python
# -*- coding: utf-8 -*- 
# Bezelie Sample Code for Raspberry Pi : Camera Moving Test

from  time import sleep                # ウェイト処理
import picamera                        # カメラモジュール
import bezelie                         # べゼリー専用サーボ制御モジュール

# サーボの準備        
bez = bezelie.Control()                # べゼリー操作インスタンスの生成
bez.moveCenter()                       # サーボをセンタリング

# メインループ
def main():
  try:
    with picamera.PiCamera() as camera:
      camera.resolution = (640, 480)   # お使いのディスプレイに合わせて調整してください
      camera.rotation = 180            # 画面が上下逆さまだったらこの行は削除してください。
      camera.start_preview()
      sleep(2)
      head = 0
      while (True):
        bez.moveBack (10)
        bez.moveStage (30, 2)
        sleep (0.5)
        bez.moveBack (-10)
        bez.moveStage (-30, 2)
        sleep (0.5)
        head += 10
        if head > 20:
          head = -10
        bez.moveHead (head)
  except KeyboardInterrupt:
    print " Interrupted by Keyboard"

if __name__ == "__main__":
    main()
応用

・ 17行目と18行目はお使いのディスプレイに合わせて修正してください。

camera.resolution = (800, 480)          撮影する画像の解像度
camera.rotation = 180                   画像を上下反転

・24行目の関数moveStage()はベゼリーの体を左右に回転させる関数です。

bez.moveStage (角度, 速度)

・角度は正の値が時計回り、負の値が反時計回りです。
・速度は1が最速で大きな値にするほど遅くなります。省略した場合は最速の1になります。
・自分なりにサーボの回転角度や回転速度を変えてみましょう。

・サンプルプログラムを修正した場合は、元のプログラムがどうだったかわからなくなると困るので、ファイル名を変えて保存しましょう。